[
  {
    "path": ".cargo/audit.toml",
    "content": "[advisories]\nignore = [\"RUSTSEC-2024-0320\", \"RUSTSEC-2024-0421\"]\n"
  },
  {
    "path": ".envrc",
    "content": "use flake\n"
  },
  {
    "path": ".github/.codecov.yml",
    "content": "comment: false\n"
  },
  {
    "path": ".github/FUNDING.yml",
    "content": "github: [sharkdp, keith-hall, Enselic]\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "content": "---\nname: Bug Report\nabout: Report a bug.\ntitle: \"\"\nlabels: bug\nassignees: ''\n\n---\n\n<!--\n\nHey there, thank you for reporting a bug!\n\nPlease note that the following bugs have already been reported:\n\n* dpkg: error processing archive /some/path/some-program.deb (--unpack):\n  trying to overwrite '/usr/.crates2.json'\n\n  See https://github.com/sharkdp/bat/issues/938\n\n-->\n\n**What steps will reproduce the bug?**\n\n1. step 1\n2. step 2\n3. ...\n\n**What happens?**\n\n...\n\n**What did you expect to happen instead?**\n\n...\n\n\n**How did you install `bat`?**\n\n<!-- apt-get, homebrew, GitHub release, etc. -->\n\n---\n\n**bat version and environment**\n\n<!--\nIn order to reproduce your issue, please add some information about the environment\nin which you're running bat. To do this, run the full `bat` command that demonstrates\nthe bug, and attach the `--diagnostic` option:\n\n    bat [other options and arguments…] --diagnostic\n\nFinally, paste the Markdown output here. Please make sure that it does not reveal any\npersonal information.\n\n\nIf you are running bat 0.17.1 or older (where --diagnostic is not available), please\nrun the script at\n\n    https://github.com/sharkdp/bat/blob/master/diagnostics/info.sh\n\n(click \"Raw\" to get the actual source code) and paste the Markdown output here. If you\nare on Windows, please let us know your bat version and your Windows version.\n-->\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "content": "blank_issues_enabled: true\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "content": "---\nname: Feature Request\nabout: Suggest an idea for this project.\ntitle: ''\nlabels: feature-request\nassignees: ''\n\n---\n\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/question.md",
    "content": "---\nname: Question\nabout: Ask a question about 'bat'.\ntitle: ''\nlabels: question\nassignees: ''\n\n---\n\n<!-- Using a normal ticket is still fine, but feel free to ask your\nquestions about bat on https://github.com/sharkdp/bat/discussions instead. -->\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/syntax_request.md",
    "content": "---\nname: Syntax Request\nabout: Request adding a new syntax to bat.\ntitle: \"\"\nlabels: syntax-request\nassignees: ''\n\n---\n\n<!--\nBEFORE YOU MAKE A REQUEST:\n\nAre you looking to add a new syntax to use on one of your devices?\nBat supports locally-installed language definitions. See the link below:\n\nhttps://github.com/sharkdp/bat#adding-new-syntaxes--language-definitions\n\nIf you think adding this syntax would help others as well, please make sure that it meets our\nguidelines for adding new syntaxes:\n\n - 10,000 downloads on packagecontrol.io\n-->\n\n\n**Syntax:**\n[Name or description of the syntax/language here]\n\n**Guideline Criteria:**\n[packagecontrol.io link here]\n"
  },
  {
    "path": ".github/dependabot.yml",
    "content": "version: 2\nupdates:\n- package-ecosystem: cargo\n  directory: \"/\"\n  schedule:\n    interval: monthly\n    time: \"04:00\"\n    timezone: Europe/Berlin\n  ignore:\n  - dependency-name: git2\n    versions:\n    - 0.13.17\n- package-ecosystem: gitsubmodule\n  directory: \"/\"\n  schedule:\n    interval: monthly\n    time: \"04:00\"\n    timezone: Europe/Berlin\n- package-ecosystem: \"github-actions\"\n  directory: \"/\"\n  schedule:\n    interval: monthly\n    time: \"04:00\"\n    timezone: Europe/Berlin\n"
  },
  {
    "path": ".github/workflows/CICD.yml",
    "content": "name: CICD\n\nenv:\n  CICD_INTERMEDIATES_DIR: \"_cicd-intermediates\"\n  MSRV_FEATURES: --no-default-features --features minimal-application,bugreport,build-assets\n\non:\n  workflow_dispatch:\n  pull_request:\n  push:\n    branches:\n      - master\n    tags:\n      - '*'\n\njobs:\n  all-jobs:\n    if: always() # Otherwise this job is skipped if the matrix job fails\n    name: all-jobs\n    runs-on: ubuntu-latest\n    needs:\n      - crate_metadata\n      - lint\n      - min_version\n      - license_checks\n      - test_with_new_syntaxes_and_themes\n      - test_with_system_config\n      - documentation\n      - cargo-audit\n      - build\n    steps:\n      - run: jq --exit-status 'all(.result == \"success\")' <<< '${{ toJson(needs) }}'\n\n  crate_metadata:\n    name: Extract crate metadata\n    runs-on: ubuntu-latest\n    steps:\n    - uses: actions/checkout@v6\n    - name: Extract crate information\n      id: crate_metadata\n      run: |\n        cargo metadata --no-deps --format-version 1 | jq -r '\"name=\" + .packages[0].name' | tee -a $GITHUB_OUTPUT\n        cargo metadata --no-deps --format-version 1 | jq -r '\"version=\" + .packages[0].version' | tee -a $GITHUB_OUTPUT\n        cargo metadata --no-deps --format-version 1 | jq -r '\"maintainer=\" + .packages[0].authors[0]' | tee -a $GITHUB_OUTPUT\n        cargo metadata --no-deps --format-version 1 | jq -r '\"homepage=\" + .packages[0].homepage' | tee -a $GITHUB_OUTPUT\n        cargo metadata --no-deps --format-version 1 | jq -r '\"msrv=\" + .packages[0].rust_version' | tee -a $GITHUB_OUTPUT\n    outputs:\n      name: ${{ steps.crate_metadata.outputs.name }}\n      version: ${{ steps.crate_metadata.outputs.version }}\n      maintainer: ${{ steps.crate_metadata.outputs.maintainer }}\n      homepage: ${{ steps.crate_metadata.outputs.homepage }}\n      msrv: ${{ steps.crate_metadata.outputs.msrv }}\n\n  lint:\n    name: Ensure code quality\n    runs-on: ubuntu-latest\n    steps:\n    - uses: dtolnay/rust-toolchain@stable\n      with:\n        components: rustfmt,clippy\n    - uses: actions/checkout@v6\n    - run: cargo fmt -- --check\n    - run: cargo clippy --locked --all-targets --all-features -- -D warnings\n\n  min_version:\n    name: Minimum supported rust version\n    runs-on: ubuntu-latest\n    needs: crate_metadata\n    steps:\n    - name: Checkout source code\n      uses: actions/checkout@v6\n    - name: Install rust toolchain (v${{ needs.crate_metadata.outputs.msrv }})\n      uses: dtolnay/rust-toolchain@master\n      with:\n        toolchain: ${{ needs.crate_metadata.outputs.msrv }}\n    - name: Run tests\n      run: cargo test --locked ${{ env.MSRV_FEATURES }}\n\n  license_checks:\n    name: License checks\n    runs-on: ubuntu-latest\n    steps:\n    - uses: actions/checkout@v6\n      with:\n        submodules: true # we especially want to perform license checks on submodules\n    - run: tests/scripts/license-checks.sh\n\n  test_with_new_syntaxes_and_themes:\n    name: Run tests with updated syntaxes and themes\n    runs-on: ubuntu-latest\n    steps:\n    - name: Git checkout\n      uses: actions/checkout@v6\n      with:\n        submodules: true # we need all syntax and theme submodules\n    - name: Install Rust toolchain\n      uses: dtolnay/rust-toolchain@stable\n    - name: Build and install bat\n      run: cargo install --locked --path .\n    - name: Rebuild binary assets (syntaxes and themes)\n      run: bash assets/create.sh\n    - name: Build and install bat with updated assets\n      run: cargo install --locked --path .\n    - name: Run unit tests with new syntaxes and themes\n      run: cargo test --locked --release\n    - name: Run ignored-by-default unit tests with new syntaxes and themes\n      run: cargo test --locked --release --test assets -- --ignored\n    - name: Syntax highlighting regression test\n      run: tests/syntax-tests/regression_test.sh\n    - name: List of languages\n      run: bat --list-languages\n    - name: List of themes\n      run: bat --list-themes\n    - name: Test custom assets\n      run: tests/syntax-tests/test_custom_assets.sh\n\n  test_with_system_config:\n    name: Run tests with system wide configuration\n    runs-on: ubuntu-latest\n    steps:\n    - name: Git checkout\n      uses: actions/checkout@v6\n    - name: Prepare environment variables\n      run: |\n        echo \"BAT_SYSTEM_CONFIG_PREFIX=$GITHUB_WORKSPACE/tests/examples/system_config\" >> $GITHUB_ENV\n    - name: Install Rust toolchain\n      uses: dtolnay/rust-toolchain@stable\n    - name: Build and install bat\n      run: cargo install --locked --path .\n    - name: Run unit tests\n      run: cargo test --locked --test system_wide_config -- --ignored\n\n  documentation:\n    name: Documentation\n    runs-on: ubuntu-latest\n    steps:\n    - name: Git checkout\n      uses: actions/checkout@v6\n    - name: Install Rust toolchain\n      uses: dtolnay/rust-toolchain@stable\n    - name: Check documentation\n      env:\n        RUSTDOCFLAGS: -D warnings\n      run: cargo doc --locked --no-deps --document-private-items --all-features\n    - name: Show man page\n      run: man $(find . -name bat.1)\n\n  cargo-audit:\n    name: cargo audit\n    runs-on: ubuntu-latest\n    steps:\n      - run: cargo install cargo-audit --locked\n      - uses: actions/checkout@v6\n      - run: cargo audit\n\n  build:\n    name: ${{ matrix.job.target }} (${{ matrix.job.os }})\n    runs-on: ${{ matrix.job.os }}\n    needs: crate_metadata\n    strategy:\n      fail-fast: false\n      matrix:\n        job:\n          - { target: aarch64-unknown-linux-musl  , os: ubuntu-latest , dpkg_arch: arm64,            use-cross: true }\n          - { target: aarch64-unknown-linux-gnu   , os: ubuntu-latest , dpkg_arch: arm64,            use-cross: true }\n          - { target: arm-unknown-linux-gnueabihf , os: ubuntu-latest , dpkg_arch: armhf,            use-cross: true }\n          - { target: arm-unknown-linux-musleabihf, os: ubuntu-latest , dpkg_arch: musl-linux-armhf, use-cross: true }\n          - { target: i686-pc-windows-msvc        , os: windows-2025  ,                                              }\n          - { target: i686-unknown-linux-gnu      , os: ubuntu-latest , dpkg_arch: i686,             use-cross: true }\n          - { target: i686-unknown-linux-musl     , os: ubuntu-latest , dpkg_arch: musl-linux-i686,  use-cross: true }\n          - { target: x86_64-apple-darwin         , os: macos-15-intel,                                              }\n          - { target: aarch64-apple-darwin        , os: macos-latest  ,                                              }\n          - { target: x86_64-pc-windows-msvc      , os: windows-2025  ,                                              }\n          - { target: aarch64-pc-windows-msvc     , os: windows-11-arm,                                              }\n          - { target: x86_64-unknown-linux-gnu    , os: ubuntu-latest , dpkg_arch: amd64,            use-cross: true }\n          - { target: x86_64-unknown-linux-musl   , os: ubuntu-latest , dpkg_arch: musl-linux-amd64, use-cross: true }\n    env:\n      BUILD_CMD: cargo\n    steps:\n    - name: Checkout source code\n      uses: actions/checkout@v6\n\n    - name: Install prerequisites\n      shell: bash\n      run: |\n        case ${{ matrix.job.target }} in\n          arm-unknown-linux-*) sudo apt-get -y update ; sudo apt-get -y install gcc-arm-linux-gnueabihf ;;\n          aarch64-unknown-linux-gnu) sudo apt-get -y update ; sudo apt-get -y install gcc-aarch64-linux-gnu ;;\n        esac\n\n    - name: Install Rust toolchain\n      uses: dtolnay/rust-toolchain@stable\n      with:\n        targets: ${{ matrix.job.target }}\n\n    - name: Install cross\n      if: matrix.job.use-cross\n      uses: taiki-e/install-action@v2\n      with:\n        tool: cross\n\n    - name: Overwrite build command env variable\n      if: matrix.job.use-cross\n      shell: bash\n      run: echo \"BUILD_CMD=cross\" >> $GITHUB_ENV\n\n    - name: Show version information (Rust, cargo, GCC)\n      shell: bash\n      run: |\n        gcc --version || true\n        rustup -V\n        rustup toolchain list\n        rustup default\n        cargo -V\n        rustc -V\n\n    - name: Build\n      shell: bash\n      run: $BUILD_CMD build --locked --release --target=${{ matrix.job.target }}\n\n    - name: Set binary name & path\n      id: bin\n      shell: bash\n      run: |\n        # Figure out suffix of binary\n        EXE_suffix=\"\"\n        case ${{ matrix.job.target }} in\n          *-pc-windows-*) EXE_suffix=\".exe\" ;;\n        esac;\n\n        # Setup paths\n        BIN_NAME=\"${{ needs.crate_metadata.outputs.name }}${EXE_suffix}\"\n        BIN_PATH=\"target/${{ matrix.job.target }}/release/${BIN_NAME}\"\n\n        # Let subsequent steps know where to find the binary\n        echo \"BIN_PATH=${BIN_PATH}\" >> $GITHUB_OUTPUT\n        echo \"BIN_NAME=${BIN_NAME}\" >> $GITHUB_OUTPUT\n\n    - name: Set testing options\n      id: test-options\n      shell: bash\n      run: |\n        # test only library unit tests and binary for arm-type targets\n        unset CARGO_TEST_OPTIONS\n        unset CARGO_TEST_OPTIONS ; case ${{ matrix.job.target }} in arm-* | aarch64-*) CARGO_TEST_OPTIONS=\"--lib --bin ${{ needs.crate_metadata.outputs.name }}\" ;; esac;\n        echo \"CARGO_TEST_OPTIONS=${CARGO_TEST_OPTIONS}\" >> $GITHUB_OUTPUT\n\n    - name: Run tests\n      shell: bash\n      run: |\n        if [[ ${{ matrix.job.os }} = windows-* ]]\n        then\n          powershell.exe -command \"$BUILD_CMD test --locked --target=${{ matrix.job.target }} ${{ steps.test-options.outputs.CARGO_TEST_OPTIONS}}\"\n        else\n          $BUILD_CMD test --locked --target=${{ matrix.job.target }} ${{ steps.test-options.outputs.CARGO_TEST_OPTIONS}}\n        fi\n\n    - name: Run bat\n      shell: bash\n      run: $BUILD_CMD run --locked --target=${{ matrix.job.target }} -- --paging=never --color=always --theme=ansi Cargo.toml src/config.rs\n\n    - name: Show diagnostics (bat --diagnostic)\n      shell: bash\n      run: $BUILD_CMD run --locked --target=${{ matrix.job.target }} -- --paging=never --color=always --theme=ansi Cargo.toml src/config.rs --diagnostic\n\n    - name: \"Feature check: regex-onig\"\n      shell: bash\n      run: $BUILD_CMD check --locked --target=${{ matrix.job.target }} --verbose --lib --no-default-features --features regex-onig\n\n    - name: \"Feature check: regex-onig,git\"\n      shell: bash\n      run: $BUILD_CMD check --locked --target=${{ matrix.job.target }} --verbose --lib --no-default-features --features regex-onig,git\n\n    - name: \"Feature check: regex-onig,paging\"\n      shell: bash\n      run: $BUILD_CMD check --locked --target=${{ matrix.job.target }} --verbose --lib --no-default-features --features regex-onig,paging\n\n    - name: \"Feature check: regex-onig,git,paging\"\n      shell: bash\n      run: $BUILD_CMD check --locked --target=${{ matrix.job.target }} --verbose --lib --no-default-features --features regex-onig,git,paging\n\n    - name: \"Feature check: minimal-application\"\n      shell: bash\n      run: $BUILD_CMD check --locked --target=${{ matrix.job.target }} --verbose --no-default-features --features minimal-application\n\n    - name: Create tarball\n      id: package\n      shell: bash\n      run: |\n        PKG_suffix=\".tar.gz\" ; case ${{ matrix.job.target }} in *-pc-windows-*) PKG_suffix=\".zip\" ;; esac;\n        PKG_BASENAME=${{ needs.crate_metadata.outputs.name }}-v${{ needs.crate_metadata.outputs.version }}-${{ matrix.job.target }}\n        PKG_NAME=${PKG_BASENAME}${PKG_suffix}\n        echo \"PKG_NAME=${PKG_NAME}\" >> $GITHUB_OUTPUT\n\n        PKG_STAGING=\"${{ env.CICD_INTERMEDIATES_DIR }}/package\"\n        ARCHIVE_DIR=\"${PKG_STAGING}/${PKG_BASENAME}/\"\n        mkdir -p \"${ARCHIVE_DIR}\"\n        mkdir -p \"${ARCHIVE_DIR}/autocomplete\"\n\n        # Binary\n        cp \"${{ steps.bin.outputs.BIN_PATH }}\" \"$ARCHIVE_DIR\"\n\n        # README, LICENSE and CHANGELOG files\n        cp \"README.md\" \"LICENSE-MIT\" \"LICENSE-APACHE\" \"CHANGELOG.md\" \"$ARCHIVE_DIR\"\n\n        # Man page\n        cp 'target/${{ matrix.job.target }}/release/build/${{ needs.crate_metadata.outputs.name }}'-*/out/assets/manual/bat.1 \"$ARCHIVE_DIR\"\n\n        # Autocompletion files\n        cp 'target/${{ matrix.job.target }}/release/build/${{ needs.crate_metadata.outputs.name }}'-*/out/assets/completions/bat.bash \"$ARCHIVE_DIR/autocomplete/${{ needs.crate_metadata.outputs.name }}.bash\"\n        cp 'target/${{ matrix.job.target }}/release/build/${{ needs.crate_metadata.outputs.name }}'-*/out/assets/completions/bat.fish \"$ARCHIVE_DIR/autocomplete/${{ needs.crate_metadata.outputs.name }}.fish\"\n        cp 'target/${{ matrix.job.target }}/release/build/${{ needs.crate_metadata.outputs.name }}'-*/out/assets/completions/_bat.ps1 \"$ARCHIVE_DIR/autocomplete/_${{ needs.crate_metadata.outputs.name }}.ps1\"\n        cp 'target/${{ matrix.job.target }}/release/build/${{ needs.crate_metadata.outputs.name }}'-*/out/assets/completions/bat.zsh \"$ARCHIVE_DIR/autocomplete/${{ needs.crate_metadata.outputs.name }}.zsh\"\n\n        # base compressed package\n        pushd \"${PKG_STAGING}/\" >/dev/null\n        case ${{ matrix.job.target }} in\n          *-pc-windows-*) 7z -y a \"${PKG_NAME}\" \"${PKG_BASENAME}\"/* | tail -2 ;;\n          *) tar czf \"${PKG_NAME}\" \"${PKG_BASENAME}\"/* ;;\n        esac;\n        popd >/dev/null\n\n        # Let subsequent steps know where to find the compressed package\n        echo \"PKG_PATH=${PKG_STAGING}/${PKG_NAME}\" >> $GITHUB_OUTPUT\n\n    - name: Create Debian package\n      id: debian-package\n      shell: bash\n      if: startsWith(matrix.job.os, 'ubuntu')\n      run: |\n        COPYRIGHT_YEARS=\"2018 - \"$(date \"+%Y\")\n        DPKG_STAGING=\"${{ env.CICD_INTERMEDIATES_DIR }}/debian-package\"\n        DPKG_DIR=\"${DPKG_STAGING}/dpkg\"\n        mkdir -p \"${DPKG_DIR}\"\n\n        DPKG_BASENAME=${{ needs.crate_metadata.outputs.name }}\n        DPKG_CONFLICTS=${{ needs.crate_metadata.outputs.name }}-musl\n        case ${{ matrix.job.target }} in *-musl) DPKG_BASENAME=${{ needs.crate_metadata.outputs.name }}-musl ; DPKG_CONFLICTS=${{ needs.crate_metadata.outputs.name }} ;; esac;\n        DPKG_VERSION=${{ needs.crate_metadata.outputs.version }}\n        DPKG_ARCH=\"${{ matrix.job.dpkg_arch }}\"\n        DPKG_NAME=\"${DPKG_BASENAME}_${DPKG_VERSION}_${DPKG_ARCH}.deb\"\n        echo \"DPKG_NAME=${DPKG_NAME}\" >> $GITHUB_OUTPUT\n\n        # Binary\n        install -Dm755 \"${{ steps.bin.outputs.BIN_PATH }}\" \"${DPKG_DIR}/usr/bin/${{ steps.bin.outputs.BIN_NAME }}\"\n\n        # Man page\n        install -Dm644 'target/${{ matrix.job.target }}/release/build/${{ needs.crate_metadata.outputs.name }}'-*/out/assets/manual/bat.1 \"${DPKG_DIR}/usr/share/man/man1/${{ needs.crate_metadata.outputs.name }}.1\"\n        gzip -n --best \"${DPKG_DIR}/usr/share/man/man1/${{ needs.crate_metadata.outputs.name }}.1\"\n\n        # Autocompletion files\n        install -Dm644 'target/${{ matrix.job.target }}/release/build/${{ needs.crate_metadata.outputs.name }}'-*/out/assets/completions/bat.bash \"${DPKG_DIR}/usr/share/bash-completion/completions/${{ needs.crate_metadata.outputs.name }}\"\n        install -Dm644 'target/${{ matrix.job.target }}/release/build/${{ needs.crate_metadata.outputs.name }}'-*/out/assets/completions/bat.fish \"${DPKG_DIR}/usr/share/fish/vendor_completions.d/${{ needs.crate_metadata.outputs.name }}.fish\"\n        install -Dm644 'target/${{ matrix.job.target }}/release/build/${{ needs.crate_metadata.outputs.name }}'-*/out/assets/completions/bat.zsh \"${DPKG_DIR}/usr/share/zsh/vendor-completions/_${{ needs.crate_metadata.outputs.name }}\"\n\n        # README and LICENSE\n        install -Dm644 \"README.md\" \"${DPKG_DIR}/usr/share/doc/${DPKG_BASENAME}/README.md\"\n        install -Dm644 \"LICENSE-MIT\" \"${DPKG_DIR}/usr/share/doc/${DPKG_BASENAME}/LICENSE-MIT\"\n        install -Dm644 \"LICENSE-APACHE\" \"${DPKG_DIR}/usr/share/doc/${DPKG_BASENAME}/LICENSE-APACHE\"\n        install -Dm644 \"CHANGELOG.md\" \"${DPKG_DIR}/usr/share/doc/${DPKG_BASENAME}/changelog\"\n        gzip -n --best \"${DPKG_DIR}/usr/share/doc/${DPKG_BASENAME}/changelog\"\n\n        cat > \"${DPKG_DIR}/usr/share/doc/${DPKG_BASENAME}/copyright\" <<EOF\n        Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/\n        Upstream-Name: ${{ needs.crate_metadata.outputs.name }}\n        Source: ${{ needs.crate_metadata.outputs.homepage }}\n\n        Files: *\n        Copyright: ${{ needs.crate_metadata.outputs.maintainer }}\n        Copyright: $COPYRIGHT_YEARS ${{ needs.crate_metadata.outputs.maintainer }}\n        License: Apache-2.0 or MIT\n\n        License: Apache-2.0\n          On Debian systems, the complete text of the Apache-2.0 can be found in the\n          file /usr/share/common-licenses/Apache-2.0.\n\n        License: MIT\n          Permission is hereby granted, free of charge, to any\n          person obtaining a copy of this software and associated\n          documentation files (the \"Software\"), to deal in the\n          Software without restriction, including without\n          limitation the rights to use, copy, modify, merge,\n          publish, distribute, sublicense, and/or sell copies of\n          the Software, and to permit persons to whom the Software\n          is furnished to do so, subject to the following\n          conditions:\n          .\n          The above copyright notice and this permission notice\n          shall be included in all copies or substantial portions\n          of the Software.\n          .\n          THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\n          ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\n          TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n          PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\n          SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n          CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n          OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\n          IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n          DEALINGS IN THE SOFTWARE.\n        EOF\n          chmod 644 \"${DPKG_DIR}/usr/share/doc/${DPKG_BASENAME}/copyright\"\n\n          # control file\n          mkdir -p \"${DPKG_DIR}/DEBIAN\"\n          cat > \"${DPKG_DIR}/DEBIAN/control\" <<EOF\n        Package: ${DPKG_BASENAME}\n        Version: ${DPKG_VERSION}\n        Section: utils\n        Priority: optional\n        Maintainer: ${{ needs.crate_metadata.outputs.maintainer }}\n        Homepage: ${{ needs.crate_metadata.outputs.homepage }}\n        Architecture: ${DPKG_ARCH}\n        Provides: ${{ needs.crate_metadata.outputs.name }}\n        Conflicts: ${DPKG_CONFLICTS}\n        Description: cat(1) clone with wings.\n          A cat(1) clone with syntax highlighting and Git integration.\n        EOF\n\n        DPKG_PATH=\"${DPKG_STAGING}/${DPKG_NAME}\"\n        echo \"DPKG_PATH=${DPKG_PATH}\" >> $GITHUB_OUTPUT\n\n        # build dpkg\n        fakeroot dpkg-deb --build \"${DPKG_DIR}\" \"${DPKG_PATH}\"\n\n    - name: \"Artifact upload: tarball\"\n      uses: actions/upload-artifact@master\n      with:\n        name: ${{ steps.package.outputs.PKG_NAME }}\n        path: ${{ steps.package.outputs.PKG_PATH }}\n\n    - name: \"Artifact upload: Debian package\"\n      uses: actions/upload-artifact@master\n      if: steps.debian-package.outputs.DPKG_NAME\n      with:\n        name: ${{ steps.debian-package.outputs.DPKG_NAME }}\n        path: ${{ steps.debian-package.outputs.DPKG_PATH }}\n\n    - name: Check for release\n      id: is-release\n      shell: bash\n      run: |\n        unset IS_RELEASE ; if [[ $GITHUB_REF =~ ^refs/tags/v[0-9].* ]]; then IS_RELEASE='true' ; fi\n        echo \"IS_RELEASE=${IS_RELEASE}\" >> $GITHUB_OUTPUT\n\n    - name: Publish archives and packages\n      uses: softprops/action-gh-release@v2\n      if: steps.is-release.outputs.IS_RELEASE\n      with:\n        files: |\n          ${{ steps.package.outputs.PKG_PATH }}\n          ${{ steps.debian-package.outputs.DPKG_PATH }}\n      env:\n        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n\n  winget:\n    name: Publish to Winget\n    runs-on: ubuntu-latest\n    needs: build\n    if: startsWith(github.ref, 'refs/tags/v')\n    steps:\n      - uses: vedantmgoyal9/winget-releaser@19e706d4c9121098010096f9c495a70a7518b30f\n        with:\n          identifier: sharkdp.bat\n          installers-regex: '-pc-windows-msvc\\.zip$'\n          token: ${{ secrets.WINGET_TOKEN }}\n"
  },
  {
    "path": ".github/workflows/require-changelog-for-PRs.yml",
    "content": "name: Changelog\n\non:\n  pull_request:\n\njobs:\n  check-changelog:\n    name: Check for changelog entry\n    runs-on: ubuntu-latest\n    # dependabot PRs are automerged if CI passes; we shouldn't block these\n    if: github.actor != 'dependabot[bot]'\n    env:\n      PR_NUMBER: ${{ github.event.number }}\n      PR_BASE: ${{ github.base_ref }}\n    steps:\n      - uses: actions/checkout@v6\n      - name: Fetch PR base\n        run: git fetch --no-tags --prune --depth=1 origin\n\n      # cannot use `github.actor`: the triggering commit may be authored by a maintainer\n      - name: Get PR submitter\n        id: get-submitter\n        run: curl -sSfL https://api.github.com/repos/sharkdp/bat/pulls/${PR_NUMBER} | jq -r '\"submitter=\" + .user.login' | tee -a $GITHUB_OUTPUT\n\n      - name: Search for added line in changelog\n        env:\n          PR_SUBMITTER: ${{ steps.get-submitter.outputs.submitter }}\n        run: |\n          ADDED=$(git diff -U0 \"origin/${PR_BASE}\" HEAD -- CHANGELOG.md | grep -P '^\\+[^\\+].+$')\n          echo \"Added lines in CHANGELOG.md:\"\n          echo \"$ADDED\"\n          echo \"Grepping for PR info (see CONTRIBUTING.md):\"\n          grep \"#${PR_NUMBER}\\\\b.*${PR_SUBMITTER}\\\\b\" <<< \"$ADDED\"\n"
  },
  {
    "path": ".gitignore",
    "content": ".direnv/\n/target/\n**/*.rs.bk\n\n# Editors\n.idea/\n.vscode/\n\n# Generated files\n/assets/completions/_bat.ps1\n/assets/completions/bat.bash\n/assets/completions/bat.fish\n/assets/completions/bat.zsh\n/assets/manual/bat.1\n/assets/metadata.yaml\n\n\n"
  },
  {
    "path": ".gitmodules",
    "content": "[submodule \"assets/syntaxes/Elixir\"]\n\tpath = assets/syntaxes/02_Extra/Elixir\n\turl = https://github.com/princemaple/elixir-sublime-syntax/\n[submodule \"assets/syntaxes/Packages\"]\n\tpath = assets/syntaxes/01_Packages\n\turl = https://github.com/sublimehq/Packages/\n[submodule \"assets/syntaxes/TOML\"]\n\tpath = assets/syntaxes/02_Extra/TOML\n\turl = https://github.com/jasonwilliams/sublime_toml_highlighting\n[submodule \"assets/syntaxes/Julia\"]\n\tpath = assets/syntaxes/02_Extra/Julia\n\turl = https://github.com/JuliaEditorSupport/Julia-sublime\n[submodule \"assets/themes/sublime-monokai-extended\"]\n\tpath = assets/themes/sublime-monokai-extended\n\turl = https://github.com/jonschlinkert/sublime-monokai-extended\n[submodule \"assets/syntaxes/Docker\"]\n\tpath = assets/syntaxes/02_Extra/Docker\n\turl = https://github.com/asbjornenge/Docker.tmbundle\n[submodule \"assets/syntaxes/VimL\"]\n\tpath = assets/syntaxes/02_Extra/VimL\n\turl = https://github.com/SalGnt/Sublime-VimL\n[submodule \"assets/syntaxes/INI\"]\n\tpath = assets/syntaxes/02_Extra/INI\n\turl = https://github.com/clintberry/sublime-text-2-ini\n[submodule \"assets/syntaxes/CMake\"]\n\tpath = assets/syntaxes/02_Extra/CMake\n\turl = https://github.com/zyxar/Sublime-CMakeLists\n[submodule \"assets/syntaxes/LESS\"]\n\tpath = assets/syntaxes/02_Extra/LESS\n\turl = https://github.com/danro/LESS-sublime\n[submodule \"assets/themes/DarkNeon\"]\n\tpath = assets/themes/DarkNeon\n\turl = https://github.com/RainyDayMedia/DarkNeon\n[submodule \"assets/themes/github-sublime-theme\"]\n\tpath = assets/themes/github-sublime-theme\n\turl = https://github.com/AlexanderEkdahl/github-sublime-theme\n[submodule \"assets/themes/1337-Scheme\"]\n\tpath = assets/themes/1337-Scheme\n\turl = https://github.com/MarkMichos/1337-Scheme\n[submodule \"assets/themes/TwoDark\"]\n\tpath = assets/themes/TwoDark\n\turl = https://github.com/erremauro/TwoDark\n[submodule \"assets/syntaxes/AWK\"]\n\tpath = assets/syntaxes/02_Extra/AWK\n\turl = https://github.com/JohnNilsson/awk-sublime\n[submodule \"assets/syntaxes/Nix\"]\n\tpath = assets/syntaxes/02_Extra/Nix\n\turl = https://github.com/wmertens/sublime-nix\n[submodule \"assets/themes/zenburn\"]\n\tpath = assets/themes/zenburn\n\turl = https://github.com/colinta/zenburn.git\n[submodule \"assets/syntaxes/Kotlin\"]\n\tpath = assets/syntaxes/02_Extra/Kotlin\n\turl = https://github.com/vkostyukov/kotlin-sublime-package\n[submodule \"assets/syntaxes/Elm\"]\n\tpath = assets/syntaxes/02_Extra/Elm\n\turl = https://github.com/elm-community/SublimeElmLanguageSupport\n[submodule \"assets/syntaxes/TypeScript\"]\n\tpath = assets/syntaxes/02_Extra/TypeScript\n\turl = https://github.com/Microsoft/TypeScript-Sublime-Plugin\n[submodule \"assets/syntaxes/Puppet\"]\n\tpath = assets/syntaxes/02_Extra/Puppet\n\turl = https://github.com/russCloak/SublimePuppet\n[submodule \"assets/themes/onehalf\"]\n\tpath = assets/themes/onehalf\n\turl = https://github.com/sonph/onehalf\n[submodule \"assets/syntaxes/JavaScript (Babel)\"]\n\tpath = assets/syntaxes/02_Extra/JavaScript_(Babel)\n\turl = https://github.com/babel/babel-sublime\n[submodule \"assets/syntaxes/FSharp\"]\n\tpath = assets/syntaxes/02_Extra/FSharp\n\turl = https://github.com/hoest/sublimetext-fsharp\n[submodule \"assets/syntaxes/PureScript\"]\n\tpath = assets/syntaxes/02_Extra/PureScript\n\turl = https://github.com/tellnobody1/sublime-purescript-syntax\n[submodule \"assets/syntaxes/Swift\"]\n\tpath = assets/syntaxes/02_Extra/Swift\n\turl = https://github.com/quiqueg/Swift-Sublime-Package\n[submodule \"assets/syntaxes/Crystal\"]\n\tpath = assets/syntaxes/02_Extra/Crystal\n\turl = https://github.com/crystal-lang-tools/sublime-crystal.git\n[submodule \"assets/syntaxes/PowerShell\"]\n\tpath = assets/syntaxes/02_Extra/PowerShell\n\turl = https://github.com/PowerShell/EditorSyntax\n[submodule \"assets/syntaxes/Robot\"]\n\tpath = assets/syntaxes/02_Extra/Robot\n\turl = https://github.com/andriyko/sublime-robot-framework-assistant.git\n[submodule \"assets/themes/sublime-snazzy\"]\n\tpath = assets/themes/sublime-snazzy\n\turl = https://github.com/greggb/sublime-snazzy\n[submodule \"assets/syntaxes/Assembly (ARM)\"]\n\tpath = assets/syntaxes/02_Extra/Assembly_(ARM)\n\turl = https://github.com/tvi/Sublime-ARM-Assembly\n[submodule \"assets/syntaxes/protobuf-syntax-highlighting\"]\n\tpath = assets/syntaxes/02_Extra/Protobuf\n\turl = https://github.com/VcamX/protobuf-syntax-highlighting.git\n\tbranch = master\n[submodule \"assets/syntaxes/Terraform\"]\n\tpath = assets/syntaxes/02_Extra/Terraform\n\turl = https://github.com/alexlouden/Terraform.tmLanguage.git\n[submodule \"assets/syntaxes/Jsonnet\"]\n\tpath = assets/syntaxes/02_Extra/Jsonnet\n\turl = https://github.com/gburiola/sublime-jsonnet-syntax.git\n[submodule \"assets/syntaxes/varlink\"]\n\tpath = assets/syntaxes/02_Extra/varlink\n\turl = https://github.com/varlink/syntax-highlight-varlink.git\n[submodule \"assets/syntaxes/sublime-fish\"]\n\tpath = assets/syntaxes/02_Extra/Fish\n\turl = https://github.com/Phidica/sublime-fish.git\n[submodule \"assets/syntaxes/Org mode\"]\n\tpath = assets/syntaxes/02_Extra/Org_mode\n\turl = https://github.com/jezcope/Org.tmbundle.git\n[submodule \"assets/syntaxes/DotENV\"]\n\tpath = assets/syntaxes/02_Extra/DotENV\n\turl = https://github.com/zaynali53/DotENV\n[submodule \"assets/syntaxes/ssh-config\"]\n\tpath = assets/syntaxes/02_Extra/ssh-config\n\turl = https://github.com/robballou/sublimetext-sshconfig.git\n[submodule \"assets/syntaxes/GraphQL\"]\n\tpath = assets/syntaxes/02_Extra/GraphQL\n\turl = https://github.com/dncrews/GraphQL-SublimeText3.git\n[submodule \"assets/syntaxes/Verilog\"]\n\tpath = assets/syntaxes/02_Extra/Verilog\n\turl = https://github.com/pro711/sublime-verilog\n[submodule \"assets/syntaxes/SCSS_Sass\"]\n\tpath = assets/syntaxes/02_Extra/SCSS_Sass\n\turl = https://github.com/braver/SublimeSass\n[submodule \"assets/syntaxes/Strace\"]\n\tpath = assets/syntaxes/02_Extra/Strace\n\turl = https://github.com/djuretic/SublimeStrace\n[submodule \"assets/syntaxes/Jinja2\"]\n\tpath = assets/syntaxes/02_Extra/Jinja2\n\turl = https://github.com/ltrzesniewski/sublime-jinja2.git\n[submodule \"assets/syntaxes/SLS\"]\n\tpath = assets/syntaxes/02_Extra/SLS\n\turl = https://github.com/saltstack/sublime-text\n\tbranch = master\n[submodule \"assets/themes/dracula-sublime\"]\n\tpath = assets/themes/dracula-sublime\n\turl = https://github.com/dracula/sublime.git\n[submodule \"assets/syntaxes/HTML (Twig)\"]\n\tpath = assets/syntaxes/02_Extra/HTML_(Twig)\n\turl = https://github.com/Anomareh/PHP-Twig.tmbundle.git\n[submodule \"assets/themes/Nord-sublime\"]\n\tpath = assets/themes/Nord-sublime\n\turl = https://github.com/crabique/Nord-plist.git\n[submodule \"assets/syntaxes/Vue\"]\n\tpath = assets/syntaxes/02_Extra/Vue\n\turl = https://github.com/vuejs/vue-syntax-highlight.git\n\tbranch = new\n[submodule \"assets/syntaxes/CoffeeScript\"]\n\tpath = assets/syntaxes/02_Extra/CoffeeScript\n\turl = https://github.com/sustained/CoffeeScript-Sublime-Plugin\n[submodule \"assets/syntaxes/02_Extra/Stylus\"]\n\tpath = assets/syntaxes/02_Extra/Stylus\n\turl = https://github.com/billymoon/Stylus\n[submodule \"assets/themes/Solarized\"]\n\tpath = assets/themes/Solarized\n\turl = https://github.com/braver/Solarized\n[submodule \"assets/syntaxes/02_Extra/Fortran\"]\n\tpath = assets/syntaxes/02_Extra/Fortran\n\turl = https://github.com/315234/SublimeFortran\n[submodule \"assets/syntaxes/02_Extra/Email\"]\n\tpath = assets/syntaxes/02_Extra/Email\n\turl = https://github.com/mariozaizar/email.sublime-syntax.git\n[submodule \"assets/syntaxes/02_Extra/QML\"]\n\tpath = assets/syntaxes/02_Extra/QML\n\turl = https://github.com/skozlovf/Sublime-QML\n[submodule \"assets/syntaxes/02_Extra/AsciiDoc\"]\n\tpath = assets/syntaxes/02_Extra/AsciiDoc\n\turl = https://github.com/asciidoctor/sublimetext-asciidoc.git\n[submodule \"assets/syntaxes/02_Extra/GLSL\"]\n\tpath = assets/syntaxes/02_Extra/GLSL\n\turl = https://github.com/euler0/sublime-glsl\n[submodule \"assets/syntaxes/02_Extra/Nginx\"]\n\tpath = assets/syntaxes/02_Extra/Nginx\n\turl = https://github.com/SublimeText/nginx\n[submodule \"assets/syntaxes/02_Extra/Apache\"]\n\tpath = assets/syntaxes/02_Extra/Apache\n\turl = https://github.com/colinta/ApacheConf.tmLanguage\n[submodule \"assets/syntaxes/02_Extra/Ninja\"]\n\tpath = assets/syntaxes/02_Extra/Ninja\n\turl = https://github.com/pope/SublimeNinja.git\n[submodule \"assets/syntaxes/02_Extra/Svelte\"]\n\tpath = assets/syntaxes/02_Extra/Svelte\n\turl = https://github.com/corneliusio/svelte-sublime\n[submodule \"assets/themes/Coldark\"]\n\tpath = assets/themes/Coldark\n\turl = https://github.com/ArmandPhilippot/coldark-bat.git\n[submodule \"assets/themes/gruvbox\"]\n\tpath = assets/themes/gruvbox\n\turl = https://github.com/subnut/gruvbox-tmTheme.git\n\tbranch = bat-source\n[submodule \"assets/syntaxes/02_Extra/Lean\"]\n\tpath = assets/syntaxes/02_Extra/Lean\n\turl = https://github.com/leanprover/vscode-lean4.git\n[submodule \"assets/syntaxes/02_Extra/Zig\"]\n\tpath = assets/syntaxes/02_Extra/Zig\n\turl = https://codeberg.org/ziglang/sublime-zig-language.git\n[submodule \"assets/syntaxes/02_Extra/gnuplot\"]\n\tpath = assets/syntaxes/02_Extra/gnuplot\n\turl = https://github.com/hesstobi/sublime_gnuplot\n[submodule \"assets/syntaxes/02_Extra/SystemVerilog\"]\n\tpath = assets/syntaxes/02_Extra/SystemVerilog\n\turl = https://github.com/TheClams/SystemVerilog.git\n[submodule \"assets/syntaxes/02_Extra/SublimeEthereum\"]\n\tpath = assets/syntaxes/02_Extra/SublimeEthereum\n\turl = https://github.com/davidhq/SublimeEthereum.git\n[submodule \"assets/syntaxes/02_Extra/Groff\"]\n\tpath = assets/syntaxes/02_Extra/Groff\n\turl = https://github.com/carsonoid/sublime_man_page_support\n[submodule \"assets/syntaxes/02_Extra/http-request-response\"]\n\tpath = assets/syntaxes/02_Extra/http-request-response\n\turl = https://github.com/keith-hall/http-request-response-syntax.git\n[submodule \"assets/syntaxes/02_Extra/LLVM\"]\n\tpath = assets/syntaxes/02_Extra/LLVM\n\turl = https://github.com/ioncodes/LLVM.tmBundle\n[submodule \"assets/syntaxes/02_Extra/Slim\"]\n\tpath = assets/syntaxes/02_Extra/Slim\n\turl = https://github.com/slim-template/ruby-slim.tmbundle.git\n[submodule \"assets/syntaxes/02_Extra/Racket\"]\n\tpath = assets/syntaxes/02_Extra/Racket\n\turl = https://github.com/follesoe/sublime-racket.git\n[submodule \"assets/syntaxes/02_Extra/MediaWiki\"]\n\tpath = assets/syntaxes/02_Extra/MediaWiki\n\turl = https://github.com/tosher/Mediawiker.git\n[submodule \"assets/syntaxes/02_Extra/Dart\"]\n\tpath = assets/syntaxes/02_Extra/Dart\n\turl = https://github.com/elMuso/Dartlight.git\n[submodule \"assets/syntaxes/02_Extra/SublimeJQ\"]\n\tpath = assets/syntaxes/02_Extra/SublimeJQ\n\turl = https://github.com/zogwarg/SublimeJQ.git\n[submodule \"assets/syntaxes/02_Extra/cmd-help\"]\n\tpath = assets/syntaxes/02_Extra/cmd-help\n\turl = https://github.com/victor-gp/cmd-help-sublime-syntax.git\n\tbranch = main\n\tshallow = true\n[submodule \"assets/syntaxes/02_Extra/TodoTxt\"]\n\tpath = assets/syntaxes/02_Extra/TodoTxt\n\turl = https://github.com/dertuxmalwieder/SublimeTodoTxt\n[submodule \"assets/syntaxes/02_Extra/Ada\"]\n\tpath = assets/syntaxes/02_Extra/Ada\n\turl = https://github.com/AldanTanneo/ada-sublime-syntax\n  \n[submodule \"assets/syntaxes/02_Extra/Crontab\"]\n\tpath = assets/syntaxes/02_Extra/Crontab\n\turl = https://github.com/michaelblyons/SublimeSyntax-Crontab\n[submodule \"assets/syntaxes/02_Extra/NSIS\"]\n\tpath = assets/syntaxes/02_Extra/NSIS\n\turl = https://github.com/SublimeText/NSIS\n[submodule \"assets/syntaxes/02_Extra/vscode-wgsl\"]\n\tpath = assets/syntaxes/02_Extra/vscode-wgsl\n\turl = https://github.com/PolyMeilex/vscode-wgsl.git\n[submodule \"assets/syntaxes/02_Extra/CFML\"]\n\tpath = assets/syntaxes/02_Extra/CFML\n\turl = https://github.com/jcberquist/sublimetext-cfml.git\n[submodule \"assets/syntaxes/02_Extra/Idris2\"]\n\tpath = assets/syntaxes/02_Extra/Idris2\n\turl = https://github.com/buzden/sublime-syntax-idris2\n[submodule \"assets/syntaxes/02_Extra/GDScript-sublime\"]\n\tpath = assets/syntaxes/02_Extra/GDScript-sublime\n\turl = https://github.com/beefsack/GDScript-sublime\n[submodule \"assets/syntaxes/02_Extra/sublime-odin\"]\n\tpath = assets/syntaxes/02_Extra/sublime-odin\n\turl = https://github.com/odin-lang/sublime-odin\n[submodule \"assets/syntaxes/02_Extra/typst-syntax-highlight\"]\n\tpath = assets/syntaxes/02_Extra/typst-syntax-highlight\n\turl = https://github.com/hyrious/typst-syntax-highlight\n[submodule \"assets/themes/Catppuccin\"]\n\tpath = assets/themes/Catppuccin\n\turl = https://github.com/SchweGELBin/catppuccin-bat-sub.git\n[submodule \"assets/syntaxes/02_Extra/SmartVHDL\"]\n\tpath = assets/syntaxes/02_Extra/SmartVHDL\n\turl = https://github.com/TheClams/SmartVHDL\n[submodule \"assets/syntaxes/02_Extra/hosts\"]\n\tpath = assets/syntaxes/02_Extra/hosts\n\turl = https://github.com/tijn/hosts.tmLanguage\n[submodule \"assets/syntaxes/02_Extra/Gomod\"]\n\tpath = assets/syntaxes/02_Extra/Gomod\n\turl = https://github.com/mitranim/sublime-gomod\n[submodule \"assets/syntaxes/02_Extra/COBOL\"]\n\tpath = assets/syntaxes/02_Extra/COBOL\n\turl = https://github.com/adukhan99/sublime_cobol.git\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "# unreleased\n\n- Fixed bug caused by using `--plain` and `--terminal-width=N` flags simultaneously, see #3529 (@H4k1l)\n- Fixed syntax tests path, see #3610 (@foxfromworld)\n\n## Features\n\n- Added support for `hidden_file_extensions` from `.sublime-syntax` files, see #3613 (@Matei02355)\n- Add word wrapping mode via `--wrap=word`, see #3597 (@veeceey)\n- Implement `--unbuffered` mode for streaming input, allowing partial lines to display immediately (e.g. `tail -f | bat -u`). Closes #3555, see #3583 (@mainnebula)\n- Added an initial `flake.nix` for a ready made development environment; see #3578 (@vorburger)\n- Add `--quiet-empty` (`-E`) flag to suppress output when input is empty. Closes #1936, see #3563 (@NORMAL-EX)\n- Improve native man pages and command help syntax highlighting by stripping overstriking, see #3517 (@akirk)\n- Add `--fallback-syntax`/`--fallback-language` to apply syntax highlighting only when auto-detection fails, see #1341 (@Xavrir)\n\n## Bugfixes\n- Fix `BAT_CONFIG_DIR` pointing at system config directory causing duplicate flag errors. Closes #3589, see #3620 (@Xavrir)\n- Fix syntax highlighting for symlinked files when the symlink name has no extension but the target does. Closes #1001, see #3621 (@Xavrir)\n- Report error when pager is missing instead of silently falling back, see #3588 (@IMaloney)\n- Fix `--wrap=never` and `-S` flags being ignored when piping to pager, see #3592 (@IMaloney)\n- Fix crash with BusyBox `less` on Windows, see #3527 (@Anchal-T)\n- Fix `bat cache --help` failing with 'unexpected argument' error, see #3580 and #3560 (@NORMAL-EX)\n- `--help` now correctly honors `--pager=builtin`. See #3516 (@keith-hall)\n- `--help` now correctly honors custom themes. See #3524 (@keith-hall)\n- Fixed test compatibility with future Cargo build directory changes, see #3550 (@nmacl)\n\n## Other\n\n- Bump MSRV to 1.88, update `time` crate to 0.3.47 to fix RUSTSEC-2026-0009, see #3581 (@NORMAL-EX)\n\n## Syntaxes\n\n- Change the URL of Zig submodule from GitHub to Codeberg, see #3519 (@sorairolake)\n- Don't color strings inside CSV files, to make it easier to tell which column they belong to, see #3521 (@keith-hall)\n- Add syntax highlighting support for COBOL, see #3584 (@adukhan99)\n- Fixed manpage syntax so that ANSI escape codes don't get incorrectly highlighted and thus broken, see #3586 (@BlueElectivire)\n- Map several Google Cloud CLI config files to their appropriate syntax #3635 (@victor-gp)\n- Map all ignore dotfiles to Git Ignore syntax #3636 (@victor-gp)\n\n## Themes\n\n- Remove the Visual Studio Dark+ theme, see #3552 (@CosmicHorrorDev)\n\n## `bat` as a library\n\n# v0.26.1\n\n## Features\n\n- Add paging to '-h' and '--help' see PR #3478 (@MuntasirSZN)\n\n## Bugfixes\n\n- Fix hang when using `--list-themes` with an explicit pager, see #3457 (@abhinavcool42)\n- Fix negative values of N not being parsed in <N:M> line ranges without `=` flag value separator, see #3442 (@lmmx)\n- Fix broken Docker syntax preventing use of custom assets, see #3476 (@keith-hall)\n- Fix decorations being applied unexpectedly when piping. Now only line numbers explicitly required on the command line should be applied in auto decorations mode for `cat` compatibility. See #3496 (@keith-hall)\n- Fix diagnostics attempting to find the version of an executable named builtin when builtin pager is used. See #3498 (@keith-hall)\n- `--help` now correctly reads the config file for theme information etc. See #3507 (@keith-hall)\n\n## Other\n- Improve README documentation on pager options passed to less, see #3443 (@injust)\n- Make PowerShell completions compatible with PowerShell v5.1, see #3495 (@keith-hall)\n- Use more robust approach to escaping in Bash completions, see #3448 (@akinomyoga)\n\n## Syntaxes\n\n- Update quadlet syntax mapping to include *.{build,pod} files #3484 (@cyqsimon)\n- Fix inconsistencies in Ada syntax, see #3481 (@AldanTanneo)\n- Add syntax mapping for podman's `artifact` quadlet files, see #3497 (@xduugu)\n- Highlight Korn Shell scripts (i.e. with a shebang of ...`ksh`) using Bash syntax, see #3509 (@keith-hall)\n\n## Themes\n\n## `bat` as a library\n\n# v0.26.0\n\n## Features\n- Add build for windows/ARM64 platform. #3190 (@alcroito)\n- Add paging to `--list-themes`, see PR #3239 (@einfachIrgendwer0815)\n- Support negative relative line ranges, e.g. `bat -r :-10` / `bat -r='-10:'`, see #3068 (@ajesipow)\n- Support context in line ranges, e.g. `bat -r 30::5` /  `bat -r 30:40:5`, see #3345 (@cavanaug)\n- Add built-in 'minus' pager, e.g. `bat --pager=builtin` see PR #3402 (@academician)\n\n## Bugfixes\n\n- Fix UTF-8 BOM not being stripped for syntax detection, see #3314 (@krikera)\n- Fix `BAT_THEME_DARK` and `BAT_THEME_LIGHT` being ignored, see issue #3171 and PR #3168 (@bash)\n- Prevent `--list-themes` from outputting default theme info to stdout when it is piped, see #3189 (@einfachIrgendwer0815)\n- Rename some submodules to fix Dependabot submodule updates, see issue #3198 and PR #3201 (@victor-gp)\n- Make highlight tests fail when new syntaxes don't have fixtures PR #3255 (@dan-hipschman)\n- Fix crash for multibyte characters in file path, see issue #3230 and PR #3245 (@HSM95)\n- Add missing mappings for various bash/zsh files, see PR #3262 (@AdamGaskins)\n- Send all bat errors to stderr by default, see #3336 (@JerryImMouse)\n- Make --map-syntax target case insensitive to match --language, see #3206 (@keith-hall)\n- Correctly determine the end of the line in UTF16LE/BE input #3369 (@keith-hall)\n- `--style=changes` no longer prints a two-space indent when the file is unmodified, see issue #2710 and PR #3406 (@jyn514)\n- Add missing shell completions, see #3411 (@keith-hall)\n- Execute help/version/diagnostic commands even with invalid config/arguments present, see #3414 (@keith-hall)\n- Fixed line numbers (`-n`) and style components not printing when piping output, see issue #2935 and PR #3438 (@lmmx)\n\n## Other\n\n- Update base16 README links to community driven base16 work #2871 (@JamyGolden)\n- Work around build failures when building `bat` from vendored sources #3179 (@dtolnay)\n- CICD: Stop building for x86_64-pc-windows-gnu which fails #3261 (Enselic)\n- CICD: replace windows-2019 runners with windows-2025 #3339 (@cyqsimon)\n- Build script: replace string-based codegen with quote-based codegen #3340 (@cyqsimon)\n- Improve code coverage of `--list-languages` parameter #2942 (@sblondon)\n- Only start offload worker thread when there's more than 1 core #2956 (@cyqsimon)\n- Update terminal-colorsaurus (the library used for dark/light detection) to 1.0, see #3347 (@bash)\n- Update console dependency to 0.16, see #3351 (@musicinmybrain)\n- Fixed some typos #3244 (@ssbarnea)\n- Update onig_sys dependency to 69.9.1 to fix a gcc build failure #3400 (@CosmicHorrorDev)\n- Add a cargo feature (`vendored-libgit2`) to build with vendored libgit2 version without depending on the system's one #3426 (@0x61nas)\n- Update syntect dependency to v5.3.0 to fix a few minor bugs, see #3410 (@keith-hall)\n\n## Syntaxes\n\n- Add syntax mapping for `paru` configuration files #3182 (@cyqsimon)\n- Add support for [Idris 2 programming language](https://www.idris-lang.org/) #3150 (@buzden)\n- Add syntax mapping for `nix`'s '`flake.lock` lockfiles #3196 (@odilf)\n- Improvements to CSV/TSV highlighting, with autodetection of delimiter and support for TSV files, see #3186 (@keith-\n- Improve (Sys)log error highlighting, see #3205 (@keith-hall)\n- Map `ndjson` extension to JSON syntax, see #3209 (@keith-hall)\n- Map files with `csproj`, `vbproj`, `props` and `targets` extensions to XML syntax, see #3213 (@keith-hall)\n- Add debsources syntax to highlight `/etc/apt/sources.list` files, see #3215 (@keith-hall)\n- Add syntax definition and test file for GDScript highlighting, see #3236 (@chetanjangir0)\n- Add syntax test file for Odin highlighting, see #3241 (@chetanjangir0)\n- Update quadlet syntax mapping rules to cover quadlets in subdirectories #3299 (@cyqsimon)\n- Add syntax Typst #3300 (@cskeeters)\n- Map `.mill` files to Scala syntax for Mill build tool configuration files #3311 (@krikera)\n- Add syntax highlighting for VHDL, see #3337 (@JerryImMouse)\n- Add syntax mapping for certbot certificate configuration #3338 (@cyqsimon)\n- Update Lean syntax from Lean 3 to Lean 4 #3322 (@YDX-2147483647)\n- Map `.flatpakref` and `.flatpakrepo` files to INI syntax #3353 (@Ferenc-)\n- Update hosts syntax #3368 (@keith-hall)\n- Map `.kshrc` files to Bash syntax #3364 (@ritoban23)\n- Map `/var/log/dmesg` files to Syslog syntax #3412 (@keith-hall)\n- Add syntax definition and test file for Go modules(`go.mod` and `go.sum`) highlighting, see #3424 (@DarkMatter-999)\n- Syntax highlighting for typescript code blocks within Markdown files, see #3435 (@MuntasirSZN)\n\n## Themes\n\n- Add Catppuccin, see #3317 (@SchweGELBin)\n- Updated Catppuccin, see #3333 (@SchweGELBin)\n- Updated gruvbox, see #3372 (@Nicholas42)\n- Updated GitHub theme, see #3382 (@CosmicHorrorDev)\n- Updated ANSI theme to highlight JSON object keys differently from values, see #3413 (@keith-hall)\n\n# v0.25.0\n\n## Features\n\n- Set terminal title to file names when Paging is not Paging::Never #2807 (@Oliver-Looney)\n- `bat --squeeze-blank`/`bat -s` will now squeeze consecutive empty lines, see #1441 (@eth-p) and #2665 (@einfachIrgendwer0815)\n- `bat --squeeze-limit` to set the maximum number of empty consecutive when using `--squeeze-blank`, see #1441 (@eth-p) and #2665 (@einfachIrgendwer0815)\n- `PrettyPrinter::squeeze_empty_lines` to support line squeezing for bat as a library, see #1441 (@eth-p) and #2665 (@einfachIrgendwer0815)\n- Syntax highlighting for JavaScript files that start with `#!/usr/bin/env bun` #2913 (@sharunkumar)\n- `bat --strip-ansi={never,always,auto}` to remove ANSI escape sequences from bat's input, see #2999 (@eth-p)\n- Add or remove individual style components without replacing all styles #2929 (@eth-p)\n- Automatically choose theme based on the terminal's color scheme, see #2896 (@bash)\n- Add option `--binary=as-text` for printing binary content, see issue #2974 and PR #2976 (@einfachIrgendwer0815)\n- Make shell completions available via `--completion <shell>`, see issue #2057 and PR #3126 (@einfachIrgendwer0815)\n- Syntax highlighting for puppet code blocks within Markdown files, see #3152 (@liliwilson)\n\n## Bugfixes\n\n- Fix long file name wrapping in header, see #2835 (@FilipRazek)\n- Fix `NO_COLOR` support, see #2767 (@acuteenvy)\n- Fix handling of inputs with OSC ANSI escape sequences, see #2541 and #2544 (@eth-p)\n- Fix handling of inputs with combined ANSI color and attribute sequences, see #2185 and #2856 (@eth-p)\n- Fix panel width when line 10000 wraps, see #2854 (@eth-p)\n- Fix compile issue of `time` dependency caused by standard library regression #3045 (@cyqsimon)\n- Fix override behavior of --plain and --paging, see issue #2731 and PR #3108 (@einfachIrgendwer0815)\n- Fix bugs in `$LESSOPEN` support, see #2805 (@Anomalocaridid)\n\n## Other\n\n- Upgrade to Rust 2021 edition #2748 (@cyqsimon)\n- Refactor and cleanup build script #2756 (@cyqsimon)\n- Checks changelog has been written to for PRs in CI #2766 (@cyqsimon)\n  - Use GitHub API to get correct PR submitter #2791 (@cyqsimon)\n- Minor benchmark script improvements #2768 (@cyqsimon)\n- Update Arch Linux package URL in README files #2779 (@brunobell)\n- Update and improve `zsh` completion, see #2772 (@okapia)\n- More extensible syntax mapping mechanism #2755 (@cyqsimon)\n- Use proper Architecture for Debian packages built for musl, see #2811 (@Enselic)\n- Pull in fix for unsafe-libyaml security advisory, see #2812 (@dtolnay)\n- Update git-version dependency to use Syn v2, see #2816 (@dtolnay)\n- Update git2 dependency to v0.18.2, see #2852 (@eth-p)\n- Improve performance when color output disabled, see #2397 and #2857 (@eth-p)\n- Relax syntax mapping rule restrictions to allow brace expansion #2865 (@cyqsimon)\n- Apply clippy fixes #2864 (@cyqsimon)\n- Faster startup by offloading glob matcher building to a worker thread #2868 (@cyqsimon)\n- Display which theme is the default one in basic output (no colors), see #2937 (@sblondon)\n- Display which theme is the default one in colored output, see #2838 (@sblondon)\n- Add aarch64-apple-darwin (\"Apple Silicon\") binary tarballs to releases, see #2967 (@someposer)\n- Update the Lisp syntax, see #2970 (@ccqpein)\n- Use bat's ANSI iterator during tab expansion, see #2998 (@eth-p)\n- Support 'statically linked binary' for aarch64 in 'Release' page, see #2992 (@tzq0301)\n- Update options in shell completions and the man page of `bat`, see #2995 (@akinomyoga)\n- Update nix dev-dependency to v0.29.0, see #3112 (@decathorpe)\n- Bump MSRV to [1.74](https://blog.rust-lang.org/2023/11/16/Rust-1.74.0.html), see #3154 (@keith-hall)\n- Update clircle dependency to remove winapi transitive dependency, see #3113 (@niklasmohrin)\n\n## Syntaxes\n\n- `cmd-help`: scope subcommands followed by other terms, and other misc improvements, see #2819 (@victor-gp)\n- Upgrade JQ syntax, see #2820 (@dependabot[bot])\n- Add syntax mapping for quadman quadlets #2866 (@cyqsimon)\n- Map containers .conf files to TOML syntax #2867 (@cyqsimon)\n- Associate `.xsh` files with `xonsh` syntax that is Python, see #2840 (@anki-code)\n- Associate JSON with Comments `.jsonc` with `json` syntax, see #2795 (@mxaddict)\n- Associate JSON-LD `.jsonld` files with `json` syntax, see #3037 (@vorburger)\n- Associate `.textproto` files with `ProtoBuf` syntax, see #3038 (@vorburger)\n- Associate GeoJSON `.geojson` files with `json` syntax, see #3084 (@mvaaltola)\n- Associate `.aws/{config,credentials}`, see #2795 (@mxaddict)\n- Associate Wireguard config `/etc/wireguard/*.conf`, see #2874 (@cyqsimon)\n- Add support for [CFML](https://www.adobe.com/products/coldfusion-family.html), see #3031 (@brenton-at-pieces)\n- Map `*.mkd` files to `Markdown` syntax, see issue #3060 and PR #3061 (@einfachIrgendwer0815)\n- Add syntax mapping for CITATION.cff, see #3103 (@Ugzuzg)\n- Add syntax mapping for kubernetes config files #3049 (@cyqsimon)\n- Adds support for pipe delimiter for CSV #3115 (@pratik-m)\n- Add syntax mapping for `/etc/pacman.conf` #2961 (@cyqsimon)\n- Associate `uv.lock` with `TOML` syntax, see #3132 (@fepegar)\n\n## Themes\n\n- Patched/improved themes for better Manpage syntax highlighting support, see #2994 (@keith-hall).\n\n## `bat` as a library\n\n- Changes to `syntax_mapping::SyntaxMapping` #2755 (@cyqsimon)\n  - `SyntaxMapping::get_syntax_for` is now correctly public\n  - [BREAKING] `SyntaxMapping::{empty,builtin}` are removed; use `SyntaxMapping::new` instead\n  - [BREAKING] `SyntaxMapping::mappings` is replaced by `SyntaxMapping::{builtin,custom,all}_mappings`\n- Make `Controller::run_with_error_handler`'s error handler `FnMut`, see #2831 (@rhysd)\n- Improve compile time by 20%, see #2815 (@dtolnay)\n- Add `theme::theme` for choosing an appropriate theme based on the\n  terminal's color scheme, see #2896 (@bash)\n  - [BREAKING] Remove `HighlightingAssets::default_theme`. Use `theme::default_theme` instead.\n- Add `PrettyPrinter::print_with_writer` for custom output destinations, see #3070 (@kojix2)\n\n# v0.24.0\n\n## Features\n\n- Add environment variable `BAT_PAGING`, see #2629 (@einfachIrgendwer0815)\n- Add opt-in (`--features lessopen`) support for `LESSOPEN` and `LESSCLOSE`. See #1597, #1739, #2444, #2602, and #2662 (@Anomalocaridid)\n\n## Bugfixes\n\n- Fix `more` not being found on Windows when provided via `BAT_PAGER`, see #2570, #2580, and #2651 (@mataha)\n- Switched default behavior of `--map-syntax` to be case insensitive #2520\n- Updated version of `serde_yaml` to `0.9`. See #2627 (@Raghav-Bell)\n- Fix arithmetic overflow in `LineRange::from` and `LineRange::parse_range`, see #2674, #2698 (@skoriop)\n- Fix paging not happening when stdout is interactive but stdin is not, see #2574 (@Nigecat)\n- Make `-pp` override `--paging` and vice versa when passed as a later argument, see #2660 (@J-Kappes)\n\n## Other\n\n- Output directory for generated assets (completion, manual) can be customized, see #2515 (@tranzystorek-io)\n- Use the `is-terminal` crate instead of `atty`, see #2530 (@nickelc)\n- Add Winget Releaser workflow, see #2519 (@sitiom)\n- Bump MSRV to 1.70, see #2651 (@mataha)\n\n## Syntaxes\n\n- Associate `os-release` with `bash` syntax, see #2587 (@cyqsimon)\n- Associate `Containerfile` with `Dockerfile` syntax, see #2606 (@einfachIrgendwer0815)\n- Replaced quotes with double quotes so fzf integration example script works on windows and linux. see #2095 (@johnmatthiggins)\n- Associate `ksh` files with `bash` syntax, see #2633 (@johnmatthiggins)\n- Associate `sarif` files with `JSON` syntax, see #2695 (@rhysd)\n- Associate `ron` files with `rust` syntax, see #2427 (@YeungOnion)\n- Add support for [WebGPU Shader Language](https://www.w3.org/TR/WGSL/), see #2692 (@rhysd)\n- Add `.dpkg-new` and `.dpkg-tmp` to ignored suffixe, see #2595 (@scop)\n- fix: Add syntax mapping `*.jsonl` => `json`, see #2539 (@WinterCore)\n- Update `Julia` syntax, see #2553 (@dependabot)\n- add `NSIS` support, see #2577 (@idleberg)\n- Update `ssh-config`, see #2697 (@mrmeszaros)\n- Add syntax mapping `*.debdiff` => `diff`, see #2947 (@jacg)\n\n## `bat` as a library\n\n- Add optional output_buffer arg to `Controller::run()` and `Controller::run_with_error_handler()`, see #2618 (@Piturnah)\n\n\n# v0.23.0\n\n## Features\n\n- Implemented `-S` and `--chop-long-lines` flags as aliases for `--wrap=never`. See #2309 (@johnmatthiggins)\n- Breaking change: Environment variables can now override config file settings (but command-line arguments still have the highest precedence), see #1152, #1281, and #2381 (@aaronkollasch)\n- Implemented `--nonprintable-notation=caret` to support showing non-printable characters using caret notation. See #2429 (@einfachIrgendwer0815)\n\n## Bugfixes\n\n- Fix `bat cache --clear` not clearing the `--target` dir if specified. See #2393 (@miles170)\n\n## Other\n\n- Various bash completion improvements, see #2310 (@scop)\n- Disable completion of `cache` subcommand, see #2399 (@cyqsimon)\n- Signifigantly improve startup performance on macOS, see #2442 (@BlackHoleFox)\n- Bump MSRV to 1.62, see #2496 (@Enselic)\n\n## Syntaxes\n\n- Added support for Ada, see #1300 and #2316 (@dkm)\n- Added `todo.txt` syntax, see #2375 (@BANOnotIT)\n- Improve Manpage.sublime-syntax. See #2364 (@Freed-Wu) and #2461 (@keith-hall)\n- Added a new `requirements.txt` syntax, see #2361 (@Freed-Wu)\n- Added a new VimHelp syntax, see #2366 (@Freed-Wu)\n- Associate `pdm.lock` with `TOML` syntax, see #2410\n- `Todo.txt`: Fix highlighting of contexts and projects at beginning of done.txt, see #2411\n- `cmd-help`: overhaul scope names (colors) to improve theme support; misc syntax improvements. See #2419 (@victor-gp)\n- Added support for Crontab, see #2509 (@keith-hall)\n\n## Themes\n\n## `bat` as a library\n\n- `PrettyPrinter::header` correctly displays a header with the filename, see #2378 and #2406 (@cstyles)\n\n\n# v0.22.1\n\n## Bugfixes\n\n- Bring back pre-processing of ANSI escape characters to so that some common `bat` use cases starts working again. See #2308 (@Enselic)\n\n# v0.22.0\n\n## Features\n\n- Make the default macOS theme depend on Dark Mode. See #2197, #1746 (@Enselic)\n- Support for separate system and user config files. See #668 (@patrickpichler)\n\n## Bugfixes\n\n- Prevent fork nightmare with `PAGER=batcat`. See #2235 (@johnmatthiggins)\n- Make `--no-paging`/`-P` override `--paging=...` if passed as a later arg, see #2201 (@themkat)\n- `--map-syntax` and `--ignored-suffix` now works together, see #2093 (@czzrr)\n- Strips byte order mark from output when in non-loop-through mode. See #1922 (@dag-h)\n\n## Other\n\n- Relaxed glibc requirements on amd64, see #2106 and #2194 (@sharkdp)\n- Improved fish completions. See #2275 (@zgracem)\n- Stop pre-processing ANSI escape characters. Syntax highlighting on ANSI escaped input is not supported. See #2185 and #2189 (@Enselic)\n\n## Syntaxes\n\n- NSE (Nmap Scripting Engine) is mapped to Lua, see #2151 (@Cre3per)\n- Correctly color `fstab` dump and pass fields, see #2246 (@yuvalmo)\n- Update `Command Help` syntax, see #2255\n- `Julia`: Fix syntax highlighting for function name starting with `struct`, see #2230\n- Minor update to `LiveScript`, see #2291\n- Associate `.mts` and `.cts` files with the `TypeScript` syntax. See #2236 (@kidonng)\n- Fish history is mapped to YAML. See #2237 (@kidonng)\n\n## `bat` as a library\n\n- Make `bat::PrettyPrinter::syntaxes()` iterate over new `bat::Syntax` struct instead of `&syntect::parsing::SyntaxReference`. See #2222 (@Enselic)\n- Clear highlights after printing, see #1919 and #1920 (@rhysd)\n\n\n# v0.21.0\n\n## Features\n\n- Correctly render tab stops in `--show-all`, see #2038 (@Synthetica9)\n- Add a `--style=default` option and make it the default. It is less verbose than `full`, see #2061 (@IsaacHorvath)\n- Enable BusyBox `less` as pager, see #2162 (@nfisher1226)\n- File extensions are now matched case-insensitively. See #1854, #2181 (@Enselic)\n\n## Bugfixes\n\n- Bump `regex` dependency from 1.5.4 to 1.5.5 to fix [CVE-2022-24713](https://blog.rust-lang.org/2022/03/08/cve-2022-24713.html), see #2145, #2139 (@Enselic)\n- `bat` no longer crashes when encountering files that references missing syntaxes. See #915, #2181 (@Enselic)\n\n## Performance\n\n- Skip syntax highlighting on long lines (> 16384 chars) to help improve performance. See #2165 (@keith-hall)\n- Vastly improve startup time by lazy-loading syntaxes via syntect 5.0.0. This makes bat display small files ~75% faster than before. See #951, #2181 (@Enselic)\n\n## Other\n\n- Include info about custom assets in `--diagnostics` if used. See #2107, #2144 (@Enselic)\n\n## Syntaxes\n\n- Mapped clang-format config file (.clang-format) to YAML syntax (@TruncatedDinosour)\n- log syntax: improved handling of escape characters in double quoted strings. See #2123 (@keith-hall)\n- Associate `/var/spool/mail/*` and `/var/mail/*` with the `Email` syntax. See #2156 (@cyqsimon)\n- Added cmd-help syntax to scope --help messages. See #2148 (@victor-gp)\n- Slightly adjust Zig syntax. See #2136 (@Enselic)\n- Associate `.inf` files with the `INI` syntax. See #2190 (@Enselic)\n\n## `bat` as a library\n\n- Allow configuration of `show_nonprintable` with `PrettyPrinter`, see #2142\n- The binary format of syntaxes.bin has been changed due to syntaxes now being lazy-loaded via syntect 5.0.0. See #2181 (@Enselic)\n- Mark `bat::error::Error` enum as `#[non_exhaustive]` to allow adding new variants without future semver breakage. See #2181 (@Enselic)\n- Change `Error::SyntectError(syntect::LoadingError)` to `Error::SyntectError(syntect::Error)`. See #2181 (@Enselic)\n- Add `Error::SyntectLoadingError(syntect::LoadingError)` enum variant. See #2181 (@Enselic)\n\n\n# v0.20.0\n\n## Features\n\n- New style component `header-filesize` to show size of the displayed file in the header. See #1988 (@mdibaiee)\n- Use underline for line highlighting on ANSI, see #1730 (@mdibaiee)\n\n## Bugfixes\n\n- Fix bash completion on bash 3.x and bash-completion 1.x. See #2066 (@joshpencheon)\n\n## Syntaxes\n\n- `GraphQL`: Add support for interfaces implementing interfaces and consider ampersand an operator. See #2000\n- Associate `_vimrc` and `_gvimrc` files with the `VimL` syntax. See #2002\n- Associate `poetry.lock` files with the `TOML` syntax. See #2049\n- Associate `.mesh`, `.task`, `.rgen`, `.rint`, `.rahit`, `.rchit`, `.rmiss`, and `.rcall` with the `GLSL` syntax. See #2050\n- Added support for `JQ` syntax, see #2072\n- Properly associate global git config files rooted in `$XDG_CONFIG_HOME/git/` or `$HOME/.config/git/`. See #2067 (@cyqsimon)\n\n## `bat` as a library\n\n- Exposed `get_syntax_set` and `get_theme` methods on `HighlightingAssets`. See #2030 (@dandavison)\n- Added `HeaderFilename` and `HeaderFilesize` to `StyleComponent` enum, and mark it `#[non_exhaustive]`. See #1988 (@mdibaiee)\n\n\n# v0.19.0\n\n## Performance\n\n- Reduce startup time in loop-through mode (e.g. when redirecting output) by 90%. See #1747 (@Enselic)\n- Load themes lazily to make bat start 25% faster when disregarding syntax load time. See #1969 (@Enselic)\n- Python syntax highlighting no longer suffers from abysmal performance in specific scenarios. See #1688 (@keith-hall)\n- Fix for poor performance when ANSI escape sequences are piped to `bat`, see #1596 (@eth-p)\n- Fix for incorrect handling of ANSI escape sequences when using `--wrap=never`, see #1596 (@eth-p)\n- Load custom assets as fast as integrated assets, see #1753 (@Enselic)\n\n## Features\n\n- Support for `x:-delta` (minus) syntax in line ranges (e.g. `20:-10`). See  #1901 (@bojan88)\n- Support for `--ignored-suffix` argument. See #1892 (@bojan88)\n- `$BAT_CONFIG_DIR` is now a recognized environment variable. It has precedence over `$XDG_CONFIG_HOME`, see #1727 (@billrisher)\n- Support for `x:+delta` syntax in line ranges (e.g. `20:+10`). See  #1810 (@bojan88)\n- Add new `--acknowledgements` option that gives credit to theme and syntax definition authors. See #1971 (@Enselic)\n- Include git hash in `bat -V` and `bat --version` output if present. See #1921 (@Enselic)\n\n## Bugfixes\n\n- First line not shown in diff context. See #1891 (@divagant-martian)\n- Do not ignore syntaxes that handle file names with a `*.conf` extension. See #1703 (@cbolgiano)\n\n## Other\n\n- Add PowerShell completion, see #1826 (@rashil2000)\n- Minimum supported Rust version (MSRV) bumped to 1.51, see #1994 (@mdibaiee)\n\n## Syntaxes\n\n- Groff, see #1685 (@scop)\n- HTTP Requests and Responses, see #1748 (@keith-hall)\n- LLVM, see #1777 (@ioncodes)\n- Highlight for `vimrc` and `gvimrc` files, see #1763 (@SuperSandro2000)\n- Syslog highlighting improvements, see #1793 (@scop)\n- Added support for `slim` syntax, see #1693 (@mfinelli)\n- Racket, see #1884 (@jubnzv)\n- LiveScript, see #1915 (@Enselic)\n- MediaWiki, see #1925 (@sorairolake)\n- The `requirements.txt` syntax has been removed due to incompatible license requirements.\n- Dart, new highlighter, see #1959 (@Ersikan)\n- SCSS and Sass syntaxes updated, see #1766 (@Enselic)\n- PowerShell syntax updated, see #1935 (@Enselic)\n- TypeScript syntax updated, see #1834 (@Enselic)\n\n## `bat` as a library\n\n- Deprecate `HighlightingAssets::syntaxes()` and `HighlightingAssets::syntax_for_file_name()`. Use `HighlightingAssets::get_syntaxes()` and `HighlightingAssets::get_syntax_for_path()` instead. They return a `Result` which is needed for upcoming lazy-loading work to improve startup performance. They also return which `SyntaxSet` the returned `SyntaxReference` belongs to. See #1747, #1755, #1776, #1862 (@Enselic)\n- Remove `HighlightingAssets::from_files` and `HighlightingAssets::save_to_cache`. Instead of calling the former and then the latter you now make a single call to `bat::assets::build`. See #1802, #1971 (@Enselic)\n- Replace  the `error::Error(error::ErrorKind, _)` struct and enum with an `error::Error` enum. `Error(ErrorKind::UnknownSyntax, _)` becomes `Error::UnknownSyntax`, etc. Also remove the `error::ResultExt` trait. These changes stem from replacing `error-chain` with `thiserror`. See #1820 (@Enselic)\n- Add new `MappingTarget` enum variant `MapExtensionToUnknown`. Refer to its documentation for more information. Also mark `MappingTarget` as `#[non_exhaustive]` since more enum variants might be added in the future. See #1703 (@cbolgiano), #2012 (@Enselic)\n\n\n# v0.18.3\n\n## Bugfixes\n\n- Bump `git2` dependency to fix build with Rust 1.54, see #1761\n\n\n# v0.18.2\n\n## Features\n\n- Ignore known backup/template filename suffixes when selecting the syntax, see #1687 (@scop)\n\n## Bugfixes\n\n- Fix for a security vulnerability on Windows. Prior to this release, `bat` would execute programs called `less`/`less.exe` from the current working directory (instead of the one from `PATH`) with priority. An attacker might be able to use this by placing a malicious program in a shared directory where the user would execute `bat`. `bat` users on Windows are advised to upgrade to this version. See #1724 and #1472 (@Ry0taK).\n\n## Other\n\n- Add bash completion, see #1678 (@scop)\n- Fix Clippy lints, see #1661 (@mohamed-abdelnour)\n- Add syntax highlighting test files, see #1213 and #1668 (@mohamed-abdelnour)\n\n## Syntaxes\n\n- Upgraded Julia syntax to fix a highlighting bug, see #1692\n- Added support for `dash` syntax, see #1654 (@mohamed-abdelnour)\n- Added support for `XAML` syntax, see #1590 and #1655 (@mohamed-abdelnour)\n- Apply `DotENV` syntax also for `.env.default` and `.env.defaults` files, see #1669\n\n\n# v0.18.1\n\n## Bugfixes\n\n- Mouse support and screen clearing broken for `less` versions with minor version number (581.2), see #1629 and #1639 (@aswild)\n\n## Other\n\n- `Input::ordinary_file` and `Input::with_name` now accept `Path` rather than `OsStr` see #1571 (@matklad)\n- The `LESS` environment variable is now included in `bat --diagnostic`, see #1589 (@Enselic)\n- Increased min. required Rust version to 1.45\n\n## Syntaxes\n\n- Improved the Syslog syntax highlighting, see #1606 (@keith-hall)\n- Replaced \"Advanced CSV\" with a custom CSV syntax definition written especially for `bat`; see #1574 (@keith-hall)\n- Added SystemVerilog file syntax, see #1580 (@SeanMcLoughlin)\n- Added Solidity and Vyper syntax, see #1602 (@Ersikan)\n\n## New themes\n\n- Dark+ VS Code theme, see #1588 and #1598 (@PatriotRossii)\n\n\n\n# v0.18.0\n\n## Features\n\n- Use a pager when `bat --list-languages` is called, see #1394 (@stku1985)\n\n## Bugfixes\n\n- If the last line doesn't end with a newline character, don't add it if `--style=plain`, see #1438 (@Enselic)\n- Only print themes hint in interactive mode (`bat --list-themes`), see #1439 (@rsteube)\n- Make ./tests/syntax-tests/regression_test.sh work on recent versions of macOS, see #1443 (@Enselic)\n- VimL syntax highlighting fix, see #1450 (@esensar)\n- Print an 'Invalid syntax theme settings' error message if a custom theme is broken, see #614 (@Enselic)\n- If plain mode is set and wrap is not explicitly opted in, long lines will no be truncated, see #1426\n- If `PAGER` (but not `BAT_PAGER` or `--pager`) is `more` or `most`, silently use `less` instead to ensure support for colors, see #1063 (@Enselic)\n- If `PAGER` is `bat`, silently use `less` to prevent recursion. For `BAT_PAGER` or `--pager`, exit with error, see #1413 (@Enselic)\n- Manpage highlighting fix, see #1511 (@keith-hall)\n- `BAT_CONFIG_PATH` ignored by `bat` if non-existent, see #1550 (@sharkdp)\n\n## Other\n\n- Performance improvements, see #1421 (@LovecraftianHorror)\n- Added a new `--diagnostic` option to collect information for bug reports, see #1459 (@sharkdp)\n- Modified default theme colors to differentiate between a JSON key and a string value, see #1400 (@keith-hall)\n- Upped min required Rust version to 1.42\n\n## Syntaxes\n\n- Added Zig syntax, see #1470 (@paulsmith)\n- Added Lean syntax, see #1446 (@Julian)\n- Added `.resource` extension for Robot Framework files, see #1386\n- Added `gnuplot` syntax, see #1431 (@sharkdp)\n- Highlight *.pac (Proxy auto-config) files as JavaScript, see #1515 (@sharkdp)\n\n## New themes\n\n- `ansi` replaces `ansi-dark` and `ansi-light`, see #1104 and #1412 (@mk12). **Breaking change:** users that were previously using one of the `ansi-*` themes should switch to `ansi`.\n- The Gruvbox theme has been updated, see #1291 (@j0hnmeow). **Breaking change:** users that were previously using `gruvbox` or `gruvbox-white` should update and use `gruvbox-dark`/`gruvbox-light` instead.\n\n## `bat` as a library\n\n- The following `PrettyPrinter` methods have been removed (they were previously deprecated):\n   - `input_stdin_with_name`\n   - `input_from_bytes_with_name`\n   - `input_from_reader_with_name`\n   - `vcs_modification_markers` (if the `git` feature is not enabled)\n\n\n# v0.17.1\n\n## Bugfixes\n\n- Running `bat` without arguments fails (\"output file is also an input\"), see #1396\n\n\n# v0.17.0\n\n## Features\n\n- Added a new `--style` value, `rule`, which adds a simple horizontal ruled line between files, see #1276 (@tommilligan)\n- Pass `-S` (\"chop long lines\") to `less` if `--wrap=never` is set in `bat`, see #1255 (@gahag)\n\n## Bugfixes\n\n- Detect infinite loop when input and output are the same, see #1193 and #1197 (@niklasmohrin)\n- Throw an error when `bat` is being used as `pager`, see #1343 (@adrian-rivera)\n- Bash syntax highlighting not selected for `*.ebuild` and `*.eclass` files, see #1292 (@sharkdp)\n- Fix `zsh` completion when using `-p`, see #1320 (@xzfc)\n\n## Other\n\n- Add note to refer to see detailed help with `--help` (and vice versa with `-h`), see #1215 (@henil)\n- Add a `Contributors` section to `README`, see #1348 (@adrian-rivera)\n\n## Syntaxes\n\n- Manpage syntax highlighting has been improved, see #1315 (@keith-hall)\n- Add Svelte file syntax, see #1285 (@kjmph)\n\n## New themes\n\n- Coldark, see #1329 (@armandphilippot)\n\n\n# v0.16.0\n\n## Features\n\n- Added support for the `NO_COLOR` environment variable, see #1021 and #1031 (@eth-p)\n- Added `-P` short flag to disable paging, see #1075 and #1082 (@LordFlashmeow)\n- Added `--force-colorization`/`-f` flag to provide an alias for forced color and decoration output, see #1141 (@alexanderkarlis)\n\n## Bugfixes\n\n- Fixed non-printable characters display for redirected output, see #1061 (@gsomix)\n- Handle file extension conflicts in `--list-languages`, see #1076 and #1135 (@Kienyew)\n\n## Other\n\n- Switched to \"·\" (U+00B7) Middle Dot from \"•\" (U+2022) Bullet for non-printing spaces, see #1056 and #1100 (@LordFlashmeow)\n- Added zsh shell completion script, see #1136 (@Kienyew)\n- Improved `--help` text (@sharkdp)\n- Added custom languages/themes sections to manpage (@eth-p)\n\n## Syntaxes\n\n- Update AsciiDoc syntax, see #1034 (@rxt1077)\n- GLSL (@caioalonso)\n- Add Nginx and Apache config file syntax, see #1137 (@kjmph, @niklasmohrin)\n- Use `fstab` syntax for `crypttab` files, see #1073 (@sharkdp)\n- Support syntax highlighting for files in `$XDG_CONFIG_HOME/git/`, see #1191 (@ahmedelgabri)\n\n## New themes\n\n- Gruvbox, see #1069 (@kyleondy)\n- base16-256 for [base16-shell](https://github.com/chriskempson/base16-shell) users, see #1111 (@mk12)\n\n## `bat` as a library\n\n- Add APIs to provide `Input` descriptions with `InputDescription` (@eth-p)\n- Add function to directly provide `Input`s to `PrettyPrinter` (@eth-p)\n- **Breaking:** `Input::theme_preview_file` is no longer available. (@eth-p)\n\n## Packaging\n\n- Removed build dependency on `liquid` (@sharkdp).\n\n# v0.15.4\n\n## Bugfixes\n\n- Added missing Solarized themes, see #1027\n- Fixed highlighting bug in Haskell source files, see #1026\n\n# v0.15.3\n\n## Bugfixes\n\n- Cannot run `bat` with relative paths, see #1022\n- bat mishighlights Users that start with digits in SSH config, see #984\n\n## New syntaxes\n\n- SML, see #1005 (@kopecs)\n\n## Other\n\n- Some syntaxes and themes have been updated to the latest version\n\n# v0.15.2\n\n## Bugfixes\n\n- Fix syntax detection for files called 'rails', see #1008\n- Fix potential errors with syntax detection for symlinked files, see #1001\n- `--map-syntax` doesn't work with names provided through `--file-name` (@eth-p)\n\n## Other\n\n- Add padding above headers when not using a grid, see #968 and #981 (@pt2121)\n- bat now prints an error if an invalid syntax is specified via `-l` or `--map-syntax`, see #1004 (@eth-p)\n\n## `bat` as a library\n\n- `PrettyPrinter::vcs_modification_markers` has been marked deprecated when building without the `git` feature, see #997 and #1020 (@eth-p, @sharkdp)\n\n## Packaging\n\n- Compilation problems with `onig_sys` on various platforms have been resolved by upgrading to `syntect 4.2`, which includes a new `onig` version that allows to build `onig_sys` without the `bindgen` dependency. This removes the need for `libclang(-dev)` to be installed to compile `bat`. Package maintainers might want to remove `clang` as a build dependency. See #650 for more details.\n\n# v0.15.1\n\n## Bugfixes\n\n- Fix highlighting of Markdown files, see #963 and #977\n- Fix `base16` theme (was broken since in v0.14), see #972, #934 and #979 (@mk12).\n  Users suffering from #865 (\"no color for bat in ssh from a Windows client\") can use the `ansi-dark` and `ansi-light` themes from now on.\n\n## New syntaxes\n\n- Fortran, see #957\n- Email (@mariozaizar)\n- QML, see #962 (@pylipp)\n\n# v0.15.0\n\n## Features\n\n- Add a new `--diff`/`-d` option that can be used to only show lines surrounding\n  Git changes, i.e. added, removed or modified lines. The amount of additional\n  context can be controlled with `--diff-context=N`. See #23 and #940\n\n## Bugfixes\n\n- Error message printed in the middle of the output for another file, see #946\n- Performance improvements when using custom caches (via `bat cache --build`): the `bat` startup time should now be twice as fast (@lzutao).\n\n## Themes\n\n- Updated version of the Solarized dark/light themes, see #941\n\n## `bat` as a library\n\n- There are a few changes in the \"low level\" API (the `Config` struct has changed and\n  the error handler needs a new `&mut dyn Write` argument). The high-level API is not\n  affected.\n\n# v0.14.0\n\n## Features\n\n- Added a new `--file-name <name>…` option to overwrite the displayed filename(s)\n  in the header. This is useful when piping input into `bat`. See #654 and #892 (@neuronull).\n- Added a new `--generate-config-file` option to create an initial configuration file\n  at the right place. See #870 (@jmick414)\n\n## Bugfixes\n\n- Performance problems with C# source code have been fixed, see #677 (@keith-hall)\n- Performance problems with Makefiles have been fixed, see #750 (@keith-hall)\n- Fix bug when highlighting Ruby files with unindented heredocs, see #914 (@keith-hall)\n- A highlighting problem with Rust source code has been fixed, see #924 (@keith-hall)\n- Windows: short files that do not require paging are displayed and then lost, see #887\n- `--highlight-line` did not work correctly in combination with `--tabs=0` and `--wrap=never`,\n  see #937\n\n## Other\n\n- When saving/reading user-provided syntaxes or themes, `bat` will now maintain a\n  `metadata.yaml` file which includes information about the `bat` version which was\n  used to create the cached files. When loading cached files, we now print an error\n  if they have been created with an incompatible version. See #882\n- Updated `liquid` dependency to 0.20, see #880 (@ignatenkobrain)\n\n## `bat` as a library\n\n- A completely new \"high level\" API has been added that is much more convenient\n  to use. See the `examples` folder for the updated code. The older \"low level\"\n  API is still available (basically everything that is not in the root `bat`\n  module), but has been refactored quite a bit. It is recommended to only use\n  the new \"high level\" API, if possible. This will be much easier to keep stable.\n  Note that this should still be considered a \"beta\" release of `bat`-as-a-library.\n  For more details and some screenshots of the example programs, see #936.\n- Stripped out a lot of binary-only dependencies, see #895 and #899 (@dtolnay)\n\n  This introduces a `features = [\"application\"]` which is enabled by default and pulls in\n  everything required by `bat` the application. When depending on bat as a library, downstream\n  `Cargo.toml` should disable this feature to cut out inapplicable heavy dependencies:\n  ``` toml\n  [dependencies]\n  bat = { version = \"0.14\", default-features = false }\n  ```\n  Other optional functionality has also been put behind features: `paging` and `git` support.\n- Allow using the library with older syntect, see #896 and #898 (@dtolnay)\n\n## New syntaxes\n\n- Rego, see #872 (@patrick-east)\n- Stylo, see #917\n\n\n# v0.13.0\n\n## `bat` as a library\n\nBeginning with this release, `bat` can be used as a library (#423).\n\nThis was a huge effort and I want to thank all people who made this possible: @DrSensor, @mitsuhiko, @mre, @eth-p!\n\n- Initial attempt in #469 (@mitsuhiko)\n- Second attempt, complete restructuring of the `bat` crate, see #679 (@DrSensor)\n- Updates to example, public API, error handling, further refactoring: #693 #873 #875 (@sharkdp)\n\nI want to stress that this is the very first release of the library. Things are very likely to change. A lot of things are still missing (including the documentation).\n\nThat being said, you can start using it! See the example programs in [`examples/`](https://github.com/sharkdp/bat/tree/master/examples).\n\nYou can see the API documentation here: https://docs.rs/bat/\n\n## Features\n\n- (**Breaking change**) Glob-based syntax mapping, see #877 and #592. With this change,\n  users need to update their bat config files (`bat --config-file`), if they have any `--map-syntax` settings\n  present.\n\n  The option now works like this:\n  ```bash\n  --map-syntax <glob-pattern>:<syntax-name>\n  ```\n\n  For more information, see the `--help` text, the man page or the README.\n\n  This new feature allows us to properly highlight files like:\n  * `/etc/profile`\n  * `~/.ssh/config`\n\n- `--highlight-line` now accepts line ranges, see #809 (@lkalir)\n- Proper wrapping support for output with wide Unicode characters, see #811 #787 and #815 (@Kogia-sima)\n- A lot of updates to existing syntaxes via #644 (@benwaffle, @keith-hall)\n- `BAT_CACHE_PATH` can be used to place cached `bat` assets in a non-standard path, see #829 (@neuronull)\n- Support combination of multiple styles at the same time, see #857 (@aslpavel)\n\n## Bugfixes\n\n- Do not pass '--no-init' on newer less versions, see #749 and #786 (@sharkdp)\n- 'bat cache' still takes precedence over existing files, see #666 (@sharkdp)\n- `.sc` files should be treated as scala files, see #443 (@benwaffle)\n- Allow underscores and dashes in page names, see #670 (@LunarLambda)\n- Keep empty lines empty, see #601 (@mbarbar)\n- Wrapping does not work when piping, see #758 (@fusillicode, @allevo, @gildo)\n- Allow for non-unicode filenames, see #225 (@sharkdp)\n- Empty file without header produces incomplete grid, see #798 (@eth-p)\n- Files named `build` don't respect shebang lines, see #685 (@sharkdp)\n\n## Other\n\n- Parametrizable names for man page and shell completion files, see #659 #673 #656 (@eth-p)\n- Enabled LTO, making `bat` about 10% faster, see #719 (@bolinfest, @sharkdp)\n- Suggestions non how to configure `bat` for MacOS dark mode, see README (@jerguslejko)\n- Extended [\"Integration with other tools\"](https://github.com/sharkdp/bat#integration-with-other-tools) section (@eth-p)\n- Updated [instrutions on how to use `bat` as a `man`-pager](https://github.com/sharkdp/bat#man), see #652, see #667 (@sharkdp)\n- Add section concerning file encodings, see #688 and #568 (@sharkdp)\n- Updated sort order of command-line options in `--help` text and manpage, see #653 and #700 (@hrlmartins)\n- Updates to the man page syntax, see #718 (@sharkdp)\n- Japanese documentation updates, see #863 (@k-ta-yamada, @sorairolake and @wt-l00)\n- Accept \"default\" as a theme, see #757 (@fvictorio)\n- Updated Windows installation instructions, see #852 (@sorenbug)\n- Updated man page, see #573 (@sharkdp)\n\n## New syntaxes\n\n- Jinja2, see #648 (@Martin819)\n- SaltStack SLS, see #658 (@Martin819)\n- `/etc/fstab`, see #696 (@flopp and @eth-p)\n- `/etc/group` and `/etc/passwd`, see #698 (@argentite)\n- `/proc/cpuinfo` and `/proc/meminfo`, see #593 (@sharkdp)\n- Nim, see #542 (@sharkdp)\n- Vue, see #826 (@chaaaaarlotte)\n- CoffeScript, see #833 (@sharkdp)\n\n## New themes\n\n- Dracula, see #687 (@clarfon)\n- Nord, see #760 (@crabique)\n- Solarized light and dark, see #768 (@hakamadare)\n\n## Packaging\n\n- `bat` is now in the official Ubuntu and Debian repositories, see #323 and #705 (@MarcoFalke)\n- `bat` can now be installed via MacPorts, see #675 (@bn3t)\n- Install fish completions into 'vendor_completions.d', see #651 (@sharkdp)\n\n## Thanks\n\n- To @eth-p for joining me as a maintainer! I'm very grateful for all the work you put into\n  managing and responding to issues, improving our deployment, adding PR/issue templates (#837) as\n  well as fixing bugs and implementing new features.\n\n# v0.12.1\n\n## Bugfixes\n\n- Fixes a bug for older Windows versions (*\"The procedure entry point `CreateFile2` could not be located\"*), see #643 (@rivy)\n\n# v0.12.0\n\n## Features\n\n- Binary file content can now be viewed with `bat -A`, see #623, #640 (@pjsier and @sharkdp)\n- `bat` can now be used as a man pager. Take a look at the README and #523 for more details.\n- Add new style component to separate multiple `--line-range`s, see #570 (@eth-p)\n- Added `-L` as an alias for `--list-languages`\n\n## Bugfixes\n\n- Output looks unbalanced when using '--style=grid,numbers' without 'header', see #571 (@eth-p)\n- issues with filenames starting with \"cache\", see #584\n- Can't build cache with new theme without creating cache dir, see #576 (@frm)\n- `--terminal-width -10` is parsed incorrectly, see #611\n\n## Other\n\n- Added fish completions to DEB package, see #554\n\n## New syntaxes\n\n- Emacs Org mode, see #36 (@bricewge)\n- `requirements.txt`\n- DotENV `.env`\n- SSH config syntax (`-l ssh_config`), see #582 (@issmirnov)\n- `/etc/hosts`, see #583 (@issmirnov)\n- GraphQL, see #625 (@dandavison)\n- Verilog, see #616\n- SCSS and Sass, see #637\n- `strace` syntax, see #599\n\n## Packaging\n\n- `bat` is now in the official Gentoo repositories, see #588 (@toku-sa-n)\n- `bat` is now in the official Alpine Linux repositories, see #586 (@5paceToast)\n- `bat` is in the official Fedora repositories, see #610 (@ignatenkobrain)\n\n# v0.11.0\n\n## Features\n\n- Three new special color themes are available: `ansi-light`, `ansi-dark` and `base16`. These\n  are useful for people that often switch from dark to light themes in their terminal emulator\n  or for people that want the colors to match their terminal theme colors. For more details,\n  see #543 and #490 (@mk12, implementation idea by @trishume)\n- Hand-written auto completion script for Fish shell, see #524 and #555 (@ev-dev and @eth-p)\n- The `-p`/`--plain` option can now be used twice (typically `-pp`). The first `-p` switches the\n  `--style` to \"plain\". The second `-p` disables the pager. See #560 and #552 (@eth-p)\n\n## Bugfixes\n\n- Do not replace arguments to `less` when using `--pager`, see #509\n- Binary files will now be indicated by a warning in interactive mode, see #530 #466 #550 (@maxfilov)\n- Empty files are (once again) printed with a single header line, see #504 and #566 (@reidwagner\n  and @sharkdp)\n- `--terminal-width=0` is now disallowed, see #559 (@eth-p)\n- Accidental printing of files named `cache`, see #557\n\n## Other\n\n- New integration tests, see #500 and #502 (@reidwagner and @sharkdp)\n- New [\"Integration with other tools\"](https://github.com/sharkdp/bat#integration-with-other-tools) section in the README.\n- Migrated to Rust 2018 (@expobrain)\n\n## New syntaxes\n\n- F# syntax has been updated, see #531 (@stroborobo)\n- Fish shell, see #548 (@sanga)\n\n## Packaging\n\n- `bat` is now available on Chocolatey, see #541 (@rasmuskriest)\n\n# v0.10.0\n\n## Features\n\n- Added new `--highlight-line <N>` option, see #453, #346 and #175 (@tskinn and @sharkdp)\n\n## Changes\n\n- **Change the default configuration directory on macOS** to `~/.config/bat`, see #442 (@lavifb). If you are on macOS, you need to copy your configuration directory from the previous place (`~/Library/Preferences/bat`) to the new place (`~/.config/bat`).\n- Completely disabled the generation of shell completion files, see #372\n- Properly set arguments to `less` if `PAGER` environment variable contains something like `less -F` (which is missing the `-R` option), see #430 (@majecty)\n- Report the name of missing files, see #444 (@ufuji1984)\n- Don't start pager if file doesn't exist, see #387\n- Rename `bat cache --init` to `bat cache --build`, see #498\n- Move the `--config-dir` and `--cache-dir` options from `bat cache` to `bat` and hide them from the help text.\n\n## Bugfixes\n\n- Blank line at the end of output when using `--style=plain`, see #379\n- EOF must be sent twice on stdin if no other input is sent, see #477 (@reidwagner)\n\n## New syntaxes\n\n- Twig (@ahmedelgabri)\n- `.desktop` files (@jleclanche)\n- AsciiDoc (@markusthoemmes)\n- Assembly (x86_64 and ARM)\n- Log files (@caos21)\n- Protobuf and ProtobufText (@caos21)\n- Terraform (@caos21)\n- Jsonnet (@hfm)\n- Varlink (@haraldh)\n\n## Other\n\n- Added Japanese version of README (@sh-tech and @object1037)\n- Code improvements (@barskern)\n\n# v0.9.0\n\n## Features\n\n- A new `-A`/`--show-all` option has been added to show and highlight non-printable characters (in analogy to GNU `cat`s option):\n\n  ![](https://camo.githubusercontent.com/c3e769482ef3184f6be6adaa34bdc8d19c378254/68747470733a2f2f692e696d6775722e636f6d2f324b54486859542e706e67)\n\n  see #395 and #381 for more details.\n\n- Added `--pager` option (to configure the pager from the configuration file), see #362 (@majecty)\n\n- Added `BAT_CONFIG_PATH` environment variable to set a non-default path for `bat`s configuration file, see #375 (@deg4uss3r)\n\n- Allow for multiple occurrences of `--style` to allow for the configuration\n  of styles from the config file, see #367 (@sindreij)\n\n- Allow for multiple `--line-range` arguments, see #23\n\n- The `--terminal-width` option can now also accept offsets, see #376\n\n## Changes\n\n- Use of italics is now *disabled by default* (see #389 for details). They can be\n  re-enabled by adding `--italic-text=always` to your configuration file.\n\n- The default tab-width has been set to 4.\n\n- Added new \"Sublime Snazzy\" theme.\n\n- Shell completions are currently *not* shipped anymore, see #372 for details.\n\n## Bugfixes\n\n- Avoid endless recursion when `PAGER=\"bat\"`, see #383 (@rodorgas)\n\n## Other\n\n- `bat` is now available on openSUSE, see #405 (@dmarcoux)\n\n- Added section about the new configuration file in the README (@deg4uss3r)\n\n- Chinese translation of README (@chinanf-boy)\n\n- Re-written tests for `--tabs` (@choznerol)\n\n- Speed up integration tests, see #394\n\n# v0.8.0\n\n## Features\n\n- Support for a configuration file with the following simple format:\n\n  ```bash\n  --tabs=4\n  --theme=\"Sublime Snazzy\"\n\n  # A line-comment\n  --map-syntax .ignore:.gitignore\n  --map-syntax PKGBUILD:bash\n  --map-syntax Podfile:ruby\n\n  # Flags and options can also be on a single line:\n  --wrap=never --paging=never\n  ```\n\n  The configuration file path can be accessed via `bat --config-file`. On Linux,\n  it is stored in `~/.config/bat/config`.\n\n- Support for the `BAT_OPTS` environment variable with the same format as specified\n  above (in a single line). This takes precedence over the configuration file.\n\n  See also #310.\n\n- Support for custom syntax mappings via the `-m`/`--max-syntax` option.\n\n  This allows users to (re)map certain file extensions or file names to an existing syntax:\n\n  ``` bash\n  bat --map-syntax .config:json ...\n  ```\n\n  The option can be use multiple times. Note that you can easily make these mappings permanent by using bats new configuration file.\n\n  See #169\n\n- Support pager command-line arguments in `PAGER` and `BAT_PAGER`, see #352 (@Foxboron)\n\n- Add support for wildcards in Windows CMD, see #309 (@zxey)\n\n- First-line syntax detection for all input types, see #205\n\n- Encoding support for UTF-16LE and UTF-16BE, see #285\n\n- New syntaxes: Robot framework (@sanga)\n\n## Changes\n\n- Binary files are now detected and not displayed when the output goes to an interactive terminal, see #205\n\n## Bugfixes\n\n- JavaDoc comments break syntax highlighting in .java files, see #81\n\n- Bat Panics on Haskell Source Code, see #314\n\n## Other\n\n- Better `-h` and `--help` texts.\n\n- Updated documentation on how to configure `bat`s pager\n\n- Updated documentation for light backgrounds, see #328 (@russtaylor)\n\n- Generate shell completions during build, see #115 (@davideGiovannini)\n\n- A lot of new tests have been written\n\n- `bat` is now available via [Termux](https://termux.com/), see #341 (@fornwall)\n\n- `bat` is now available via [nix](https://nixos.org/nix), see #344 (@mgttlinger)\n\n- `bat` is now available via [Docker](https://hub.docker.com/r/danlynn/bat/), see #331 (@danlynn)\n\n# v0.7.1\n\n## Features\n\n- Use the `ansi_colours` package by @mina86 for better true-color approximation on 8 bit color terminals, see #319 and #202.\n\n## Bugfixes\n\n- Bat Panics on Haskell Source Code, see #314\n- Disable wrapping when `--style=plain`/`-p` is used, see #289\n\n## Other\n\n- Added Ansible install instructions (@aeimer)\n- Added section about Cygwin to the README (@eth-p)\n\n# v0.7.0\n\n## Features\n\n- Tabs are now (optionally) expanded to spaces. This can be controlled with the new\n  `--tabs` command-line option or the `BAT_TABS` environment variable. The\n  new feature also closes two bugs #166 and #184. For more information, see #302 (@eth-p).\n\n- Added support for the `BAT_STYLE` environment variable, see #208 (@ms2300)\n\n- Added `OneHalf` theme for terminals with a light-gray background, see #256\n\n- Added new syntaxes for CSV, JSX in JavaScript and TypeScript, Cabal, Dart,\n  F#, PureScript, Swift, Crystal, PowerShell (Many Thanks to @tobenna and @mimadrid)\n\n## Changes\n\n- Query `git diff` only when needed, see #303 (@ShikChen)\n\n- Disable wrapping when `--plain` is used, see #289 (@eth-p)\n\n## Bugfixes\n\n- Can read files named `cache`, see #275 (@BK1603)\n\n- A lot of bugfixes for Windows, see #252, #264\n\n- Detect `less` reliably and in a portable way, see #271 and #290 (@Aankhen)\n\n- last decoration line is not formatted properly with `--wrap never`, see #299 (@Rogach)\n\n- Do not show file header for directories, see #292\n\n## Other\n\n- Enabled a new `aarch64` build target, see #258 (@rachitchokshi)\n\n- Provide Debian packages for `armhf`, see #280 (@rachitchokshi)\n\n- Added README section about \"`bat` on Windows\" (@Aankhen)\n\n- Windows installation via scoop (@meltinglava)\n\n# v0.6.1\n\n## Bugfixes\n\n- Fixed panic when running `bat --list-languages | head`, see #232 (@mchlrhw)\n- Respect `--color` settings for `--list-themes` and `--list-languages`, see #233\n- Git modifications now work on Windows\n\n## Other\n\n- There will be auto-generated Windows releases, starting with this version (@anykao)\n\n# v0.6.0\n\n## Features\n\n- The `--list-themes` option now shows a preview for each highlighting theme (@ms2300)\n- Added `-p`/`--plain` as an alias for `--style=plain`, see #212 (@ms2300)\n- Major refactorings, enabling some progress on #150. In non-interactive mode, `bat` will now copy input bytes 1:1.\n- New languages: Elm, Kotlin, Puppet, TypeScript, see #215 #216 #217 #218\n- New syntax highlighting theme: zenburn (@colindean)\n\n## Changes\n\n- New themes in `$BAT_CONFIG_DIR/themes` are now loaded *in addition* to\n  the default themes (they may also override), see #172\n- The `Default.tmTheme` symlink is not necessary anymore.\n\n## Bugfixes\n\n* Using `bat cache --init` leads to duplicated syntaxes, see #206\n\n## Other\n\n* Extended and cleaned-up `--help` text.\n* Added initial version of a man page, see #52\n* New README sections: *Development* and *Troubleshooting*, see #220\n\n# v0.5.0\n\n## Features\n\n- Added `--line-range n:m` option to print a range of lines, see #159 (@tskinn)\n- The syntax highlighting theme can now be controlled by the `BAT_THEME` environment variable, see [README](https://github.com/sharkdp/bat#highlighting-theme) and #177 (@mandx)\n- The `PAGER` and `BAT_PAGER` environment variables can be used to control the pager that `bat` uses, see #158 and the [new README section](https://github.com/sharkdp/bat#using-a-different-pager)\n- Added syntax highlighting for Nix, see #180\n- Added syntax highlighting for AWK (Gert Hulselmans)\n\n## Changes\n\n- The customization of syntax sets and theme sets is now separated. Syntax definitions are now loaded *in addition* to the ones that are stored in the `bat` binary by default. Please refer to these new sections in the README: [Adding new syntaxes](https://github.com/sharkdp/bat#adding-new-syntaxes--language-definitions), [Adding new themes](https://github.com/sharkdp/bat#adding-new-themes), also see #172\n- The color for the filename is now the default foreground color. The colors for the grid and the line numbers is now determined from the syntax highlighting theme, which now also works for light backgrounds, see #178.\n\n## Bugfixes\n\n- Escape Sequences get partially stripped, see #182 (@eth-p)\n- Use separate Git repository for snapshot testing, see #165 and #161\n- Markdown breaking on JavaScript, see #183\n\n## Other\n\n- Binaries for armv7 are now provided, see #196\n- `bat` is now in the official [Arch package repositories](https://www.archlinux.org/packages/community/x86_64/bat/).\n- Optimizations in the RGB => 8-bit conversion (@mina86)\n\n# v0.4.1\n\n(this is just a small bugfix release, see 0.4.0 for all features and changes)\n\n## Bugfixes\n\n- Fix problem with `cargo test` when `bat` is not checked out in a Git repository, see #161\n\n# v0.4.0\n\n## Features\n\n* Support for line-wrapping, see #54 and #102 (@eth-p)\n* New and updated `--style` parameter, see #74 and README (@pitkley)\n* Added `--theme` and `--list-themes` options, see #89 (@rleungx)\n* Added syntax highlighting for: Julia (@iamed2), Dockerfiles, VimL, CMake, INI, Less\n* Added a few popular Sublime Text highlighting themes, see #133\n* Support for bold, italic and underline font styles, see #96\n* Support for 32bit systems is now available, see #84\n* Added `-u` and `-n` options, see #134\n* ANSI color support on Windows 10\n\n## Changes\n\n* The customization folder for own syntaxes has been renamed from `syntax` to `syntaxes`, see README.\n* Changed Markdown syntax to the default Sublime Text syntax, see #157\n* Sorted language listing (@rleungx)\n* Command line arguments like `--theme` or `--color` can now override themselves.\n* Improved `--help` text.\n\n## Bugfixes\n\n- Fixed crash for (really) small terminal sizes, see #117 (@eth-p)\n- Syntax detection for `.bashrc`, `CMakeLists.txt` etc., see #100\n- Properly handle lines with invalid UTF-8, see #7 (@BrainMaestro)\n- Better error handling, see #17 (@rleungx and @sharkdp)\n- Proper handling of UTF-8 characters in `less`, see #98 (@ghuls)\n- Build fix on nightly, see #148 (@tathanhdinh)\n\n## Other\n\n- [Comparison with alternative projects](https://github.com/sharkdp/bat/blob/master/doc/alternatives.md).\n- New \"bat\" logo in the README, see #119 (@jraulhernandezi)\n- Output test cases (@BrainMaestro)\n- Lots of great refactoring work (@BrainMaestro)\n\n# v0.3.0\n\n## Features\n\n* Automatic paging by integrating with `less`, see #29 (@BrainMaestro)\n* Added support for reading from standard input, see #2\n* Added support for writing to non-interactive terminals (pipes, files, ..); new\n  `--color=auto/always/never` option, see #26 (@BrainMaestro)\n* Added `--list-languages` option to print all available syntaxes, see #69 (@connorkuehl)\n* New option to specify the syntax via `-l`/`--language`, see #19 (@BrainMaestro)\n* New option to control the output style (`--style`), see #5 (@nakulcg)\n* Added syntax highlighting support for TOML files, see #37\n\n## Changes\n\n* The `init-cache` sub-command has been removed. The cache can now be controlled via\n  `bat cache`. See `bat cache -h` for all available commands.\n\n## Bug fixes\n\n* Get git repository from file path instead of current directory, see #22 (@nakulcg)\n* Process substitution can now be used with bat (`bat <(echo a) <(echo b)`), see #80\n\n## Thanks\n\nI'd like to say a big THANK YOU to all contributors and everyone that has given us\nsome form of feedback.\n\nSpecial thanks go to @BrainMaestro for his huge support with new features, bug reports\nand code reviews!\n\n# v0.2.3\n\n- Added a new statically linked version of bat (`..-musl-..`)\n\n# v0.2.2\n\n- Remove openssl dependency completely, see #30.\n\n# v0.2.1\n\n- Added Elixir syntax, see #25.\n- Use libcurl-openssl instead of libcurl-gnutls, see #30.\n\n# v0.2.0\n\n- Support for custom syntaxes, add 'Markdown extended' theme\n- Bugfix: Git modifications not shown from child folder\n\n# v0.1.0\n\nInitial release\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributing\n\nThank you for considering to contribute to `bat`!\n\n\n\n## Add an entry to the changelog\n\nKeeping the [`CHANGELOG.md`](CHANGELOG.md) file up-to-date makes the release\nprocess much easier and therefore helps to get your changes into a new `bat`\nrelease faster. However, not every change to the repository requires a\nchangelog entry. Below are a few examples of that.\n\nPlease update the changelog if your contribution contains changes regarding\nany of the following:\n  - the behavior of `bat`\n  - syntax mappings\n  - syntax definitions\n  - themes\n  - the build system, linting, or CI workflows\n\nA changelog entry is not necessary when:\n  - updating documentation\n  - fixing typos\n\n>[!NOTE]\n> For PRs, a CI workflow verifies that a suitable changelog entry is\n> added. If such an entry is missing, the workflow will fail. If your\n> changes do not need an entry to the changelog (see above), that\n> workflow failure can be disregarded.\n\n\n### Changelog entry format\n\nThe top of the `CHANGELOG` contains a *\"unreleased\"* section with a few\nsubsections (Features, Bugfixes, …). Please add your entry to the subsection\nthat best describes your change.\n\nEntries must follow this format:\n```\n- Short description of what has been changed, see #123 (@user)\n```\nPlease replace `#123` with the number of your pull request (not issue) and\n`@user` by your GitHub username.\n\n\n## Development\n\nPlease check out the [Development](https://github.com/sharkdp/bat#development)\nsection in the README.\n\n\n## Adding a new feature\n\nPlease consider opening a\n[feature request ticket](https://github.com/sharkdp/bat/issues/new?assignees=&labels=feature-request&template=feature_request.md)\nfirst in order to give us a chance to discuss the details and specifics of the potential new feature before you go and build it.\n\n\n## Adding new syntaxes/languages or themes\n\nBefore you make a pull request that adds a new syntax or theme, please read\nthe [Customization](https://github.com/sharkdp/bat#customization) section\nin the README first.\n\nIf you really think that a particular syntax should be added for all\nusers, please read the corresponding\n[documentation](https://github.com/sharkdp/bat/blob/master/doc/assets.md)\nfirst.\n\nTo map a file name pattern to an existing syntax, read [the documentation here](https://github.com/sharkdp/bat/blob/master/src/syntax_mapping/builtins/README.md).\n\nNote: We are currently not accepting new default themes.\n\n\n## Regression tests\n\nYou are **strongly encouraged** to add regression tests. Regression tests are great,\nnot least because they:\n\n* ensure that your contribution will never completely stop working.\n\n* makes code reviews easier, because it becomes very clear what the code is\n  supposed to do.\n\nFor functional changes, you most likely want to add a test to\n[`tests/integration_tests.rs`](https://github.com/sharkdp/bat/blob/master/tests/integration_tests.rs).\nLook at existing tests to know how to write a new test. In short, you will\ninvoke the `bat` binary with a certain set of arguments, and then assert on\nstdout/stderr.\n\nTo learn how to write regression tests for theme and syntax changes, read the\n[Syntax\ntests](https://github.com/sharkdp/bat/blob/master/doc/assets.md#syntax-tests)\nsection in `assets.md`.\n\n### Ensuring bat is available for Syntax tests\n\nThe syntax test script (`tests/syntax-tests/update.sh`) calls `bat` from your PATH and regenerates the highlighted output files under\n`tests/syntax-tests/highlighted/`. These files are used to verify that syntax highlighting works as expected.\n\n- If you only built the binaries with:\n  ```bash\n  cargo build --bins\n  ```\n\n  you need to add the debug build to your PATH from the bat project root before running the tests.\n  See also step 5 in [Syntax\ntests](https://github.com/sharkdp/bat/blob/master/doc/assets.md#syntax-tests) for related instructions.\n  ```bash\n  export PATH=\"$PATH:$(pwd)/target/debug\"\n  ```\n  Otherwise, you will see:\n  ```bash\n  Error: Could not execute 'bat'. Please make sure that the executable is available on the PATH.\n  ```\n- If you installed bat with:\n  ```bash\n  cargo install --path . --locked\n  ```\n  then bat will be available in ~/.cargo/bin (usually already in PATH), and the tests will run without issues."
  },
  {
    "path": "Cargo.toml",
    "content": "[package]\nauthors = [\"David Peter <mail@david-peter.de>\"]\ncategories = [\"command-line-utilities\"]\ndescription = \"A cat(1) clone with wings.\"\nhomepage = \"https://github.com/sharkdp/bat\"\nlicense = \"MIT OR Apache-2.0\"\nname = \"bat\"\nrepository = \"https://github.com/sharkdp/bat\"\nversion = \"0.26.1\"\nexclude = [\"assets/syntaxes/*\", \"assets/themes/*\"]\nbuild = \"build/main.rs\"\nedition = '2021'\n# You are free to bump MSRV as soon as a reason for bumping emerges.\nrust-version = \"1.88\"\n\n[features]\ndefault = [\"application\", \"git\"]\n# Feature required for bat the application. Should be disabled when depending on\n# bat as a library.\napplication = [\n    \"bugreport\",\n    \"build-assets\",\n    \"minimal-application\",\n]\n# Mainly for developers that want to iterate quickly\n# Be aware that the included features might change in the future\nminimal-application = [\n    \"clap\",\n    \"etcetera\",\n    \"paging\",\n    \"regex-onig\",\n    \"wild\",\n]\ngit = [\"git2\"] # Support indicating git modifications\nvendored-libgit2 = [\"git2/vendored-libgit2\"]\npaging = [ \"shell-words\", \"grep-cli\", \"minus\"] # Support applying a pager on the output\nlessopen = [\"execute\"] # Support $LESSOPEN preprocessor\nbuild-assets = [\"syntect/yaml-load\", \"syntect/plist-load\", \"regex\", \"walkdir\"]\n\n# You need to use one of these if you depend on bat as a library:\nregex-onig = [\"syntect/regex-onig\"] # Use the \"oniguruma\" regex engine\nregex-fancy = [\"syntect/regex-fancy\"] # Use the rust-only \"fancy-regex\" engine\n\n[dependencies]\nnu-ansi-term = \"0.50.3\"\nansi_colours = \"^1.2\"\nbincode = \"1.0\"\nconsole = \"0.16.2\"\nflate2 = \"1.1\"\nonce_cell = \"1.20\"\nthiserror = \"2.0\"\nwild = { version = \"2.2\", optional = true }\ncontent_inspector = \"0.2.4\"\nshell-words = { version = \"1.1.1\", optional = true }\nminus = { version = \"5.6\", optional = true, features = [\n  \"dynamic_output\",\n  \"search\",\n] }\nunicode-width = \"0.2.1\"\nglobset = \"0.4\"\nserde = \"1.0\"\nserde_derive = \"1.0\"\nserde_yaml = \"0.9.28\"\nsemver = \"1.0\"\npath_abs = { version = \"0.5\", default-features = false }\nclircle = { version = \"0.6.1\", default-features = false }\nbugreport = { version = \"0.5.0\", optional = true }\netcetera = { version = \"0.11.0\", optional = true }\ngrep-cli = { version = \"0.1.12\", optional = true }\nregex = { version = \"1.12.2\", optional = true }\nwalkdir = { version = \"2.5\", optional = true }\nbytesize = { version = \"2.3.1\" }\nencoding_rs = \"0.8.35\"\nexecute = { version = \"0.2.15\", optional = true }\nterminal-colorsaurus = \"1.0\"\nunicode-segmentation = \"1.12.0\"\nitertools = \"0.14.0\"\n\n[dependencies.git2]\nversion = \"0.20\"\noptional = true\ndefault-features = false\n\n[dependencies.syntect]\nversion = \"5.3.0\"\ndefault-features = false\nfeatures = [\"parsing\"]\n\n[dependencies.clap]\nversion = \"4.5.60\"\noptional = true\nfeatures = [\"wrap_help\", \"cargo\"]\n\n[target.'cfg(target_os = \"macos\")'.dependencies]\nplist = \"1.7.0\"\n\n[dev-dependencies]\nassert_cmd = \"2.0.16\"\nexpect-test = \"1.5.0\"\nserial_test = { version = \"2.0.0\", default-features = false }\npredicates = \"3.1.3\"\nwait-timeout = \"0.2.1\"\ntempfile = \"3.23.0\"\nserde = { version = \"1.0\", features = [\"derive\"] }\n\n[target.'cfg(unix)'.dev-dependencies]\nnix = { version = \"0.31\", default-features = false, features = [\"term\"] }\n\n[build-dependencies]\nanyhow = \"1.0.97\"\nindexmap = { version = \"2.13.0\", features = [\"serde\"] }\nitertools = \"0.14.0\"\nonce_cell = \"1.20\"\nprettyplease = \"0.2.37\"\nproc-macro2 = \"1.0.106\"\nquote = \"1.0.40\"\nregex = \"1.12.2\"\nserde = \"1.0\"\nserde_derive = \"1.0\"\nserde_with = { version = \"3.17.0\", default-features = false, features = [\"macros\"] }\nsyn = { version = \"2.0.104\", features = [\"full\"] }\ntoml = { version = \"0.9.8\", features = [\"preserve_order\"] }\nwalkdir = \"2.5\"\n\n[build-dependencies.clap]\nversion = \"4.5.60\"\noptional = true\nfeatures = [\"wrap_help\", \"cargo\"]\n\n[profile.release]\nlto = true\nstrip = true\ncodegen-units = 1\n"
  },
  {
    "path": "LICENSE-APACHE",
    "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"
  },
  {
    "path": "LICENSE-MIT",
    "content": "Copyright (c) 2018-2023 bat-developers (https://github.com/sharkdp/bat).\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "NOTICE",
    "content": "Copyright (c) 2018-2021 bat-developers (https://github.com/sharkdp/bat).\n\nbat is made available under the terms of either the MIT License or the Apache\nLicense 2.0, at your option.\n\nSee the LICENSE-APACHE and LICENSE-MIT files for license details.\n"
  },
  {
    "path": "README.md",
    "content": "<p align=\"center\">\n  <img src=\"doc/logo-header.svg\" alt=\"bat - a cat clone with wings\"><br>\n  <a href=\"https://github.com/sharkdp/bat/actions?query=workflow%3ACICD\"><img src=\"https://github.com/sharkdp/bat/workflows/CICD/badge.svg\" alt=\"Build Status\"></a>\n  <img src=\"https://img.shields.io/crates/l/bat.svg\" alt=\"license\">\n  <a href=\"https://crates.io/crates/bat\"><img src=\"https://img.shields.io/crates/v/bat.svg?colorB=319e8c\" alt=\"Version info\"></a><br>\n  A <i>cat(1)</i> clone with syntax highlighting and Git integration.\n</p>\n\n<p align=\"center\">\n  <a href=\"#syntax-highlighting\">Key Features</a> •\n  <a href=\"#how-to-use\">How To Use</a> •\n  <a href=\"#installation\">Installation</a> •\n  <a href=\"#customization\">Customization</a> •\n  <a href=\"#project-goals-and-alternatives\">Project goals, alternatives</a><br>\n  [English]\n  [<a href=\"doc/README-zh.md\">中文</a>]\n  [<a href=\"doc/README-ja.md\">日本語</a>]\n  [<a href=\"doc/README-ko.md\">한국어</a>]\n  [<a href=\"doc/README-ru.md\">Русский</a>]\n</p>\n\n### Sponsors\n\nA special *thank you* goes to our biggest <a href=\"doc/sponsors.md\">sponsors</a>:<br>\n\n<p>\n<a href=\"https://www.warp.dev/bat\">\n  <img src=\"doc/sponsors/warp-logo.png\" width=\"200\" alt=\"Warp\">\n  <br>\n  <strong>Warp, the intelligent terminal</strong>\n  <br>\n  <sub>Available on MacOS, Linux, Windows</sub>\n</a>\n</p>\n\n### Syntax highlighting\n\n`bat` supports syntax highlighting for a large number of programming and markup\nlanguages:\n\n![Syntax highlighting example](https://imgur.com/rGsdnDe.png)\n\n### Git integration\n\n`bat` communicates with `git` to show modifications with respect to the index\n(see left sidebar):\n\n![Git integration example](https://i.imgur.com/2lSW4RE.png)\n\n### Show non-printable characters\n\nYou can use the `-A`/`--show-all` option to show and highlight non-printable\ncharacters:\n\n![Non-printable character example](https://i.imgur.com/WndGp9H.png)\n\n### Automatic paging\n\nBy default, `bat` pipes its own output to a pager (e.g. `less`) if the output is too large for one screen.\nIf you would rather `bat` work like `cat` all the time (never page output), you can set `--paging=never` as an option, either on the command line or in your configuration file.\nIf you intend to alias `cat` to `bat` in your shell configuration, you can use `alias cat='bat --paging=never'` to preserve the default behavior.\n\n#### File concatenation\n\nEven with a pager set, you can still use `bat` to concatenate files :wink:.\nWhenever `bat` detects a non-interactive terminal (i.e. when you pipe into another process or into a file), `bat` will act as a drop-in replacement for `cat` and fall back to printing the plain file contents, regardless of the `--pager` option's value.\n\n## How to use\n\nDisplay a single file on the terminal\n\n```bash\nbat README.md\n```\n\nDisplay multiple files at once\n\n```bash\nbat src/*.rs\n```\n\nRead from stdin, determine the syntax automatically (note, highlighting will\nonly work if the syntax can be determined from the first line of the file,\nusually through a shebang such as `#!/bin/sh`)\n\n```bash\ncurl -s https://sh.rustup.rs | bat\n```\n\nRead from stdin, specify the language explicitly\n\n```bash\nyaml2json .travis.yml | json_pp | bat -l json\n```\n\nShow and highlight non-printable characters:\n```bash\nbat -A /etc/hosts\n```\n\nUse it as a `cat` replacement:\n\n```bash\nbat > note.md  # quickly create a new file\n\nbat header.md content.md footer.md > document.md\n\nbat -n main.rs  # show line numbers (only)\n\nbat f - g  # output 'f', then stdin, then 'g'.\n```\n\n### Integration with other tools\n\n#### `fzf`\n\nYou can use `bat` as a previewer for [`fzf`](https://github.com/junegunn/fzf). To do this,\nuse `bat`'s `--color=always` option to force colorized output. You can also use `--line-range`\noption to restrict the load times for long files:\n\n```bash\nfzf --preview \"bat --color=always --style=numbers --line-range=:500 {}\"\n```\n\nFor more information, see [`fzf`'s `README`](https://github.com/junegunn/fzf#preview-window).\n\n#### `find` or `fd`\n\nYou can use the `-exec` option of `find` to preview all search results with `bat`:\n\n```bash\nfind … -exec bat {} +\n```\n\nIf you happen to use [`fd`](https://github.com/sharkdp/fd), you can use the `-X`/`--exec-batch` option to do the same:\n\n```bash\nfd … -X bat\n```\n\n#### `ripgrep`\n\nWith [`batgrep`](https://github.com/eth-p/bat-extras/blob/master/doc/batgrep.md), `bat` can be used as the printer for [`ripgrep`](https://github.com/BurntSushi/ripgrep) search results.\n\n```bash\nbatgrep needle src/\n```\n\n#### `tail -f`\n\n`bat` can be combined with `tail -f` to continuously monitor a given file with syntax highlighting.\n\n```bash\ntail -f /var/log/pacman.log | bat --paging=never -l log\n```\n\nNote that we have to switch off paging in order for this to work. We have also specified the syntax\nexplicitly (`-l log`), as it can not be auto-detected in this case.\n\n#### `git`\n\nYou can combine `bat` with `git show` to view an older version of a given file with proper syntax\nhighlighting:\n\n```bash\ngit show v0.6.0:src/main.rs | bat -l rs\n```\n\n#### `git diff`\n\nYou can combine `bat` with `git diff` to view lines around code changes with proper syntax\nhighlighting:\n```bash\nbatdiff() {\n    git diff --name-only --relative --diff-filter=d -z | xargs -0 bat --diff\n}\n```\nIf you prefer to use this as a separate tool, check out `batdiff` in [`bat-extras`](https://github.com/eth-p/bat-extras).\n\nIf you are looking for more support for git and diff operations, check out [`delta`](https://github.com/dandavison/delta).\n\n#### `xclip`\n\nThe line numbers and Git modification markers in the output of `bat` can make it hard to copy\nthe contents of a file. To prevent this, you can call `bat` with the `-p`/`--plain` option or\nsimply pipe the output into `xclip`:\n```bash\nbat main.cpp | xclip\n```\n`bat` will detect that the output is being redirected and print the plain file contents.\n\n#### `man`\n\n`bat` can be used as a colorizing pager for `man`, by setting the\n`MANPAGER` environment variable:\n\n```bash\nexport MANPAGER=\"bat -plman\"\nman 2 select\n```\n(on some older Debian or Ubuntu releases, the executable is named `batcat` instead of `bat`)\n\nIf you prefer to have this bundled in a new command, you can also use [`batman`](https://github.com/eth-p/bat-extras/blob/master/doc/batman.md).\n\nNote that the [Manpage syntax](assets/syntaxes/02_Extra/Manpage.sublime-syntax) is developed in this repository and still needs some work.\n\n#### `prettier` / `shfmt` / `rustfmt`\n\nThe [`prettybat`](https://github.com/eth-p/bat-extras/blob/master/doc/prettybat.md) script is a wrapper that will format code and print it with `bat`.\n\n#### `Warp`\n\n<a href=\"https://app.warp.dev/drive/folder/-Bat-Warp-Pack-lxhe7HrEwgwpG17mvrFSz1\">\n  <img src=\"doc/sponsors/warp-pack-header.png\" alt=\"Warp\">\n</a>\n\n#### Highlighting `--help` messages\n\nYou can use `bat` to colorize help text: `$ cp --help | bat -plhelp`\n\nYou can also use a wrapper around this:\n\n```bash\n# in your .bashrc/.zshrc/*rc\nalias bathelp='bat --plain --language=help'\nhelp() {\n    \"$@\" --help 2>&1 | bathelp\n}\n```\n\nThen you can do `$ help cp` or `$ help git commit`.\n\nWhen you are using `zsh`, you can also use global aliases to override `-h` and `--help` entirely:\n\n```bash\nalias -g -- -h='-h 2>&1 | bat --language=help --style=plain'\nalias -g -- --help='--help 2>&1 | bat --language=help --style=plain'\n```\n\nFor `fish`, you can use abbreviations:\n\n```fish\nabbr -a --position anywhere -- --help '--help | bat -plhelp'\nabbr -a --position anywhere -- -h '-h | bat -plhelp'\n```\n\nThis way, you can keep on using `cp --help`, but get colorized help pages.\n\nBe aware that in some cases, `-h` may not be a shorthand of `--help` (for example with `ls`). In cases where you need to use `-h` \nas a command argument you can prepend `\\` to the argument (eg. `ls \\-h`) to escape the aliasing defined above. \n\nPlease report any issues with the help syntax in [this repository](https://github.com/victor-gp/cmd-help-sublime-syntax).\n\n\n## Installation\n\n<!--\n\nInstallation instructions need to:\n* be for widely used systems\n* be non-obvious\n* be from somewhat official sources\n\n-->\n\n[![Packaging status](https://repology.org/badge/vertical-allrepos/bat-cat.svg?columns=3&exclude_unsupported=1)](https://repology.org/project/bat-cat/versions)\n\n### On Ubuntu (using `apt`)\n*... and other Debian-based Linux distributions.*\n\n`bat` is available on [Ubuntu since 20.04 (\"Focal\")](https://packages.ubuntu.com/search?keywords=bat&exact=1) and [Debian since August 2021 (Debian 11 - \"Bullseye\")](https://packages.debian.org/bullseye/bat).\n\nIf your Ubuntu/Debian installation is new enough you can simply run:\n\n```bash\nsudo apt install bat\n```\n\n**Important**: On some older Ubuntu/Debian releases, the executable is installed as `batcat` instead of `bat` (due to [a name\nclash with another package](https://github.com/sharkdp/bat/issues/982)). On newer releases, the executable is available as `bat`. If `bat --version` does not work after installation, try `batcat --version` instead. You can set up a `bat -> batcat` symlink or alias to prevent any issues that may come up because of this and to be consistent with other distributions:\n``` bash\nmkdir -p ~/.local/bin\nln -s /usr/bin/batcat ~/.local/bin/bat\n```\n\nan example alias for `batcat` as `bat`:\n```bash\nalias bat=\"batcat\"\n```\n\n### On Ubuntu (using most recent `.deb` packages)\n*... and other Debian-based Linux distributions.*\n\nIf the package has not yet been promoted to your Ubuntu/Debian installation, or you want\nthe most recent release of `bat`, download the latest `.deb` package from the\n[release page](https://github.com/sharkdp/bat/releases) and install it via:\n\n```bash\nsudo dpkg -i bat_0.18.3_amd64.deb  # adapt version number and architecture\n```\n\n### On Alpine Linux\n\nYou can install [the `bat` package](https://pkgs.alpinelinux.org/packages?name=bat)\nfrom the official sources, provided you have the appropriate repository enabled:\n\n```bash\napk add bat\n```\n\n### On Arch Linux\n\nYou can install [the `bat` package](https://www.archlinux.org/packages/extra/x86_64/bat/)\nfrom the official sources:\n\n```bash\npacman -S bat\n```\n\n### On Fedora\n\nYou can install [the `bat` package](https://koji.fedoraproject.org/koji/packageinfo?packageID=27506) from the official [Fedora Modular](https://docs.fedoraproject.org/en-US/modularity/using-modules/) repository.\n\n```bash\ndnf install bat\n```\n\n### On Gentoo Linux\n\nYou can install [the `bat` package](https://packages.gentoo.org/packages/sys-apps/bat)\nfrom the official sources:\n\n```bash\nemerge sys-apps/bat\n```\n\n### On FreeBSD\n\nYou can install a precompiled [`bat` package](https://www.freshports.org/textproc/bat) with pkg:\n\n```bash\npkg install bat\n```\n\nor build it on your own from the FreeBSD ports:\n\n```bash\ncd /usr/ports/textproc/bat\nmake install\n```\n\n### On OpenBSD\n\nYou can install `bat` package using [`pkg_add(1)`](https://man.openbsd.org/pkg_add.1):\n\n```bash\npkg_add bat\n```\n\n### Via nix\n\nYou can install `bat` using the [nix package manager](https://nixos.org/nix):\n\n```bash\nnix-env -i bat\n```\n\n### On openSUSE\n\nYou can install `bat` with zypper:\n\n```bash\nzypper install bat\n```\n\n### Via snap package\n\nThere is currently no recommended snap package available.\nExisting packages may be available, but are not officially supported and may contain [issues](https://github.com/sharkdp/bat/issues/1519).\n\n### On macOS (or Linux) via Homebrew\n\nYou can install `bat` with [Homebrew](https://formulae.brew.sh/formula/bat):\n\n```bash\nbrew install bat\n```\n\n### On macOS via MacPorts\n\nOr install `bat` with [MacPorts](https://ports.macports.org/port/bat/summary):\n\n```bash\nport install bat\n```\n\n### On Windows\n\nThere are a few options to install `bat` on Windows. Once you have installed `bat`,\ntake a look at the [\"Using `bat` on Windows\"](#using-bat-on-windows) section.\n\n#### Prerequisites\n\nYou will need to install the [Visual C++ Redistributable](https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist#latest-microsoft-visual-c-redistributable-version)\n\n#### With WinGet\n\nYou can install `bat` via [WinGet](https://learn.microsoft.com/en-us/windows/package-manager/winget):\n\n```bash\nwinget install sharkdp.bat\n```\n\n#### With Chocolatey\n\nYou can install `bat` via [Chocolatey](https://chocolatey.org/packages/Bat):\n```bash\nchoco install bat\n```\n\n#### With Scoop\n\nYou can install `bat` via [scoop](https://scoop.sh/):\n```bash\nscoop install bat\n```\n\n#### From prebuilt binaries:\n\nYou can download prebuilt binaries from the [Release page](https://github.com/sharkdp/bat/releases),\n\nYou will need to install the [Visual C++ Redistributable](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads) package.\n\n### From binaries\n\nCheck out the [Release page](https://github.com/sharkdp/bat/releases) for\nprebuilt versions of `bat` for many different architectures. Statically-linked\nbinaries are also available: look for archives with `musl` in the file name.\n\n### From source\n\nIf you want to build `bat` from source, you need Rust 1.79.0 or\nhigher. You can then use `cargo` to build everything:\n\n#### From local source\n```bash\ncargo install --path . --locked\n```\n> [!NOTE]\n> The `--path .` above specifies the directory of the source code and NOT where `bat` will be installed.\n> For more information see the docs for [`cargo install`](https://doc.rust-lang.org/cargo/commands/cargo-install.html).\n\n#### From `crates.io`\n```bash\ncargo install --locked bat\n```\n\nNote that additional files like the man page or shell completion\nfiles can not be installed automatically in both these ways.\nIf installing from a local source, they will be generated by `cargo`\nand should be available in the cargo target folder under `build`.\n\nFurthermore, shell completions are also available by running:\n```bash\nbat --completion <shell>\n# see --help for supported shells\n```\n\n## Customization\n\n### Highlighting theme\n\nUse `bat --list-themes` to get a list of all available themes for syntax\nhighlighting. By default, `bat` uses `Monokai Extended` or `Monokai Extended Light`\nfor dark and light themes respectively. To select the `TwoDark` theme, call `bat`\nwith the `--theme=TwoDark` option or set the `BAT_THEME` environment variable to\n`TwoDark`. Use `export BAT_THEME=\"TwoDark\"` in your shell's startup file to\nmake the change permanent. Alternatively, use `bat`'s\n[configuration file](#configuration-file).\n\nIf you want to preview the different themes on a custom file, you can use\nthe following command (you need [`fzf`](https://github.com/junegunn/fzf) for this):\n```bash\nbat --list-themes | fzf --preview=\"bat --theme={} --color=always /path/to/file\"\n```\n\n`bat` automatically picks a fitting theme depending on your terminal's background color.\nYou can use the `--theme-dark` / `--theme-light` options or the `BAT_THEME_DARK` / `BAT_THEME_LIGHT` environment variables\nto customize the themes used. This is especially useful if you frequently switch between dark and light mode.\n\nYou can also use a custom theme by following the\n['Adding new themes' section below](#adding-new-themes).\n\n### 8-bit themes\n\n`bat` has three themes that always use [8-bit colors](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors),\neven when truecolor support is available:\n\n- `ansi` looks decent on any terminal. It uses 3-bit colors: black, red, green,\n  yellow, blue, magenta, cyan, and white.\n- `base16` is designed for [base16](https://github.com/tinted-theming/home) terminal themes. It uses\n  4-bit colors (3-bit colors plus bright variants) in accordance with the\n  [base16 styling guidelines](https://github.com/tinted-theming/home/blob/main/styling.md).\n- `base16-256` is designed for [tinted-shell](https://github.com/tinted-theming/tinted-shell).\n  It replaces certain bright colors with 8-bit colors from 16 to 21. **Do not** use this simply\n  because you have a 256-color terminal but are not using tinted-shell.\n\nAlthough these themes are more restricted, they have three advantages over truecolor themes. They:\n\n- Enjoy maximum compatibility. Some terminal utilities do not support more than 3-bit colors.\n- Adapt to terminal theme changes. Even for already printed output.\n- Visually harmonize better with other terminal software.\n\n### Output style\n\nYou can use the `--style` option to control the appearance of `bat`'s output.\nYou can use `--style=numbers,changes`, for example, to show only Git changes\nand line numbers but no grid and no file header. Set the `BAT_STYLE` environment\nvariable to make these changes permanent or use `bat`'s\n[configuration file](#configuration-file).\n\n>[!tip]\n> If you specify a default style in `bat`'s config file, you can change which components\n> are displayed during a single run of `bat` using the `--style` command-line argument.\n> By prefixing a component with `+` or `-`, it can be added or removed from the current style.\n>\n> For example, if your config contains `--style=full,-snip`, you can run bat with\n> `--style=-grid,+snip` to remove the grid and add back the `snip` component.\n> Or, if you want to override the styles completely, you use `--style=numbers` to\n> only show the line numbers.\n\n### Decorations\n\nBy default, `bat` only shows decorations (such as line numbers, file headers, grid borders, etc.) when outputting to an interactive terminal. You can control this behavior with the `--decorations` option. Use `--decorations=always` to show decorations even when piping output to another command, or `--decorations=never` to disable them entirely. Possible values are `auto` (default), `never`, and `always`.\n\nThere is also the `--force-colorization` option, which is an alias for `--decorations=always --color=always`. This is useful if you want to keep colorization and decorations when piping `bat`'s output to another program.\n\n### Adding new syntaxes / language definitions\n\nShould you find that a particular syntax is not available within `bat`, you can follow these\ninstructions to easily add new syntaxes to your current `bat` installation.\n\n`bat` uses the excellent [`syntect`](https://github.com/trishume/syntect/)\nlibrary for syntax highlighting. `syntect` can read any\n[Sublime Text `.sublime-syntax` file](https://www.sublimetext.com/docs/3/syntax.html)\nand theme.\n\nA good resource for finding Sublime Syntax packages is [Package Control](https://packagecontrol.io/). Once you found a\nsyntax:\n\n1. Create a folder with syntax definition files:\n\n   ```bash\n   mkdir -p \"$(bat --config-dir)/syntaxes\"\n   cd \"$(bat --config-dir)/syntaxes\"\n\n   # Put new '.sublime-syntax' language definition files\n   # in this folder (or its subdirectories), for example:\n   git clone https://github.com/tellnobody1/sublime-purescript-syntax\n   ```\n\n2. Now use the following command to parse these files into a binary cache:\n\n   ```bash\n   bat cache --build\n   ```\n\n3. Finally, use `bat --list-languages` to check if the new languages are available.\n\n   If you ever want to go back to the default settings, call:\n\n   ```bash\n   bat cache --clear\n   ```\n\n4. If you think that a specific syntax should be included in `bat` by default, please\n   consider opening a \"syntax request\" ticket after reading the policies and\n   instructions [here](doc/assets.md): [Open Syntax Request](https://github.com/sharkdp/bat/issues/new?labels=syntax-request&template=syntax_request.md).\n\n### Adding new themes\n\nThis works very similar to how we add new syntax definitions.\n> [!NOTE]\n> Custom themes must be stored in [`.tmTheme` files](https://www.sublimetext.com/docs/color_schemes_tmtheme.html).\n> Newer `.sublime-color-scheme` files are currently not supported.\n\nFirst, create a folder with the new syntax highlighting themes:\n```bash\nmkdir -p \"$(bat --config-dir)/themes\"\ncd \"$(bat --config-dir)/themes\"\n\n# Download a theme in '.tmTheme' format, for example:\ngit clone https://github.com/greggb/sublime-snazzy\n\n# Update the binary cache\nbat cache --build\n```\n\nFinally, use `bat --list-themes` to check if the new themes are available.\n> [!NOTE]\n> `bat` uses the name of the `.tmTheme` file for the theme's name. \n\n### Adding or changing file type associations\n\nYou can add new (or change existing) file name patterns using the `--map-syntax`\ncommand line option. The option takes an argument of the form `pattern:syntax` where\n`pattern` is a glob pattern that is matched against the file name and\nthe absolute file path. The `syntax` part is the full name of a supported language\n(use `bat --list-languages` for an overview).\n\n**Note:** You probably want to use this option as [an entry in `bat`'s configuration file](#configuration-file)\nfor persistence instead of passing it on the command line as a one-off. Generally\nyou'd just use `-l` if you want to manually specify a language for a file.\n\nExample: To use \"INI\" syntax highlighting for all files with a `.conf` file extension, use\n```bash\n--map-syntax='*.conf:INI'\n```\n\nExample: To open all files called `.ignore` (exact match) with the \"Git Ignore\" syntax, use:\n```bash\n--map-syntax='.ignore:Git Ignore'\n```\n\nExample: To open all `.conf` files in subfolders of `/etc/apache2` with the \"Apache Conf\"\nsyntax, use (this mapping is already built in):\n```bash\n--map-syntax='/etc/apache2/**/*.conf:Apache Conf'\n```\n\n### Using a different pager\n\n`bat` uses the pager that is specified in the `PAGER` environment variable. If this variable is not\nset, `less` is used by default. You can also use bat's built-in pager with `--pager=builtin` or\nby setting the `BAT_PAGER` environment variable to \"builtin\".\n\nIf you want to use a different pager, you can either modify the `PAGER` variable or set the\n`BAT_PAGER` environment variable to override what is specified in `PAGER`.\n\n>[!NOTE]\n> If `PAGER` is `more` or `most`, `bat` will silently use `less` instead to ensure support for colors.\n\nIf you want to pass command-line arguments to the pager, you can also set them via the\n`PAGER`/`BAT_PAGER` variables:\n\n```bash\nexport BAT_PAGER=\"less -RFK\"\n```\n\nInstead of using environment variables, you can also use `bat`'s [configuration file](#configuration-file) to configure the pager (`--pager` option).\n\n\n### Using `less` as a pager\n\nWhen using `less` as a pager, `bat` will automatically pass extra options along to `less`\nto improve the experience. Specifically, `-R`/`--RAW-CONTROL-CHARS`, `-F`/`--quit-if-one-screen`,\n`-K`/`--quit-on-intr` and under certain conditions, `-X`/`--no-init` and/or `-S`/`--chop-long-lines`.\n\n>[!IMPORTANT]\n> These options will not be added if:\n> - The pager is not named `less`.\n> - The `--pager` argument contains any command-line arguments (e.g. `--pager=\"less -R\"`).\n> - The `BAT_PAGER` environment variable contains any command-line arguments (e.g. `export BAT_PAGER=\"less -R\"`)\n>\n> The `--quit-if-one-screen` option will not be added when:\n> - The `--paging=always` argument is used.\n> - The `BAT_PAGING` environment is set to `always`.\n\nThe `-R`/`--RAW-CONTROL-CHARS` option is needed to interpret ANSI colors correctly.\n\nThe `-F`/`--quit-if-one-screen` option instructs `less` to exit immediately if the output size is smaller than\nthe vertical size of the terminal. This is convenient for small files because you do not\nhave to press `q` to quit the pager.\n\nThe `-K`/`--quit-on-intr` option instructs `less` to exit immediately when an interrupt signal is received.\nThis is useful to ensure that `less` quits together with `bat` on SIGINT.\n\nThe `-X`/`--no-init` option is added to versions of `less` older than version 530 (older than 558 on Windows) to\nfix a bug with the `-F`/`--quit-if-one-screen` feature. Unfortunately, it also breaks mouse-wheel support in `less`.\nIf you want to enable mouse-wheel scrolling on older versions of `less` and do not mind losing\nthe quit-if-one-screen feature, you can set the pager (via `--pager` or `BAT_PAGER`) to `less -R`.\nFor `less` 530 or newer, it should work out of the box.\n\nThe `-S`/`--chop-long-lines` option is added when `bat`'s `-S`/`--chop-long-lines` option is used. This tells `less`\nto truncate any lines larger than the terminal width.\n\n### Indentation\n\n`bat` expands tabs to 4 spaces by itself, not relying on the pager. To change this, simply add the\n`--tabs` argument with the number of spaces you want to be displayed.\n\n**Note**: Defining tab stops for the pager (via the `--pager` argument by `bat`, or via the `LESS`\nenvironment variable for `less`) won't be taken into account because the pager will already get\nexpanded spaces instead of tabs. This behaviour is added to avoid indentation issues caused by the\nsidebar. Calling `bat` with `--tabs=0` will override it and let tabs be consumed by the pager.\n\n### Dark mode\n\nIf you make use of the dark mode feature in **macOS**, you might want to configure `bat` to use a different\ntheme based on the OS theme. The following snippet uses the `default` theme when in the _dark mode_\nand the `GitHub` theme when in the _light mode_.\n\n```bash\nalias cat=\"bat --theme auto:system --theme-dark default --theme-light GitHub\"\n```\n\nThe same dark mode feature is now available in **GNOME** and affects the `org.gnome.desktop.interface color-scheme` setting. The following code converts the above to use said setting.\n\n```bash\n# .bashrc\nsys_color_scheme_is_dark() {\n    condition=$(gsettings get org.gnome.desktop.interface color-scheme)\n    condition=$(echo \"$condition\" | tr -d \"[:space:]'\")\n    if [ $condition == \"prefer-dark\" ]; then\n        return 0\n    else\n        return 1\n    fi\n}\n\nbat_alias_wrapper() {\n    #get color scheme\n    sys_color_scheme_is_dark\n    if [[ $? -eq 0 ]]; then\n        # bat command with dark color scheme\n        bat --theme=default \"$@\"\n    else\n        # bat command with light color scheme\n        bat --theme=GitHub \"$@\"\n    fi\n}\nalias cat='bat_alias_wrapper'\n```\n\n\n## Configuration file\n\n`bat` can also be customized with a configuration file. The location of the file is dependent\non your operating system. To get the default path for your system, call\n```bash\nbat --config-file\n```\n\nAlternatively, you can use `BAT_CONFIG_PATH` or `BAT_CONFIG_DIR` environment variables to point `bat`\nto a non-default location of the configuration file or the configuration directory respectively:\n```bash\nexport BAT_CONFIG_PATH=\"/path/to/bat/bat.conf\"\nexport BAT_CONFIG_DIR=\"/path/to/bat\"\n```\n\nA default configuration file can be created with the `--generate-config-file` option.\n```bash\nbat --generate-config-file\n```\n\nThere is also now a systemwide configuration file, which is located under `/etc/bat/config` on\nLinux and Mac OS and `C:\\ProgramData\\bat\\config` on windows. If the system wide configuration\nfile is present, the content of the user configuration will simply be appended to it.\n\n### Format\n\nThe configuration file is a simple list of command line arguments. Use `bat --help` to see a full list of possible options and values. In addition, you can add comments by prepending a line with the `#` character.\n\nExample configuration file:\n```bash\n# Set the theme to \"TwoDark\"\n--theme=\"TwoDark\"\n\n# Show line numbers, Git modifications and file header (but no grid)\n--style=\"numbers,changes,header\"\n\n# Use italic text on the terminal (not supported on all terminals)\n--italic-text=always\n\n# Use C++ syntax for Arduino .ino files\n--map-syntax \"*.ino:C++\"\n```\n\n## Using `bat` on Windows\n\n`bat` mostly works out-of-the-box on Windows, but a few features may need extra configuration.\n\n### Prerequisites\n\nYou will need to install the [Visual C++ Redistributable](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads) package.\n\n### Paging\n\nWindows only includes a very limited pager in the form of `more`. You can download a Windows binary\nfor `less` [from its homepage](http://www.greenwoodsoftware.com/less/download.html) or [through\nChocolatey](https://chocolatey.org/packages/Less). To use it, place the binary in a directory in\nyour `PATH` or [define an environment variable](#using-a-different-pager). The [Chocolatey package](#on-windows) installs `less` automatically.\n\n### Colors\n\nWindows 10 natively supports colors in both `conhost.exe` (Command Prompt) and PowerShell since\n[v1511](https://en.wikipedia.org/wiki/Windows_10_version_history#Version_1511_(November_Update)), as\nwell as in newer versions of bash. On earlier versions of Windows, you can use\n[Cmder](http://cmder.app/), which includes [ConEmu](https://conemu.github.io/).\n\n**Note:** Old versions of `less` do not correctly interpret colors on Windows. To fix this, you can add the optional Unix tools to your PATH when installing Git. If you don’t have any other pagers installed, you can disable paging entirely by passing `--paging=never` or by setting `BAT_PAGER` to an empty string.\n\n### Cygwin\n\n`bat` on Windows does not natively support Cygwin's unix-style paths (`/cygdrive/*`). When passed an absolute cygwin path as an argument, `bat` will encounter the following error: `The system cannot find the path specified. (os error 3)`\n\nThis can be solved by creating a wrapper or adding the following function to your `.bash_profile` file:\n\n```bash\nbat() {\n    local index\n    local args=(\"$@\")\n    for index in $(seq 0 ${#args[@]}) ; do\n        case \"${args[index]}\" in\n        -*) continue;;\n        *)  [ -e \"${args[index]}\" ] && args[index]=\"$(cygpath --windows \"${args[index]}\")\";;\n        esac\n    done\n    command bat \"${args[@]}\"\n}\n```\n\n## Troubleshooting\n\n### Garbled output\n\nIf an input file contains color codes or other ANSI escape sequences or control characters, `bat` will have problems\nperforming syntax highlighting and text wrapping, and thus the output can become garbled.\n\nIf your version of `bat` supports the `--strip-ansi=auto` option, it can be used to remove such sequences\nbefore syntax highlighting. Alternatively, you may disable both syntax highlighting and wrapping by\npassing the `--color=never --wrap=never` options to `bat`.\n\n> [!NOTE]\n> The `auto` option of `--strip-ansi` avoids removing escape sequences when the syntax is plain text.\n\n### Terminals & colors\n\n`bat` handles terminals *with* and *without* truecolor support. However, the colors in most syntax\nhighlighting themes are not optimized for 8-bit colors. It is therefore strongly recommended\nthat you use a terminal with 24-bit truecolor support (`terminator`, `konsole`, `iTerm2`, ...),\nor use one of the basic [8-bit themes](#8-bit-themes) designed for a restricted set of colors.\nSee [this article](https://gist.github.com/XVilka/8346728) for more details and a full list of\nterminals with truecolor support.\n\nMake sure that your truecolor terminal sets the `COLORTERM` variable to either `truecolor` or\n`24bit`. Otherwise, `bat` will not be able to determine whether or not 24-bit escape sequences\nare supported (and fall back to 8-bit colors).\n\n### Line numbers and grid are hardly visible\n\nPlease try a different theme (see `bat --list-themes` for a list). The `OneHalfDark` and\n`OneHalfLight` themes provide grid and line colors that are brighter.\n\n### File encodings\n\n`bat` natively supports UTF-8 as well as UTF-16. For every other file encoding, you may need to\nconvert to UTF-8 first because the encodings can typically not be auto-detected. You can `iconv`\nto do so.\nExample: if you have a PHP file in Latin-1 (ISO-8859-1) encoding, you can call:\n``` bash\niconv -f ISO-8859-1 -t UTF-8 my-file.php | bat\n```\nNote: you might have to use the `-l`/`--language` option if the syntax can not be auto-detected\nby `bat`.\n\n## Development\n\n```bash\n# Recursive clone to retrieve all submodules\ngit clone --recursive https://github.com/sharkdp/bat\n\n# Build (debug version)\ncd bat\ncargo build --bins\n\n# Run unit tests and integration tests\ncargo test\n\n# Install (release version)\ncargo install --path . --locked\n\n# Build a bat binary with modified syntaxes and themes\nbash assets/create.sh\ncargo install --path . --locked --force\n```\n\nIf you want to build an application that uses `bat`'s pretty-printing\nfeatures as a library, check out the [the API documentation](https://docs.rs/bat/).\nNote that you have to use either `regex-onig` or `regex-fancy` as a feature\nwhen you depend on `bat` as a library.\n\n## Contributing\n\nTake a look at the [`CONTRIBUTING.md`](CONTRIBUTING.md) guide.\n\n## Maintainers\n\n- [sharkdp](https://github.com/sharkdp)\n- [eth-p](https://github.com/eth-p)\n- [keith-hall](https://github.com/keith-hall)\n- [Enselic](https://github.com/Enselic)\n\n## Security vulnerabilities\n\nSee [`SECURITY.md`](SECURITY.md).\n\n## Project goals and alternatives\n\n`bat` tries to achieve the following goals:\n\n- Provide beautiful, advanced syntax highlighting\n- Integrate with Git to show file modifications\n- Be a drop-in replacement for (POSIX) `cat`\n- Offer a user-friendly command-line interface\n\nThere are a lot of alternatives, if you are looking for similar programs. See\n[this document](doc/alternatives.md) for a comparison.\n\n## License\nCopyright (c) 2018-2025 [bat-developers](https://github.com/sharkdp/bat).\n\n`bat` is made available under the terms of either the MIT License or the Apache License 2.0, at your option.\n\nSee the [LICENSE-APACHE](LICENSE-APACHE) and [LICENSE-MIT](LICENSE-MIT) files for license details.\n"
  },
  {
    "path": "SECURITY.md",
    "content": "# Security Vulnerabilities\n\nTo report a security vulnerability, please contact [David Peter](https://david-peter.de/) via email.\n"
  },
  {
    "path": "assets/.gitattributes",
    "content": "* linguist-vendored\n"
  },
  {
    "path": "assets/.ignore",
    "content": "syntaxes/*\nthemes/*\n"
  },
  {
    "path": "assets/completions/_bat.ps1.in",
    "content": "\nusing namespace System.Management.Automation\nusing namespace System.Management.Automation.Language\n\nRegister-ArgumentCompleter -Native -CommandName '{{PROJECT_EXECUTABLE}}' -ScriptBlock {\n    param($wordToComplete, $commandAst, $cursorPosition)\n\n    $ArrayStyle      = @('default', 'auto', 'full', 'plain', 'changes', 'header', 'header-filename', 'header-filesize', 'grid', 'rule', 'numbers', 'snip')\n    $ArrayCompletion = @('bash', 'fish', 'zsh', 'ps1')\n    $ArrayWhen       = @('auto', 'never', 'always')\n    $ArrayYesNo      = @('never', 'always')\n    $ArrayWrap       = @('always', 'never', 'character', 'word')\n    $ArrayBinary     = @('no-printing', 'as-text')\n    $ArrayPrint      = @('unicode', 'caret')\n\n    function Get-MyThemes(){\n        $themes = {{PROJECT_EXECUTABLE}} --list-themes | ForEach-Object {$_  -replace \"^(.*)$\", '''$1'''} | select-object\n        return $themes\n    }\n\n    function Get-MyLanguages(){\n        $themes = {{PROJECT_EXECUTABLE}} --list-languages | ForEach-Object{[pscustomobject]@{MyParameter=$_.Substring(0,$_.IndexOf(\":\")).Trim();MyDescription=$_.Substring($_.IndexOf(\":\")+1)}} | select-object\n        return $themes\n    }\n\n    $commandElements = $commandAst.CommandElements\n    $command = @(\n        '{{PROJECT_EXECUTABLE}}'\n        for ($i = 1; $i -lt $commandElements.Count; $i++) {\n            $element = $commandElements[$i]\n            if ($element -isnot [StringConstantExpressionAst] -or\n                $element.StringConstantType -ne [StringConstantType]::BareWord -or\n                #$element.Value.StartsWith('-') -or\n                $element.Value -eq $wordToComplete) {\n                break\n        }\n        $element.Value\n    }) -join ';'\n\n    $completions = @(switch -Wildcard ($command) {\n        '*;--help' {\n            break\n        }\n        '*;--version' {\n            break\n        }\n        '*;--acknowledgements' {\n            break\n        }\n        '*;--language' {\n            Get-MyLanguages |\n            ForEach-Object {\n                $desc = if ($null -eq $_.MyDescription) { '_no value_' } else { $_.MyDescription }\n                [CompletionResult]::new(($_.MyParameter -replace \"^(.*)$\", '''$1'''), $_.MyParameter, [CompletionResultType]::ParameterName, $desc)\n            }\n            break\n        }\n        '*;--theme' {\n            Get-MyThemes |\n            ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, [CompletionResultType]::ParameterName, $_)}\n            break\n        }\n        '*;--binary' {\n            $ArrayBinary |\n            ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, [CompletionResultType]::ParameterValue, $_)}\n            break\n        }\n        '*;--style' {\n            $ArrayStyle |\n            ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, [CompletionResultType]::ParameterValue, $_)}\n            break\n        }\n        '*;--wrap' {\n            $ArrayWrap |\n            ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, [CompletionResultType]::ParameterValue, $_)}\n            break\n        }\n        '*;--color' {\n            $ArrayWhen |\n            ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, [CompletionResultType]::ParameterValue, $_)}\n            break\n        }\n        '*;--italic-text' {\n            $ArrayYesNo |\n            ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, [CompletionResultType]::ParameterValue, $_)}\n            break\n        }\n        '*;--paging' {\n            $ArrayWhen |\n            ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, [CompletionResultType]::ParameterValue, $_)}\n            break\n        }\n        '*;--decorations' {\n            $ArrayWhen |\n            ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, [CompletionResultType]::ParameterValue, $_)}\n            break\n        }\n        '*;--completion' {\n            $ArrayCompletion |\n            ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, [CompletionResultType]::ParameterValue, $_)}\n            break\n        }\n        '*;--strip-ansi' {\n            $ArrayWhen |\n            ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, [CompletionResultType]::ParameterValue, $_)}\n            break\n        }\n        '*;--nonprintable-notation' {\n            $ArrayPrint |\n            ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, [CompletionResultType]::ParameterValue, $_)}\n            break\n        }\n        '*;--generate-config-file' {\n            break\n        }\n        '{{PROJECT_EXECUTABLE}};cache' {\n            [CompletionResult]::new('--source'                , 'source'                , [CompletionResultType]::ParameterName, 'Use a different directory to load syntaxes and themes from.')\n            [CompletionResult]::new('--target'                , 'target'                , [CompletionResultType]::ParameterName, 'Use a different directory to store the cached syntax and theme set.')\n        #   [CompletionResult]::new('-b'                      , 'b'                     , [CompletionResultType]::ParameterName, 'Initialize (or update) the syntax/theme cache.')\n            [CompletionResult]::new('--build'                 , 'build'                 , [CompletionResultType]::ParameterName, 'Initialize (or update) the syntax/theme cache.')\n        #   [CompletionResult]::new('-c'                      , 'c'                     , [CompletionResultType]::ParameterName, 'Remove the cached syntax definitions and themes.')\n            [CompletionResult]::new('--clear'                 , 'clear'                 , [CompletionResultType]::ParameterName, 'Remove the cached syntax definitions and themes.')\n            [CompletionResult]::new('--blank'                 , 'blank'                 , [CompletionResultType]::ParameterName, 'Create completely new syntax and theme sets (instead of appending to the default sets).')\n        #   [CompletionResult]::new('-h'                      , 'h'                     , [CompletionResultType]::ParameterName, 'Prints help information')\n            [CompletionResult]::new('--help'                  , 'help'                  , [CompletionResultType]::ParameterName, 'Prints help information')\n        #   [CompletionResult]::new('-V'                      , 'V'                     , [CompletionResultType]::ParameterName, 'Prints version information')\n        #   [CompletionResult]::new('--version'               , 'version'               , [CompletionResultType]::ParameterName, 'Prints version information')\n            break\n        }\n        default {\n        #   [CompletionResult]::new('-l'                      , 'l'                     , [CompletionResultType]::ParameterName, 'Set the language for syntax highlighting.')\n            [CompletionResult]::new('--language'              , 'language'              , [CompletionResultType]::ParameterName, 'Set the language for syntax highlighting.')\n        #   [CompletionResult]::new('-H'                      , 'H'                     , [CompletionResultType]::ParameterName, 'Highlight lines N through M.')\n            [CompletionResult]::new('--highlight-line'        , 'highlight-line'        , [CompletionResultType]::ParameterName, 'Highlight lines N through M.')\n            [CompletionResult]::new('--file-name'             , 'file-name'             , [CompletionResultType]::ParameterName, 'Specify the name to display for a file.')\n            [CompletionResult]::new('--diff-context'          , 'diff-context'          , [CompletionResultType]::ParameterName, 'diff-context')\n            [CompletionResult]::new('--tabs'                  , 'tabs'                  , [CompletionResultType]::ParameterName, 'Set the tab width to T spaces.')\n            [CompletionResult]::new('--wrap'                  , 'wrap'                  , [CompletionResultType]::ParameterName, 'Specify the text-wrapping mode (*auto*, never, character, word).')\n            [CompletionResult]::new('--terminal-width'        , 'terminal-width'        , [CompletionResultType]::ParameterName, 'Explicitly set the width of the terminal instead of determining it automatically. If prefixed with ''+'' or ''-'', the value will be treated as an offset to the actual terminal width. See also: ''--wrap''.')\n            [CompletionResult]::new('--color'                 , 'color'                 , [CompletionResultType]::ParameterName, 'When to use colors (*auto*, never, always).')\n            [CompletionResult]::new('--italic-text'           , 'italic-text'           , [CompletionResultType]::ParameterName, 'Use italics in output (always, *never*)')\n            [CompletionResult]::new('--decorations'           , 'decorations'           , [CompletionResultType]::ParameterName, 'When to show the decorations (*auto*, never, always).')\n            [CompletionResult]::new('--paging'                , 'paging'                , [CompletionResultType]::ParameterName, 'Specify when to use the pager, or use ''-P'' to disable (*auto*, never, always).')\n            [CompletionResult]::new('--pager'                 , 'pager'                 , [CompletionResultType]::ParameterName, 'Determine which pager to use.')\n        #   [CompletionResult]::new('-m'                      , 'm'                     , [CompletionResultType]::ParameterName, 'Use the specified syntax for files matching the glob pattern (''*.cpp:C++'').')\n            [CompletionResult]::new('--map-syntax'            , 'map-syntax'            , [CompletionResultType]::ParameterName, 'Use the specified syntax for files matching the glob pattern (''*.cpp:C++'').')\n            [CompletionResult]::new('--theme'                 , 'theme'                 , [CompletionResultType]::ParameterName, 'Set the color theme for syntax highlighting.')\n            [CompletionResult]::new('--theme-dark'            , 'themedark'             , [CompletionResultType]::ParameterName, 'Set the color theme for syntax highlighting for dark backgrounds.')\n            [CompletionResult]::new('--theme-light'           , 'themelight'            , [CompletionResultType]::ParameterName, 'Set the color theme for syntax highlighting for light backgrounds.')\n            [CompletionResult]::new('--style'                 , 'style'                 , [CompletionResultType]::ParameterName, 'Comma-separated list of style elements to display (*default*, auto, full, plain, changes, header, header-filename, header-filesize, grid, rule, numbers, snip).')\n        #   [CompletionResult]::new('-r'                      , 'r'                     , [CompletionResultType]::ParameterName, 'Only print the lines from N to M.')\n            [CompletionResult]::new('--line-range'            , 'line-range'            , [CompletionResultType]::ParameterName, 'Only print the lines from N to M.')\n        #   [CompletionResult]::new('-A'                      , 'A'                     , [CompletionResultType]::ParameterName, 'Show non-printable characters (space, tab, newline, ..).')\n            [CompletionResult]::new('--show-all'              , 'show-all'              , [CompletionResultType]::ParameterName, 'Show non-printable characters (space, tab, newline, ..).')\n            [CompletionResult]::new('--nonprintable-notation' , 'nonprintable-notation' , [CompletionResultType]::ParameterName, 'Set notation for non-printable characters. (unicode, caret)')\n            [CompletionResult]::new('--chop-long-lines'       , 'chop-long-lines'       , [CompletionResultType]::ParameterName, 'Truncate all lines longer than screen width. Alias for ''--wrap=never''.')\n            [CompletionResult]::new('--binary'                , 'binary'                , [CompletionResultType]::ParameterName, 'How to treat binary content. (*no-printing*, as-text)')\n            [CompletionResult]::new('--ignored-suffix'        , 'ignored-suffix'        , [CompletionResultType]::ParameterName, 'Ignore extension. For example: ''bat --ignored-suffix \".dev\" my_file.json.dev'' will use JSON syntax, and ignore ''.dev''')\n            [CompletionResult]::new('--squeeze-blank'         , 'squeeze-blank'         , [CompletionResultType]::ParameterName, 'Squeeze consecutive empty lines into a single empty line.')\n            [CompletionResult]::new('--squeeze-limit'         , 'squeeze-limit'         , [CompletionResultType]::ParameterName, 'Set the maximum number of consecutive empty lines to be printed.')\n            [CompletionResult]::new('--strip-ansi'            , 'strip-ansi'            , [CompletionResultType]::ParameterName, 'Specify when to strip ANSI escape sequences from the input. The automatic mode will remove escape sequences unless the syntax highlighting language is plain text. (auto, always, *never*).')\n        #   [CompletionResult]::new('-p'                      , 'p'                     , [CompletionResultType]::ParameterName, 'Show plain style (alias for ''--style=plain'').')\n            [CompletionResult]::new('--plain'                 , 'plain'                 , [CompletionResultType]::ParameterName, 'Show plain style (alias for ''--style=plain'').')\n        #   [CompletionResult]::new('-d'                      , 'd'                     , [CompletionResultType]::ParameterName, 'Only show lines that have been added/removed/modified.')\n            [CompletionResult]::new('--diff'                  , 'diff'                  , [CompletionResultType]::ParameterName, 'Only show lines that have been added/removed/modified.')\n        #   [CompletionResult]::new('-n'                      , 'n'                     , [CompletionResultType]::ParameterName, 'Show line numbers (alias for ''--style=numbers'').')\n            [CompletionResult]::new('--number'                , 'number'                , [CompletionResultType]::ParameterName, 'Show line numbers (alias for ''--style=numbers'').')\n        #   [CompletionResult]::new('-f'                      , 'f'                     , [CompletionResultType]::ParameterName, 'f')\n            [CompletionResult]::new('--force-colorization'    , 'force-colorization'    , [CompletionResultType]::ParameterName, 'force-colorization')\n        #   [CompletionResult]::new('-P'                      , 'P'                     , [CompletionResultType]::ParameterName, 'Alias for ''--paging=never''')\n            [CompletionResult]::new('--no-paging'             , 'no-paging'             , [CompletionResultType]::ParameterName, 'Alias for ''--paging=never''')\n            [CompletionResult]::new('--list-themes'           , 'list-themes'           , [CompletionResultType]::ParameterName, 'Display all supported highlighting themes.')\n        #   [CompletionResult]::new('-L'                      , 'L'                     , [CompletionResultType]::ParameterName, 'Display all supported languages.')\n            [CompletionResult]::new('--list-languages'        , 'list-languages'        , [CompletionResultType]::ParameterName, 'Display all supported languages.')\n        #   [CompletionResult]::new('-u'                      , 'u'                     , [CompletionResultType]::ParameterName, 'u')\n            [CompletionResult]::new('--unbuffered'            , 'unbuffered'            , [CompletionResultType]::ParameterName, 'Enable unbuffered input reading for streaming use cases')\n            [CompletionResult]::new('--completion'            , 'completion'            , [CompletionResultType]::ParameterName, 'Show shell completion for a certain shell. [possible values: bash, fish, zsh, ps1]')\n            [CompletionResult]::new('--no-config'             , 'no-config'             , [CompletionResultType]::ParameterName, 'Do not use the configuration file')\n            [CompletionResult]::new('--no-custom-assets'      , 'no-custom-assets'      , [CompletionResultType]::ParameterName, 'Do not load custom assets')\n            [CompletionResult]::new('--lessopen'              , 'lessopen'              , [CompletionResultType]::ParameterName, 'Enable the $LESSOPEN preprocessor')\n            [CompletionResult]::new('--no-lessopen'           , 'no-lessopen'           , [CompletionResultType]::ParameterName, 'Disable the $LESSOPEN preprocessor if enabled (overrides --lessopen)')\n            [CompletionResult]::new('--config-file'           , 'config-file'           , [CompletionResultType]::ParameterName, 'Show path to the configuration file.')\n            [CompletionResult]::new('--generate-config-file'  , 'generate-config-file'  , [CompletionResultType]::ParameterName, 'Generates a default configuration file.')\n            [CompletionResult]::new('--config-dir'            , 'config-dir'            , [CompletionResultType]::ParameterName, 'Show bat''s configuration directory.')\n            [CompletionResult]::new('--cache-dir'             , 'cache-dir'             , [CompletionResultType]::ParameterName, 'Show bat''s cache directory.')\n            [CompletionResult]::new('--acknowledgements'      , 'acknowledgements'      , [CompletionResultType]::ParameterName, 'Show acknowledgements.')\n            [CompletionResult]::new('--set-terminal-title'    , 'set-terminal-title'    , [CompletionResultType]::ParameterName, 'Sets terminal title to filenames when using a pager.')\n            [CompletionResult]::new('--diagnostic'            , 'diagnostic'            , [CompletionResultType]::ParameterName, 'Show diagnostic information for bug reports.')\n            [CompletionResult]::new('--quiet-empty'           , 'quiet-empty'           , [CompletionResultType]::ParameterName, 'Do not produce any output when the input is empty.')\n        #   [CompletionResult]::new('-h'                      , 'h'                     , [CompletionResultType]::ParameterName, 'Print this help message.')\n            [CompletionResult]::new('--help'                  , 'help'                  , [CompletionResultType]::ParameterName, 'Print this help message.')\n        #   [CompletionResult]::new('-V'                      , 'V'                     , [CompletionResultType]::ParameterName, 'Show version information.')\n            [CompletionResult]::new('--version'               , 'version'               , [CompletionResultType]::ParameterName, 'Show version information.')\n            break\n        }\n    })\n\n    $completions.Where{ $_.CompletionText -like \"$wordToComplete*\" } |\n        Sort-Object -Property CompletionText\n}\n"
  },
  {
    "path": "assets/completions/bat.bash.in",
    "content": "# shellcheck disable=SC2207\n\n# Requires https://github.com/scop/bash-completion\n\n# Macs have bash3 for which the bash-completion package doesn't include\n# _init_completion. This is a minimal version of that function.\n__bat_init_completion()\n{\n\tCOMPREPLY=()\n\t_get_comp_words_by_ref \"$@\" cur prev words cword\n}\n\n__bat_escape_completions()\n{\n\t# Do not escape if completing a quoted value.\n\t[[ $cur == [\\\"\\']* ]] && return 0\n\tif ((\n\t\tBASH_VERSINFO[0] > 5 || \\\n\t\tBASH_VERSINFO[0] == 5 && BASH_VERSINFO[1] >= 3\n\t)); then\n\t\t# bash >= 5.3 has \"compopt -o fullquote\", which exactly does\n\t\t# what this function tries to do.\n\t\tcompopt -o fullquote\n\telif ((\n\t\tBASH_VERSINFO[0] > 4 || \\\n\t\tBASH_VERSINFO[0] == 4 && BASH_VERSINFO[1] > 0\n\t)); then\n\t\t# printf -v to an array index is available in bash >= 4.1.\n\t\t# Use it if available, as -o filenames is semantically\n\t\t# incorrect if we are not actually completing filenames, and it\n\t\t# has side effects (e.g. adds trailing slash to candidates\n\t\t# matching present dirs).\n\t\tlocal i\n\t\tfor i in ${!COMPREPLY[*]}; do\n\t\t\tprintf -v \"COMPREPLY[i]\" %q \"${COMPREPLY[i]}\"\n\t\tdone\n\n\t\t# We can use \"compopt -o noquote\" available in bash >= 4.3 to\n\t\t# prevent further quoting by the shell, which would be\n\t\t# unexpectedly applied when a quoted result matches a filename.\n\t\tif ((\n\t\t\tBASH_VERSINFO[0] > 4 || \\\n\t\t\tBASH_VERSINFO[0] == 4 && BASH_VERSINFO[1] >= 3\n\t\t)); then\n\t\t\tcompopt -o noquote\n\t\tfi\n\telse\n\t\tcompopt -o filenames\n\tfi\n}\n\n_bat() {\n\tlocal cur prev words split=false\n\tif declare -F _init_completion >/dev/null 2>&1; then\n\t\t_init_completion -s || return 0\n\telse\n\t\t__bat_init_completion -n \"=\" || return 0\n\t\t_split_longopt && split=true\n\tfi\n\n\tif [[ ${words[1]-} == cache ]]; then\n\t\tcase $prev in\n\t\t--source | --target)\n\t\t\t_filedir -d\n\t\t\treturn 0\n\t\t\t;;\n\t\tesac\n\t\tCOMPREPLY=($(compgen -W \"\n\t\t\t--build\n\t\t\t--clear\n\t\t\t--source\n\t\t\t--target\n\t\t\t--blank\n\t\t\t--help\n\t\t\" -- \"$cur\"))\n\t\treturn 0\n\tfi\n\n\tcase $prev in\n\t-l | --language)\n\t\tlocal IFS=$'\\n'\n\t\tCOMPREPLY=($(compgen -W \"$(\n\t\t\t\"$1\" --list-languages | while IFS=: read -r lang _; do\n\t\t\t\tprintf \"%s\\n\" \"$lang\"\n\t\t\tdone\n\t\t)\" -- \"$cur\"))\n\t\t__bat_escape_completions\n\t\treturn 0\n\t\t;;\n\t-H | --highlight-line | \\\n\t--diff-context | \\\n\t--tabs | \\\n\t--terminal-width | \\\n\t-m | --map-syntax | \\\n\t--ignored-suffix | \\\n\t--list-themes | \\\n\t--squeeze-limit | \\\n\t--line-range | \\\n\t-L | --list-languages | \\\n\t--lessopen | \\\n\t--no-paging | \\\n\t--diagnostic | \\\n\t--quiet-empty | \\\n\t--acknowledgements | \\\n\t-h | --help | \\\n\t-V | --version | \\\n\t--cache-dir | \\\n\t--config-dir | \\\n\t--config-file | \\\n\t--generate-config-file)\n\t\t# argument required but no completion available, or option\n\t\t# causes an exit\n\t\treturn 0\n\t\t;;\n\t--file-name)\n\t\t_filedir\n\t\treturn 0\n\t\t;;\n\t--wrap)\n\t\tCOMPREPLY=($(compgen -W \"auto never character word\" -- \"$cur\"))\n\t\treturn 0\n\t\t;;\n\t--binary)\n\t\tCOMPREPLY=($(compgen -W \"no-printing as-text\" -- \"$cur\"))\n\t\treturn 0\n\t\t;;\n\t--nonprintable-notation)\n\t\tCOMPREPLY=($(compgen -W \"unicode caret\" -- \"$cur\"))\n\t\treturn 0\n\t\t;;\n\t--strip-ansi)\n\t\tCOMPREPLY=($(compgen -W \"auto never always\" -- \"$cur\"))\n\t\treturn 0\n\t\t;;\n\t--completion)\n\t\tCOMPREPLY=($(compgen -W \"bash fish zsh ps1\" -- \"$cur\"))\n\t\treturn 0\n\t\t;;\n\t--color | --decorations | --paging)\n\t\tCOMPREPLY=($(compgen -W \"auto never always\" -- \"$cur\"))\n\t\treturn 0\n\t\t;;\n\t--italic-text)\n\t\tCOMPREPLY=($(compgen -W \"always never\" -- \"$cur\"))\n\t\treturn 0\n\t\t;;\n\t--pager)\n\t\tCOMPREPLY=($(compgen -c -- \"$cur\"))\n\t\treturn 0\n\t\t;;\n\t--theme)\n\t\tlocal IFS=$'\\n'\n\t\tCOMPREPLY=($(compgen -W \"auto${IFS}auto:always${IFS}auto:system${IFS}dark${IFS}light${IFS}$(\"$1\" --list-themes)\" -- \"$cur\"))\n\t\t__bat_escape_completions\n\t\treturn 0\n\t\t;;\n\t--theme-dark | \\\n\t--theme-light)\n\t\tlocal IFS=$'\\n'\n\t\tCOMPREPLY=($(compgen -W \"$(\"$1\" --list-themes)\" -- \"$cur\"))\n\t\t__bat_escape_completions\n\t\treturn 0\n\t\t;;\n\t--style)\n\t\t# shellcheck disable=SC2034\n\t\tlocal -a styles=(\n\t\t\tdefault\n\t\t\tfull\n\t\t\tauto\n\t\t\tplain\n\t\t\tchanges\n\t\t\theader\n\t\t\theader-filename\n\t\t\theader-filesize\n\t\t\tgrid\n\t\t\trule\n\t\t\tnumbers\n\t\t\tsnip\n\t\t)\n\t\t# shellcheck disable=SC2016\n\t\tif declare -F _comp_delimited >/dev/null 2>&1; then\n\t\t\t# bash-completion > 2.11\n\t\t\t_comp_delimited , -W '\"${styles[@]}\"'\n\t\telse\n\t\t\tCOMPREPLY=($(compgen -W '${styles[@]}' -- \"$cur\"))\n\t\tfi\n\t\treturn 0\n\tesac\n\n\t$split && return 0\n\n\tif [[ $cur == -* ]]; then\n\t\tCOMPREPLY=($(compgen -W \"\n\t\t\t--unbuffered\n\t\t\t--show-all\n\t\t\t--nonprintable-notation\n\t\t\t--binary\n\t\t\t--plain\n\t\t\t--language\n\t\t\t--highlight-line\n\t\t\t--file-name\n\t\t\t--diff\n\t\t\t--diff-context\n\t\t\t--tabs\n\t\t\t--wrap\n\t\t\t--chop-long-lines\n\t\t\t--terminal-width\n\t\t\t--number\n\t\t\t--color\n\t\t\t--italic-text\n\t\t\t--decorations\n\t\t\t--force-colorization\n\t\t\t--paging\n\t\t\t--no-paging\n\t\t\t--pager\n\t\t\t--map-syntax\n\t\t\t--ignored-suffix\n\t\t\t--theme\n\t\t\t--theme-dark\n\t\t\t--theme-light\n\t\t\t--list-themes\n\t\t\t--squeeze-blank\n\t\t\t--squeeze-limit\n\t\t\t--strip-ansi\n\t\t\t--style\n\t\t\t--line-range\n\t\t\t--list-languages\n\t\t\t--lessopen\n\t\t\t--completion\n\t\t\t--diagnostic\n\t\t\t--quiet-empty\n\t\t\t--acknowledgements\n\t\t\t--set-terminal-title\n\t\t\t--help\n\t\t\t--version\n\t\t\t--cache-dir\n\t\t\t--config-dir\n\t\t\t--config-file\n\t\t\t--generate-config-file\n\t\t\t--no-config\n\t\t\t--no-custom-assets\n\t\t\t--no-lessopen\n\t\t\" -- \"$cur\"))\n\t\treturn 0\n\tfi\n\n\t_filedir\n\t\n\t## Completion of the 'cache' command itself is removed for better UX\n\t## See https://github.com/sharkdp/bat/issues/2085#issuecomment-1271646802\n} && complete -F _bat {{PROJECT_EXECUTABLE}}\n"
  },
  {
    "path": "assets/completions/bat.fish.in",
    "content": "# Fish Shell Completions\n# Copy or symlink to $XDG_CONFIG_HOME/fish/completions/{{PROJECT_EXECUTABLE}}.fish\n# ($XDG_CONFIG_HOME is usually set to ~/.config)\n\n# `bat` is `batcat` on Debian and Ubuntu\nset bat {{PROJECT_EXECUTABLE}}\n\n# Helper functions:\n\nfunction __bat_complete_files -a token\n    # Cheat to complete files by calling `complete -C` on a fake command name,\n    # like `__fish_complete_directories` does.\n    set -l fake_command aaabccccdeeeeefffffffffgghhhhhhiiiii\n    complete -C\"$fake_command $token\"\nend\n\nfunction __bat_complete_one_language -a comp\n    command $bat --list-languages | string split -f1 : | string match -e \"$comp\"\nend\n\nfunction __bat_complete_list_languages\n    for spec in (command $bat --list-languages)\n        set -l name (string split -f1 : $spec)\n        for ext in (string split -f2 : $spec | string split ,)\n            test -n \"$ext\"; or continue\n            string match -rq '[/*]' $ext; and continue\n            printf \"%s\\t%s\\n\" $ext $name\n        end\n        printf \"%s\\t\\n\" $name\n    end\nend\n\nfunction __bat_complete_map_syntax\n    set -l token (commandline -ct)\n\n    if string match -qr '(?<glob>.+):(?<syntax>.*)' -- $token\n        # If token ends with a colon, complete with the list of language names.\n        set -f comps $glob:(__bat_complete_one_language $syntax)\n    else if string match -qr '\\*' -- $token\n        # If token contains a globbing character (`*`), complete only possible\n        # globs in the current directory\n        set -f comps (__bat_complete_files $token | string match -er '[*]'):\n    else\n        # Complete files (and globs).\n        set -f comps (__bat_complete_files $token | string match -erv '/$'):\n    end\n\n    if set -q comps[1]\n        printf \"%s\\t\\n\" $comps\n    end\nend\n\nfunction __bat_cache_subcommand\n    __fish_seen_subcommand_from cache\nend\n\n# Returns true if no exclusive arguments seen.\nfunction __bat_no_excl_args\n    not __bat_cache_subcommand; and not __fish_seen_argument \\\n        -s h -l help \\\n        -s V -l version \\\n        -l acknowledgements \\\n        -l config-dir -l config-file \\\n        -l diagnostic -l quiet-empty \\\n        -l list-languages -l list-themes\nend\n\n# Returns true if the 'cache' subcommand is seen without any exclusive arguments.\nfunction __bat_cache_no_excl\n    __bat_cache_subcommand; and not __fish_seen_argument \\\n        -s h -l help \\\n        -l acknowledgements -l build -l clear\nend\n\nfunction __bat_style_opts\n    set -l style_opts \\\n        \"default,recommended components\" \\\n        \"auto,same as 'default' unless piped\" \\\n        \"full,all components\" \\\n        \"plain,no components\" \\\n        \"changes,Git change markers\" \\\n        \"header,alias for header-filename\" \\\n        \"header-filename,filename above content\" \\\n        \"header-filesize,filesize above content\" \\\n        \"grid,lines b/w sidebar/header/content\" \\\n        \"numbers,line numbers in sidebar\" \\\n        \"rule,separate files\" \\\n        \"snip,separate ranges\"\n\n    string replace , \\t $style_opts\nend\n\n# Use option argument descriptions to indicate which is the default, saving\n# horizontal space and making sure the option description isn't truncated.\nset -l color_opts '\n    auto\\tdefault\n    never\\t\n    always\\t\n'\nset -l decorations_opts $color_opts\nset -l paging_opts $color_opts\n\n# Include some examples so we can indicate the default.\nset -l pager_opts '\n    less\\tdefault\n    less\\ -FR\\t\n    more\\t\n    vimpager\\t\n    builtin\\t\n'\n\nset -l italic_text_opts '\n    always\\t\n    never\\tdefault\n'\n\nset -l wrap_opts '\n    auto\\tdefault\n    never\\t\n    character\\t\n    word\\t\n'\n\n# While --tabs theoretically takes any number, most people should be OK with these.\n# Specifying a list lets us explain what 0 does.\nset -l tabs_opts '\n    0\\tpass\\ tabs\\ through\\ directly\n    1\\t\n    2\\t\n    4\\t\n    8\\t\n'\n\nset -l special_themes '\n    auto\\tdefault,\\ Choose\\ a\\ theme\\ based\\ on\\ dark\\ or\\ light\\ mode\n    auto:always\\tChoose\\ a\\ theme\\ based\\ on\\ dark\\ or\\ light\\ mode\n    auto:system\\tChoose\\ a\\ theme\\ based\\ on\\ dark\\ or\\ light\\ mode\n    dark\\tUse\\ the\\ theme\\ specified\\ by\\ --theme-dark\n    light\\tUse\\ the\\ theme\\ specified\\ by\\ --theme-light\n'\n\n# Completions:\n\ncomplete -c $bat -l acknowledgements -d \"Print acknowledgements\" -n __fish_is_first_arg\n\ncomplete -c $bat -l binary -x -a \"no-printing as-text\" -d \"How to treat binary content\" -n __bat_no_excl_args\n\ncomplete -c $bat -l cache-dir -f -d \"Show bat's cache directory\" -n __fish_is_first_arg\n\ncomplete -c $bat -s c -l chop-long-lines -d \"Truncate all lines longer than screen width\" -n __bat_no_excl_args\n\ncomplete -c $bat -l color -x -a \"$color_opts\" -d \"When to use colored output\" -n __bat_no_excl_args\n\ncomplete -c $bat -l completion -x -a \"bash fish zsh ps1\" -d \"Show shell completion for a certain shell\" -n __fish_is_first_arg\n\ncomplete -c $bat -l config-dir -f -d \"Display location of configuration directory\" -n __fish_is_first_arg\n\ncomplete -c $bat -l config-file -f -d \"Display location of configuration file\" -n __fish_is_first_arg\n\ncomplete -c $bat -l decorations -x -a \"$decorations_opts\" -d \"When to use --style decorations\" -n __bat_no_excl_args\n\ncomplete -c $bat -l diagnostic -d \"Print diagnostic info for bug reports\" -n __fish_is_first_arg\ncomplete -c $bat -l quiet-empty -d \"Do not produce any output when the input is empty\" -n __fish_is_first_arg\n\ncomplete -c $bat -s d -l diff -d \"Only show lines with Git changes\" -n __bat_no_excl_args\n\ncomplete -c $bat -l diff-context -x -d \"Show N context lines around Git changes\" -n \"__fish_seen_argument -s d -l diff\"\n\ncomplete -c $bat -l generate-config-file -f -d \"Generates a default configuration file\" -n __fish_is_first_arg\n\ncomplete -c $bat -l file-name -x -d \"Specify the display name\" -n __bat_no_excl_args\n\ncomplete -c $bat -s f -l force-colorization -d \"Force color and decorations\" -n __bat_no_excl_args\n\ncomplete -c $bat -s h -d \"Print a concise overview\" -n __fish_is_first_arg\n\ncomplete -c $bat -l help -f -d \"Print all help information\" -n __fish_is_first_arg\n\ncomplete -c $bat -s H -l highlight-line -x -d \"Highlight line(s) N[:M]\" -n __bat_no_excl_args\n\ncomplete -c $bat -l ignored-suffix -x -d \"Ignore extension\" -n __bat_no_excl_args\n\ncomplete -c $bat -l italic-text -x -a \"$italic_text_opts\" -d \"When to use italic text in the output\" -n __bat_no_excl_args\n\ncomplete -c $bat -s l -l language -x -k -a \"(__bat_complete_list_languages)\" -d \"Set the syntax highlighting language\" -n __bat_no_excl_args\n\ncomplete -c $bat -l lessopen -d \"Enable the $LESSOPEN preprocessor\" -n __fish_is_first_arg\n\ncomplete -c $bat -s r -l line-range -x -d \"Only print lines [M]:[N] (either optional)\" -n __bat_no_excl_args\n\ncomplete -c $bat -l list-languages -f -d \"List syntax highlighting languages\" -n __fish_is_first_arg\n\ncomplete -c $bat -l list-themes -f -d \"List syntax highlighting themes\" -n __fish_is_first_arg\n\ncomplete -c $bat -s m -l map-syntax -x -a \"(__bat_complete_map_syntax)\" -d \"Map <glob pattern>:<language syntax>\" -n __bat_no_excl_args\n\ncomplete -c $bat -l no-config -d \"Do not use the configuration file\"\n\ncomplete -c $bat -l no-custom-assets -d \"Do not load custom assets\"\n\ncomplete -c $bat -l no-lessopen -d \"Disable the $LESSOPEN preprocessor if enabled (overrides --lessopen)\"\n\ncomplete -c $bat -l nonprintable-notation -x -a \"unicode caret\" -d \"Set notation for non-printable characters\" -n __bat_no_excl_args\n\ncomplete -c $bat -s n -l number -d \"Only show line numbers, no other decorations\" -n __bat_no_excl_args\n\ncomplete -c $bat -l no-paging -d \"Alias for --paging=never\" -n __bat_no_excl_args\n\ncomplete -c $bat -l pager -x -a \"$pager_opts\" -d \"Which pager to use\" -n __bat_no_excl_args\n\ncomplete -c $bat -l paging -x -a \"$paging_opts\" -d \"When to use the pager\" -n __bat_no_excl_args\n\ncomplete -c $bat -s p -l plain -d \"Show plain style\" -n __bat_no_excl_args\n\ncomplete -c $bat -l set-terminal-title -d \"Sets terminal title to filenames when using a pager\" -n __bat_no_excl_args\n\ncomplete -c $bat -s A -l show-all -d \"Show non-printable characters\" -n __bat_no_excl_args\n\ncomplete -c $bat -s s -l squeeze-blank -d \"Squeeze consecutive empty lines into a single empty line\" -n __bat_no_excl_args\n\ncomplete -c $bat -l squeeze-limit -x -d \"Set the maximum number of consecutive empty lines to be printed\" -n __bat_no_excl_args\n\ncomplete -c $bat -l strip-ansi -x -a \"auto never always\" -d \"Specify when to strip ANSI escape sequences from the input\" -n __bat_no_excl_args\n\ncomplete -c $bat -s p -l plain -d \"Disable decorations\" -n __bat_no_excl_args\n\ncomplete -c $bat -o pp -d \"Disable decorations and paging\" -n __bat_no_excl_args\n\ncomplete -c $bat -s P -d \"Disable paging\" -n __bat_no_excl_args\n\ncomplete -c $bat -l style -x -k -a \"(__fish_complete_list , __bat_style_opts)\" -d \"Specify which non-content elements to display\" -n __bat_no_excl_args\n\ncomplete -c $bat -l tabs -x -a \"$tabs_opts\" -d \"Set tab width\" -n __bat_no_excl_args\n\ncomplete -c $bat -l terminal-width -x -d \"Set terminal <width>, +<offset>, or -<offset>\" -n __bat_no_excl_args\n\ncomplete -c $bat -l theme -x -a \"$special_themes(command $bat --list-themes | command cat)\" -d \"Set the syntax highlighting theme\" -n __bat_no_excl_args\n\ncomplete -c $bat -l theme-dark -x -a \"(command $bat --list-themes | command cat)\" -d \"Set the syntax highlighting theme for dark backgrounds\" -n __bat_no_excl_args\n\ncomplete -c $bat -l theme-light -x -a \"(command $bat --list-themes | command cat)\" -d \"Set the syntax highlighting theme for light backgrounds\" -n __bat_no_excl_args\n\ncomplete -c $bat -s u -l unbuffered -d \"Enable unbuffered input reading for streaming use cases\" -n __bat_no_excl_args\n\ncomplete -c $bat -s V -l version -f -d \"Show version information\" -n __fish_is_first_arg\n\ncomplete -c $bat -l wrap -x -a \"$wrap_opts\" -d \"Text-wrapping mode\" -n __bat_no_excl_args\n\n# Sub-command 'cache' completions\n## Completion of the 'cache' command itself is removed for better UX\n## See https://github.com/sharkdp/bat/issues/2085#issuecomment-1271646802\n\ncomplete -c $bat -l build -f -d \"Parse new definitions into cache\" -n __bat_cache_no_excl\n\ncomplete -c $bat -l clear -f -d \"Reset definitions to defaults\" -n __bat_cache_no_excl\n\ncomplete -c $bat -l blank -f -d \"Create new data instead of appending\" -n \"__bat_cache_subcommand; and not __fish_seen_argument -l clear\"\n\ncomplete -c $bat -l source -x -a \"(__fish_complete_directories)\" -d \"Load syntaxes and themes from DIR\" -n \"__bat_cache_subcommand; and not __fish_seen_argument -l clear\"\n\ncomplete -c $bat -l target -x -a \"(__fish_complete_directories)\" -d \"Store cache in DIR\" -n __bat_cache_subcommand\n\ncomplete -c $bat -l acknowledgements -d \"Build acknowledgements.bin\" -n __bat_cache_no_excl\n\ncomplete -c $bat -s h -d \"Print a concise overview of $bat-cache help\" -n __bat_cache_no_excl\n\ncomplete -c $bat -l help -f -d \"Print all $bat-cache help\" -n __bat_cache_no_excl\n\n# vim:ft=fish\n"
  },
  {
    "path": "assets/completions/bat.zsh.in",
    "content": "#compdef {{PROJECT_EXECUTABLE}}\n\nlocal curcontext=\"$curcontext\" ret=1\nlocal -a state state_descr line\ntypeset -A opt_args\n\n(( $+functions[_{{PROJECT_EXECUTABLE}}_cache_subcommand] )) ||\n_{{PROJECT_EXECUTABLE}}_cache_subcommand() {\n    local -a args\n    args=(\n        '(-b --build -c --clear)'{-b,--build}'[initialize or update the syntax/theme cache]'\n        '(-b --build -c --clear)'{-c,--clear}'[remove the cached syntax definitions and themes]'\n        --source='[specify directory to load syntaxes and themes from]:directory:_files -/'\n        --target='[specify directory to store the cached syntax and theme set in]:directory:_files -/'\n        --blank'[create completely new syntax and theme sets]'\n        --acknowledgements'[build acknowledgements.bin]'\n        '(: -)'{-h,--help}'[show help information]'\n    )\n\n    _arguments -S -s $args\n}\n\n(( $+functions[_{{PROJECT_EXECUTABLE}}_main] )) ||\n_{{PROJECT_EXECUTABLE}}_main() {\n    local -a args\n    args=(\n        '(-A --show-all)'{-A,--show-all}'[show non-printable characters (space, tab, newline, ..)]'\n        --nonprintable-notation='[specify how to display non-printable characters when using --show-all]:notation:(caret unicode)'\n        --binary='[specify how to treat binary content]:behavior:(no-printing as-text)'\n        \\*{-p,--plain}'[show plain style (alias for `--style=plain`), repeat twice to disable automatic paging (alias for `--paging=never`)]'\n        '(-l --language)'{-l+,--language=}'[set the language for syntax highlighting]:language:->languages'\n        \\*{-H+,--highlight-line=}'[highlight specified block of lines]:start\\:end'\n        \\*--file-name='[specify the name to display for a file]:name:_files'\n        '(-d --diff)'--diff'[only show lines that have been added/removed/modified]'\n        --diff-context='[specify lines of context around added/removed/modified lines when using `--diff`]:lines'\n        --tabs='[set the tab width]:tab width [4]'\n        --wrap='[specify the text-wrapping mode]:mode [auto]:(auto never character word)'\n        '!(--wrap)'{-S,--chop-long-lines}\n        --terminal-width='[explicitly set the width of the terminal instead of determining it automatically]:width'\n        '(-n --number --diff --diff-context)'{-n,--number}'[show line numbers]'\n        --color='[specify when to use colors]:when:(auto never always)'\n        --italic-text='[use italics in output]:when:(always never)'\n        --decorations='[specify when to show the decorations]:when:(auto never always)'\n        '(-f --force-colorization)'--force-colorization'[force colorization and decorations]'\n        --paging='[specify when to use the pager]:when:(auto never always)'\n        '(-P --no-paging)'--no-paging'[alias for --paging=never]'\n        --pager='[determine which pager to use]:command:'\n        '(-m --map-syntax)'{-m+,--map-syntax=}'[map a glob pattern to an existing syntax name]: :->syntax-maps'\n        --ignored-suffix='[ignore extension]:suffix:'\n        '(--theme)'--theme='[set the color theme for syntax highlighting]:theme:->theme_preferences'\n        '(--theme-dark)'--theme-dark='[set the color theme for syntax highlighting for dark backgrounds]:theme:->themes'\n        '(--theme-light)'--theme-light='[set the color theme for syntax highlighting for light backgrounds]:theme:->themes'\n        '(: --list-themes --list-languages -L)'--list-themes'[show all supported highlighting themes]'\n        --squeeze-blank'[squeeze consecutive empty lines into a single empty line]'\n        --squeeze-limit='[set the maximum number of consecutive empty lines]:limit:'\n        --strip-ansi='[specify when to strip ANSI escape sequences]:when:(auto never always)'\n        --style='[comma-separated list of style elements to display]: : _values \"style [default]\"\n            default auto full plain changes header header-filename header-filesize grid rule numbers snip'\n        \\*{-r+,--line-range=}'[only print the specified line range]:start\\:end'\n        '(* -)'{-L,--list-languages}'[display all supported languages]'\n        '(-u --unbuffered)'--unbuffered'[enable unbuffered input reading for streaming use cases]'\n        --completion='[show shell completion for a certain shell]:shell:(bash fish zsh ps1)'\n        --set-terminal-title'[sets terminal title to filenames when using a pager]'\n        --diagnostic'[show diagnostic information for bug reports]'\n        --quiet-empty'[do not produce any output when the input is empty]'\n        -P'[disable paging]'\n        \"--no-config[don't use the configuration file]\"\n        \"--no-custom-assets[don't load custom assets]\"\n        '(--no-lessopen)'--lessopen'[enable the $LESSOPEN preprocessor]'\n        '(--lessopen)'--no-lessopen'[disable the $LESSOPEN preprocessor if enabled (overrides --lessopen)]'\n        '(* -)'--config-dir\"[show bat's configuration directory]\"\n        '(* -)'--config-file'[show path to the configuration file]'\n        '(* -)'--generate-config-file'[generate a default configuration file]'\n        '(* -)'--cache-dir\"[show bat's cache directory]\"\n        '(* -)'{-h,--help}'[show help information]'\n        '(* -)'{-V,--version}'[show version information]'\n        '*: :{ _files || compadd cache }'\n    )\n\n    _arguments -S -s $args && ret=0\n\n    case \"$state\" in\n        syntax-maps)\n          if ! compset -P '*:'; then\n            _message -e patterns 'glob pattern:language'\n            return\n          fi\n        ;& # fall-through\n\n        languages)\n            local IFS=$'\\n'\n            local -a languages\n            languages=( $({{PROJECT_EXECUTABLE}} --list-languages | awk -F':|,' '{ for (i = 1; i <= NF; ++i) printf(\"%s:%s\\n\", $i, $1) }') )\n\n            _describe 'language' languages && ret=0\n        ;;\n\n        themes)\n            local -a themes expl\n            themes=(${(f)\"$(_call_program themes {{PROJECT_EXECUTABLE}} --list-themes)\"} )\n\n            _wanted themes expl 'theme' compadd -a themes && ret=0\n        ;;\n        theme_preferences)\n            local -a themes expl\n            themes=(auto dark light auto:always auto:system ${(f)\"$(_call_program themes {{PROJECT_EXECUTABLE}} --list-themes)\"} )\n\n            _wanted themes expl 'theme' compadd -a themes && ret=0\n        ;;\n    esac\n\n    return ret\n}\n\ncase $words[2] in\n    cache)\n        ## Completion of the 'cache' command itself is removed for better UX\n        ## See https://github.com/sharkdp/bat/issues/2085#issuecomment-1271646802\n        shift words\n        (( CURRENT-- ))\n        curcontext=\"${curcontext%:*}-${words[1]}:\"\n        _{{PROJECT_EXECUTABLE}}_cache_subcommand\n    ;;\n\n    *)\n        _{{PROJECT_EXECUTABLE}}_main\n    ;;\nesac\n"
  },
  {
    "path": "assets/create.sh",
    "content": "#!/usr/bin/env bash\nset -euo pipefail\n\nASSET_DIR=\"$( cd \"$( dirname \"${BASH_SOURCE[0]}\" )\" && pwd )\"\nREPO_DIR=\"$ASSET_DIR/..\"\n\n# Ensure submodules are initialized.\nupdate_submodules() {\n\tlocal submodule\n\tlocal submodule_prompt=unspecified\n\tlocal submodule_path\n\n\t{\n\t\twhile { read -r submodule && read -r submodule_path; } <&3; do\n\t\t\tif ! [[ -d \"${REPO_DIR}/.git/modules/${submodule}\" ]] && [[ -d \"${REPO_DIR}/${submodule_path}\" ]]; then\n\t\t\t\tif [[ \"$submodule_prompt\" = \"unspecified\" ]]; then\n\t\t\t\t\techo \"One or more submodules were found to be uninitialized.\"\n\t\t\t\t\tprintf \"Initialize and update them? [Y/n] \"\n\t\t\t\t\tread -r submodule_prompt\n\t\t\t\tfi\n\n\t\t\t\tcase \"$submodule_prompt\" in\n\t\t\t\t\ty|yes|'') {\n\t\t\t\t\t\tgit -C \"$REPO_DIR\" submodule update --init \"$submodule_path\"\n\t\t\t\t\t};;\n\t\t\t\t\tn|no) {\n\t\t\t\t\t\treturn\n\t\t\t\t\t};;\n\t\t\t\t\t*) {\n\t\t\t\t\t\techo \"Unknown answer. Not updating submodules.\"\n\t\t\t\t\t};;\n\t\t\t\tesac\n\t\t\tfi\n\t\tdone\n\t} 3< <(git config --file \"${REPO_DIR}/.gitmodules\" --null --get-regexp path | xargs -0 printf \"%s\\n\" | sed 's/^submodule.//;s/.path$//')\n}\n\nif [ -t 0 ]; then\n\tupdate_submodules\nfi\n\n# Always remove the local cache to avoid any confusion\nbat cache --clear\n\n# TODO:\n# - Remove the JavaDoc patch once https://github.com/trishume/syntect/issues/222 has been fixed\n# - Remove the C# patch once https://github.com/sublimehq/Packages/pull/2331 has been merged\n\n# Apply patches\n(\n    cd \"$ASSET_DIR\"\n    for patch in patches/*.patch; do\n        patch --strip=0 < \"$patch\"\n    done\n)\n\nreverse_patches() {\n    (\n        cd \"$ASSET_DIR\"\n        for patch in patches/*.patch; do\n            patch --strip=0 --reverse <\"$patch\"\n        done\n    )\n}\n\n# Make sure to always reverse patches, even if the `bat cache` command fails or aborts\ntrap reverse_patches EXIT\n\nbat cache --build --blank --acknowledgements --source=\"$ASSET_DIR\" --target=\"$ASSET_DIR\"\n"
  },
  {
    "path": "assets/manual/bat.1.in",
    "content": ".TH {{PROJECT_EXECUTABLE_UPPERCASE}} \"1\"\n.SH NAME\n{{PROJECT_EXECUTABLE}} \\- a cat(1) clone with syntax highlighting and Git integration.\n.SH \"USAGE\"\n.IP \"{{PROJECT_EXECUTABLE}} [OPTIONS] [FILE]...\"\n.IP \"{{PROJECT_EXECUTABLE}} cache [CACHE-OPTIONS] [--build|--clear]\n.SH DESCRIPTION\n{{PROJECT_EXECUTABLE}} prints the syntax-highlighted content of a collection of FILEs to the\nterminal. If no FILE is specified, or when FILE is '-', it reads from standard input.\n\n{{PROJECT_EXECUTABLE}} supports a large number of programming and markup languages.\nIt also communicates with git(1) to show modifications with respect to the git index.\n{{PROJECT_EXECUTABLE}} automatically pipes its output through a pager (by default: less).\n\nWhenever the output of {{PROJECT_EXECUTABLE}} goes to a non-interactive terminal, i.e. when the\noutput is piped into another process or into a file, {{PROJECT_EXECUTABLE}} will act as a drop-in\nreplacement for cat(1) and fall back to printing the plain file contents,\nunless an explicit style is requested.\n\n.SH \"OPTIONS\"\nGeneral remarks: Command-line options like '-l'/'--language' that take values can be specified as\neither '--language value', '--language=value', '-l value' or '-lvalue'.\n.HP\n\\fB\\-A\\fR, \\fB\\-\\-show\\-all\\fR\n.IP\nShow non\\-printable characters like space, tab or newline. Use '\\-\\-tabs' to\ncontrol the width of the tab\\-placeholders.\n.HP\n\\fB\\-\\-nonprintable\\-notation\\fR <notation>\n.IP\nSpecify how to display non-printable characters when using \\-\\-show\\-all.\n\nPossible values:\n.RS\n.IP \"caret\"\nUse character sequences like ^G, ^J, ^@, .. to identify non-printable characters\n.IP \"unicode\"\nUse special Unicode code points to identify non-printable characters\n.RE\n.HP\n\\fB\\-\\-binary\\fR <behavior>\n.IP\nHow to treat binary content.\n\nPossible values:\n.RS\n.IP \"no\\-printing\"\nDo not print any binary content (default)\n.IP \"as\\-text\"\nTreat binary content as normal text\n.RE\n.HP\n\\fB\\-\\-completion\\fR <SHELL>\n.IP\nShow shell completion for a certain shell.\nPossible values: bash, fish, zsh, ps1\n.HP\n\\fB\\-p\\fR, \\fB\\-\\-plain\\fR\n.IP\nOnly show plain style, no decorations. This is an alias for\n\\&'\\-\\-style=plain'. When '\\-p' is used twice ('\\-pp'), it also disables\nautomatic paging (alias for '\\-\\-style=plain \\fB\\-\\-paging\\fR=\\fI\\,never\\/\\fR').\n.HP\n\\fB\\-l\\fR, \\fB\\-\\-language\\fR <language>\n.IP\nExplicitly set the language for syntax highlighting. The language can be\nspecified as a name (like 'C++' or 'LaTeX') or possible file extension\n(like 'cpp', 'hpp' or 'md'). Use '\\-\\-list\\-languages' to show all supported\nlanguage names and file extensions.\n.HP\n\\fB\\-H\\fR, \\fB\\-\\-highlight\\-line\\fR <N:M>...\n.IP\nHighlight the specified line ranges with a different background color. For example:\n.RS\n.IP \"\\-\\-highlight\\-line 40\"\nhighlights line 40\n.IP \"\\-\\-highlight\\-line 30:40\"\nhighlights lines 30 to 40\n.IP \"\\-\\-highlight\\-line :40\"\nhighlights lines 1 to 40\n.IP \"\\-\\-highlight\\-line 40:\"\nhighlights lines 40 to the end of the file\n.IP \"\\-\\-highlight\\-line 30:+10\"\nhighlights lines 30 to 40\n.RE\n.HP\n\\fB\\-\\-file\\-name\\fR <name>...\n.IP\nSpecify the name to display for a file. Useful when piping data to {{PROJECT_EXECUTABLE}} from STDIN when {{PROJECT_EXECUTABLE}} does not otherwise know the filename. Note that the provided file name is also used for syntax detection.\n.HP\n\\fB\\-d\\fR, \\fB\\-\\-diff\\fR\n.IP\nOnly show lines that have been added/removed/modified with respect to the Git index. Use '\\-\\-diff\\-context=N' to control how much context you want to see.\n.HP\n\\fB\\-\\-diff\\-context\\fR <N>...\n.IP\nInclude N lines of context around added/removed/modified lines when using '\\-\\-diff'.\n.HP\n\\fB\\-\\-tabs\\fR <T>\n.IP\nSet the tab width to T spaces. Use a width of 0 to pass tabs through directly\n.HP\n\\fB\\-\\-wrap\\fR <mode>\n.IP\nSpecify the text\\-wrapping mode (*auto*, never, character, word). The '\\-\\-terminal\\-width' option\ncan be used in addition to control the output width. In \\fBword\\fR mode, lines are broken at\nwhitespace boundaries. If a single word exceeds the terminal width, it falls back to\ncharacter wrapping.\n.HP\n\\fB\\-S\\fR, \\fB\\-\\-chop\\-long\\-lines\\fR\n.IP\nTruncate all lines longer than screen width. Alias for '\\-\\-wrap=never'.\n.HP\n\\fB\\-\\-terminal\\-width\\fR <width>\n.IP\nExplicitly set the width of the terminal instead of determining it automatically. If\nprefixed with '+' or '\\-', the value will be treated as an offset to the actual terminal\nwidth. See also: '\\-\\-wrap'.\n.HP\n\\fB\\-n\\fR, \\fB\\-\\-number\\fR\n.IP\nOnly show line numbers, no other decorations. This is an alias for '\\-\\-style=numbers'\n.HP\n\\fB\\-\\-color\\fR <when>\n.IP\nSpecify when to use colored output. The automatic mode only enables colors if an\ninteractive terminal is detected. Possible values: *auto*, never, always.\n.HP\n\\fB\\-\\-italic\\-text\\fR <when>\n.IP\nSpecify when to use ANSI sequences for italic text in the output. Possible values:\nalways, *never*.\n.HP\n\\fB\\-\\-decorations\\fR <when>\n.IP\nSpecify when to use the decorations that have been specified via '\\-\\-style'. The\nautomatic mode only enables decorations if an interactive terminal is detected. The\nalways mode will show decorations even when piping output. Possible\nvalues: *auto*, never, always.\n.HP\n\\fB\\-f\\fR, \\fB\\-\\-force\\-colorization\\fR\n.IP\nAlias for '--decorations=always --color=always'. This is useful \\\nif the output of {{PROJECT_EXECUTABLE}} is piped to another program, but you want \\\nto keep the colorization/decorations.\n.HP\n\\fB\\-\\-paging\\fR <when>\n.IP\nSpecify when to use the pager. To disable the pager, use \\&'\\-\\-paging=never' or its alias,\n\\fB-P\\fR. To disable the pager permanently, set BAT_PAGER to an empty string. To control\nwhich pager is used, see the '\\-\\-pager' option. Possible values: *auto*, never, always.\n.HP\n\\fB\\-\\-pager\\fR <command>\n.IP\nDetermine which pager is used. This option will override the PAGER and BAT_PAGER\nenvironment variables. The default pager is 'less'. If you provide '\\-\\-pager=builtin', use\nthe built-in 'minus' pager. To control when the pager is used, see the '\\-\\-paging' option.\nExample: '\\-\\-pager \"less \\fB\\-RF\\fR\"'.\n\nNote: By default, if the pager is set to 'less' (and no command-line options are specified), 'bat' will pass the following command line options to the pager: '-R'/'--RAW-CONTROL-CHARS', '-F'/'--quit-if-one-screen' and '-X'/'--no-init'. The last option ('-X') is only used for 'less' versions older than 530. The '-R' option is needed to interpret ANSI colors correctly. The second option ('-F') instructs less to exit immediately if the output size is smaller than the vertical size of the terminal. This is convenient for small files because you do not have to press 'q' to quit the pager. The third option ('-X') is needed to fix a bug with the '--quit-if-one-screen' feature in old versions of 'less'. Unfortunately, it also breaks mouse-wheel support in 'less'. If you want to enable mouse-wheel scrolling on older versions of 'less', you can pass just '-R' (as in the example above, this will disable the quit-if-one-screen feature). For less 530 or newer, it should work out of the box.\n.HP\n\\fB\\-m\\fR, \\fB\\-\\-map\\-syntax\\fR <glob-pattern:syntax-name>...\n.IP\nMap a glob pattern to an existing syntax name. The glob pattern is matched on the full\npath and the filename. For example, to highlight *.build files with the Python syntax,\nuse -m '*.build:Python'. To highlight files named '.myignore' with the Git Ignore\nsyntax, use -m '.myignore:Git Ignore'.\nNote that the right-hand side is the *name* of the syntax, not a file extension.\n.HP\n\\fB\\-\\-ignored\\-suffix\\fR <ignored-suffix>\n.IP\nIgnore extension. For example: 'bat \\-\\-ignored-suffix \".dev\" my_file.json.dev'\nwill use JSON syntax, and ignore '.dev'\n.HP\n\\fB\\-\\-theme\\fR <theme>\n.IP\nSet the theme for syntax highlighting. Use \\fB\\-\\-list\\-themes\\fP to see all available themes.\nTo set a default theme, add the \\fB\\-\\-theme=\"...\"\\fP option to the configuration file or\nexport the \\fBBAT_THEME\\fP environment variable (e.g.: \\fBexport BAT_THEME=\"...\"\\fP).\n\nSpecial values:\n.RS\n.IP \"auto (\\fIdefault\\fR)\"\nPicks a dark or light theme depending on the terminal's colors.\nUse \\fB-\\-theme\\-light\\fR and \\fB-\\-theme\\-dark\\fR to customize the selected theme.\n.IP \"auto:always\"\nVariation of \\fBauto\\fR where where the terminal's colors are detected even when the output is redirected.\n.IP \"auto:system (macOS only)\"\nVariation of \\fBauto\\fR where the color scheme is detected from the system-wide preference instead.\n.IP \"dark\"\nUse the dark theme specified by \\fB-\\-theme-dark\\fR.\n.IP \"light\"\nUse the light theme specified by \\fB-\\-theme-light\\fR.\n.RE\n.HP\n\\fB\\-\\-theme\\-dark\\fR <theme>\n.IP\nSets the theme name for syntax highlighting used when the terminal uses a dark background.\nTo set a default theme, add the \\fB\\-\\-theme-dark=\"...\"\\fP option to the configuration file or\nexport the \\fBBAT_THEME_DARK\\fP environment variable (e.g. \\fBexport BAT_THEME_DARK=\"...\"\\fP).\nThis option only has an effect when \\fB\\-\\-theme\\fP option is set to \\fBauto\\fR or \\fBdark\\fR.\n.HP\n\\fB\\-\\-theme\\-light\\fR <theme>\n.IP\nSets the theme name for syntax highlighting used when the terminal uses a light background.\nTo set a default theme, add the \\fB\\-\\-theme-light=\"...\"\\fP option to the configuration file or\nexport the \\fBBAT_THEME_LIGHT\\fP environment variable (e.g. \\fBexport BAT_THEME_LIGHT=\"...\"\\fP).\nThis option only has an effect when \\fB\\-\\-theme\\fP option is set to \\fBauto\\fR or \\fBlight\\fR.\n.HP\n\\fB\\-\\-list\\-themes\\fR\n.IP\nDisplay a list of supported themes for syntax highlighting.\n.HP\n\\fB\\-s\\fR, \\fB\\-\\-squeeze\\-blank\\fR\n.IP\nSqueeze consecutive empty lines into a single empty line.\n.HP\n\\fB\\-\\-squeeze\\-limit\\fR <squeeze-limit>\n.IP\nSet the maximum number of consecutive empty lines to be printed.\n.HP\n\\fB\\-\\-strip\\-ansi\\fR <when>\n.IP\nSpecify when to strip ANSI escape sequences from the input. The automatic mode will remove\nescape sequences unless the syntax highlighting language is plain text. Possible values:\nauto, always, *never*.\n.HP\n\\fB\\-\\-style\\fR <style\\-components>\n.IP\nConfigure which elements (line numbers, file headers, grid borders, Git modifications,\n\\&..) to display in addition to the file contents. The argument is a comma\\-separated list\nof components to display (e.g. 'numbers,changes,grid') or a pre\\-defined style ('full').\nTo set a default style, add the '\\-\\-style=\"..\"' option to the configuration file or\nexport the BAT_STYLE environment variable (e.g.: export BAT_STYLE=\"..\").\n.IP\nWhen styles are specified in multiple places, the \"nearest\" set of styles take precedence.\nThe command\\-line arguments are the highest priority, followed by the BAT_STYLE environment\nvariable, and then the configuration file. If any set of styles consists entirely of\ncomponents prefixed with \"+\" or \"\\-\", it will modify the previous set of styles instead of\nreplacing them.\n.IP\nBy default, the following components are enabled:\nchanges, grid, header\\-filename, numbers, snip\n.IP\nPossible values: *default*, full, auto, plain, changes, header, header-filename, header-filesize, grid,\nrule, numbers, snip.\n.HP\n\\fB\\-r\\fR, \\fB\\-\\-line\\-range\\fR <N:M>...\n.IP\nOnly print the specified range of lines for each file. For example:\n.RS\n.IP \"\\-\\-line\\-range 30:40\"\nprints lines 30 to 40\n.IP \"\\-\\-line\\-range :40\"\nprints lines 1 to 40\n.IP \"\\-\\-line\\-range 40:\"\nprints lines 40 to the end of the file\n.IP \"\\-\\-line\\-range 30:+10\"\nprints lines 30 to 40\n.RE\n.HP\n\\fB\\-L\\fR, \\fB\\-\\-list\\-languages\\fR\n.IP\nDisplay a list of supported languages for syntax highlighting.\n.HP\n\\fB\\-u\\fR, \\fB\\-\\-unbuffered\\fR\n.IP\nEnable unbuffered input reading. When this flag is set, bat will display data as soon as it\nis available, without waiting for a complete line. This is useful for streaming use cases like\n\\&'tail \\-f logfile | bat \\-u \\-\\-paging=never'. Note that line numbers are automatically disabled\nin unbuffered mode, and syntax highlighting may be imperfect on partial lines.\n.HP\n\\fB\\-\\-no\\-custom\\-assets\\fR\n.IP\nDo not load custom assets.\n.HP\n\\fB\\-\\-config\\-dir\\fR\n.IP\nShow bat's configuration directory.\n.HP\n\\fB\\-\\-cache\\-dir\\fR\n.IP\nShow bat's cache directory.\n.HP\n\\fB\\-\\-diagnostic\\fR\n.IP\nShow diagnostic information for bug reports.\n.HP\n\\fB\\-\\-quiet\\-empty\\fR\n.IP\nDo not produce any output when the input is empty (e.g. an empty file or empty stdin). This is useful in scripts where silent behavior is preferred for empty input.\n.HP\n\\fB\\-\\-acknowledgements\\fR\n.IP\nShow acknowledgements.\n.HP\n\\fB\\-\\-set\\-terminal\\-title\\fR\n.IP\nSets terminal title to filenames when using a pager.\n.HP\n\\fB\\-h\\fR, \\fB\\-\\-help\\fR\n.IP\nPrint this help message.\n.HP\n\\fB\\-V\\fR, \\fB\\-\\-version\\fR\n.IP\nShow version information.\n.SH \"POSITIONAL ARGUMENTS\"\n.HP\n\\fB<FILE>...\\fR\n.IP\nFiles to print and concatenate. Use a dash ('\\-') or no argument at all to read from\nstandard input.\n.SH \"SUBCOMMANDS\"\n.HP\n\\fBcache\\fR - Modify the syntax\\-definition and theme cache.\n.SH \"FILES\"\n{{PROJECT_EXECUTABLE}} can also be customized with a configuration file. The location of the file\nis dependent on your operating system. To get the default path for your system, call:\n\n\\fB{{PROJECT_EXECUTABLE}} --config-file\\fR\n\nAlternatively, you can use the BAT_CONFIG_PATH environment variable to point {{PROJECT_EXECUTABLE}} to a non-default\nlocation of the configuration file.\n\nTo generate a default configuration file, call:\n\n\\fB{{PROJECT_EXECUTABLE}} --generate-config-file\\fR\n\nThese are related options:\n.HP\n\\fB\\-\\-config\\-file\\fR\n.IP\nShow path to the configuration file.\n.HP\n\\fB\\-\\-generate-config\\-file\\fR\n.IP\nGenerates a default configuration file.\n.HP\n\\fB\\-\\-no\\-config\\fR\n.IP\nDo not use the configuration file.\n.SH \"ADDING CUSTOM LANGUAGES\"\n{{PROJECT_EXECUTABLE}} supports Sublime Text \\fB.sublime-syntax\\fR language files, and can be\ncustomized to add additional languages to your local installation. To do this, add the \\fB.sublime-syntax\\fR language\nfiles to `\\fB$({{PROJECT_EXECUTABLE}} --config-dir)/syntaxes\\fR` and run `\\fB{{PROJECT_EXECUTABLE}} cache --build\\fR`.\n\n\\fBExample:\\fR\n\n.RS 0.5i\nmkdir -p \"$({{PROJECT_EXECUTABLE}} --config-dir)/syntaxes\"\n.br\ncd \"$({{PROJECT_EXECUTABLE}} --config-dir)/syntaxes\"\n\n# Put new '.sublime-syntax' language definition files\n.br\n# in this folder (or its subdirectories), for example:\n.br\ngit clone https://github.com/tellnobody1/sublime-purescript-syntax\n\n# And then build the cache.\n.br\n{{PROJECT_EXECUTABLE}} cache --build\n.RE\n\nOnce the cache is built, the new language will be visible in `\\fB{{PROJECT_EXECUTABLE}} --list-languages\\fR`.\n.br\nIf you ever want to remove the custom languages, you can clear the cache with `\\fB{{PROJECT_EXECUTABLE}} cache --clear\\fR`.\n\n.SH \"ADDING CUSTOM THEMES\"\nSimilarly to custom languages, {{PROJECT_EXECUTABLE}} supports Sublime Text \\fB.tmTheme\\fR themes.\nThese can be installed to `\\fB$({{PROJECT_EXECUTABLE}} --config-dir)/themes\\fR`, and are added to the cache with\n`\\fB{{PROJECT_EXECUTABLE}} cache --build`.\n\n.SH \"INPUT PREPROCESSOR\"\nMuch like less(1) does, {{PROJECT_EXECUTABLE}} supports input preprocessors via the LESSOPEN and LESSCLOSE environment variables.\nIn addition, {{PROJECT_EXECUTABLE}} attempts to be as compatible with less's preprocessor implementation as possible.\n\nTo use the preprocessor, call:\n\n\\fB{{PROJECT_EXECUTABLE}} --lessopen\\fR\n\nAlternatively, the preprocessor may be enabled by default by adding the '\\-\\-lessopen' option to the configuration file.\n\nTo temporarily disable the preprocessor if it is enabled by default, call:\n\n\\fB{{PROJECT_EXECUTABLE}} --no-lessopen\\fR\n\nThese are related options:\n.HP\n\\fB\\-\\-lessopen\\fR\n.IP\nEnable the $LESSOPEN preprocessor.\n.HP\n\\fB\\-\\-no\\-lessopen\\fR\n.IP\nDisable the $LESSOPEN preprocessor if enabled (overrides --lessopen)\n.PP\nFor more information, see the \"INPUT PREPROCESSOR\" section of less(1).\n\n.SH \"MORE INFORMATION\"\n\nFor more information and up-to-date documentation, visit the {{PROJECT_EXECUTABLE}} repo:\n.br\n\\fBhttps://github.com/sharkdp/bat\\fR\n"
  },
  {
    "path": "assets/patches/1337.tmTheme.patch",
    "content": "diff --git themes/1337-Scheme/1337.tmTheme themes/1337-Scheme/1337.tmTheme\nindex fdff5bf..8cfc888 100644\n--- themes/1337-Scheme/1337.tmTheme\n+++ themes/1337-Scheme/1337.tmTheme\n@@ -280,7 +280,7 @@ SOFTWARE.\n \t\t\t<key>name</key>\n \t\t\t<string>PHP Namespaces</string>\n \t\t\t<key>scope</key>\n-\t\t\t<string>support.other.namespace, entity.name.type.namespace</string>\n+\t\t\t<string>support.other.namespace, entity.name.type.namespace, entity.name</string>\n \t\t\t<key>settings</key>\n \t\t\t<dict>\n \t\t\t\t<key>foreground</key>\n@@ -561,7 +561,7 @@ SOFTWARE.\n \t\t    <key>name</key>\n \t\t    <string>diff.header</string>\n \t\t    <key>scope</key>\n-\t\t    <string>meta.diff, meta.diff.header</string>\n+\t\t    <string>meta.diff, meta.diff.header, markup.heading</string>\n \t\t    <key>settings</key>\n \t\t    <dict>\n \t\t\t<key>foreground</key>\n"
  },
  {
    "path": "assets/patches/C#.sublime-syntax.patch",
    "content": "diff --git syntaxes/01_Packages/C#/C#.sublime-syntax syntaxes/01_Packages/C#/C#.sublime-syntax\nindex ed494f8b..01b710e8 100644\n--- syntaxes/01_Packages/C#/C#.sublime-syntax\n+++ syntaxes/01_Packages/C#/C#.sublime-syntax\n@@ -1312,7 +1312,7 @@ contexts:\n             2: punctuation.separator.cs\n             3: punctuation.section.brackets.end.cs\n             4: keyword.operator.pointer.cs\n-    - match: \\((?=(?:[^,)(]*|\\([^\\)]*\\))*,)\n+    - match: \\((?=(?:[^,)(]|\\([^\\)]*\\))*,)\n       scope: punctuation.section.group.begin.cs\n       push:\n         - meta_scope: meta.group.tuple.cs\n"
  },
  {
    "path": "assets/patches/Groff.sublime-syntax.patch",
    "content": "diff --git syntaxes/02_Extra/Groff/Man Page/Man Page.sublime-syntax syntaxes/02_Extra/Groff/Man Page/Man Page.sublime-syntax\nindex 57834af..6648664 100644\n--- syntaxes/02_Extra/Groff/Man Page/Man Page.sublime-syntax\t\n+++ syntaxes/02_Extra/Groff/Man Page/Man Page.sublime-syntax\t\n@@ -4,9 +4,9 @@\n #   - man-pages(7)\n #   - groff(7)\n ---\n-name: Man Page (groff/troff)\n+name: Groff/troff\n scope: text.groff\n-file_extensions: [man, groff, troff, '1', '2', '3', '4', '5', '6', '7']\n+file_extensions: [groff, troff, '1', '2', '3', '4', '5', '6', '7', '8', '9']\n \n contexts:\n   main:\n"
  },
  {
    "path": "assets/patches/JavaDoc.sublime-syntax.patch",
    "content": "diff --git syntaxes/01_Packages/Java/JavaDoc.sublime-syntax syntaxes/01_Packages/Java/JavaDoc.sublime-syntax\nindex 422a6a9..40a741e 100644\n--- syntaxes/01_Packages/Java/JavaDoc.sublime-syntax\n+++ syntaxes/01_Packages/Java/JavaDoc.sublime-syntax\n@@ -13,7 +13,7 @@ variables:\n contexts:\n   prototype:\n     # https://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#leadingasterisks\n-    - match: ^\\s*(\\*)\\s*(?!\\s*@)\n+    - match: ^\\s*(\\*)(?!/)\\s*(?!\\s*@)\n       captures:\n         1: punctuation.definition.comment.javadoc\n \n"
  },
  {
    "path": "assets/patches/JavaScript.sublime-syntax.patch",
    "content": "Submodule assets/syntaxes/01_Packages contains modified content\ndiff --git syntaxes/01_Packages/JavaScript/JavaScript.sublime-syntax syntaxes/01_Packages/JavaScript/JavaScript.sublime-syntax\nindex 05a4fed6..78a7bf55 100644\n--- syntaxes/01_Packages/JavaScript/JavaScript.sublime-syntax\n+++ syntaxes/01_Packages/JavaScript/JavaScript.sublime-syntax\n@@ -5,7 +5,7 @@ name: JavaScript\n file_extensions:\n   - js\n   - htc\n-first_line_match: ^#!\\s*/.*\\b(node|js)\\b\n+first_line_match: ^#!\\s*/.*\\b(node|bun|js)\\b\n scope: source.js\n variables:\n   bin_digit: '[01_]'\n"
  },
  {
    "path": "assets/patches/Lisp.sublime-syntax.patch",
    "content": "diff --git syntaxes/01_Packages/Lisp/Lisp.sublime-syntax syntaxes/01_Packages/Lisp/Lisp.sublime-syntax\nindex 50e5dad3..44a9795d 100644\n--- syntaxes/01_Packages/Lisp/Lisp.sublime-syntax\n+++ syntaxes/01_Packages/Lisp/Lisp.sublime-syntax\n@@ -1,11 +1,14 @@\n %YAML 1.2\n ---\n-# http://www.sublimetext.com/docs/3/syntax.html\n+# https://www.sublimetext.com/docs/syntax.html\n #\n # `Common Lisp` Language Reference:\n-# http://www.cs.cmu.edu/Groups/AI/html/cltl/clm/index.html\n-#\n+# https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/index.html\n+# https://www.lispworks.com/documentation/lw70/CLHS/Front/Contents.htm\n name: Lisp\n+scope: source.lisp\n+version: 2\n+\n file_extensions:\n   - lisp\n   - cl\n@@ -17,108 +20,2268 @@ file_extensions:\n   - ss\n   - lsp\n   - fasl # Scheme dialect of Lisp\n-scope: source.lisp\n+  - sld  # Scheme r7rs library\n+\n+first_line_match: |-\n+  (?xi:\n+    ^ \\s* ; .*? -\\*- .*? \\blisp\\b .*? -\\*-  # editorconfig\n+  )\n+\n+###############################################################################\n+\n contexts:\n   main:\n-    - include: comments\n+    - include: statements\n+\n+  statements:\n     - include: parens\n+    - include: expressions\n+    - match: \\)\n+      scope: invalid.illegal.stray-bracket-end.lisp\n \n   expressions:\n     - include: comments\n     - include: numbers\n-    - include: constants\n     - include: strings\n-    - include: variables\n+    - include: annotations\n+    - include: keywords\n+    - include: quotes\n+    - include: macros\n+    - include: modifiers\n+    - include: identifiers\n+\n+###[ COMMENTS ]################################################################\n+\n+  comments:\n+    - include: line-comments\n+    - include: block-comments\n+    - match: \\|#\n+      scope: invalid.illegal.stray-comment-end.lisp\n+\n+  block-comments:\n+    - match: '#\\|'\n+      scope: punctuation.definition.comment.begin.lisp\n+      push: block-comment-body\n+\n+  block-comment-body:\n+    - meta_scope: comment.block.lisp\n+    - match: '\\|#'\n+      scope: punctuation.definition.comment.end.lisp\n+      pop: 1\n+    - include: block-comments\n+\n+  line-comments:\n+    - match: ;+\n+      scope: punctuation.definition.comment.lisp\n+      push: line-comment-body\n+\n+  line-comment-body:\n+    - meta_scope: comment.line.semicolon.lisp\n+    - match: $\\n?\n+      pop: 1\n+\n+###[ PARENTHESES ]#############################################################\n+\n+  parens:\n+    - match: \\(\n+      scope: punctuation.section.parens.begin.lisp\n+      push:\n+        - paren-body\n+        - paren-begin\n+\n+  paren-begin:\n+    - include: class-declaration\n+    - include: function-declaration\n+    - include: macro-declaration\n+    - include: struct-declaration\n+    - include: type-declaration\n+    - include: variable-declaration\n+    - include: other-declaration\n+    - include: declare\n     - include: control\n-    - include: functions\n-    - include: operators\n+    - include: loop\n+    - include: operator\n+    - include: quote\n+    - include: namespaces\n+    - include: builtin-function\n+    - include: other-function\n+    - include: comments\n+    - include: else-pop\n \n-  variables:\n-    - match: (\\*)(?i:trace-output|terminal-io|suppress-series-warnings|standard-output|standard-input|readtable|read-suppress|read-eval|read-default-float-format|read-base|random-state|query-io|print-right-margin|print-readably|print-radix|print-pretty|print-pprint-dispatch|print-miser-width|print-lines|print-level|print-length|print-gensym|print-escape|print-circle|print-case|print-base|print-array|package|modules|macroexpand-hook|load-verbose|load-truename|load-print|load-pathname|gensym-counter|features|evalhook|error-output|default-pathname-defaults|debugger-hook|debug-io|compile-verbose|compile-print|compile-file-truename|compile-file-pathname|break-on-warnings|break-on-signals|applyhook)(\\*)\n-      scope: variable.language.lisp\n+  paren-body:\n+    - meta_scope: meta.parens.lisp\n+    - include: paren-end\n+    - include: parens\n+    - include: expressions\n+\n+  paren-end:\n+    - meta_include_prototype: false\n+    - meta_scope: meta.parens.lisp\n+    - match: \\)\n+      scope: punctuation.section.parens.end.lisp\n+      pop: 1\n+\n+###[ LISTS ]###################################################################\n+\n+  expect-list:\n+    # a list expression\n+    # skips function-like parentheses on next level\n+    - meta_include_prototype: false\n+    - match: \\(\n+      scope: punctuation.section.parens.begin.lisp\n+      set: paren-body\n+    - include: comments\n+    - include: else-pop\n+\n+  expect-lists-list:\n+    # a list of list expressions\n+    # skips function-like parentheses on next 2 levels\n+    - meta_include_prototype: false\n+    - match: \\(\n+      scope: punctuation.section.parens.begin.lisp\n+      set: lists-list-body\n+    - include: comments\n+    - include: else-pop\n+\n+  lists-list-body:\n+    - meta_scope: meta.parens.lisp\n+    - include: paren-end\n+    - include: lists\n+    - include: expressions\n+\n+  lists:\n+    - match: \\(\n+      scope: punctuation.section.parens.begin.lisp\n+      push: paren-body\n+\n+###[ QUOTED EXPRESSIONS ]######################################################\n+\n+  quotes:\n+    # abbreviation of (quote ...) function\n+    - match: \\'\n+      scope: punctuation.definition.quoted.lisp\n+      push: quoted-content\n+\n+  quoted-content:\n+    - meta_include_prototype: false\n+    - match: \\(\n+      scope: punctuation.section.parens.begin.lisp\n+      set: quoted-paren-body\n+    # A quoted symbol evaluates to the symbol.\n+    - match: '{{identifier}}'\n+      scope: constant.other.symbol.lisp\n       captures:\n-        1: punctuation.definition.variable.begin.lisp\n-        2: punctuation.definition.variable.end.lisp\n-    - match: (\\*)(\\S*)(\\*)\n-      scope: variable.other.global.lisp\n+        1: punctuation.definition.symbol.begin.lisp\n+        2: punctuation.definition.symbol.end.lisp\n+      pop: 1\n+    - include: immediately-pop\n+\n+  quoted-parens:\n+    - match: \\(\n+      scope: punctuation.section.parens.begin.lisp\n+      push: quoted-paren-body\n+\n+  quoted-paren-body:\n+    - meta_scope: meta.parens.lisp\n+    - include: paren-end\n+    - include: quoted-parens\n+    - include: expressions\n+\n+###[ CLASS DECLARATIONS ]######################################################\n+\n+  class-declaration:\n+    # https://www.lispworks.com/documentation/lw70/CLHS/Body/m_defcla.htm\n+    - match: (?i:defclass|define-class){{break}}\n+      scope: meta.class.lisp keyword.declaration.class.lisp\n+      set:\n+        - class-declaration-slots\n+        - class-declaration-parent-list\n+        - class-declaration-name\n+\n+  class-declaration-name:\n+    - match: '{{identifier}}'\n+      scope: entity.name.class.lisp\n       captures:\n-        1: punctuation.definition.variable.begin.lisp\n-        3: punctuation.definition.variable.end.lisp\n+        1: punctuation.definition.symbol.begin.lisp\n+        2: punctuation.definition.symbol.end.lisp\n+      pop: 1\n+    - include: comments\n+    - include: else-pop\n+\n+  class-declaration-parent-list:\n+    - meta_include_prototype: false\n+    - match: \\(\n+      scope: punctuation.section.parens.begin.lisp\n+      set: class-declaration-parent-list-body\n+    - include: comments\n+    - include: else-pop\n+\n+  class-declaration-parent-list-body:\n+    - meta_scope: meta.parens.lisp\n+    - include: namespaces\n+    - match: '{{identifier}}'\n+      scope: entity.other.inherited-class.lisp\n+      captures:\n+        1: punctuation.definition.symbol.begin.lisp\n+        2: punctuation.definition.symbol.end.lisp\n+    - include: comments\n+    - include: paren-end\n+\n+  class-declaration-slots:\n+    - meta_content_scope: meta.class.lisp\n+    - include: paren-pop\n+    - include: lists\n+    - include: expressions\n+\n+###[ FUNCTION DECLARATIONS ]###################################################\n+\n+  function-declaration:\n+    # https://www.lispworks.com/documentation/HyperSpec/Body/s_lambda.htm\n+    - match: (?i:lambda){{break}}\n+      scope: meta.function.lisp keyword.declaration.function.inline.lisp\n+      set:\n+        - function-body\n+        - function-parameter-list\n+    # https://www.lispworks.com/documentation/HyperSpec/Body/m_defun.htm\n+    - match: (?i:def(?:[a-z]+f)?un|defgeneric|define-(?:command(?:-global)?|parenscript)){{break}}\n+      scope: meta.function.lisp keyword.declaration.function.lisp\n+      set:\n+        - function-body\n+        - function-parameter-list\n+        - function-declaration-name\n+    # https://www.lispworks.com/documentation/HyperSpec/Body/m_defmet.htm\n+    - match: (?i:defmethod){{break}}\n+      scope: meta.function.lisp keyword.declaration.function.lisp\n+      set:\n+        - function-body\n+        - function-parameter-list\n+        - method-qualifier\n+        - function-declaration-name\n+    # https://www.lispworks.com/documentation/HyperSpec/Body/s_flet_.htm\n+    - match: (?i:flet|labels){{break}}\n+      scope: keyword.declaration.function.lisp\n+      set: function-declaration-list\n+\n+  function-declaration-list:\n+    - meta_include_prototype: false\n+    - match: \\(\n+      scope: punctuation.section.parens.begin.lisp\n+      set: function-declaration-list-body\n+    - include: comments\n+    - include: else-pop\n+\n+  function-declaration-list-body:\n+    - meta_scope: meta.parens.lisp\n+    - match: \\(\n+      scope: punctuation.section.parens.begin.lisp\n+      push:\n+        - paren-end\n+        - function-body\n+        - function-parameter-list\n+        - function-declaration-name\n+    - include: comments\n+    - include: paren-end\n+\n+  function-declaration-name:\n+    - include: namespaces\n+    - match: '{{identifier}}'\n+      scope: entity.name.function.lisp\n+      captures:\n+        1: punctuation.definition.symbol.begin.lisp\n+        2: punctuation.definition.symbol.end.lisp\n+      pop: 1\n+    - include: comments\n+    - include: else-pop\n+\n+  method-qualifier:\n+    # qualifiers may be anything but lists\n+    - include: expressions\n+    - include: else-pop\n+\n+  function-parameter-list:\n+    - meta_include_prototype: false\n+    - match: \\(\n+      scope: punctuation.section.parameters.begin.lisp\n+      set: function-parameter-list-body\n+    - include: comments\n+    - include: else-pop\n+\n+  function-parameter-list-body:\n+    - clear_scopes: 1\n+    - meta_scope: meta.function.parameters.lisp\n+    - match: \\)\n+      scope: punctuation.section.parameters.end.lisp\n+      pop: 1\n+    - include: comments\n+    - include: annotations\n+    - include: keywords\n+    - include: modifiers\n+    - include: parameters\n+\n+  function-body:\n+    - meta_content_scope: meta.function.lisp\n+    - include: paren-pop\n+    - include: parens\n+    - include: expressions\n+\n+###[ MACRO DECLARATIONS ]######################################################\n+\n+  macro-declaration:\n+    # https://www.lispworks.com/documentation/HyperSpec/Body/m_defmac.htm\n+    - match: (?i:defmacro){{break}}\n+      scope: meta.macro.lisp keyword.declaration.macro.lisp\n+      set:\n+        - macro-body\n+        - macro-parameter-list\n+        - macro-declaration-name\n+    # https://www.lispworks.com/documentation/HyperSpec/Body/s_flet_.htm\n+    - match: (?i:macrolet){{break}}\n+      scope: keyword.declaration.macro.lisp\n+      set: macro-declaration-list\n+\n+  macro-declaration-list:\n+    - meta_include_prototype: false\n+    - match: \\(\n+      scope: punctuation.section.parens.begin.lisp\n+      set: macro-declaration-list-body\n+    - include: comments\n+    - include: else-pop\n+\n+  macro-declaration-list-body:\n+    - meta_scope: meta.parens.lisp\n+    - match: \\(\n+      scope: punctuation.section.parens.begin.lisp\n+      push:\n+        - paren-end\n+        - macro-body\n+        - macro-parameter-list\n+        - macro-declaration-name\n+    - include: comments\n+    - include: paren-end\n+\n+  macro-declaration-name:\n+    - include: namespaces\n+    - match: '{{identifier}}'\n+      scope: entity.name.macro.lisp\n+      captures:\n+        1: punctuation.definition.symbol.begin.lisp\n+        2: punctuation.definition.symbol.end.lisp\n+      pop: 1\n+    - include: comments\n+    - include: else-pop\n+\n+  macro-parameter-list:\n+    - meta_include_prototype: false\n+    - match: \\(\n+      scope: punctuation.section.parameters.begin.lisp\n+      set: macro-parameter-list-body\n+    - include: comments\n+    - include: else-pop\n+\n+  macro-parameter-list-body:\n+    - clear_scopes: 1\n+    - meta_scope: meta.macro.parameters.lisp\n+    - match: \\)\n+      scope: punctuation.section.parameters.end.lisp\n+      pop: 1\n+    - include: comments\n+    - include: annotations\n+    - include: keywords\n+    - include: modifiers\n+    - include: parameters\n+\n+  macro-body:\n+    - meta_content_scope: meta.macro.lisp\n+    - include: paren-pop\n+    - include: parens\n+    - include: expressions\n+\n+###[ STRUCT DECLARATIONS ]#####################################################\n+\n+  struct-declaration:\n+    # https://www.lispworks.com/documentation/lw70/CLHS/Body/m_defstr.htm\n+    - match: (?i:defstruct|define-struct){{break}}\n+      scope: meta.struct.lisp keyword.declaration.struct.lisp\n+      set:\n+        - struct-declaration-body\n+        - struct-declaration-name\n+\n+  struct-declaration-name:\n+    - meta_include_prototype: false\n+    - match: \\(\n+      scope: punctuation.section.parens.begin.lisp\n+      set:\n+        - paren-body\n+        - struct-declaration-qualified-name\n+    - include: struct-declaration-qualified-name\n+\n+  struct-declaration-qualified-name:\n+    - include: namespaces\n+    - match: '{{identifier}}'\n+      scope: entity.name.struct.lisp\n+      captures:\n+        1: punctuation.definition.symbol.begin.lisp\n+        2: punctuation.definition.symbol.end.lisp\n+      pop: 1\n+    - include: comments\n+    - include: else-pop\n+\n+  struct-declaration-body:\n+    - meta_content_scope: meta.struct.lisp\n+    - include: paren-pop\n+    - include: lists\n+    - include: expressions\n+\n+###[ TYPE DECLARATIONS ]#######################################################\n+\n+  type-declaration:\n+    # https://www.lispworks.com/documentation/lw70/CLHS/Body/m_deftp.htm\n+    - match: (?i:deftype|define-type){{break}}\n+      scope: meta.type.lisp keyword.declaration.type.lisp\n+      set:\n+        - type-body\n+        - type-parameter-list\n+        - type-declaration-name\n+\n+  type-declaration-name:\n+    - include: namespaces\n+    - match: '{{identifier}}'\n+      scope: entity.name.type.lisp\n+      captures:\n+        1: punctuation.definition.symbol.begin.lisp\n+        2: punctuation.definition.symbol.end.lisp\n+      pop: 1\n+    - include: comments\n+    - include: else-pop\n+\n+  type-parameter-list:\n+    - meta_include_prototype: false\n+    - match: \\(\n+      scope: punctuation.section.parameters.begin.lisp\n+      set: type-parameter-list-body\n+    - include: comments\n+    - include: else-pop\n+\n+  type-parameter-list-body:\n+    - clear_scopes: 1\n+    - meta_scope: meta.type.parameters.lisp\n+    - match: \\)\n+      scope: punctuation.section.parameters.end.lisp\n+      pop: 1\n+    - include: comments\n+    - include: annotations\n+    - include: keywords\n+    - include: modifiers\n+    - include: parameters\n+\n+  type-body:\n+    - meta_content_scope: meta.type.lisp\n+    - include: paren-pop\n+    - include: parens\n+    - include: expressions\n+\n+###[ VARIABLE DECLARATIONS ]###################################################\n+\n+  variable-declaration:\n+    # https://www.lispworks.com/documentation/HyperSpec/Body/s_let_l.htm\n+    - match: (?i:let\\*?){{break}}\n+      scope: keyword.declaration.variable.lisp\n+      set: variable-declaration-list\n+    # https://www.lispworks.com/documentation/lw445/CLHS/Body/m_defcon.htm\n+    - match: (?i:defconstant){{break}}\n+      scope: meta.declaration.lisp keyword.declaration.constant.lisp\n+      set: constant-declaration-name\n+    # https://www.lispworks.com/documentation/HyperSpec/Body/m_defpar.htm\n+    - match: (?i:defparameter|defvar){{break}}\n+      scope: meta.declaration.lisp keyword.declaration.variable.lisp\n+      set: variable-declaration-name\n+\n+  variable-declaration-list:\n+    - meta_include_prototype: false\n+    - match: \\(\n+      scope: punctuation.section.parens.begin.lisp\n+      set: variable-declaration-list-body\n+    - include: comments\n+    - include: else-pop\n+\n+  variable-declaration-list-body:\n+    - meta_scope: meta.parens.lisp\n+    - match: \\(\n+      scope: punctuation.section.parens.begin.lisp\n+      push:\n+        - paren-body\n+        - variable-declaration-name\n+    - match: '{{identifier}}'\n+      scope: meta.declaration.lisp variable.other.lisp\n+      captures:\n+        1: punctuation.definition.symbol.begin.lisp\n+        2: punctuation.definition.symbol.end.lisp\n+    - include: comments\n+    - include: paren-end\n+\n+  constant-declaration-name:\n+    - meta_content_scope: meta.declaration.lisp\n+    - match: '{{identifier}}'\n+      scope: meta.declaration.lisp constant.other.lisp\n+      captures:\n+        1: punctuation.definition.symbol.begin.lisp\n+        2: punctuation.definition.symbol.end.lisp\n+      pop: 1\n+    - include: comments\n+    - include: else-pop\n+\n+  variable-declaration-name:\n+    - meta_content_scope: meta.declaration.lisp\n+    - match: '{{identifier}}'\n+      scope: meta.declaration.lisp variable.other.lisp\n+      captures:\n+        1: punctuation.definition.symbol.begin.lisp\n+        2: punctuation.definition.symbol.end.lisp\n+      pop: 1\n+    - include: comments\n+    - include: else-pop\n+\n+###[ OTHER DECLARATIONS ]######################################################\n+\n+  other-declaration:\n+    - match: '{{declaration_keywords}}'\n+      scope: keyword.declaration.lisp\n+      pop: 1\n+\n+###[ DECLARE STATEMENTS ]######################################################\n+\n+  declare:\n+    # https://www.lispworks.com/documentation/HyperSpec/Body/s_declar.htm\n+    - match: (?i:declare){{break}}\n+      scope: keyword.declaration.declare.lisp\n+      set: declare-specifier-list\n+\n+  declare-specifier-list:\n+    - match: \\(\n+      scope: punctuation.section.parens.begin.lisp\n+      push:\n+        - paren-body\n+        - declare-identifier\n+    - include: comments\n+    - include: else-pop\n+\n+  declare-identifier:\n+    - match: '{{declaration_identifiers}}'\n+      scope: storage.modifier.lisp\n+      pop: 1\n+    - include: comments\n+    - include: else-pop\n+\n+###[ CONTROL FLOW STATEMENTS ]#################################################\n \n   control:\n-    - match: \\b(?i:with|while|when|unless|typecase|to|thereis|then|return-from name|return|repeat|prog*|prog|never|named|maplist|mapl|mapcon|mapcar|mapcan|mapc|loop|let|initially|if|from|for|finally|etypecase|else|dotimes|dolist|doing|do*|do|ctypecase|cond|case|block|as|always)\\b\n+    # Conditional\n+    - match: (?i:if|case|cond|otherwise|unless|when|[ce]?typecase){{break}}\n+      scope: keyword.control.conditional.lisp\n+      pop: 1\n+    # Flow\n+    - match: (?i:return(?:-from)?){{break}}\n+      scope: keyword.control.flow.return.lisp\n+      pop: 1\n+    # Loop\n+    # https://www.lispworks.com/documentation/lw70/CLHS/Body/m_dolist.htm\n+    # https://www.lispworks.com/documentation/lw70/CLHS/Body/m_dotime.htm\n+    - match: (?i:dolist|dotimes){{break}}\n+      scope: keyword.control.loop.lisp\n+      set: expect-list\n+    # https://www.lispworks.com/documentation/lw70/CLHS/Body/m_do_do.htm\n+    - match: (?i:do\\*?|do-(?:all-|external-)?symbols|iterate){{break}}\n+      scope: keyword.control.loop.lisp\n+      set: expect-lists-list\n+    # Other\n+    - match: (?xi:block|map(?:can|car|con|c|list|l)){{break}}\n       scope: keyword.control.lisp\n+      pop: 1\n+\n+###[ LOOP STATEMENTS ]#########################################################\n+\n+  loop:\n+    # https://www.lispworks.com/documentation/lw70/CLHS/Body/06_a.htm\n+    # https://www.lispworks.com/documentation/lw70/CLHS/Body/m_loop.htm\n+    - match: (?i:loop){{break}}\n+      scope: keyword.control.loop.lisp\n+      set: loop-body\n+\n+  loop-body:\n+    - meta_scope: meta.loop.lisp\n+    - include: paren-pop\n+\n+    # declaration keywords\n+    - match: (?i:named){{break}}\n+      scope: keyword.declaration.name.lisp\n+      push: loop-name\n+    - match: (?i:with){{break}}\n+      scope: keyword.declaration.variable.lisp\n+\n+    # loop termination test keywords\n+    - match: (?i:always|as|do|doing|for|never|repeat|thereis|until|while){{break}}\n+      scope: keyword.control.loop.lisp\n+    # conditional keywords\n+    - match: (?i:end|else|if|then|unless|when){{break}}\n+      scope: keyword.control.conditional.lisp\n+    # control flow keywords\n+    - match: (?i:finally|initially){{break}}\n+      scope: keyword.control.flow.lisp\n+    - match: (?i:return(?:-from)?){{break}}\n+      scope: keyword.control.flow.return.lisp\n \n-  functions:\n-    - match: \\b(?i:(defun|defmethod|defmacro))\\b\\s+([\\w\\-!?<>]*)\n-      scope: meta.function.lisp\n+    # operator keywords\n+    - match: ={{break}} # can be both, assignment and comparison\n+      scope: keyword.operator.lisp\n+    - match: (?i:into){{break}}\n+      scope: keyword.operator.assignment.lisp\n+    - match: (?i:and){{break}}\n+      scope: keyword.operator.logical.lisp\n+    - match: |-\n+        (?xi: across | above | being | below | by | each | in | of | on | the\n+        | (?:down|up)?to | (?:up)?from | using ){{break}}\n+      scope: keyword.other.loop.lisp\n+\n+    # expressions\n+    - include: comments\n+    - include: parens\n+    - include: numbers\n+    - include: strings\n+    - include: annotations\n+    - include: keywords\n+    - include: quotes\n+    - include: macros\n+    - include: modifiers\n+    - match: (?={{identifier}})\n+      push: loop-identifier\n+\n+  loop-identifier:\n+    - include: builtin-function\n+    - include: identifier\n+\n+  loop-name:\n+    - match: '{{identifier}}'\n+      scope: entity.name.loop.lisp\n+      captures:\n+        1: punctuation.definition.symbol.begin.lisp\n+        2: punctuation.definition.symbol.end.lisp\n+      pop: 1\n+    - include: comments\n+    - include: else-pop\n+\n+###[ QUOTE STATEMENTS ]########################################################\n+\n+  quote:\n+    - match: (?i:quote){{break}}\n+      scope: meta.function-call.lisp support.function.lisp\n+      set: quote-args\n+\n+  quote-args:\n+    - include: paren-pop\n+    - include: quoted-parens\n+    - include: expressions\n+\n+###[ FUNCTIONS ]###############################################################\n+\n+  builtin-function:\n+    - match: '{{builtin_functions}}'\n+      scope: meta.function-call.lisp support.function.lisp\n+      pop: 1\n+\n+  other-function:\n+    # functions starting with `make-` are most likely used as constructors\n+    - match: make-{{identifier}}\n+      scope: meta.function-call.lisp variable.function.constructor.lisp\n+      captures:\n+        1: punctuation.definition.symbol.begin.lisp\n+        2: punctuation.definition.symbol.end.lisp\n+      pop: 1\n+    # mutating functions changing data in-place end with !\n+    - match: (?![+*#`'&]\\S){{identifier}}\\!{{break}}\n+      scope: meta.function-call.lisp variable.function.mutating.lisp\n+      captures:\n+        1: punctuation.definition.symbol.begin.lisp\n+        2: punctuation.definition.symbol.end.lisp\n+      pop: 1\n+    # predicate functions returning boolean values end with ? or -p\n+    - match: (?![+*#`'&]\\S){{identifier}}(?:\\?|-p){{break}}\n+      scope: meta.function-call.lisp variable.function.predicate.lisp\n+      captures:\n+        1: punctuation.definition.symbol.begin.lisp\n+        2: punctuation.definition.symbol.end.lisp\n+      pop: 1\n+    # anything not looking like global variable, constant or macro\n+    - match: (?![+*#`'&]\\S|{{builtin_constants}}|{{builtin_types}}){{identifier}}\n+      scope: meta.function-call.lisp variable.function.lisp\n+      captures:\n+        1: punctuation.definition.symbol.begin.lisp\n+        2: punctuation.definition.symbol.end.lisp\n+      pop: 1\n+\n+###[ MACROS ]##################################################################\n+\n+  macros:\n+    # https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node191.html\n+    - include: macro-arrays\n+    - include: macro-characters\n+    - include: macro-conditionals\n+    - include: macro-functions\n+    - include: macro-numbers\n+    - include: macro-pathnames\n+    - include: macro-structures\n+    - include: macro-throw-exceptions\n+    - include: macro-variables\n+    - include: macro-vectors\n+\n+  macro-conditionals:\n+    # Feature-flags\n+    - match: (#[-+])({{identifier}})?\n+      captures:\n+        1: keyword.control.conditional.lisp\n+        2: constant.other.feature.lisp\n+        3: punctuation.definition.symbol.begin.lisp\n+        4: punctuation.definition.symbol.end.lisp\n+\n+  macro-arrays:\n+    # https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node29.html\n+    - match: (#\\d*[aA])(\\()\n+      captures:\n+        1: punctuation.definition.array.lisp\n+        2: meta.parens.lisp punctuation.section.parens.begin.lisp\n+      push: macro-array-body\n+    - match: (#\\d*[aA])({{identifier}})\n+      captures:\n+        1: punctuation.definition.array.lisp\n+        2: variable.other.lisp\n+        3: punctuation.definition.symbol.begin.lisp\n+        4: punctuation.definition.symbol.end.lisp\n+\n+  macro-array-body:\n+    - meta_scope: meta.array.lisp\n+    - meta_content_scope: meta.parens.lisp\n+    - match: \\)\n+      scope: meta.parens.lisp punctuation.section.parens.end.lisp\n+      pop: 1\n+    - include: parens\n+    - include: expressions\n+\n+  macro-characters:\n+    # Standard Characters\n+    #   https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node22.html\n+    # Non-Standard Characters\n+    #   https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node24.html\n+    # Character Attributes\n+    #   https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node25.html\n+    - match: (#(\\d*)\\\\){{char_attributes}}?(?i:Space|NewLine){{break}}\n+      scope: constant.character.standard.lisp\n+      captures:\n+        1: punctuation.definition.constant.lisp\n+        2: storage.modifier.attributes.lisp\n+    - match: (#(\\d*)\\\\){{char_attributes}}?(?i:Backspace|Tab|Linefeed|Page|Return|RubOut){{break}}\n+      scope: constant.character.semi-standard.lisp\n+      captures:\n+        1: punctuation.definition.constant.lisp\n+        2: storage.modifier.attributes.lisp\n+    - match: (#(\\d*)\\\\){{char_attributes}}?{{standard_char}}{{break}}\n+      scope: constant.character.standard.lisp\n       captures:\n-        1: storage.type.function-type.lisp\n-        2: entity.name.function.lisp\n-    - match: \\b(?i:zerop|yes-or-no-p|y-or-n-p|write-to-string|write-string|write-char|write-byte|write|with-standard-io-syntax|with-slots|with-simple-restart|with-package-iterator|with-output-to-string|with-open-stream|with-open-file|with-input-from-string|with-hash-table-iterator|with-condition-restarts|with-compilation-unit|with-accessors|wild-pathname-p|warn|vectorp|vector-push-extend|vector-push|vector-pop|vector|variable-information|values-list|values|user-homedir-pathname|use-value|use-package|upper-case-p|upgraded-complex-part-type|upgraded-array-element-type|update-instance-for-redefined-class|update-instance-for-different-class|unuse-package|untrace|until-if|until|unread-char|union|unintern|unexport|typep|type-of|type-error-expected-type|type-error-datum|two-way-stream-output-stream|two-way-stream-input-stream|truncate|truename|tree-equal|translate-pathname|translate-logical-pathname|trace|to-alter|time|third|terpri|terminate-producing|tenth|tanh|tan|tailp|synonym-stream-symbol|symbolp|symbol-value|symbol-plist|symbol-package|symbol-name|symbol-function|sxhash|svref|summing|sum|subtypep|substitute-if-not|substitute-if|substitute|subst-if-not|subst-if|subst|subsetp|subseries|subseq|sublis|stringp|string>=|string>|string=|string<=|string<|string/=|string-upcase|string-trim|string-right-trim|string-not-lessp|string-not-greaterp|string-not-equal|string-lessp|string-left-trim|string-greaterp|string-equal|string-downcase|string-char-p|string-capitalize|string|streamp|stream-external-format|stream-error-stream|stream-element-type|store-value|step|standard-char-p|stable-sort|sqrt|split-if|split|special-form-p|sort|some|software-version|software-type|slot-value|slot-unbound|slot-missing|slot-makunbound|slot-exists-p|slot-boundp|sleep|sixth|sinh|sin|simple-vector-p|simple-string-p|simple-condition-format-string|simple-condition-format-arguments|simple-bit-vector-p|signum|signal|short-site-name|shiftf|shared-initialize|shadowing-import|shadow|seventh|setq|setf|set-syntax-from-char|set-pprint-dispatch|set-macro-character|set-exclusive-or|set-dispatch-macro-character|set-difference|set-char-bit|set|series|second|search|schar|scan-symbols|scan-sublists|scan-range|scan-plist|scan-multiple|scan-lists-of-lists-fringe|scan-lists-of-lists|scan-hash|scan-fn-inclusive|scan-fn|scan-file|scan-alist|scan|scale-float|sbit|rplacd|rplaca|row-major-aref|round|rotatef|room|reverse|revappend|result-of|restart-name|restart-case|restart-bind|rest|require|replace|rename-package|rename-file|remprop|remove-method|remove-duplicates|remove|remhash|remf|reinitialize-instance|reduce|realpart|realp|readtablep|readtable-case|read-preserving-whitespace|read-line|read-from-string|read-delimited-list|read-char-no-hang|read-char|read-byte|read|rationalp|rationalize|rational|rassoc-if-not|rassoc-if|rassoc|random-state-p|random|quote|pushnew|push|psetq|psetf|provide|progn|prog2|prog1|producing|proclaim|probe-file|print-unreadable-object|print-object|print|prin1|previous|pprint-tabular|pprint-tab|pprint-pop|pprint-newline|pprint-logical-block|pprint-linear|pprint-indent|pprint-fill|pprint-exit-if-list-exhausted|pprint-dispatch|positions|position-if-not|position-if|position|pop|plusp|phase|peek-char|pathnamep|pathname-version|pathname-type|pathname-name|pathname-match-p|pathname-host|pathname-directory|pathname-device|pathname|parse-namestring|parse-macro|parse-integer|pairlis|packagep|package-used-by-list|package-use-list|package-shadowing-symbols|package-nicknames|package-name|package-error-package|output-stream-p|open-stream-p|open|oddp|nunion|numerator|numberp|nthcdr|nth-value|nth|nsubstitute-if-not|nsubstitute-if|nsubstitute|nsubst-if-not|nsubst-if|nsubst|nsublis|nstring-upcase|nstring-downcase|nstring-capitalize|nset-exclusive-or|nset-difference|nreverse|nreconc|notevery|notany|no-next-method|no-applicable-method|ninth|nintersection|next-out|next-method-p|next-in|nconcing|nconc|nbutlast|namestring|name-char|multiple-value-setq|multiple-value-list|multiple-value-bind|muffle-warning|mismatch|minusp|minimizing|minimize|mingle|method-qualifiers|method-combination-error|merge-pathnames|merge|memberp|member-if-not|member-if|member|maximizing|maximize|mask-field|mask|mapping|maphash|map-into|map-fn|map|makunbound|make-two-way-stream|make-synonym-stream|make-symbol|make-string-output-stream|make-string-input-stream|make-string|make-sequence|make-random-state|make-pathname|make-package|make-load-form-saving-slots|make-load-form|make-list|make-instances-obsolete|make-instance|make-hash-table|make-echo-stream|make-dispatch-macro-character|make-condition|make-concatenated-stream|make-char|make-broadcast-stream|make-array|macroexpand-1|macroexpand|macro-function|machine-version|machine-type|machine-instance|lower-case-p|loop-finish|long-site-name|logtest|logorc2|logorc1|lognot|lognand|logical-pathname-translations|logical-pathname|logcount|logbitp|logandc2|logandc1|log|locally|load-logical-pathname-translations|load|listp|listen|list-length|list-all-packages|list*|list|lisp-implementation-version|lisp-implementation-type|length|ldiff|ldb-test|ldb|lcm|latch|last|lambda|keywordp|iterate|isqrt|invoke-restart|invoke-debugger|invalid-method-error|intersection|intern|interactive-stream-p|integerp|integer-length|integer-decode-float|int-char|inspect|input-stream-p|initialize-instance|in-package|import|imagpart|ignore-errors|identity|host-namestring|hash-table-test|hash-table-size|hash-table-rehash-threshold|hash-table-rehash-size|hash-table-p|hash-table-count|handler-case|handler-bind|graphic-char-p|gethash|getf|get-universal-time|get-setf-method-multiple-value|get-setf-method|get-properties|get-output-stream-string|get-internal-run-time|get-internal-real-time|get-decoded-time|get|gentemp|gensym|generic-function|generator|gcd|gathering|gatherer|functionp|function-lambda-expression|function-keywords|function-information|funcall|fourth|formatter|format|floor|floatp|float-sign|float-radix|float-precision|float-digits|float|first|finish-output|find-symbol|find-restart|find-package|find-method|find-if-not|find-if|find-class|find-all-symbols|find|fill-pointer|fill|file-write-date|file-string-length|file-position|file-namestring|file-length|file-error-pathname|file-author|fifth|ffloor|fdefinition|fboundp|f|expt|export|expand|exp|every|evenp|evalhook|eval|error|ensure-generic-function|enough-namestring|endp|encode-universal-time|enclose|encapsulated|elt|eighth|ed|echo-stream-output-stream|echo-stream-input-stream|ecase|dribble|dpb|documentation|do-symbols|do-external-symbols|do-all-symbols|disassemble|directory-namestring|directory|digit-char-p|digit-char|destructuring-bind|describe-object|describe|deposit-field|denominator|delete-package|delete-if-not|delete-if|delete-file|delete-duplicates|delete|defvar|deftype|defstruct|defpackage|define-setf-method|define-modify-macro|define-method-combination|define-declaration|define-condition|define-compiler-macro|defgeneric|defclass|decode-universal-time|decode-float|declaration-information|declaim|counting|count-if-not|count-if|count|cotruncate|cosh|cos|copy-tree|copy-symbol|copy-seq|copy-readtable|copy-pprint-dispatch|copy-list|copy-alist|continue|constantp|consp|cons|conjugate|concatenated-stream-streams|concatenate|compute-restarts|compute-applicable-methods|complexp|complex|complement|compiler-macroexpand-1|compiler-macroexpand|compiler-macro-function|compiler-let|compiled-function-p|compile-file-pathname|compile-file|compile|commonp|collecting-fn|collecting|collect-sum|collect-plist|collect-or|collect-nth|collect-nconc|collect-min|collect-max|collect-length|collect-last|collect-hash|collect-fn|collect-first|collect-file|collect-append|collect-and|collect-alist|collect|coerce|code-char|clrhash|close|clear-input|class-of|class-name|cis|chunk|choose-if|choose|check-type|characterp|character|char>=|char>|char=|char<=|char<|char/=|char-upcase|char-not-lessp|char-not-greaterp|char-not-equal|char-name|char-lessp|char-int|char-greaterp|char-font|char-equal|char-downcase|char-code|char-bits|char-bit|char|change-class|cerror|cell-error-name|ceiling|cdr|cddr|cdddr|cddddr|cdddar|cddar|cddadr|cddaar|cdar|cdadr|cdaddr|cdadar|cdaar|cdaadr|cdaaar|ccase|catenate|car|call-next-method|call-method|cadr|caddr|cadddr|caddar|cadar|cadadr|cadaar|caar|caadr|caaddr|caadar|caaar|caaadr|caaaar|byte-size|byte-position|byte|butlast|broadcast-stream-streams|break|boundp|both-case-p|boole|bit-xor|bit-vector-p|bit-orc2|bit-orc1|bit-not|bit-nor|bit-nand|bit-ior|bit-eqv|bit-andc2|bit-andc1|bit-and|bit|augment-environment|atom|atanh|atan|assoc-if-not|assoc-if|assoc|assert|asinh|asin|ash|arrayp|array-total-size|array-row-major-index|array-rank|array-in-bounds-p|array-has-fill-pointer-p|array-element-type|array-dimensions|array-dimension|arithmetic-error-operation|arithmetic-error-operands|aref|apropos-list|apropos|applyhook|apply|appending|append|alter|alphanumericp|alpha-char-p|adjustable-array-p|adjust-array|adjoin|add-method|acosh|acos|acons|abs|abort)\\b\n-      scope: support.function.lisp\n+        1: punctuation.definition.constant.lisp\n+        2: storage.modifier.attributes.lisp\n+    - match: (#(\\d*)\\\\){{char_attributes}}?{{identifier_char}}+{{break}}\n+      scope: constant.character.non-standard.lisp\n+      captures:\n+        1: punctuation.definition.constant.lisp\n+        2: storage.modifier.attributes.lisp\n+\n+  macro-functions:\n+    # Function reference\n+    - match: \\#[Mm']\n+      scope: punctuation.definition.function.lisp\n+      push: macro-function-name\n+\n+  macro-function-name:\n+    - include: namespaces\n+    - include: operator\n+    - include: builtin-function\n+    - include: other-function\n+    - include: immediately-pop\n+\n+  macro-numbers:\n+    # binary rational numbers\n+    - match: |-\n+        (?xi)\n+        ( \\#(?: b | 2r ) )\n+        ( [-+]? )\n+        ( [01]+ (/) [01]+ )\n+        {{break}}\n+      scope: meta.number.rational.binary.lisp\n+      captures:\n+        1: constant.numeric.base.lisp\n+        2: keyword.operator.arithmetic.lisp\n+        3: constant.numeric.value.lisp\n+        4: keyword.operator.arithmetic.lisp\n+    # binary integer numbers\n+    - match: |-\n+        (?xi)\n+        ( \\#(?: b | 2r ) )\n+        ( [-+]? )\n+        ( [01]+ (?: (\\.)(?![01]) | {{break}} ) )\n+      scope: meta.number.integer.binary.lisp\n+      captures:\n+        1: constant.numeric.base.lisp\n+        2: keyword.operator.arithmetic.lisp\n+        3: constant.numeric.value.lisp\n+        4: punctuation.separator.decimal.lisp\n+    # octal rational numbers\n+    - match: |-\n+        (?xi)\n+        ( \\#(?: o | 8r ) )\n+        ( [-+]? )\n+        ( [0-7]+ (/) [0-7]+ )\n+        {{break}}\n+      scope: meta.number.rational.octal.lisp\n+      captures:\n+        1: constant.numeric.base.lisp\n+        2: keyword.operator.arithmetic.lisp\n+        3: constant.numeric.value.lisp\n+        4: keyword.operator.arithmetic.lisp\n+    # octal integer numbers\n+    - match: |-\n+        (?xi)\n+        ( \\#(?: o | 8r ) )\n+        ( [-+]? )\n+        ( [0-7]+ (?: (\\.)(?![0-7]) | {{break}} ) )\n+      scope: meta.number.integer.octal.lisp\n+      captures:\n+        1: constant.numeric.base.lisp\n+        2: keyword.operator.arithmetic.lisp\n+        3: constant.numeric.value.lisp\n+        4: punctuation.separator.decimal.lisp\n+    # hexadecimal rational numbers\n+    - match: |-\n+        (?xi)\n+        ( \\#(?: x | 16r ) )\n+        ( [-+]? )\n+        ( \\h+ (/) \\h+ )\n+        {{break}}\n+      scope: meta.number.rational.hexadecimal.lisp\n+      captures:\n+        1: constant.numeric.base.lisp\n+        2: keyword.operator.arithmetic.lisp\n+        3: constant.numeric.value.lisp\n+        4: keyword.operator.arithmetic.lisp\n+    # hexadecimal integer numbers\n+    - match: |-\n+        (?xi)\n+        ( \\#(?: x | 16r ) )\n+        ( [-+]? )\n+        ( \\h+ (?: (\\.)(?!\\h) | {{break}} ) )\n+      scope: meta.number.integer.hexadecimal.lisp\n+      captures:\n+        1: constant.numeric.base.lisp\n+        2: keyword.operator.arithmetic.lisp\n+        3: constant.numeric.value.lisp\n+        4: punctuation.separator.decimal.lisp\n+    # radix rational numbers\n+    - match: |-\n+        (?xi)\n+        ( \\#\\d+r )\n+        ( [-+]? )\n+        ( [[:alnum:]]+ (/) [[:alnum:]]+ )\n+        {{break}}\n+      scope: meta.number.rational.other.lisp\n+      captures:\n+        1: constant.numeric.base.lisp\n+        2: keyword.operator.arithmetic.lisp\n+        3: constant.numeric.value.lisp\n+        4: keyword.operator.arithmetic.lisp\n+    # radix integer numbers\n+    - match: |-\n+        (?xi)\n+        ( \\#\\d+r )\n+        ( [-+]? )\n+        ( [[:alnum:]]+ (?: (\\.)(?![[:alnum:]]) | {{break}} ) )\n+      scope: meta.number.integer.other.lisp\n+      captures:\n+        1: constant.numeric.base.lisp\n+        2: keyword.operator.arithmetic.lisp\n+        3: constant.numeric.value.lisp\n+        4: punctuation.separator.decimal.lisp\n+    # complex numbers\n+    - match: (#[cC])(\\()\n+      captures:\n+        1: punctuation.definition.complex.lisp\n+        2: meta.parens.lisp punctuation.section.parens.begin.lisp\n+      push: macro-numbers-complex-body\n+\n+  macro-numbers-complex-body:\n+    - meta_scope: meta.number.complex.lisp\n+    - meta_content_scope: meta.parens.lisp\n+    - match: \\)\n+      scope: meta.parens.lisp punctuation.section.parens.end.lisp\n+      pop: 1\n+    - include: parens\n+    - include: expressions\n \n-  operators:\n-    - match: '\\/\\=|\\>\\=|\\<\\=|\\=|\\>|\\<|\\b(?i:max|min|eq|neq|eql|equalp|equal)\\b'\n+  macro-pathnames:\n+    - match: (#\\d*[pP])(\\\")\n+      captures:\n+        1: punctuation.definition.pathname.lisp\n+        2: string.quoted.double.lisp punctuation.definition.string.begin.lisp\n+      push: macro-pathname-body\n+\n+  macro-pathname-body:\n+    - meta_scope: meta.path.lisp\n+    - meta_content_scope: string.quoted.double.lisp\n+    - match: \\\"\n+      scope: string.quoted.double.lisp punctuation.definition.string.end.lisp\n+      pop: 1\n+    - match: \\\\.\n+      scope: constant.character.escape.lisp\n+\n+  macro-structures:\n+    # Structures\n+    # https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node39.html\n+    - match: (#\\d*[sS])(\\()\n+      captures:\n+        1: punctuation.definition.struct.lisp\n+        2: meta.parens.lisp punctuation.section.parens.begin.lisp\n+      push:\n+        - macro-struct-body\n+        - macro-struct-name\n+\n+  macro-struct-name:\n+    - match: '{{identifier}}'\n+      scope: entity.name.struct.lisp\n+      captures:\n+        1: punctuation.definition.symbol.begin.lisp\n+        2: punctuation.definition.symbol.end.lisp\n+      pop: 1\n+    - include: else-pop\n+\n+  macro-struct-body:\n+    - meta_scope: meta.struct.lisp\n+    - meta_content_scope: meta.parens.lisp\n+    - match: \\)\n+      scope: meta.parens.lisp punctuation.section.parens.end.lisp\n+      pop: 1\n+    - include: lists\n+    - include: expressions\n+\n+  macro-vectors:\n+    # Vector\n+    # https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node30.html\n+    - match: (#\\d*)(\\()\n+      captures:\n+        1: punctuation.definition.vector.lisp\n+        2: meta.parens.lisp punctuation.section.parens.begin.lisp\n+      push: macro-vector-body\n+    # Bit vector\n+    # https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node32.html\n+    - match: (#\\d*\\*)([01]*){{break}}\n+      scope: meta.vector.lisp\n+      captures:\n+        1: punctuation.definition.vector.lisp\n+        2: meta.number.integer.binary constant.numeric.value.lisp\n+\n+  macro-vector-body:\n+    - meta_scope: meta.vector.lisp\n+    - meta_content_scope: meta.parens.lisp\n+    - match: \\)\n+      scope: meta.parens.lisp punctuation.section.parens.end.lisp\n+      pop: 1\n+    - include: parens\n+    - include: expressions\n+\n+  macro-throw-exceptions:\n+    - match: '#[ \\t\\n\\r)<]'\n+      scope: keyword.control.exception.throw.lisp\n+\n+  macro-variables:\n+    # Inline runtime/loadtime eval\n+    - match: \\#[.,:]\n+      scope: punctuation.definition.variable.lisp\n+    # Local assignment\n+    - match: ((#)\\d+)\\s*(=)\n+      captures:\n+        1: variable.other.local.lisp\n+        2: punctuation.definition.variable.lisp\n+        3: keyword.operator.assignment.lisp\n+    - match: (#)(\\d+)(#)\n+      scope: variable.other.lisp\n+      captures:\n+        1: punctuation.definition.variable.begin.lisp\n+        2: variable.other.local.lisp\n+        3: punctuation.definition.variable.end.lisp\n+\n+###[ OPERATORS ]###############################################################\n+\n+  modifiers:\n+    # https://www.lispworks.com/documentation/lw70/CLHS/Body/02_df.htm\n+    - match: '[`'']'\n+      scope: punctuation.definition.quoted.lisp\n+    - match: ',@?'\n+      scope: punctuation.definition.variable.lisp\n+\n+  operator:\n+    # Contains 'Standardized Compound Type Specifier Names'\n+    # https://www.lispworks.com/documentation/lw70/CLHS/Body/04_bc.htm\n+    - match: (?:(?:/=|>=|<=|=|>|<)|(?i:max|min|eq|neq|eql|equalp|equal)){{break}}\n       scope: keyword.operator.comparison.lisp\n-    - match: '\\+|\\-|\\*|\\/|\\b(?i:mod|rem|incf|decf)\\b'\n+      pop: 1\n+    - match: ={{break}}\n+      scope: keyword.operator.assignment.lisp\n+      pop: 1\n+    - match: (?:[-+*/]|(?i:mod|rem|incf|decf)){{break}}\n       scope: keyword.operator.arithmetic.lisp\n-    - match: \\b(?i:and|or|not)\\b\n+      pop: 1\n+    - match: (?i:and|or|not|satisfies){{break}}\n       scope: keyword.operator.logical.lisp\n-    - match: \\b(?i:logand|logior|logxor|lognor|logeqv)\\b\n+      pop: 1\n+    - match: (?i:logand|logior|logxor|lognor|logeqv){{break}}\n       scope: keyword.operator.bitwise.lisp\n+      pop: 1\n \n-  parens:\n-    - match: '\\('\n-      scope: punctuation.definition.group.begin.lisp\n-      push:\n-        - meta_scope: meta.group.lisp\n-        - match: '\\)'\n-          scope: punctuation.definition.group.end.lisp\n-          pop: true\n-        - include: expressions\n-        - include: parens\n-    - match: '\\)'\n-      scope: invalid.illegal.stray-bracket-end.lisp\n-\n-  constants:\n-    - match: \\b(?i:null|t|single-float-negative-epsilon|single-float-epsilon|short-float-negative-epsilon|short-float-epsilon|pi|nil|multiple-values-limit|most-positive-single-float|most-positive-short-float|most-positive-long-float|most-positive-fixnum|most-positive-double-float|most-negative-single-float|most-negative-short-float|most-negative-long-float|most-negative-fixnum|most-negative-double-float|long-float-negative-epsilon|long-float-epsilon|least-positive-single-float|least-positive-short-float|least-positive-normalized-single-float|least-positive-normalized-short-float|least-positive-normalized-long-float|least-positive-normalized-double-float|least-positive-long-float|least-positive-double-float|least-negative-single-float|least-negative-short-float|least-negative-normalized-single-float|least-negative-normalized-short-float|least-negative-normalized-long-float|least-negative-normalized-double-float|least-negative-long-float|least-negative-double-float|lambda-parameters-limit|lambda-list-keywords|internal-time-units-per-second|double-float-negative-epsilon|double-float-epsilon|char-super-bit|char-meta-bit|char-hyper-bit|char-font-limit|char-control-bit|char-code-limit|char-bits-limit|call-arguments-limit|array-total-size-limit|array-rank-limit|array-dimension-limit)\\b\n-      scope: constant.language.lisp\n-    - match: '(#)(\\w|[\\\\+-=<>''\"&#])+'\n-      scope: constant.character.lisp\n-      captures:\n-        1: punctuation.definition.constant.lisp\n+###[ LITERALS ]################################################################\n \n   numbers:\n-    - match: '\\b((0(x|X)\\h*)|(([0-9]+\\.?[0-9]*)|(\\.[0-9]+))((e|E)(\\+|-)?[0-9]+)?)(?i:l|ul|u|f|ll|ull)?\\b'\n-      scope: constant.numeric.lisp\n+    # https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node16.html\n+    # https://www.lispworks.com/documentation/lw70/CLHS/Body/02_ca.htm\n+    # decimal floating point\n+    - match: |-\n+        (?x)\n+        ( [-+]? )\n+        ( \\d* (?: (\\.) \\d+ )  {{exponent}}?\n+        | \\d+ (?: (\\.) \\d* )? {{exponent}})\n+        {{break}}\n+      scope: meta.number.float.decimal.lisp\n+      captures:\n+        1: keyword.operator.arithmetic.lisp\n+        2: constant.numeric.value.lisp\n+        3: punctuation.separator.decimal.lisp\n+        4: punctuation.separator.decimal.lisp\n+    # decimal rational numbers\n+    - match: |-\n+        (?x)\n+        ( [-+]? )\n+        ( \\d+ (/) \\d+ )\n+        {{break}}\n+      scope: meta.number.rational.decimal.lisp\n+      captures:\n+        1: keyword.operator.arithmetic.lisp\n+        2: constant.numeric.value.lisp\n+        3: keyword.operator.arithmetic.lisp\n+    # decimal integer numbers\n+    - match: |-\n+        (?x)\n+        ( [-+]? )\n+        ( \\d+ (?: (\\.)(?!\\d) | {{break}} ) )\n+      scope: meta.number.integer.decimal.lisp\n+      captures:\n+        1: keyword.operator.arithmetic.lisp\n+        2: constant.numeric.value.lisp\n+        3: punctuation.separator.decimal.lisp\n \n   strings:\n-    - match: '\"'\n+    # https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node31.html\n+    - match: \\\"\n       scope: punctuation.definition.string.begin.lisp\n+      push: string-body\n+\n+  string-body:\n+    - meta_include_prototype: false\n+    - meta_scope: meta.string.lisp string.quoted.double.lisp\n+    - match: \\\"\n+      scope: punctuation.definition.string.end.lisp\n+      pop: 1\n+    - match: \\\\.\n+      scope: constant.character.escape.lisp\n+    - include: string-format-mini-language\n+\n+  string-format-mini-language:\n+    # https://www.hexstreamsoft.com/articles/common-lisp-format-reference/clhs-summary/#subsections-summary-table\n+    - match: (~)(\\d*)[%&|~]\n+      scope: constant.character.escape.lisp\n+      captures:\n+        1: punctuation.definition.placeholder.lisp\n+        # 2: constant.numeric.integer.decimal.lisp\n+    - match: (~):?@?[CR]\n+      scope: constant.other.placeholder.lisp\n+      captures:\n+        1: punctuation.definition.placeholder.lisp\n+    # ~R\n+    - match: |-\n+        (?x:\n+          (~)\n+          (?:(\\d*)             # Radix\n+            (?:(,)\\d*          # mincol\n+              (?:(,)(?:'.)?    # padchar\n+                (?:(,)(?:'.)?  # comma-char\n+                  (?:(,)\\d*)?  # comma-interval\n+          )?)?)?)\n+        ):?@?[rR]\n+      scope: constant.other.placeholder.lisp\n+      captures:\n+        1: punctuation.definition.placeholder.lisp\n+        2: punctuation.definition.numeric.base.lisp\n+        3: punctuation.separator.sequence.lisp\n+        4: punctuation.separator.sequence.lisp\n+        5: punctuation.separator.sequence.lisp\n+        6: punctuation.separator.sequence.lisp\n+    # ~b, ~o, ~d, ~x\n+    - match: |-\n+        (?x:\n+          (~)\n+          (?:\\d*             # mincol\n+            (?:(,)(?:'.)?    # padchar\n+              (?:(,)(?:'.)?  # comma-char\n+                (?:(,)\\d*)?  # comma-interval\n+          )?)?)?\n+        ):?@?[bBoOdDxX]\n+      scope: constant.other.placeholder.lisp\n+      captures:\n+        1: punctuation.definition.placeholder.lisp\n+        2: punctuation.separator.sequence.lisp\n+        3: punctuation.separator.sequence.lisp\n+        4: punctuation.separator.sequence.lisp\n+    # ~f\n+    - match: |-\n+        (?x:\n+          (~)\n+          (?:\\d*                 # width\n+            (?:(,)\\d*            # decimals\n+              (?:(,)\\d*          # scale\n+                (?:(,)(?:'.)?    # overflowchar\n+                  (?:(,)(?:'.)?  # padchar\n+          )?)?)?)?)?\n+        )@?[fF]\n+      scope: constant.other.placeholder.lisp\n+      captures:\n+        1: punctuation.definition.placeholder.lisp\n+        2: punctuation.separator.sequence.lisp\n+        3: punctuation.separator.sequence.lisp\n+        4: punctuation.separator.sequence.lisp\n+        5: punctuation.separator.sequence.lisp\n+    # ~e, ~g\n+    - match: |-\n+        (?x:\n+          (~)\n+          (?:\\d*                     # width\n+            (?:(,)\\d*                # decimals\n+              (?:(,)\\d*              # exponent-width\n+                (?:(,)\\d*            # scale\n+                  (?:(,)(?:'.)?      # overflowchar\n+                    (?:(,)(?:'.)?    # padchar\n+                      (?:(,)(?:'.)?  # exponentchar\n+          )?)?)?)?)?)?)?\n+        )@?[eEgG]\n+      scope: constant.other.placeholder.lisp\n+      captures:\n+        1: punctuation.definition.placeholder.lisp\n+        2: punctuation.separator.sequence.lisp\n+        3: punctuation.separator.sequence.lisp\n+        4: punctuation.separator.sequence.lisp\n+        5: punctuation.separator.sequence.lisp\n+        6: punctuation.separator.sequence.lisp\n+        7: punctuation.separator.sequence.lisp\n+    # ~$\n+    - match: |-\n+        (?x:\n+          (~)\n+          (?:\\d*               # decimals\n+            (?:(,)\\d*          # min-units\n+              (?:(,)\\d*        # min-width\n+                (?:(,)(?:'.)?  # padchar\n+          )?)?)?)?\n+        ):?@?\\$\n+      scope: constant.other.placeholder.lisp\n+      captures:\n+        1: punctuation.definition.placeholder.lisp\n+        2: punctuation.separator.sequence.lisp\n+        3: punctuation.separator.sequence.lisp\n+        4: punctuation.separator.sequence.lisp\n+    # ~a, ~s\n+    - match: |-\n+        (?x:\n+          (~)\n+          (?:\\d*               # min-col\n+            (?:(,)\\d*          # col-inc\n+              (?:(,)\\d*        # min-pad\n+                (?:(,)(?:'.)?  # padchar\n+          )?)?)?)?\n+        ):?@?[aAsS]\n+      scope: constant.other.placeholder.lisp\n+      captures:\n+        1: punctuation.definition.placeholder.lisp\n+        2: punctuation.separator.sequence.lisp\n+        3: punctuation.separator.sequence.lisp\n+        4: punctuation.separator.sequence.lisp\n+\n+###[ SYMBOLS ]#################################################################\n+\n+  annotations:\n+    - match: (&){{identifier}}\n+      scope: variable.annotation.lisp\n+      captures:\n+        1: punctuation.definition.annotation.lisp\n+        2: punctuation.definition.symbol.begin.lisp\n+        3: punctuation.definition.symbol.end.lisp\n+\n+  keywords:\n+    # The colon : is a package marker.\n+    # If the package name is missing, the symbol is in the KEYWORD package.\n+    - match: (::?)({{identifier}})\n+      captures:\n+        1: punctuation.accessor.lisp\n+        2: keyword.other.symbol.lisp\n+        3: punctuation.definition.symbol.begin.lisp\n+        4: punctuation.definition.symbol.end.lisp\n+    - match: \\.{{break}}\n+      scope: keyword.control.lisp\n+\n+  identifiers:\n+    # https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node27.html\n+    # Pushing a dedicated context reduces syntax cache size\n+    # and increases parsing performance, significantly.\n+    - match: (?={{identifier}})\n+      push: identifier\n+\n+  identifier:\n+    - include: namespaces\n+    # types\n+    - match: '{{builtin_types}}'\n+      scope: storage.type.lisp\n+      pop: 1\n+    # constants\n+    - match: (?i:true|false){{break}}\n+      scope: constant.language.boolean.lisp\n+      pop: 1\n+    - match: (?i:nil|null){{break}}\n+      scope: constant.language.null.lisp\n+      pop: 1\n+    - match: '{{builtin_constants}}'\n+      scope: constant.language.lisp\n+      pop: 1\n+    - match: \\+\\S+\\+{{break}}\n+      scope: constant.other.lisp\n+      pop: 1\n+    # variables\n+    - match: '{{builtin_variables}}'\n+      scope: variable.language.lisp\n+      pop: 1\n+    - match: '{{identifier}}'\n+      scope: variable.other.lisp\n+      captures:\n+        1: punctuation.definition.symbol.begin.lisp\n+        2: punctuation.definition.symbol.end.lisp\n+      pop: 1\n+    - include: immediately-pop\n+\n+  parameters:\n+    # parameter with initial value\n+    - match: \\(\n+      scope: punctuation.section.parens.begin.lisp\n       push:\n-        - meta_scope: string.quoted.double.lisp\n-        - match: '\"'\n-          scope: punctuation.definition.string.end.lisp\n-          pop: true\n-        - match: \\\\.\n-          scope: constant.character.escape.lisp\n-\n-  block-comment:\n-    - match: '#\\|'\n-      scope: punctuation.definition.comment.begin.lisp\n-      push:\n-        - meta_scope: comment.block.lisp\n-        - include: block-comment\n-        - match: '\\|#'\n-          scope: punctuation.definition.comment.end.lisp\n-          pop: true\n+        - paren-body\n+        - parameter-name\n+    # parameter without initial value\n+    - match: '{{identifier}}'\n+      scope: variable.parameter.lisp\n+      captures:\n+        1: punctuation.definition.symbol.begin.lisp\n+        2: punctuation.definition.symbol.end.lisp\n \n-  comments:\n-    - include: block-comment\n-    - match: '\\|#'\n-      scope: invalid.illegal.stray-comment-end.lisp\n-    - match: (;).*$\\n?\n-      scope: comment.line.semicolon.lisp\n+  parameter-name:\n+    - include: annotations\n+    - include: keywords\n+    - include: modifiers\n+    - match: '{{identifier}}'\n+      scope: variable.parameter.lisp\n+      captures:\n+        1: punctuation.definition.symbol.begin.lisp\n+        2: punctuation.definition.symbol.end.lisp\n+      pop: 1\n+    - include: comments\n+    - include: else-pop\n+\n+  namespaces:\n+    # built-in namespace indicating keyword symbols\n+    # note: accessor is consumed by `keywords` context\n+    - match: (\\|?)keyword(\\|?)(?=:)\n+      scope: variable.namespace.lisp\n+      captures:\n+        1: punctuation.definition.symbol.begin.lisp\n+        2: punctuation.definition.symbol.end.lisp\n+    # normal namespaces but not an escaped char #\\:\n+    - match: ((?!#\\\\?){{identifier}})(::?)\n+      captures:\n+        1: variable.namespace.lisp\n+        2: punctuation.definition.symbol.begin.lisp\n+        3: punctuation.definition.symbol.end.lisp\n+        4: punctuation.accessor.lisp\n+\n+  variables:\n+    # Symbols evaluate to their values\n+    #   https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node27.html\n+    - match: '{{identifier}}'\n+      scope: variable.other.lisp\n       captures:\n-        1: punctuation.definition.comment.lisp\n+        1: punctuation.definition.symbol.begin.lisp\n+        2: punctuation.definition.symbol.end.lisp\n+\n+###[ PROTOTYPES ]##############################################################\n+\n+  else-pop:\n+    - match: (?=\\S)\n+      pop: 1\n+\n+  immediately-pop:\n+    - match: ''\n+      pop: 1\n+\n+  paren-pop:\n+    - match: (?=\\))\n+      pop: 1\n+\n+###############################################################################\n+\n+variables:\n+\n+  # variables / keyword-symbols\n+  identifier: (?:{{identifier_char}}*{{identifier_must_have}}{{identifier_char}}*|{{quoted_identifier}})\n+  identifier_char: (?:\\\\.|[^{{break_char}}])\n+  identifier_must_have: (?:\\\\.|[^\\d.{{break_char}}]) # May not be only digits or periods\n+  quoted_identifier: (\\|)(?:\\\\.|[^|])*(\\|)\n+\n+  break: (?={{break_char}}|$)\n+  break_char: '[\\s()\"'',:;|]'\n+\n+  # caracters\n+  standard_char: '[0-9A-Za-z!\"#$%&''()*+,\\-./:;<=>?@\\\\\\[\\]^_`{|}~]'\n+  char_attributes: (?:(?:[[:alnum:]_]+-)+\\\\?)\n+\n+  # numbers\n+  exponent: (?:[esfdlESFDL][-+]?\\d+)\n+\n+  declaration_keywords: |-\n+    (?xi:\n+      declaim\n+    | define-(?: compiler-macro | condition | declaration | method-combination | modify-macro | setf-method )\n+    | def(?: class | constant | generic | macro | method | package | parameter | setf | struct | type | un | var )\n+    | generic-(?: flet | function | labels )\n+    | flet\n+    | labels\n+    | let\\*?\n+    | locally\n+    | macrolet\n+    | multiple-value-bind\n+    | proclaim\n+    | prog\\*?\n+    | with-(?: accessors | added-methods | condition-restarts | input-from-string | open-file | open-stream | output-to-string | standard-io-syntax )\n+    ){{break}}\n+\n+  declaration_identifiers: |-\n+    (?xi:\n+      dynamic-extent\n+    | ftype\n+    | ignorable\n+    | ignore\n+    | inline\n+    | notinline\n+    | optimize\n+    | special\n+    | type\n+    ){{break}}\n+\n+  builtin_constants: |-\n+    (?xi:\n+      t | true | false | null | nil | pi\n+    | array-(?: rank | dimension | total-size )-limit\n+    | call-arguments-limit\n+    | char-(?: (?: super | hyper | meta | control )-bit | (?: font | code | bits )-limit )\n+    | internal-time-units-per-second\n+    | lambda-(?: parameters-limit | list-keywords )\n+    | least-(?: positive | negative )-normalized-(?: single | short | long | double )-float\n+    | most-(?: positive | negative )-fixnum\n+    | (?: most | least )-(?: positive | negative )-(?: single | short | long | double )-float\n+    | multiple-values-limit\n+    | (?: single | short | long | double )-float-(?: negative- )?epsilon\n+    ){{break}}\n+\n+  builtin_functions: |-\n+    (?xi:\n+      abort\n+    | abs\n+    | acons\n+    | acos\n+    | acosh\n+    | add-method\n+    | adjoin\n+    | adjust-array\n+    | adjustable-array-p\n+    | alpha-char-p\n+    | alphanumericp\n+    | alter\n+    | append\n+    | appending\n+    | apply\n+    | applyhook\n+    | apropos\n+    | apropos-list\n+    | aref\n+    | arithmetic-error-operands\n+    | arithmetic-error-operation\n+    | array-dimension\n+    | array-dimensions\n+    | array-element-type\n+    | array-has-fill-pointer-p\n+    | array-in-bounds-p\n+    | array-rank\n+    | array-row-major-index\n+    | array-total-size\n+    | arrayp\n+    | ash\n+    | asin\n+    | asinh\n+    | assert\n+    | assoc\n+    | assoc-if\n+    | assoc-if-not\n+    | atan\n+    | atanh\n+    | atom\n+    | augment-environment\n+    | bit\n+    | bit-and\n+    | bit-andc1\n+    | bit-andc2\n+    | bit-eqv\n+    | bit-ior\n+    | bit-nand\n+    | bit-nor\n+    | bit-not\n+    | bit-orc1\n+    | bit-orc2\n+    | bit-vector-p\n+    | bit-xor\n+    | boole\n+    | both-case-p\n+    | boundp\n+    | break\n+    | broadcast-stream-streams\n+    | butlast\n+    | byte\n+    | byte-position\n+    | byte-size\n+    | caaaar\n+    | caaadr\n+    | caaar\n+    | caadar\n+    | caaddr\n+    | caadr\n+    | caar\n+    | cadaar\n+    | cadadr\n+    | cadar\n+    | caddar\n+    | cadddr\n+    | caddr\n+    | cadr\n+    | call-method\n+    | call-next-method\n+    | car\n+    | catenate\n+    | ccase\n+    | cdaaar\n+    | cdaadr\n+    | cdaar\n+    | cdadar\n+    | cdaddr\n+    | cdadr\n+    | cdar\n+    | cddaar\n+    | cddadr\n+    | cddar\n+    | cdddar\n+    | cddddr\n+    | cdddr\n+    | cddr\n+    | cdr\n+    | ceiling\n+    | cell-error-name\n+    | cerror\n+    | change-class\n+    | char\n+    | char-bit\n+    | char-bits\n+    | char-code\n+    | char-downcase\n+    | char-equal\n+    | char-font\n+    | char-greaterp\n+    | char-int\n+    | char-lessp\n+    | char-name\n+    | char-not-equal\n+    | char-not-greaterp\n+    | char-not-lessp\n+    | char-upcase\n+    | char/=\n+    | char<\n+    | char<=\n+    | char=\n+    | char>\n+    | char>=\n+    | character\n+    | characterp\n+    | check-type\n+    | choose\n+    | choose-if\n+    | chunk\n+    | cis\n+    | class-name\n+    | class-of\n+    | clear-input\n+    | close\n+    | clrhash\n+    | code-char\n+    | coerce\n+    | collect\n+    | collect-alist\n+    | collect-and\n+    | collect-append\n+    | collect-file\n+    | collect-first\n+    | collect-fn\n+    | collect-hash\n+    | collect-last\n+    | collect-length\n+    | collect-max\n+    | collect-min\n+    | collect-nconc\n+    | collect-nth\n+    | collect-or\n+    | collect-plist\n+    | collect-sum\n+    | collecting\n+    | collecting-fn\n+    | commonp\n+    | compile\n+    | compile-file\n+    | compile-file-pathname\n+    | compiled-function-p\n+    | compiler-let\n+    | compiler-macro-function\n+    | compiler-macroexpand\n+    | compiler-macroexpand-1\n+    | complement\n+    | complex\n+    | complexp\n+    | compute-applicable-methods\n+    | compute-restarts\n+    | concatenate\n+    | concatenated-stream-streams\n+    | conjugate\n+    | cons\n+    | consp\n+    | constantp\n+    | continue\n+    | copy-alist\n+    | copy-list\n+    | copy-pprint-dispatch\n+    | copy-readtable\n+    | copy-seq\n+    | copy-symbol\n+    | copy-tree\n+    | cos\n+    | cosh\n+    | cotruncate\n+    | count\n+    | count-if\n+    | count-if-not\n+    | counting\n+    | declaim\n+    | declaration-information\n+    | decode-float\n+    | decode-universal-time\n+    | delete\n+    | delete-duplicates\n+    | delete-file\n+    | delete-if\n+    | delete-if-not\n+    | delete-package\n+    | denominator\n+    | deposit-field\n+    | describe\n+    | describe-object\n+    | destructuring-bind\n+    | digit-char\n+    | digit-char-p\n+    | directory\n+    | directory-namestring\n+    | disassemble\n+    | do-all-keyword-symbols\n+    | do-external-keyword-symbols\n+    | do-keyword-symbols\n+    | documentation\n+    | dolist\n+    | dpb\n+    | dribble\n+    | ecase\n+    | echo-stream-input-stream\n+    | echo-stream-output-stream\n+    | ed\n+    | eighth\n+    | elt\n+    | encapsulated\n+    | enclose\n+    | encode-universal-time\n+    | endp\n+    | enough-namestring\n+    | ensure-generic-function\n+    | error\n+    | eval\n+    | evalhook\n+    | evenp\n+    | every\n+    | exp\n+    | expand\n+    | export\n+    | expt\n+    | f\n+    | fboundp\n+    | fdefinition\n+    | ffloor\n+    | fifth\n+    | file-author\n+    | file-error-pathname\n+    | file-length\n+    | file-namestring\n+    | file-position\n+    | file-string-length\n+    | file-write-date\n+    | fill\n+    | fill-pointer\n+    | find\n+    | find-all-keyword-symbols\n+    | find-class\n+    | find-if\n+    | find-if-not\n+    | find-method\n+    | find-package\n+    | find-restart\n+    | find-symbol\n+    | finish-output\n+    | first\n+    | float\n+    | float-digits\n+    | float-precision\n+    | float-radix\n+    | float-sign\n+    | floatp\n+    | floor\n+    | format\n+    | formatter\n+    | fourth\n+    | funcall\n+    | function-information\n+    | function-keywords\n+    | function-lambda-expression\n+    | functionp\n+    | gatherer\n+    | gathering\n+    | gcd\n+    | generator\n+    | generic-function\n+    | gensym\n+    | gentemp\n+    | get\n+    | get-decoded-time\n+    | get-internal-real-time\n+    | get-internal-run-time\n+    | get-output-stream-string\n+    | get-properties\n+    | get-setf-method\n+    | get-setf-method-multiple-value\n+    | get-universal-time\n+    | getf\n+    | gethash\n+    | graphic-char-p\n+    | handler-bind\n+    | handler-case\n+    | hash-table-count\n+    | hash-table-p\n+    | hash-table-rehash-size\n+    | hash-table-rehash-threshold\n+    | hash-table-size\n+    | hash-table-test\n+    | host-namestring\n+    | identity\n+    | ignore-errors\n+    | imagpart\n+    | import\n+    | in-package\n+    | initialize-instance\n+    | input-stream-p\n+    | inspect\n+    | int-char\n+    | integer-decode-float\n+    | integer-length\n+    | integerp\n+    | interactive-stream-p\n+    | intern\n+    | intersection\n+    | invalid-method-error\n+    | invoke-debugger\n+    | invoke-restart\n+    | isqrt\n+    | iterate\n+    | keywordp\n+    | last\n+    | latch\n+    | lcm\n+    | ldb\n+    | ldb-test\n+    | ldiff\n+    | length\n+    | lisp-implementation-type\n+    | lisp-implementation-version\n+    | list\n+    | list-all-packages\n+    | list-length\n+    | list\\*\n+    | listen\n+    | listp\n+    | load\n+    | load-logical-pathname-translations\n+    | locally\n+    | log\n+    | logandc1\n+    | logandc2\n+    | logbitp\n+    | logcount\n+    | logical-pathname\n+    | logical-pathname-translations\n+    | lognand\n+    | lognot\n+    | logorc1\n+    | logorc2\n+    | logtest\n+    | long-site-name\n+    | loop-finish\n+    | lower-case-p\n+    | machine-instance\n+    | machine-type\n+    | machine-version\n+    | macro-function\n+    | macroexpand\n+    | macroexpand-1\n+    | make-array\n+    | make-broadcast-stream\n+    | make-char\n+    | make-concatenated-stream\n+    | make-condition\n+    | make-dispatch-macro-character\n+    | make-echo-stream\n+    | make-hash-table\n+    | make-instance\n+    | make-instances-obsolete\n+    | make-list\n+    | make-load-form\n+    | make-load-form-saving-slots\n+    | make-package\n+    | make-pathname\n+    | make-random-state\n+    | make-sequence\n+    | make-string\n+    | make-string-input-stream\n+    | make-string-output-stream\n+    | make-symbol\n+    | make-synonym-stream\n+    | make-two-way-stream\n+    | makunbound\n+    | map\n+    | map-fn\n+    | map-into\n+    | maphash\n+    | mapping\n+    | mask\n+    | mask-field\n+    | maximize\n+    | maximizing\n+    | member\n+    | member-if\n+    | member-if-not\n+    | memberp\n+    | merge\n+    | merge-pathnames\n+    | method-combination-error\n+    | method-qualifiers\n+    | mingle\n+    | minimize\n+    | minimizing\n+    | minusp\n+    | mismatch\n+    | muffle-warning\n+    | multiple-value-bind\n+    | multiple-value-list\n+    | multiple-value-setq\n+    | name-char\n+    | namestring\n+    | nbutlast\n+    | nconc\n+    | nconcing\n+    | next-in\n+    | next-method-p\n+    | next-out\n+    | nintersection\n+    | ninth\n+    | no-applicable-method\n+    | no-next-method\n+    | notany\n+    | notevery\n+    | nreconc\n+    | nreverse\n+    | nset-difference\n+    | nset-exclusive-or\n+    | nstring-capitalize\n+    | nstring-downcase\n+    | nstring-upcase\n+    | nsublis\n+    | nsubst\n+    | nsubst-if\n+    | nsubst-if-not\n+    | nsubstitute\n+    | nsubstitute-if\n+    | nsubstitute-if-not\n+    | nth\n+    | nth-value\n+    | nthcdr\n+    | numberp\n+    | numerator\n+    | nunion\n+    | oddp\n+    | open\n+    | open-stream-p\n+    | output-stream-p\n+    | package-error-package\n+    | package-name\n+    | package-nicknames\n+    | package-shadowing-keyword-symbols\n+    | package-use-list\n+    | package-used-by-list\n+    | packagep\n+    | pairlis\n+    | parse-integer\n+    | parse-macro\n+    | parse-namestring\n+    | pathname\n+    | pathname-device\n+    | pathname-directory\n+    | pathname-host\n+    | pathname-match-p\n+    | pathname-name\n+    | pathname-type\n+    | pathname-version\n+    | pathnamep\n+    | peek-char\n+    | phase\n+    | plusp\n+    | pop\n+    | position\n+    | position-if\n+    | position-if-not\n+    | positions\n+    | pprint-dispatch\n+    | pprint-exit-if-list-exhausted\n+    | pprint-fill\n+    | pprint-indent\n+    | pprint-linear\n+    | pprint-logical-block\n+    | pprint-newline\n+    | pprint-pop\n+    | pprint-tab\n+    | pprint-tabular\n+    | previous\n+    | prin1\n+    | print\n+    | print-object\n+    | print-unreadable-object\n+    | probe-file\n+    | producing\n+    | prog1\n+    | prog2\n+    | progn\n+    | provide\n+    | psetf\n+    | psetq\n+    | push\n+    | pushnew\n+    | quote\n+    | random\n+    | random-state-p\n+    | rassoc\n+    | rassoc-if\n+    | rassoc-if-not\n+    | rational\n+    | rationalize\n+    | rationalp\n+    | read\n+    | read-byte\n+    | read-char\n+    | read-char-no-hang\n+    | read-delimited-list\n+    | read-from-string\n+    | read-line\n+    | read-preserving-whitespace\n+    | readtable-case\n+    | readtablep\n+    | realp\n+    | realpart\n+    | reduce\n+    | reinitialize-instance\n+    | remf\n+    | remhash\n+    | remove\n+    | remove-duplicates\n+    | remove-method\n+    | remprop\n+    | rename-file\n+    | rename-package\n+    | replace\n+    | require\n+    | rest\n+    | restart-bind\n+    | restart-case\n+    | restart-name\n+    | result-of\n+    | revappend\n+    | reverse\n+    | room\n+    | rotatef\n+    | round\n+    | row-major-aref\n+    | rplaca\n+    | rplacd\n+    | sbit\n+    | scale-float\n+    | scan\n+    | scan-alist\n+    | scan-file\n+    | scan-fn\n+    | scan-fn-inclusive\n+    | scan-hash\n+    | scan-lists-of-lists\n+    | scan-lists-of-lists-fringe\n+    | scan-multiple\n+    | scan-plist\n+    | scan-range\n+    | scan-sublists\n+    | scan-symbols\n+    | schar\n+    | search\n+    | second\n+    | series\n+    | set\n+    | set-char-bit\n+    | set-difference\n+    | set-dispatch-macro-character\n+    | set-exclusive-or\n+    | set-macro-character\n+    | set-pprint-dispatch\n+    | set-syntax-from-char\n+    | setf\n+    | setq\n+    | seventh\n+    | shadow\n+    | shadowing-import\n+    | shared-initialize\n+    | shiftf\n+    | short-site-name\n+    | signal\n+    | signum\n+    | simple-bit-vector-p\n+    | simple-condition-format-arguments\n+    | simple-condition-format-string\n+    | simple-string-p\n+    | simple-vector-p\n+    | sin\n+    | sinh\n+    | sixth\n+    | sleep\n+    | slot-boundp\n+    | slot-exists-p\n+    | slot-makunbound\n+    | slot-missing\n+    | slot-unbound\n+    | slot-value\n+    | software-type\n+    | software-version\n+    | some\n+    | sort\n+    | special-form-p\n+    | split\n+    | split-if\n+    | sqrt\n+    | stable-sort\n+    | standard-char-p\n+    | step\n+    | store-value\n+    | stream-element-type\n+    | stream-error-stream\n+    | stream-external-format\n+    | streamp\n+    | string\n+    | string-capitalize\n+    | string-downcase\n+    | string-equal\n+    | string-greaterp\n+    | string-left-trim\n+    | string-lessp\n+    | string-not-equal\n+    | string-not-greaterp\n+    | string-not-lessp\n+    | string-right-trim\n+    | string-trim\n+    | string-upcase\n+    | string/=\n+    | string<\n+    | string<=\n+    | string=\n+    | string>\n+    | string>=\n+    | stringp\n+    | sublis\n+    | subseq\n+    | subseries\n+    | subsetp\n+    | subst\n+    | subst-if\n+    | subst-if-not\n+    | substitute\n+    | substitute-if\n+    | substitute-if-not\n+    | subtypep\n+    | sum\n+    | summing\n+    | svref\n+    | sxhash\n+    | symbol-function\n+    | symbol-name\n+    | symbol-package\n+    | symbol-plist\n+    | symbol-value\n+    | symbolp\n+    | synonym-stream-symbol\n+    | tailp\n+    | tan\n+    | tanh\n+    | tenth\n+    | terminate-producing\n+    | terpri\n+    | third\n+    | time\n+    | to-alter\n+    | trace\n+    | translate-logical-pathname\n+    | translate-pathname\n+    | tree-equal\n+    | truename\n+    | truncate\n+    | two-way-stream-input-stream\n+    | two-way-stream-output-stream\n+    | type-error-datum\n+    | type-error-expected-type\n+    | type-of\n+    | typep\n+    | unexport\n+    | unintern\n+    | union\n+    | unread-char\n+    | untrace\n+    | unuse-package\n+    | update-instance-for-different-class\n+    | update-instance-for-redefined-class\n+    | upgraded-array-element-type\n+    | upgraded-complex-part-type\n+    | upper-case-p\n+    | use-package\n+    | use-value\n+    | user-homedir-pathname\n+    | values\n+    | values-list\n+    | variable-information\n+    | vector\n+    | vector-pop\n+    | vector-push\n+    | vector-push-extend\n+    | vectorp\n+    | warn\n+    | wild-pathname-p\n+    | with-compilation-unit\n+    | with-hash-table-iterator\n+    | with-package-iterator\n+    | with-simple-restart\n+    | with-standard-io-syntax\n+    | write\n+    | write-byte\n+    | write-char\n+    | write-string\n+    | write-to-string\n+    | y-or-n-p\n+    | yes-or-no-p\n+    | zerop\n+    ){{break}}\n+\n+  # Built-in atomic type specifiers\n+  # https://www.lispworks.com/documentation/lw70/CLHS/Body/04_bc.htm\n+  # Note: Some of them are scoped function when appearing as first list item.\n+  builtin_types: |-\n+    (?xi:\n+      arithmetic-error\n+    | array\n+    | atom\n+    | base-char\n+    | base-string\n+    | bignum\n+    | bit\n+    | bit-vector\n+    | broadcast-stream\n+    | built-in-class\n+    | cell-error\n+    | character\n+    | class\n+    | compiled-function\n+    | complex\n+    | concatenated-stream\n+    | condition\n+    | cons\n+    | control-error\n+    | division-by-zero\n+    | double-float\n+    | echo-stream\n+    | end-of-file\n+    | error\n+    | extended-char\n+    | file-error\n+    | file-stream\n+    | fixnum\n+    | float\n+    | floating-point-inexact\n+    | floating-point-invalid-operation\n+    | floating-point-overflow\n+    | floating-point-underflow\n+    | function\n+    | generic-function\n+    | hash-table\n+    | integer\n+    | keyword\n+    | list\n+    | logical-pathname\n+    | long-float\n+    | method\n+    | method-combination\n+    | number\n+    | package\n+    | package-error\n+    | parse-error\n+    | pathname\n+    | print-not-readable\n+    | program-error\n+    | random-state\n+    | ratio\n+    | rational\n+    | reader-error\n+    | readtable\n+    | real\n+    | restart\n+    | sequence\n+    | serious-condition\n+    | short-float\n+    | signed-byte\n+    | simple-array\n+    | simple-base-string\n+    | simple-bit-vector\n+    | simple-condition\n+    | simple-error\n+    | simple-string\n+    | simple-type-error\n+    | simple-vector\n+    | simple-warning\n+    | single-float\n+    | standard-char\n+    | standard-class\n+    | standard-generic-function\n+    | standard-method\n+    | standard-object\n+    | storage-condition\n+    | stream\n+    | stream-error\n+    | string\n+    | string-stream\n+    | structure-class\n+    | structure-object\n+    | style-warning\n+    | symbol\n+    | synonym-stream\n+    | two-way-stream\n+    | type-error\n+    | unbound-slot\n+    | unbound-variable\n+    | undefined-function\n+    | unsigned-byte\n+    | vector\n+    | warning\n+    ){{break}}\n+\n+  builtin_variables: |-\n+    \\*(?xi:\n+      applyhook\n+    | break-on-signals\n+    | break-on-warnings\n+    | compile-file-pathname\n+    | compile-file-truename\n+    | compile-print\n+    | compile-verbose\n+    | debug-io\n+    | debugger-hook\n+    | default-pathname-defaults\n+    | error-output\n+    | evalhook\n+    | features\n+    | gensym-counter\n+    | load-pathname\n+    | load-print\n+    | load-truename\n+    | load-verbose\n+    | macroexpand-hook\n+    | modules\n+    | package\n+    | print-array\n+    | print-base\n+    | print-case\n+    | print-circle\n+    | print-escape\n+    | print-gensym\n+    | print-length\n+    | print-level\n+    | print-lines\n+    | print-miser-width\n+    | print-pprint-dispatch\n+    | print-pretty\n+    | print-radix\n+    | print-readably\n+    | print-right-margin\n+    | query-io\n+    | random-state\n+    | read-base\n+    | read-default-float-format\n+    | read-eval\n+    | read-suppress\n+    | readtable\n+    | standard-input\n+    | standard-output\n+    | suppress-series-warnings\n+    | terminal-io\n+    | trace-output\n+    )\\*{{break}}\n"
  },
  {
    "path": "assets/patches/Makefile.sublime-syntax.patch",
    "content": "diff --git syntaxes/01_Packages/Makefile/Makefile.sublime-syntax syntaxes/01_Packages/Makefile/Makefile.sublime-syntax\nindex 3cc3a97e..0c7a3f24 100644\n--- syntaxes/01_Packages/Makefile/Makefile.sublime-syntax\n+++ syntaxes/01_Packages/Makefile/Makefile.sublime-syntax\n@@ -44,64 +44,50 @@ variables:\n   # variable substitutions anywhere. We try to remedy this by hacking in a\n   # regex that matches up to four levels of nested parentheses, and ignores\n   # whatever's inside the parentheses.\n-  nps: '[^()]*'\n-  open: '(?:\\('\n-  close: '\\))?'       # ignore this invalid.illegal\n+  nps_unnested: '[^()]*'\n+  nps: '[^()]*(?=[()])'\n+  open: '(?:{{nps}}\\('\n+  close: '\\){{nps_unnested}})?'       # ignore this invalid.illegal\n   just_eat: |         # WARNING: INSANITY FOLLOWS!\n-    (?x)              # ignore whitespace in this regex\n-      {{nps}}         #       level 0\n+    (?x)(?:              # ignore whitespace in this regex\n       {{open}}        # start level 1                      __\n-        {{nps}}       #       level 1          _______    /*_>-<\n         {{open}}      # start level 2      ___/ _____ \\__/ /\n-          {{nps}}     #       level 2     <____/     \\____/\n           {{open}}    # start level 3     is like snek... (by Valerie Haecky)\n-            {{nps}}   #       level 3\n             {{open}}  # start level 4\n               {{nps}} #       level 4\n             {{close}} #   end level 4\n-            {{nps}}   #       level 3\n           {{close}}   #   end level 3\n-          {{nps}}     #       level 2\n           {{open}}    # start level 3\n-            {{nps}}   #       level 3\n             {{open}}  # start level 4\n               {{nps}} #       level 4\n             {{close}} #   end level 4\n-            {{nps}}   #       level 3\n           {{close}}   #   end level 3\n-          {{nps}}     #       level 2\n+          {{nps}}\n         {{close}}     #   end level 2\n-        {{nps}}       #       level 1\n         {{open}}      # start level 2\n-          {{nps}}     #       level 2\n           {{open}}    # start level 3\n-            {{nps}}   #       level 3\n             {{open}}  # start level 4\n               {{nps}} #       level 4\n             {{close}} #   end level 4\n-            {{nps}}   #       level 3\n+          {{nps}}\n           {{close}}   #   end level 3\n-          {{nps}}     #       level 2\n           {{open}}    # start level 3\n-            {{nps}}   #       level 3\n             {{open}}  # start level 4\n               {{nps}} #       level 4\n             {{close}} #   end level 4\n-            {{nps}}   #       level 3\n+          {{nps}}\n           {{close}}   #   end level 3\n-          {{nps}}     #       level 2\n           {{open}}    # start level 3\n-            {{nps}}   #       level 3\n             {{open}}  # start level 4\n               {{nps}} #       level 4\n             {{close}} #   end level 4\n-            {{nps}}   #       level 3\n+          {{nps}}\n           {{close}}   #   end level 3\n-          {{nps}}     #       level 2\n+        {{nps}}\n         {{close}}     #   end level 2\n-        {{nps}}       #       level 1\n+      {{nps}}\n       {{close}}       #   end level 1\n-      {{nps}}         #       level 0\n+      |{{nps_unnested}})\n   rule_lookahead: '{{just_eat}}{{ruleassign}}{{just_eat}}'\n \n   var_lookahead_base: '{{just_eat}}({{varassign}}|{{shellassign}}){{just_eat}}'\n"
  },
  {
    "path": "assets/patches/Markdown.sublime-syntax.patch",
    "content": "diff --git syntaxes/01_Packages/Markdown/Markdown.sublime-syntax syntaxes/01_Packages/Markdown/Markdown.sublime-syntax\nindex 19dc685d..3a45ea05 100644\n--- syntaxes/01_Packages/Markdown/Markdown.sublime-syntax\n+++ syntaxes/01_Packages/Markdown/Markdown.sublime-syntax\n@@ -24,7 +24,6 @@ variables:\n             )\n             [ \\t]*$                          # followed by any number of tabs or spaces, followed by the end of the line\n         )\n-    setext_escape: ^(?=\\s{0,3}(?:---+|===+)\\s*$)\n     block_quote: (?:[ ]{,3}>(?:.|$))         # between 0 and 3 spaces, followed by a greater than sign, followed by any character or the end of the line\n     atx_heading: (?:[#]{1,6}\\s*)             # between 1 and 6 hashes, followed by any amount of whitespace\n     indented_code_block: (?:[ ]{4}|\\t)       # 4 spaces or a tab\n@@ -277,69 +276,40 @@ contexts:\n         8: markup.underline.link.markdown\n       push: [link-ref-def, after-link-title, link-title]\n     - match: '^(?=\\S)(?![=-]{3,}\\s*$)'\n-      branch_point: heading2-branch\n-      branch:\n-        - not-heading2\n-        - heading2\n-\n-  not-paragraph:\n-    - match: |-\n-        (?x)                         # pop out of this context when one of the following conditions are met:\n-        ^(?:\n-            \\s*$                     # the line is blank (or only contains whitespace)\n-        |   (?=\n-                {{block_quote}}      # a block quote begins the line\n-            |   [ ]{,3}[*+-][ ]      # an unordered list item begins the line\n-            |   [ ]{,3}1[.][ ]       # an ordered list item with number \"1\" begins the line\n-            |   \\#                   # an ATX heading begins the line\n-            |   [ ]{,3}<(            # all types of HTML blocks except type 7 may interrupt a paragraph\n-                  {{html_tag_block_end_at_close_tag}}   # 1\n-                | !--                                   # 2\n-                | \\?                                    # 3\n-                | ![A-Z]                                # 4\n-                | !\\[CDATA\\[                            # 5\n-                | {{html_tag_block_end_at_blank_line}}  # 6\n+      push:\n+        - meta_scope: meta.paragraph.markdown\n+        - match: |-\n+            (?x)                         # pop out of this context when one of the following conditions are met:\n+            ^(?:\n+                \\s*$                     # the line is blank (or only contains whitespace)\n+            |   (?=\n+                    {{block_quote}}      # a block quote begins the line\n+                |   [ ]{,3}[*+-][ ]      # an unordered list item begins the line\n+                |   [ ]{,3}1[.][ ]       # an ordered list item with number \"1\" begins the line\n+                |   \\#                   # an ATX heading begins the line\n+                |   [ ]{,3}<(            # all types of HTML blocks except type 7 may interrupt a paragraph\n+                      {{html_tag_block_end_at_close_tag}}   # 1\n+                    | !--                                   # 2\n+                    | \\?                                    # 3\n+                    | ![A-Z]                                # 4\n+                    | !\\[CDATA\\[                            # 5\n+                    | {{html_tag_block_end_at_blank_line}}  # 6\n+                    )\n                 )\n             )\n-        )\n-      pop: true\n-\n-  not-heading2:\n-    - include: not-paragraph\n-    - match: (?=\\S)\n-      branch_point: heading1-branch\n-      branch:\n-        - paragraph\n-        - heading1\n-    - match: ''\n-      pop: true\n-\n-  paragraph:\n-      - meta_scope: meta.paragraph.markdown\n-      - match: ^\\s{0,3}===+\\s*$\n-        fail: heading1-branch\n-      - match: ^\\s{0,3}---+\\s*$\n-        fail: heading2-branch\n-      - include: not-paragraph\n-      - include: inline-bold-italic-linebreak\n-      - include: scope:text.html.basic\n-\n-  heading1:\n-    - meta_scope: markup.heading.1.markdown\n-    - include: inline-bold-italic-linebreak\n-    - match: '^[ \\t]{0,3}(={3,})(?=[ \\t]*$)'\n-      captures:\n-        1: markup.heading.1.setext.markdown punctuation.definition.heading.setext.markdown\n-      pop: true\n-\n-  heading2:\n-    - meta_scope: markup.heading.2.markdown\n-    - include: inline-bold-italic-linebreak\n-    - match: '^[ \\t]{0,3}(-{3,})(?=[ \\t]*$)'\n-      captures:\n-        1: markup.heading.2.setext.markdown punctuation.definition.heading.setext.markdown\n-      pop: true\n-\n+          pop: true\n+        - include: inline-bold-italic-linebreak\n+        - include: scope:text.html.basic\n+        - match: '^(={3,})(?=[ \\t]*$)'\n+          scope: markup.heading.1.setext.markdown\n+          captures:\n+            1: punctuation.definition.heading.setext.markdown\n+          pop: true\n+        - match: '^(-{3,})(?=[ \\t]*$)'\n+          scope: markup.heading.2.setext.markdown\n+          captures:\n+            1: punctuation.definition.heading.setext.markdown\n+          pop: true\n   link-ref-def:\n     - meta_scope: meta.link.reference.def.markdown\n     - match: ''\n@@ -430,8 +400,6 @@ contexts:\n       push:\n         - meta_scope: markup.bold.markdown\n         - meta_content_scope: markup.italic.markdown\n-        - match: '{{setext_escape}}'\n-          pop: true\n         - match: |-\n             (?x)\n                 [ \\t]*\\*{4,}    # if there are more than 3 its not applicable to be bold or italic\n@@ -446,8 +414,6 @@ contexts:\n           scope: punctuation.definition.bold.end.markdown\n           set:\n             - meta_content_scope: markup.italic.markdown\n-            - match: '{{setext_escape}}'\n-              pop: true\n             - match: |-\n                 (?x)\n                     [ \\t]*\\*{3,}    # if there are more than 3 its not applicable to be bold or italic\n@@ -463,8 +429,6 @@ contexts:\n           scope: punctuation.definition.italic.end.markdown\n           set:\n             - meta_content_scope: markup.bold.markdown\n-            - match: '{{setext_escape}}'\n-              pop: true\n             - match: |-\n                 (?x)\n                     [ \\t]*\\*{3,}    # if there are more than 3 its not applicable to be bold or italic\n@@ -727,8 +691,6 @@ contexts:\n       scope: punctuation.definition.italic.begin.markdown\n       push:\n         - meta_scope: markup.italic.markdown\n-        - match: '{{setext_escape}}'\n-          pop: true\n         - match: |-\n               (?x)\n                   [ \\t]*\\*{4,}   # if there are more than 3 its not applicable to be bold or italic\n@@ -745,8 +707,6 @@ contexts:\n       scope: punctuation.definition.italic.begin.markdown\n       push:\n         - meta_scope: markup.italic.markdown\n-        - match: '{{setext_escape}}'\n-          pop: true\n         - match: |-\n               (?x)\n                   [ \\t]*_{4,}   # if there are more than 3 its not applicable to be bold or italic\n@@ -773,8 +733,6 @@ contexts:\n         - include: bold-italic-trailing\n   bold-italic-trailing:\n     - include: scope:text.html.basic\n-    - match: '{{setext_escape}}'\n-      pop: true\n     - match: ^\\s*$\\n?\n       scope: invalid.illegal.non-terminated.bold-italic.markdown\n       pop: true\n@@ -1073,6 +1031,36 @@ contexts:\n       escape: '{{code_fence_escape}}'\n       escape_captures:\n         0: meta.code-fence.definition.end.python.markdown-gfm\n+        1: punctuation.definition.raw.code-fence.end.markdown\n+    - match: |-\n+         (?x)\n+          {{fenced_code_block_start}}\n+          ((?i:puppet))\n+          {{fenced_code_block_trailing_infostring_characters}}\n+      captures:\n+        0: meta.code-fence.definition.begin.puppet.markdown-gfm\n+        2: punctuation.definition.raw.code-fence.begin.markdown\n+        5: constant.other.language-name.markdown\n+      embed: scope:source.puppet\n+      embed_scope: markup.raw.code-fence.puppet.markdown-gfm\n+      escape: '{{code_fence_escape}}'\n+      escape_captures:\n+        0: meta.code-fence.definition.end.puppet.markdown-gfm\n+        1: punctuation.definition.raw.code-fence.end.markdown\n+    - match: |-\n+         (?x)\n+          {{fenced_code_block_start}}\n+          ((?i:typescript|ts))\n+          {{fenced_code_block_trailing_infostring_characters}}\n+      captures:\n+        0: meta.code-fence.definition.begin.typescript.markdown-gfm\n+        2: punctuation.definition.raw.code-fence.begin.markdown\n+        5: constant.other.language-name.markdown\n+      embed: scope:source.ts\n+      embed_scope: markup.raw.code-fence.typescript.markdown-gfm\n+      escape: '{{code_fence_escape}}'\n+      escape_captures:\n+        0: meta.code-fence.definition.end.typescript.markdown-gfm\n         1: punctuation.definition.raw.code-fence.end.markdown\n     - match: |-\n          (?x)\n@@ -1152,7 +1155,7 @@ contexts:\n     - match: |-\n          (?x)\n           {{fenced_code_block_start}}\n-          ((?i:rust))\n+          ((?i:rust|rs))\n           {{fenced_code_block_trailing_infostring_characters}}\n       captures:\n         0: meta.code-fence.definition.begin.rust.markdown-gfm\n"
  },
  {
    "path": "assets/patches/MediaWiki.sublime-syntax.patch",
    "content": "diff --git syntaxes/02_Extra/MediaWiki/MediawikiNG.sublime-syntax syntaxes/02_Extra/MediaWiki/MediawikiNG.sublime-syntax\nindex f542c9e..8eaf020 100644\n--- syntaxes/02_Extra/MediaWiki/MediawikiNG.sublime-syntax\n+++ syntaxes/02_Extra/MediaWiki/MediawikiNG.sublime-syntax\n@@ -1,7 +1,7 @@\n %YAML 1.2\n ---\n # http://www.sublimetext.com/docs/3/syntax.html\n-name: Mediawiki NG\n+name: MediaWiki\n file_extensions: [mediawiki, wikipedia, wiki]\n scope: text.html.mediawiki\n \n"
  },
  {
    "path": "assets/patches/Monokai-Extended.tmTheme.patch",
    "content": "diff --git themes/sublime-monokai-extended/Monokai\\ Extended.tmTheme themes/sublime-monokai-extended/Monokai\\ Extended.tmTheme\nindex 9c2aa3e..180cbbf 100644\n--- themes/sublime-monokai-extended/Monokai Extended.tmTheme\t\n+++ themes/sublime-monokai-extended/Monokai Extended.tmTheme\t\n@@ -810,11 +810,11 @@\n       <key>name</key>\n       <string>JSON String</string>\n       <key>scope</key>\n-      <string>meta.structure.dictionary.json string.quoted.double.json</string>\n+      <string>meta.mapping.key.json string.quoted.double.json, punctuation.separator.sequence.csv</string>\n       <key>settings</key>\n       <dict>\n         <key>foreground</key>\n-        <string>#cfcfc2</string>\n+        <string>#fd971f</string>\n       </dict>\n     </dict>\n     <dict>\n@@ -1027,7 +1027,7 @@\n       <key>name</key>\n       <string>Invalid</string>\n       <key>scope</key>\n-      <string>invalid</string>\n+      <string>invalid, meta.annotation.error-line</string>\n       <key>settings</key>\n       <dict>\n         <key>background</key>\n@@ -1038,11 +1038,22 @@\n         <string>#f8f8f0</string>\n       </dict>\n     </dict>\n+    <dict>\n+      <key>name</key>\n+      <string>Error</string>\n+      <key>scope</key>\n+      <string>markup.error</string>\n+      <key>settings</key>\n+      <dict>\n+        <key>foreground</key>\n+        <string>#dd2020</string>\n+      </dict>\n+    </dict>\n     <dict>\n       <key>name</key>\n       <string>Invalid deprecated</string>\n       <key>scope</key>\n-      <string>invalid.deprecated</string>\n+      <string>invalid.deprecated, markup.warning</string>\n       <key>settings</key>\n       <dict>\n         <key>background</key>\n"
  },
  {
    "path": "assets/patches/OneHalfDark.tmTheme.patch",
    "content": "diff --git themes/onehalf/sublimetext/OneHalfDark.tmTheme themes/onehalf/sublimetext/OneHalfDark.tmTheme\nindex b16050c..b021071 100644\n--- themes/onehalf/sublimetext/OneHalfDark.tmTheme\n+++ themes/onehalf/sublimetext/OneHalfDark.tmTheme\n@@ -28,7 +28,7 @@\n <plist version=\"1.0\">\n <dict>\n \t<key>name</key>\n-\t<string>OneHalfLight</string>\n+\t<string>OneHalfDark</string>\n \t<key>semanticClass</key>\n \t<string>theme.dark.one_half_dark</string>\n \t<key>uuid</key>\n@@ -155,7 +155,7 @@\n \t\t\t<key>name</key>\n \t\t\t<string>Classes</string>\n \t\t\t<key>scope</key>\n-\t\t\t<string>support.class, entity.name.class, entity.name.type.class</string>\n+\t\t\t<string>support.class, entity.name.class, entity.name.type.class, entity.name</string>\n \t\t\t<key>settings</key>\n \t\t\t<dict>\n \t\t\t\t<key>foreground</key>\n@@ -188,7 +188,7 @@\n \t\t\t<key>name</key>\n \t\t\t<string>Storage</string>\n \t\t\t<key>scope</key>\n-\t\t\t<string>storage</string>\n+\t\t\t<string>storage, meta.mapping.key string</string>\n \t\t\t<key>settings</key>\n \t\t\t<dict>\n \t\t\t\t<key>foreground</key>\n@@ -309,7 +309,7 @@\n \t\t\t<key>name</key>\n \t\t\t<string>Markdown: Headings</string>\n \t\t\t<key>scope</key>\n-\t\t\t<string>markup.heading punctuation.definition.heading, entity.name.section</string>\n+\t\t\t<string>markup.heading punctuation.definition.heading, entity.name.section, markup.heading - text.html.markdown</string>\n \t\t\t<key>settings</key>\n \t\t\t<dict>\n \t\t\t\t<key>fontStyle</key>\n@@ -660,4 +660,4 @@\n \t\t</dict>\n \t</array>\n </dict>\n-</plist>\n\\ No newline at end of file\n+</plist>\n"
  },
  {
    "path": "assets/patches/Python.sublime-syntax.patch",
    "content": "diff --git syntaxes/01_Packages/Python/Python.sublime-syntax syntaxes/01_Packages/Python/Python.sublime-syntax\nindex 2acd86d8..86257f7b 100644\n--- syntaxes/01_Packages/Python/Python.sublime-syntax\n+++ syntaxes/01_Packages/Python/Python.sublime-syntax\n@@ -988,10 +988,6 @@ contexts:\n         - match: \\}\n           scope: punctuation.section.mapping-or-set.end.python\n           set: after-expression\n-        - match: (?={{simple_expression}}:|\\s*\\*\\*)\n-          set: inside-dictionary\n-        - match: (?={{simple_expression}}[,}]|\\s*\\*)\n-          set: inside-set\n         - match: ','\n           scope: punctuation.separator.set.python\n           set: inside-set\n"
  },
  {
    "path": "assets/patches/Rust.sublime-syntax.patch",
    "content": "diff --git syntaxes/01_Packages/Rust/Rust.sublime-syntax syntaxes/01_Packages/Rust/Rust.sublime-syntax\nindex 3c354486..24727a4e 100644\n--- syntaxes/01_Packages/Rust/Rust.sublime-syntax\n+++ syntaxes/01_Packages/Rust/Rust.sublime-syntax\n@@ -907,6 +907,8 @@ contexts:\n     - include: type-any-identifier\n     - match: ':'\n       scope: punctuation.separator.rust\n+    - match: (?=;)\n+      pop: true\n \n   fn-body:\n     - meta_scope: meta.function.rust\n"
  },
  {
    "path": "assets/patches/ShellScript.sublime-syntax.patch",
    "content": "diff --git syntaxes/01_Packages/ShellScript/Bash.sublime-syntax syntaxes/01_Packages/ShellScript/Bash.sublime-syntax\nindex e973e319..07c170a7 100644\n--- syntaxes/01_Packages/ShellScript/Bash.sublime-syntax\n+++ syntaxes/01_Packages/ShellScript/Bash.sublime-syntax\n@@ -30,12 +30,12 @@ file_extensions:\n   - .zshenv\n   - .zshrc\n   - PKGBUILD  # https://jlk.fjfi.cvut.cz/arch/manpages/man/PKGBUILD.5\n-  - .ebuild\n-  - .eclass\n+  - ebuild\n+  - eclass\n \n first_line_match: |\n   (?x)\n-    ^\\#! .* \\b(bash|zsh|sh|tcsh|ash)\\b\n+    ^\\#! .* \\b(bash|zsh|sh|tcsh|ash|dash|ksh)\\b\n   | ^\\# \\s* -\\*- [^*]* mode: \\s* shell-script [^*]* -\\*-\n \n #-------------------------------------------------------------------------------\n"
  },
  {
    "path": "assets/patches/TodoTxt.sublime-syntax.patch",
    "content": "diff --git syntaxes/02_Extra/TodoTxt/TodoTxt.sublime-syntax syntaxes/02_Extra/TodoTxt/TodoTxt.sublime-syntax\nindex 6c75dbb..0115978 100644\n--- syntaxes/02_Extra/TodoTxt/TodoTxt.sublime-syntax\n+++ syntaxes/02_Extra/TodoTxt/TodoTxt.sublime-syntax\n@@ -68,7 +68,7 @@ contexts:\n \n     - match: (\\s+[^\\s:]+:[^\\s:]+)+\\s*$\n       comment: Custom attributes\n-      scope: variable.annotation.todotxt.attribute\n+      scope: variable.other.todotxt.attribute\n \n   comments:\n     # Comments begin with a '//' and finish at the end of the line.\n"
  },
  {
    "path": "assets/patches/TwoDark.tmTheme.patch",
    "content": "diff --git themes/TwoDark/TwoDark.tmTheme themes/TwoDark/TwoDark.tmTheme\nindex 87fd358..56376d3 100644\n--- themes/TwoDark/TwoDark.tmTheme\n+++ themes/TwoDark/TwoDark.tmTheme\n@@ -125,7 +125,7 @@\n \t\t\t<key>name</key>\n \t\t\t<string>Classes</string>\n \t\t\t<key>scope</key>\n-\t\t\t<string>support.class, entity.name.class, entity.name.type.class</string>\n+\t\t\t<string>support.class, entity.name.class, entity.name.type.class, entity.name</string>\n \t\t\t<key>settings</key>\n \t\t\t<dict>\n \t\t\t\t<key>foreground</key>\n@@ -290,7 +290,7 @@\n \t\t\t<key>name</key>\n \t\t\t<string>Headings</string>\n \t\t\t<key>scope</key>\n-\t\t\t<string>markup.heading punctuation.definition.heading, entity.name.section</string>\n+\t\t\t<string>markup.heading punctuation.definition.heading, entity.name.section, markup.heading - text.html.markdown</string>\n \t\t\t<key>settings</key>\n \t\t\t<dict>\n \t\t\t\t<key>fontStyle</key>\n@@ -533,7 +533,7 @@\n \t\t\t<key>name</key>\n \t\t\t<string>Json key</string>\n \t\t\t<key>scope</key>\n-\t\t\t<string>source.json                           meta.structure.dictionary.json                              string.quoted.double.json</string>\n+\t\t\t<string>source.json                           meta.mapping.key.json                              string.quoted.double.json</string>\n \t\t\t<key>settings</key>\n \t\t\t<dict>\n \t\t\t\t<key>foreground</key>\n@@ -875,4 +875,4 @@\n \t<key>comment</key>\n \t<string>Work in progress</string>\n </dict>\n-</plist>\n\\ No newline at end of file\n+</plist>\n"
  },
  {
    "path": "assets/patches/XML.sublime-syntax.patch",
    "content": "diff --git syntaxes/01_Packages/XML/XML.sublime-syntax syntaxes/01_Packages/XML/XML.sublime-syntax\nindex ad7d9c87..af4a00f0 100644\n--- syntaxes/01_Packages/XML/XML.sublime-syntax\n+++ syntaxes/01_Packages/XML/XML.sublime-syntax\n@@ -12,6 +12,7 @@ file_extensions:\n   - rss\n   - opml\n   - svg\n+  - xaml\n first_line_match: |-\n     (?x:\n       ^(?:\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/Apache.sublime-syntax",
    "content": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: Apache Conf\nfile_extensions:\n  - envvars\n  - htaccess\n  - HTACCESS\n  - htgroups\n  - HTGROUPS\n  - htpasswd\n  - HTPASSWD\n  - .htaccess\n  - .HTACCESS\n  - .htgroups\n  - .HTGROUPS\n  - .htpasswd\n  - .HTPASSWD\nscope: source.apacheconf\ncontexts:\n  main:\n    - match: ^(\\s)*(#).*$\\n?\n      scope: comment.line.hash.ini\n      captures:\n        1: punctuation.definition.comment.apacheconf\n    - match: (<)(Proxy|ProxyMatch|IfVersion|Directory|DirectoryMatch|Files|FilesMatch|IfDefine|IfModule|Limit|LimitExcept|Location|LocationMatch|VirtualHost|Macro|If|Else|ElseIf)(\\s(.+?))?(>)\n      captures:\n        1: punctuation.definition.tag.apacheconf\n        2: entity.tag.apacheconf\n        4: string.value.apacheconf\n        5: punctuation.definition.tag.apacheconf\n    - match: (</)(Proxy|ProxyMatch|IfVersion|Directory|DirectoryMatch|Files|FilesMatch|IfDefine|IfModule|Limit|LimitExcept|Location|LocationMatch|VirtualHost|Macro|If|Else|ElseIf)(>)\n      captures:\n        1: punctuation.definition.tag.apacheconf\n        2: entity.tag.apacheconf\n        3: punctuation.definition.tag.apacheconf\n    - match: (?<=(Rewrite(Rule|Cond)))\\s+(.+?)\\s+(.+?)($|\\s)\n      captures:\n        3: string.regexp.apacheconf\n        4: string.replacement.apacheconf\n    - match: (?<=RedirectMatch)(\\s+(\\d\\d\\d|permanent|temp|seeother|gone))?\\s+(.+?)\\s+((.+?)($|\\s))?\n      captures:\n        2: entity.status.apacheconf\n        3: string.regexp.apacheconf\n        5: string.path.apacheconf\n    - match: (?<=Redirect)(\\s+(\\d\\d\\d|permanent|temp|seeother|gone))?\\s+(.+?)\\s+((.+?)($|\\s))?\n      captures:\n        2: entity.status.apacheconf\n        3: string.path.apacheconf\n        5: string.path.apacheconf\n    - match: (?<=ScriptAliasMatch|AliasMatch)\\s+(.+?)\\s+((.+?)\\s)?\n      captures:\n        1: string.regexp.apacheconf\n        3: string.path.apacheconf\n    - match: (?<=RedirectPermanent|RedirectTemp|ScriptAlias|Alias)\\s+(.+?)\\s+((.+?)($|\\s))?\n      captures:\n        1: string.path.apacheconf\n        3: string.path.apacheconf\n    - match: \\b(AcceptPathInfo|AccessFileName|AddDefaultCharset|AddOutputFilterByType|AllowEncodedSlashes|AllowOverride|AuthName|AuthType|CGIMapExtension|ContentDigest|DefaultType|Define|DocumentRoot|EnableMMAP|EnableSendfile|ErrorDocument|ErrorLog|FileETag|ForceType|HostnameLookups|IdentityCheck|Include(Optional)?|KeepAlive|KeepAliveTimeout|LimitInternalRecursion|LimitRequestBody|LimitRequestFields|LimitRequestFieldSize|LimitRequestLine|LimitXMLRequestBody|LogLevel|MaxKeepAliveRequests|Mutex|NameVirtualHost|Options|Require|RLimitCPU|RLimitMEM|RLimitNPROC|Satisfy|ScriptInterpreterSource|ServerAdmin|ServerAlias|ServerName|ServerPath|ServerRoot|ServerSignature|ServerTokens|SetHandler|SetInputFilter|SetOutputFilter|Time(O|o)ut|TraceEnable|UseCanonicalName|Use|ErrorLogFormat|GlobalLog|PHPIniDir|SSLHonorCipherOrder|SSLCompression|SSLUseStapling|SSLStapling\\w+|SSLCARevocationCheck|SSLSRPVerifierFile|SSLSessionTickets|RequestReadTimeout|ProxyHTML\\w+|MaxRanges)\\b\n      captures:\n        1: keyword.core.apacheconf\n    - match: \\b(AcceptMutex|AssignUserID|BS2000Account|ChildPerUserID|CoreDumpDirectory|EnableExceptionHook|Group|Listen|ListenBacklog|LockFile|MaxClients|MaxConnectionsPerChild|MaxMemFree|MaxRequestsPerChild|MaxRequestsPerThread|MaxRequestWorkers|MaxSpareServers|MaxSpareThreads|MaxThreads|MaxThreadsPerChild|MinSpareServers|MinSpareThreads|NumServers|PidFile|ReceiveBufferSize|ScoreBoardFile|SendBufferSize|ServerLimit|StartServers|StartThreads|ThreadLimit|ThreadsPerChild|ThreadStackSize|User|Win32DisableAcceptEx)\\b\n      captures:\n        1: keyword.mpm.apacheconf\n    - match: \\b(Allow|Deny|Order)\\b\n      captures:\n        1: keyword.access.apacheconf\n    - match: \\b(Action|Script)\\b\n      captures:\n        1: keyword.actions.apacheconf\n    - match: \\b(Alias|AliasMatch|Redirect|RedirectMatch|RedirectPermanent|RedirectTemp|ScriptAlias|ScriptAliasMatch)\\b\n      captures:\n        1: keyword.alias.apacheconf\n    - match: \\b(AuthAuthoritative|AuthGroupFile|AuthUserFile|AuthBasicProvider|AuthBasicFake|AuthBasicAuthoritative|AuthBasicUseDigestAlgorithm)\\b\n      captures:\n        1: keyword.auth.apacheconf\n    - match: \\b(Anonymous|Anonymous_Authoritative|Anonymous_LogEmail|Anonymous_MustGiveEmail|Anonymous_NoUserID|Anonymous_VerifyEmail)\\b\n      captures:\n        1: keyword.auth_anon.apacheconf\n    - match: \\b(AuthDBMAuthoritative|AuthDBMGroupFile|AuthDBMType|AuthDBMUserFile)\\b\n      captures:\n        1: keyword.auth_dbm.apacheconf\n    - match: \\b(AuthDigestAlgorithm|AuthDigestDomain|AuthDigestFile|AuthDigestGroupFile|AuthDigestNcCheck|AuthDigestNonceFormat|AuthDigestNonceLifetime|AuthDigestQop|AuthDigestShmemSize|AuthDigestProvider)\\b\n      captures:\n        1: keyword.auth_digest.apacheconf\n    - match: \\b(AuthLDAPAuthoritative|AuthLDAPBindDN|AuthLDAPBindPassword|AuthLDAPCharsetConfig|AuthLDAPCompareDNOnServer|AuthLDAPDereferenceAliases|AuthLDAPEnabled|AuthLDAPFrontPageHack|AuthLDAPGroupAttribute|AuthLDAPGroupAttributeIsDN|AuthLDAPRemoteUserIsDN|AuthLDAPUrl)\\b\n      captures:\n        1: keyword.auth_ldap.apacheconf\n    - match: \\b(AddAlt|AddAltByEncoding|AddAltByType|AddDescription|AddIcon|AddIconByEncoding|AddIconByType|DefaultIcon|HeaderName|IndexIgnore|IndexOptions|IndexOrderDefault|IndexStyleSheet|IndexHeadInsert|ReadmeName)\\b\n      captures:\n        1: keyword.autoindex.apacheconf\n    - match: \\b(BalancerMember|BalancerGrowth|BalancerPersist|BalancerInherit)\\b\n      captures:\n        1: keyword.filter.apacheconf\n    - match: \\b(CacheDefaultExpire|CacheDisable|CacheEnable|CacheForceCompletion|CacheIgnoreCacheControl|CacheIgnoreHeaders|CacheIgnoreNoLastMod|CacheLastModifiedFactor|CacheMaxExpire)\\b\n      captures:\n        1: keyword.cache.apacheconf\n    - match: \\b(MetaDir|MetaFiles|MetaSuffix)\\b\n      captures:\n        1: keyword.cern_meta.apacheconf\n    - match: \\b(ScriptLog|ScriptLogBuffer|ScriptLogLength)\\b\n      captures:\n        1: keyword.cgi.apacheconf\n    - match: \\b(ScriptLog|ScriptLogBuffer|ScriptLogLength|ScriptSock)\\b\n      captures:\n        1: keyword.cgid.apacheconf\n    - match: \\b(CharsetDefault|CharsetOptions|CharsetSourceEnc)\\b\n      captures:\n        1: keyword.charset_lite.apacheconf\n    - match: \\b(Dav|DavDepthInfinity|DavMinTimeout|DavLockDB)\\b\n      captures:\n        1: keyword.dav.apacheconf\n    - match: \\b(DeflateBufferSize|DeflateCompressionLevel|DeflateFilterNote|DeflateMemLevel|DeflateWindowSize)\\b\n      captures:\n        1: keyword.deflate.apacheconf\n    - match: \\b(DirectoryIndex|DirectorySlash|FallbackResource)\\b\n      captures:\n        1: keyword.dir.apacheconf\n    - match: \\b(CacheDirLength|CacheDirLevels|CacheExpiryCheck|CacheGcClean|CacheGcDaily|CacheGcInterval|CacheGcMemUsage|CacheGcUnused|CacheMaxFileSize|CacheMinFileSize|CacheRoot|CacheSize|CacheTimeMargin)\\b\n      captures:\n        1: keyword.disk_cache.apacheconf\n    - match: \\b(DumpIOInput|DumpIOOutput)\\b\n      captures:\n        1: keyword.dumpio.apacheconf\n    - match: \\b(PassEnv|SetEnv|UnsetEnv)\\b\n      captures:\n        1: keyword.env.apacheconf\n    - match: \\b(ExpiresActive|ExpiresByType|ExpiresDefault)\\b\n      captures:\n        1: keyword.expires.apacheconf\n    - match: \\b(ExtFilterDefine|ExtFilterOptions)\\b\n      captures:\n        1: keyword.ext_filter.apacheconf\n    - match: \\b(CacheFile|MMapFile)\\b\n      captures:\n        1: keyword.file_cache.apacheconf\n    - match: \\b(AddOutputFilterByType|FilterChain|FilterDeclare|FilterProtocol|FilterProvider|FilterTrace)\\b\n      captures:\n        1: keyword.filter.apacheconf\n    - match: \\b(Header|RequestHeader)\\b\n      captures:\n        1: keyword.headers.apacheconf\n    - match: \\b(ImapBase|ImapDefault|ImapMenu)\\b\n      captures:\n        1: keyword.imap.apacheconf\n    - match: \\b(SSIEndTag|SSIErrorMsg|SSIStartTag|SSITimeFormat|SSIUndefinedEcho|XBitHack)\\b\n      captures:\n        1: keyword.include.apacheconf\n    - match: \\b(ISAPIAppendLogToErrors|ISAPIAppendLogToQuery|ISAPICacheFile|ISAPIFakeAsync|ISAPILogNotSupported|ISAPIReadAheadBuffer)\\b\n      captures:\n        1: keyword.isapi.apacheconf\n    - match: \\b(LDAPCacheEntries|LDAPCacheTTL|LDAPConnectionTimeout|LDAPOpCacheEntries|LDAPOpCacheTTL|LDAPSharedCacheFile|LDAPSharedCacheSize|LDAPTrustedCA|LDAPTrustedCAType)\\b\n      captures:\n        1: keyword.ldap.apacheconf\n    - match: \\b(BufferedLogs|CookieLog|CustomLog|LogFormat|TransferLog|ForensicLog)\\b\n      captures:\n        1: keyword.log.apacheconf\n    - match: \\b(MCacheMaxObjectCount|MCacheMaxObjectSize|MCacheMaxStreamingBuffer|MCacheMinObjectSize|MCacheRemovalAlgorithm|MCacheSize)\\b\n      captures:\n        1: keyword.mem_cache.apacheconf\n    - match: \\b(AddCharset|AddEncoding|AddHandler|AddInputFilter|AddLanguage|AddOutputFilter|AddType|DefaultLanguage|ModMimeUsePathInfo|MultiviewsMatch|RemoveCharset|RemoveEncoding|RemoveHandler|RemoveInputFilter|RemoveLanguage|RemoveOutputFilter|RemoveType|TypesConfig)\\b\n      captures:\n        1: keyword.mime.apacheconf\n    - match: \\b(ProtocolEcho|Example|AddModuleInfo|MimeMagicFile|CheckSpelling|ExtendedStatus|SuexecUserGroup|UserDir)\\b\n      captures:\n        1: keyword.misc.apacheconf\n    - match: \\b(CacheNegotiatedDocs|ForceLanguagePriority|LanguagePriority)\\b\n      captures:\n        1: keyword.negotiation.apacheconf\n    - match: \\b(NWSSLTrustedCerts|NWSSLUpgradeable|SecureListen)\\b\n      captures:\n        1: keyword.nw_ssl.apacheconf\n    - match: \\b(AllowCONNECT|NoProxy|ProxyBadHeader|ProxyBlock|ProxyDomain|ProxyErrorOverride|ProxyFtpDirCharset|ProxyIOBufferSize|ProxyMaxForwards|ProxyPass|ProxyPassMatch|ProxyPassReverse|ProxyPreserveHost|ProxyReceiveBufferSize|ProxyRemote|ProxyRemoteMatch|ProxyRequests|ProxyTimeout|ProxyVia)\\b\n      captures:\n        1: keyword.proxy.apacheconf\n    - match: \\b(RewriteBase|RewriteCond|RewriteEngine|RewriteLock|RewriteLog|RewriteLogLevel|RewriteMap|RewriteOptions|RewriteRule)\\b\n      captures:\n        1: keyword.rewrite.apacheconf\n    - match: \\b(BrowserMatch|BrowserMatchNoCase|SetEnvIf|SetEnvIfNoCase)\\b\n      captures:\n        1: keyword.setenvif.apacheconf\n    - match: \\b(LoadFile|LoadModule)\\b\n      captures:\n        1: keyword.so.apacheconf\n    - match: \\b(SSLCACertificateFile|SSLCACertificatePath|SSLCARevocationFile|SSLCARevocationPath|SSLCertificateChainFile|SSLCertificateFile|SSLCertificateKeyFile|SSLCipherSuite|SSLEngine|SSLMutex|SSLOptions|SSLPassPhraseDialog|SSLProtocol|SSLProxyCACertificateFile|SSLProxyCACertificatePath|SSLProxyCARevocationFile|SSLProxyCARevocationPath|SSLProxyCipherSuite|SSLProxyEngine|SSLProxyMachineCertificateFile|SSLProxyMachineCertificatePath|SSLProxyProtocol|SSLProxyVerify|SSLProxyVerifyDepth|SSLRandomSeed|SSLRequire|SSLRequireSSL|SSLSessionCache|SSLSessionCacheTimeout|SSLUserName|SSLVerifyClient|SSLVerifyDepth|SSLInsecureRenegotiation|SSLOpenSSLConfCmd)\\b\n      captures:\n        1: keyword.ssl.apacheconf\n    - match: \\b(Substitute|SubstituteInheritBefore|SubstituteMaxLineLength)\\b\n      captures:\n        1: keyword.substitute.apacheconf\n    - match: \\b(CookieDomain|CookieExpires|CookieName|CookieStyle|CookieTracking)\\b\n      captures:\n        1: keyword.usertrack.apacheconf\n    - match: \\b(VirtualDocumentRoot|VirtualDocumentRootIP|VirtualScriptAlias|VirtualScriptAliasIP)\\b\n      captures:\n        1: keyword.vhost_alias.apacheconf\n    - match: \\b(php_value|php_flag|php_admin_value|php_admin_flag)\\b(\\s+(.+?)(\\s+(\".+?\"|.+?))?)?\\s\n      captures:\n        1: keyword.php.apacheconf\n        3: entity.property.apacheconf\n        5: string.value.apacheconf\n    - match: '(%\\{)((HTTP_USER_AGENT|HTTP_REFERER|HTTP_COOKIE|HTTP_FORWARDED|HTTP_HOST|HTTP_PROXY_CONNECTION|HTTP_ACCEPT|REMOTE_ADDR|REMOTE_HOST|REMOTE_PORT|REMOTE_USER|REMOTE_IDENT|REQUEST_METHOD|SCRIPT_FILENAME|PATH_INFO|QUERY_STRING|AUTH_TYPE|DOCUMENT_ROOT|SERVER_ADMIN|SERVER_NAME|SERVER_ADDR|SERVER_PORT|SERVER_PROTOCOL|SERVER_SOFTWARE|TIME_YEAR|TIME_MON|TIME_DAY|TIME_HOUR|TIME_MIN|TIME_SEC|TIME_WDAY|TIME|API_VERSION|THE_REQUEST|REQUEST_URI|REQUEST_FILENAME|IS_SUBREQ|HTTPS)|(.*?))(\\})'\n      captures:\n        1: punctuation.variable.apacheconf\n        3: variable.env.apacheconf\n        4: variable.misc.apacheconf\n        5: punctuation.variable.apacheconf\n    - match: \\b((text|image|application|video|audio)/.+?)\\s\n      captures:\n        1: entity.mime-type.apacheconf\n    - match: \\b(?i)(export|from|unset|set|on|off)\\b\n      captures:\n        1: entity.helper.apacheconf\n    - match: \\b(\\d+)\\b\n      captures:\n        1: constant.numeric.integer.decimal.apacheconf\n    - match: '\\s(\\[)(.*?)(\\])\\s'\n      captures:\n        1: punctuation.definition.flag.apacheconf\n        2: string.flag.apacheconf\n        3: punctuation.definition.flag.apacheconf\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/AsciiDoc.sublime-syntax",
    "content": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: AsciiDoc (Asciidoctor)\nfile_extensions:\n  - adoc\n  - ad\n  - asciidoc\nscope: text.asciidoc\ncontexts:\n  main:\n    - include: lists\n    - include: blocks\n    - include: section_titles\n    - include: lines\n    - include: inline\n    - include: characters\n  attribute_entry:\n    - match: |-\n        (?x)\n        ^(:)                          # opening delimiter\n        (!)?                          # bang symbol (unset attribute)\n        ([A-Za-z0-9_][A-Za-z0-9_-]*)  # attribute name\n        (!)?                          # bang symbol (unset attribute)\n        (:)                           # closing delimiter\n        (?:\\s+|(?=$))\n      comment: |\n        An attribute entry.\n\n        Examples:\n          :my-attribute: value\n          :sectnums!:\n          :!sectnums:\n      captures:\n        1: punctuation.definition.attributeentry.attrname.begin.asciidoc\n        2: punctuation.definition.attributeentry.unset.asciidoc\n        3: support.variable.attribute.asciidoc\n        4: punctuation.definition.attributeentry.unset.asciidoc\n        5: punctuation.definition.attributeentry.attrname.end.asciidoc\n      push:\n        - meta_scope: meta.attributeentry.asciidoc\n        - meta_content_scope: meta.attributeentry.value.asciidoc\n        - match: $\\n?\n          pop: true\n        - include: characters\n  attribute_list_line:\n    - match: '^(\\[)[^\\[\\]]*(\\])\\s*$\\n?'\n      comment: \"Attribute list as paragraph: single brackets. No need for special treatment of escape; follows literal block, section template as being a more general regex.\"\n      scope: support.variable.attributelist.asciidoc\n      captures:\n        1: punctuation.definition.attributelistline.begin.asciidoc\n        2: punctuation.definition.attributelistline.end.asciidoc\n  attribute_reference:\n    - match: \"({)([A-Za-z0-9_][A-Za-z0-9_-]*)(})\"\n      comment: |\n        Examples:\n          {my-attribute}\n      scope: variable.other\n      captures:\n        1: constant.character.attributes.reference.begin.asciidoc\n        2: support.variable.attribute.asciidoc\n        3: constant.character.attributes.reference.end.asciidoc\n  biblio_anchor:\n    - match: '(?<!\\[)(\\[\\[\\[).*?(\\]\\]\\])(?!\\])'\n      comment: |\n        Bibliography anchor\n\n        Examples:\n          [[[Lorem ipsum]]]\n      scope: storage.type.reference.biblioanchor.asciidoc\n      captures:\n        1: punctuation.definition.biblioanchor.begin.asciidoc\n        2: punctuation.definition.biblioanchor.end.asciidoc\n  block_admonition_label:\n    - match: ^(NOTE|TIP|IMPORTANT|WARNING|CAUTION):(?=\\s+)\n      comment: |\n        Label of an admonition block.\n\n        Examples:\n          NOTE: This is a admonition block.\n          WARNING:  Be aware of them!\n      scope: support.constant.admonitionword.asciidoc\n  block_comment:\n    - match: '^(/{4,})\\s*$\\n?'\n      comment: |\n        Examples:\n          ////\n          A multi-line comment.\n          Notice it's a delimited block.\n          ////\n      captures:\n        0: punctuation.definition.comment.begin.asciidoc\n      push:\n        - meta_scope: comment.block.asciidoc\n        - meta_content_scope: meta.block.comment.content.asciidoc\n        - match: ^\\1\\s*$\\n?\n          captures:\n            0: punctuation.definition.comment.end.asciidoc\n          pop: true\n        - include: macro\n  block_example:\n    - match: '^(={4,})\\s*$\\n?'\n      comment: |\n        Examples:\n          ====\n          Lorem ipsum.\n          ====\n\n        Note: Might need to add more includes, but these are the ones that arise in\n        practice for me.\n      captures:\n        0: constant.delimiter.example.begin.asciidoc\n      push:\n        - meta_scope: string.unquoted.block.example.asciidoc\n        - meta_content_scope: meta.block.example.content.asciidoc\n        - match: ^\\1\\s*$\\n?\n          captures:\n            0: constant.delimiter.example.end.asciidoc\n          pop: true\n        - include: lists\n        - include: block_listing\n        - include: lines\n        - include: inline\n        - include: characters\n  block_id:\n    - match: '^(\\[\\[)([^\\[].*)(\\]\\])\\s*$\\n?'\n      comment: |\n        A block id (i.e. anchor).\n\n        Examples:\n          [[myid]]\n          Lorem ipsum dolor.\n      scope: meta.tag.blockid.asciidoc\n      captures:\n        1: punctuation.definition.blockid.begin.asciidoc\n        2: markup.underline.blockid.id.asciidoc\n        3: punctuation.definition.blockid.end.asciidoc\n  block_listing:\n    - match: '^(\\-{4,})\\s*$\\n?'\n      comment: |\n        Examples:\n          ----\n          Lorem ipsum.\n          ----\n      captures:\n        0: constant.delimiter.listing.begin.asciidoc\n      push:\n        - meta_scope: meta.embedded.block.listing.asciidoc\n        - meta_content_scope: source.block.listing.content.asciidoc\n        - match: ^\\1\\s*$\\n?\n          captures:\n            0: constant.delimiter.listing.end.asciidoc\n          pop: true\n        - include: inline_callout\n  block_literal:\n    - match: '^(\\.{4,})\\s*$\\n?'\n      comment: |\n        Examples:\n          ....\n          Lorem ipsum.\n          ....\n      captures:\n        0: constant.delimiter.block.literal.begin.asciidoc\n      push:\n        - meta_scope: string.literal.block.delimited.asciidoc\n        - meta_content_scope: meta.block.literal.content.asciidoc\n        - match: ^\\1\\s*$\\n?\n          captures:\n            0: constant.delimiter.block.literal.end.asciidoc\n          pop: true\n        - include: inline_callout\n  block_open:\n    - match: ^\\-\\-\\s*$\\n?\n      comment: |\n        Examples:\n          --\n          Lorem ipsum\n          --\n        Note: Might need to check on these includes.\n      captures:\n        0: constant.delimiter.block.open.begin.asciidoc\n      push:\n        - meta_scope: meta.block.open.asciidoc\n        - meta_content_scope: meta.block.open.content.asciidoc\n        - match: ^\\-\\-\\s*$\\n?\n          captures:\n            0: constant.delimiter.block.open.end.asciidoc\n          pop: true\n        - include: lists\n        - include: block_comment\n        - include: block_listing\n        - include: block_pass\n        - include: lines\n        - include: inline\n        - include: characters\n  block_page_break:\n    - match: '^<{3,}$\\n?'\n      comment: |\n        A page break.\n\n        Examples:\n          <<<\n          <<<<<\n      scope: meta.separator.pagebreak.asciidoc\n  block_pass:\n    - match: '^(\\+{4,})\\s*$\\n?'\n      captures:\n        0: constant.delimiter.block.passthrough.begin.asciidoc\n      push:\n        - meta_scope: meta.embedded.block.passthrough.asciidoc\n        - meta_content_scope: text.xml.block.passthrough.content.asciidoc\n        - match: ^\\1\\s*$\\n?\n          captures:\n            0: constant.delimiter.block.passthrough.end.asciidoc\n          pop: true\n        - include: scope:text.xml\n  block_quote:\n    - match: '^(_{4,})\\s*$\\n?'\n      comment: |\n        Examples:\n          ____\n          Lorem ipsum\n          ____\n\n        Note: Might need to add more includes, but these are the ones that arise for me in practice.\n      captures:\n        0: constant.delimiter.block.quote.begin.asciidoc\n      push:\n        - meta_scope: markup.quote.block.asciidoc\n        - meta_content_scope: meta.block.quote.content.asciidoc\n        - match: ^\\1\\s*$\\n?\n          captures:\n            0: constant.delimiter.block.quote.end.asciidoc\n          pop: true\n        - include: lines\n        - include: inline\n        - include: characters\n  block_sidebar:\n    - match: '^(\\*{4,})\\s*$\\n?'\n      comment: |\n        Examples:\n          ****\n          Lorem ipsum\n          ****\n\n        Note: Might need to add more includes, but these are the ones that arise\n        for me in practice.\n      captures:\n        0: constant.delimiter.block.sidebar.begin.asciidoc\n      push:\n        - meta_scope: string.quoted.block.sidebar.asciidoc\n        - meta_content_scope: meta.block.sidebar.content.asciidoc\n        - match: ^\\1\\s*$\\n?\n          captures:\n            0: constant.delimiter.block.sidebar.end.asciidoc\n          pop: true\n        - include: lists\n        - include: block_comment\n        - include: block_listing\n        - include: lines\n        - include: inline\n        - include: characters\n  block_source_fenced:\n    - match: ^(```)(\\w+)?\\s*$\\n?\n      comment: |\n        Fenced code block (ala Markdown)\n\n        Examples:\n          ```rb\n          puts 'Hello world!'\n          ```\n      captures:\n        0: constant.delimiter.listing.begin.asciidoc\n      push:\n        - meta_scope: meta.embedded.block.listing.asciidoc\n        - meta_content_scope: source.block.listing.content.asciidoc\n        - match: ^\\1\\s*$\\n?\n          captures:\n            0: constant.delimiter.listing.end.asciidoc\n          pop: true\n        - include: inline_callout\n  block_thematic_break:\n    - match: '^''{3,}$\\n?'\n      comment: |\n        A thematic break (aka horizontal rule).\n\n        Examples:\n          '''\n          ''''''\n      scope: meta.separator.ruler.asciidoc\n  block_title:\n    - match: ^(\\.)\\w.*$\\n?\n      comment: |\n        Title of a block.\n\n        Examples:\n          .My title\n          Lorem ipsum dolor.\n      scope: markup.heading.block.asciidoc\n      captures:\n        1: punctuation.definition.blockheading.asciidoc\n  blocks:\n    - include: block_literal\n    - include: block_comment\n    - include: block_listing\n    - include: block_source_fenced\n    - include: block_sidebar\n    - include: block_pass\n    - include: block_quote\n    - include: block_example\n    - include: block_open\n  characters:\n    - include: attribute_reference\n    - include: entity_number\n    - include: entity_name\n    - include: escape\n    - include: replacement\n    - include: macro_pass\n    - include: macro\n    - include: xref\n    - include: biblio_anchor\n    - include: indexterm_triple\n    - include: indexterm_double\n  colist_item_marker:\n    - match: ^(\\s*((<)\\d+?(>)))\\s+(?=\\S)\n      comment: |\n        Marker of a callout list item.\n\n        Examples:\n          <1> a callout\n          <42> another callout\n      scope: markup.list.numbered.callout.asciidoc\n      captures:\n        1: string.unquoted.list.callout.asciidoc\n        2: constant.numeric.callout.asciidoc\n        3: punctuation.definition.calloutlistnumber.begin.asciidoc\n        4: punctuation.definition.calloutlistnumber.end.asciidoc\n  dlist_item_label:\n    - match: '^\\s*(?=.*:{2,4}(?:\\s|$))'\n      comment: |\n        Label of a definition (labeled) list item.\n\n        Examples:\n          Label level 1:: lorem ipsum\n          Label level 2::: dolor sit amet\n          Label level 3:::: consectetur\n          Label level 1::\n            lorem ipsum\n          Another label :: lorem ipsum\n          Last::label:: dolor sit amet\n\n        Note: This rule is not strictly correct, because Asciidoctor allows\n        double colon followed by a space inside a label, i.e. it matches the\n        *last* double colon, not the first. I don't know how to do that\n        *effectively.\n      push:\n        - meta_scope: markup.list.labeled.asciidoc\n        - meta_content_scope: meta.list.label.asciidoc\n        - match: '(:{2,4})(?:\\s|$\\n?)'\n          captures:\n            1: constant.labeledlist.separator.asciidoc\n          pop: true\n        - include: inline\n        - include: characters\n  emphasis:\n    - match: |-\n        (?x)\n        (\\[[^\\]]*?\\])?      # might be preceded by an attributes list\n        (?<=^|\\W)(?<!\\\\|})  # must be preceded by nonword character, and not by escape or } (attribute)\n        (_)(?=\\S)           # delimiter underscore that must be followed by a nonspace character\n      comment: |\n        Emphasized (italic) text (constrained variant).\n\n        Examples:\n          _Lorem ipsum_ dolor\n          [red]_Lorem ipsum_ dolor\n      captures:\n        1: support.variable.attributelist.asciidoc\n        2: punctuation.definition.italic.single.begin.asciidoc\n      push:\n        - meta_scope: markup.italic.single.asciidoc\n        - meta_content_scope: meta.italicinner.single.asciidoc\n        - match: |-\n            (?x)\n            (?<=\\S)(_)        # delimiter underscore that must be preceded by a nonspace character\n            (?!\\w)            # ...and followed by a nonword character\n          captures:\n            1: punctuation.definition.italic.single.end.asciidoc\n          pop: true\n        - include: strong_double\n        - include: monospaced_double\n        - include: mark_double\n        - include: strong\n        - include: monospaced\n        - include: mark\n        - include: superscript\n        - include: subscript\n        - include: characters\n  emphasis_double:\n    - match: |-\n        (?x)\n        (\\[[^\\]]*?\\])?  # might start with attribute list\n        (?<!\\\\)         # must not be preceded by escape\n        (__)\n      comment: |\n        Emphasized (italic) text (unconstrained variant).\n\n        Examples:\n          Lo__re__m __ipsum dolor__.\n          Lo[red]__re__m\n      captures:\n        1: support.variable.attributelist.asciidoc\n        2: punctuation.definition.italic.double.begin.asciidoc\n      push:\n        - meta_scope: markup.italic.double.asciidoc\n        - meta_content_scope: meta.italicinner.double.asciidoc\n        - match: __\n          captures:\n            0: punctuation.definition.italic.double.end.asciidoc\n          pop: true\n        - include: strong_double\n        - include: monospaced_double\n        - include: mark_double\n        - include: strong\n        - include: monospaced\n        - include: mark\n        - include: superscript\n        - include: subscript\n        - include: characters\n  entity_name:\n    - match: '(?<!\\\\)&([a-zA-Z][a-zA-Z0-9]*);'\n      comment: |\n        Character entity reference\n\n        Examples:\n          &nbsp;\n          &sup2;\n      scope: constant.character.entity.xml.asciidoc\n  entity_number:\n    - match: '(?<!\\\\)&#(x?[0-9a-fA-f]{2,4});'\n      comment: |\n        Numeric character reference\n\n        Examples:\n          &#x278a;\n          &#182;\n      scope: constant.character.entity.asciidoc\n  escape:\n    - match: '\\\\(?=[-`*_#+.!(){}\\[\\]\\\\>:])'\n      comment: |\n        List of special characters that may be escaped.\n\n        Note: I do not really know if this is a good list, adopted wholesale from\n        original bundle.\n      scope: constant.character.escape.asciidoc\n  indexterm_double:\n    - match: '(?<!\\()(\\({2})([^\\(\\s].*?)(\\){2})(?!\\))'\n      comment: |\n        Double parenthesis indexterm.\n\n        Examples:\n          ((Arthur))\n      scope: variable.other.indexterm.double.asciidoc\n      captures:\n        1: constant.character.indexterm.double.begin.asciidoc\n        3: constant.character.indexterm.double.end.asciidoc\n  indexterm_triple:\n    - match: '(?<!\\()(\\({3})([^\\(].*?)(\\){3})(?!\\))'\n      comment: |\n        Triple parenthesis indexterm.\n\n        Examples:\n          (((Sword, Broadsword, Excalibur)))\n      scope: variable.other.indexterm.triple.asciidoc\n      captures:\n        1: constant.character.indexterm.triple.begin.asciidoc\n        3: constant.character.indexterm.triple.end.asciidoc\n  inline:\n    - include: passthrough\n    - include: strong_double\n    - include: emphasis_double\n    - include: monospaced_double\n    - include: mark_double\n    - include: strong\n    - include: emphasis\n    - include: monospaced\n    - include: mark\n    - include: superscript\n    - include: subscript\n  inline_break:\n    - match: (?<=\\s)\\+$\\n?\n      comment: |\n        Line hard break with a plus sign (+).\n\n        Examples:\n          Rubies are red, +\n          Topazes are blue.\n      scope: constant.linebreak.asciidoc\n  inline_callout:\n    - match: (?<!\\\\)(<)\\d+(>)\n      comment: |\n        Callout label\n\n        Examples:\n          <1>\n          <42>\n      scope: constant.other.callout.asciidoc\n      captures:\n        1: punctuation.definition.callout.begin.asciidoc\n        2: punctuation.definition.callout.end.asciidoc\n  inline_comment:\n    - match: '^(//)([^/\\n].*|)$\\n?'\n      comment: |\n        Inline comment.\n\n        Examples:\n          // This is just a comment!\n      scope: comment.line.double-slash.asciidoc\n      captures:\n        1: punctuation.definition.comment.line.asciidoc\n        2: meta.line.comment.content.asciidoc\n  lines:\n    - include: inline_comment\n    - include: list_continuation\n    - include: inline_break\n    - include: block_page_break\n    - include: block_thematic_break\n    - include: block_title\n    - include: block_id\n    - include: section_template\n    - include: attribute_list_line\n    - include: attribute_entry\n  list_continuation:\n    - match: ^\\+\\s*$\\n?\n      scope: constant.listcontinuation.asciidoc\n  lists:\n    - include: block_admonition_label\n    - include: ulist_item_marker\n    - include: olist_item_marker\n    - include: dlist_item_label\n    - include: colist_item_marker\n  macro:\n    - match: |-\n        (?x)\n        (?:\n          ((?:https?|mailto|ftp|file)  # specify separately so we can mark them as links that TextMate opens\n          ?:{1}  # inline only\n          \\S*)   # (others such as image are partial URLs and/or TextMate cannot handle them)\n        |\n          (([a-zA-Z0-9][a-zA-Z0-9_]*)\n          (:{1,2})\n          (\\S*))\n        )\n        (?:(\\[)([^\\]]*)(\\]))\n      comment: |\n        Note: There are other macro notations, but I match only those that end in\n        square brackets.\n      scope: meta.macro.asciidoc\n      captures:\n        1: markup.underline.link.macro.asciidoc\n        3: keyword.control.name.macro.asciidoc\n        4: constant.character.separator.macro.asciidoc\n        5: markup.underline.target.macro.asciidoc\n        6: constant.character.attributes.macro.begin.asciidoc\n        7: variable.parameter.attributes.macro.asciidoc\n        8: constant.character.attributes.macro.end.asciidoc\n  macro_pass:\n    - match: |-\n        (?x)\n        (pass)\n        (:{1,2})\n        (\\S*)\n        (\\[)(?=[^\\]]*\\])\n      comment: |\n        Passthrough macro\n\n        Examples:\n          pass:[Lorem ipsum]\n          pass::[Lorem ipsum]\n      captures:\n        1: keyword.control.name.macro.pass.asciidoc\n        2: constant.character.separator.macro.asciidoc\n        3: markup.underline.target.macro.asciidoc\n        4: constant.character.attributes.macro.begin.asciidoc\n      push:\n        - meta_scope: meta.macro.pass.asciidoc\n        - meta_content_scope: variable.parameter.attributes.macro.pass.asciidoc\n        - match: '\\]'\n          captures:\n            0: constant.character.attributes.macro.end.asciidoc\n          pop: true\n        - include: scope:text.xml\n  mark:\n    - match: |-\n        (?x)\n        (\\[[^\\]]*?\\])?      # might start with attribute list (darned well better or why are we here)\n        (?<=^|\\W)(?<!\\\\|})  # must be preceded by nonword character, and not by escape or } (attribute)\n        (\\#)(?=\\S)          # delimiter hash that must be followed by a nonspace character\n      comment: |\n        Marked text (constrained variant).\n\n        Examples:\n          #Lorem ipsum# dolor\n          [red]#Lorem ipsum# dolor\n      captures:\n        1: support.variable.attributelist.asciidoc\n        2: punctuation.definition.string.unquoted.single.begin.asciidoc\n      push:\n        - meta_scope: string.other.unquoted.single.asciidoc\n        - meta_content_scope: string.unquoted.unquotedinner.single.asciidoc\n        - match: |-\n            (?x)\n            (?<=\\S)(\\#)       # delimiter hash that must be preceded by a nonspace character\n            (?!\\w)            # ...and followed by a nonword character\n          captures:\n            1: punctuation.definition.string.unquoted.single.end.asciidoc\n          pop: true\n        - include: strong_double\n        - include: emphasis_double\n        - include: monospaced_double\n        - include: strong\n        - include: emphasis\n        - include: monospaced\n        - include: superscript\n        - include: subscript\n        - include: characters\n  mark_double:\n    - match: |-\n        (?x)\n        (\\[[^\\]]*?\\])?  # might start with an attribute list (indeed, that is its purpose)\n        (?<!\\\\)         # must not be preceded by escape\n        (\\#\\#)\n      comment: |\n        Marked text (unconstrained variant).\n\n        Examples:\n          Lo##re##m ##ipsum dolor##.\n          Lo[red]##re##m\n      captures:\n        1: support.variable.attributelist.asciidoc\n        2: punctuation.definition.string.unquoted.double.begin.asciidoc\n      push:\n        - meta_scope: string.other.unquoted.double.asciidoc\n        - meta_content_scope: string.unquoted.unquotedinner.double.asciidoc\n        - match: '\\#\\#'\n          captures:\n            0: punctuation.definition.string.unquoted.double.end.asciidoc\n          pop: true\n        - include: strong_double\n        - include: emphasis_double\n        - include: monospaced_double\n        - include: strong\n        - include: emphasis\n        - include: monospaced\n        - include: superscript\n        - include: subscript\n        - include: characters\n  monospaced:\n    - match: |-\n        (?x)\n        (\\[[^\\]]*?\\])?      # might start with attributes list\n        (?<=^|\\W)(?<!\\\\|})  # must be preceded by nonword character, and not by escape or } (attribute)\n        (`)(?=\\S)           # delimiter backtick that must be followed by a nonspace character\n      comment: |\n        Monospaced text (constrained variant).\n\n        Examples:\n          `Lorem ipsum` dolor\n          [red]`Lorem ipsum` dolor\n      captures:\n        1: support.variable.attributelist.asciidoc\n        2: punctuation.definition.literal.single.begin.asciidoc\n      push:\n        - meta_scope: string.other.literal.single.asciidoc\n        - meta_content_scope: meta.literalinner.single.asciidoc\n        - match: |-\n            (?x)\n            (?<=\\S)(`)        # delimiter backtick that must be preceded by a nonspace character\n            (?!\\w)            # ...and followed by a nonword character\n          captures:\n            1: punctuation.definition.literal.single.end.asciidoc\n          pop: true\n        - include: strong_double\n        - include: emphasis_double\n        - include: mark_double\n        - include: strong\n        - include: emphasis\n        - include: mark\n        - include: superscript\n        - include: subscript\n        - include: characters\n  monospaced_double:\n    - match: |-\n        (?x)\n        (\\[[^\\]]*?\\])?  # might start with attribute list\n        (?<!\\\\)         # must not be preceded by escape\n        (``)\n      comment: |\n        Monospaced text (unconstrained variant).\n\n        Examples:\n          Lo``re``m ``ipsum dolor``.\n          Lo[red]``re``m\n      captures:\n        1: support.variable.attributelist.asciidoc\n        2: punctuation.definition.literal.double.begin.asciidoc\n      push:\n        - meta_scope: string.other.literal.double.asciidoc\n        - meta_content_scope: meta.literalinner.double.asciidoc\n        - match: \"``\"\n          captures:\n            0: punctuation.definition.literal.double.end.asciidoc\n          pop: true\n        - include: strong_double\n        - include: emphasis_double\n        - include: mark_double\n        - include: strong\n        - include: emphasis\n        - include: mark\n        - include: superscript\n        - include: subscript\n        - include: characters\n  olist_item_marker:\n    - match: '^(\\s*(\\.{1,5}))\\s+(?=\\S)'\n      comment: |\n        Marker of an ordered (numbered) list item.\n\n        Examples:\n          . level 1\n          .. level 2\n          ... level 3\n          .... level 4\n          ..... level 5\n\n        Note: The space distinguishes it from a block title.\n      scope: markup.list.numbered.dotted.asciidoc\n      captures:\n        1: string.unquoted.list.dotted.asciidoc\n        2: constant.numeric.list.dot.asciidoc\n  passthrough:\n    - match: (\\+\\+\\+|\\$\\$)\n      comment: |\n        Inline triple-plus and double dolar passthrough.\n\n        Examples:\n          Lo+++re++++m +++ipsum dolor+++.\n          Lo$$re$$m $$ipsum dolor$$.\n\n        Note: Must be dead first among the inlines, so as to take priority.\n      captures:\n        1: constant.character.passthru.begin.asciidoc\n      push:\n        - meta_scope: meta.passthru.inline.asciidoc\n        - meta_content_scope: variable.parameter.passthruinner.asciidoc\n        - match: \\1\n          captures:\n            0: constant.character.passthru.end.asciidoc\n          pop: true\n  replacement:\n    - match: |-\n        (?x)\n        (?<!\\\\)  # must not be escaped\n        (\n          \\(C\\)\n          | \\(TM\\)\n          | \\(R\\)\n          | ((?<!\\-)\\-\\-(?!\\-))    # exactly two, and even this may not rule out all that I want to\n          | ((?<!\\.)\\.\\.\\.(?!\\.))  # exactly three\n          | \\->\n          | <\\-\n          | =>\n          | <=\n        )\n      scope: constant.character.replacement.asciidoc\n  section_template:\n    - match: |-\n        (?x)^\n        (\\[)  # in square brackets\n        (template\\s*=\\s*)?(\")?  # might start with template-equals and might have template name in quotes\n        (\n        sect\\d|abstract|preface|colophon|dedication|glossary|bibliography|synopsis|appendix|index # fixed list of known templates\n        )\n        (\".*(\\])|(\\]))  # either close the quote (and perhaps go on) and close the bracket, or close the bracket immediately\n        \\s*$\\n?\n      comment: fixed list of known template names\n      scope: variable.parameter.sectiontemplate.asciidoc\n      captures:\n        1: punctuation.definition.sectiontemplate.begin.asciidoc\n        4: meta.tag.sectiontemplate.asciidoc\n        6: punctuation.definition.sectiontemplate.end.asciidoc\n        7: punctuation.definition.sectiontemplate.end.asciidoc\n  section_titles:\n    - include: title_level_5\n    - include: title_level_4\n    - include: title_level_3\n    - include: title_level_2\n    - include: title_level_1\n    - include: title_level_0\n  strong:\n    - match: |-\n        (?x)\n        (\\[[^\\]]*?\\])?      # might start with an attributes list\n        (?<=^|\\W)(?<!\\\\|})  # must be preceded by nonword character, and not by escape or } (attribute)\n        (\\*)(?=\\S)          # delimiter star that must be followed by a nonspace character\n      comment: |\n        Strong (bold) text (constrained variant).\n\n        Examples:\n          *Lorem ipsum* dolor\n          [red]*Lorem ipsum* dolor\n      captures:\n        1: support.variable.attributelist.asciidoc\n        2: punctuation.definition.bold.single.begin.asciidoc\n      push:\n        - meta_scope: markup.bold.single.asciidoc\n        - meta_content_scope: meta.boldinner.single.asciidoc\n        - match: |-\n            (?x)\n            (?<=\\S)(\\*)       # delimiter star that must be preceded by a nonspace character\n            (?!\\w)            # ...and followed by a nonword character\n          captures:\n            1: punctuation.definition.bold.single.end.asciidoc\n          pop: true\n        - include: emphasis_double\n        - include: monospaced_double\n        - include: mark_double\n        - include: emphasis\n        - include: monospaced\n        - include: mark\n        - include: superscript\n        - include: subscript\n        - include: characters\n  strong_double:\n    - match: |-\n        (?x)\n        (\\[[^\\]]*?\\])?  # might start with an attribute list\n        (?<!\\\\)         # must not be preceded by escape\n        (\\*\\*)\n      comment: |\n        Strong (bold) text (unconstrained variant).\n\n        Examples:\n          Lo**re**m **ipsum dolor**.\n          Lo[red]**re**m\n      captures:\n        1: support.variable.attributelist.asciidoc\n        2: punctuation.definition.bold.double.begin.asciidoc\n      push:\n        - meta_scope: markup.bold.double.asciidoc\n        - meta_content_scope: meta.boldinner.double.asciidoc\n        - match: \\*\\*\n          captures:\n            0: punctuation.definition.bold.double.end.asciidoc\n          pop: true\n        - include: emphasis_double\n        - include: monospaced_double\n        - include: mark_double\n        - include: emphasis\n        - include: monospaced\n        - include: mark\n        - include: superscript\n        - include: subscript\n        - include: characters\n  subscript:\n    - match: |-\n        (?x)\n        (\\[[^\\]]*?\\])?  # might start with attribute list\n        (?<!\\\\)         # must not be preceded by escape\n        (~)\n      comment: |\n       Subscript text.\n\n        Examples:\n          E=mc^2^\n          E=mc[red]^2^\n      captures:\n        1: support.variable.attributelist.asciidoc\n        2: punctuation.definition.string.subscript.begin.asciidoc\n      push:\n        - meta_scope: string.other.subscript.asciidoc\n        - meta_content_scope: meta.subscriptinner.asciidoc\n        - match: '~' # this tilda a problem if unquoted\n          captures:\n            0: punctuation.definition.string.subscript.end.asciidoc\n          pop: true\n        - include: strong_double\n        - include: emphasis_double\n        - include: monospaced_double\n        - include: mark_double\n        - include: strong\n        - include: emphasis\n        - include: monospaced\n        - include: mark\n        - include: superscript\n        - include: characters\n  superscript:\n    - match: |-\n        (?x)\n        (\\[[^\\]]*?\\])?  # might start with attribute list\n        (?<!\\\\)         # no preceding escape\n        (\\^)\n      comment: |\n        Superscript text.\n\n        Examples:\n          H~2~O\n          H[red]~2~O\n      captures:\n        1: support.variable.attributelist.asciidoc\n        2: punctuation.definition.string.superscript.begin.asciidoc\n      push:\n        - meta_scope: string.other.superscript.asciidoc\n        - meta_content_scope: meta.superscriptinner.asciidoc\n        - match: ^\n          captures:\n            0: punctuation.definition.string.superscript.end.asciidoc\n          pop: true\n        - include: strong_double\n        - include: emphasis_double\n        - include: monospaced_double\n        - include: mark_double\n        - include: strong\n        - include: emphasis\n        - include: monospaced\n        - include: mark\n        - include: subscript\n        - include: characters\n  title_level_0:\n    - match: ^(=) (\\w.*)$\\n?\n      scope: markup.heading.level.0.asciidoc\n      captures:\n        1: punctuation.definition.heading.asciidoc\n        2: entity.name.section.asciidoc\n  title_level_1:\n    - match: ^(==) (\\w.*)$\\n?\n      scope: markup.heading.level.1.asciidoc\n      captures:\n        1: punctuation.definition.heading.asciidoc\n        2: entity.name.section.asciidoc\n  title_level_2:\n    - match: ^(===) (\\w.*)$\\n?\n      scope: markup.heading.level.2.asciidoc\n      captures:\n        1: punctuation.definition.heading.asciidoc\n        2: entity.name.section.asciidoc\n  title_level_3:\n    - match: ^(====) (\\w.*)$\\n?\n      scope: markup.heading.level.3.asciidoc\n      captures:\n        1: punctuation.definition.heading.asciidoc\n        2: entity.name.section.asciidoc\n  title_level_4:\n    - match: ^(=====) (\\w.*)$\\n?\n      scope: markup.heading.level.4.asciidoc\n      captures:\n        1: punctuation.definition.heading.asciidoc\n        2: entity.name.section.asciidoc\n  title_level_5:\n    - match: ^(======) (\\w.*)$\\n?\n      scope: markup.heading.level.5.asciidoc\n      captures:\n        1: punctuation.definition.heading.asciidoc\n        2: entity.name.section.asciidoc\n  ulist_item_marker:\n    - match: '^(\\s*(\\-|\\*{1,5}))\\s+(?=\\S)'\n      comment: |\n        Marker of an unordered (bullet) list item.\n\n        Examples:\n          * level 1\n          ** level 2\n          *** level 3\n          **** level 4\n          ***** level 5\n          - level 1\n          -- level 2\n          --- level 3\n          ---- level 4\n          ----- level 5\n      scope: markup.list.bulleted.asciidoc\n      captures:\n        1: string.unquoted.list.bullet.asciidoc\n        2: constant.numeric.list.bullet.asciidoc\n  xref:\n    - match: '(?<!<)(<<)([^,]*?)((,\\s*)(.*?))?(>>)(?!<)'\n      comment: |\n        Internal cross-reference\n\n        Examples:\n          <<lorem>>\n          <<lorem, see here>>\n      scope: meta.xref.asciidoc\n      captures:\n        1: constant.character.xref.begin.asciidoc\n        2: markup.underline.term.xref.asciidoc\n        5: variable.parameter.xref.asciidoc\n        6: constant.character.xref.end.asciidoc\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/Assembly (ARM).sublime-syntax",
    "content": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: ARM Assembly\nfile_extensions:\n  - s\n  - S\nscope: source.asm.arm\ncontexts:\n  main:\n    - match: \"@.*$\"\n      scope: comment.line\n    - match: //.*$\n      scope: comment.line\n    - match: ;.*$\n      scope: comment.line\n    - match: ^\\s*\\#\\s*if\\s+0\\b\n      push:\n        - meta_scope: comment.preprocessor\n        - match: ^\\s*\\#\\s*endif\\b\n          pop: true\n    - match: /\\*\n      push:\n        - meta_scope: comment.block\n        - match: \\*/\n          pop: true\n    - match: |-\n        (?x)\n        ^\\s*\\#\\s*(define)\\s+             # define\n        ((?<id>[a-zA-Z_][a-zA-Z0-9_]*))  # macro name\n        (?:                              # and optionally:\n            (\\()                         # an open parenthesis\n                (\n                    \\s* \\g<id> \\s*       # first argument\n                    ((,) \\s* \\g<id> \\s*)*  # additional arguments\n                    (?:\\.\\.\\.)?          # varargs ellipsis?\n                )\n            (\\))                         # a close parenthesis\n        )?\n      captures:\n        1: keyword.control.import.define.c\n        2: entity.name.function.preprocessor.c\n        4: punctuation.definition.parameters.c\n        5: variable.parameter.preprocessor.c\n        7: punctuation.separator.parameters.c\n        8: punctuation.definition.parameters.c\n      push:\n        - meta_scope: meta.preprocessor.macro.c\n        - match: (?=(?://|/\\*))|$\n          pop: true\n        - match: (?>\\\\\\s*\\n)\n          scope: punctuation.separator.continuation.c\n        - include: $top_level_main\n    - match: ^\\s*#\\s*(error|warning)\\b\n      captures:\n        1: keyword.control.import.error.c\n      push:\n        - meta_scope: meta.preprocessor.diagnostic.c\n        - match: $\n          captures:\n            1: keyword.control.import.error.c\n          pop: true\n        - match: (?>\\\\\\s*\\n)\n          scope: punctuation.separator.continuation.c\n    - match: ^\\s*#\\s*(include|import)\\b\\s+\n      captures:\n        1: keyword.control.import.include.c\n      push:\n        - meta_scope: meta.preprocessor.c.include\n        - match: (?=(?://|/\\*))|$\n          captures:\n            1: keyword.control.import.include.c\n          pop: true\n        - match: (?>\\\\\\s*\\n)\n          scope: punctuation.separator.continuation.c\n        - match: '\"'\n          captures:\n            0: punctuation.definition.string.begin.c\n          push:\n            - meta_scope: string.quoted.double.include.c\n            - match: '\"'\n              captures:\n                0: punctuation.definition.string.end.c\n              pop: true\n        - match: <\n          captures:\n            0: punctuation.definition.string.begin.c\n          push:\n            - meta_scope: string.quoted.other.lt-gt.include.c\n            - match: \">\"\n              captures:\n                0: punctuation.definition.string.end.c\n              pop: true\n    - match: '((?i)([xw][0-9]|[xw]1[0-9]||[xw]2[0-9]|[wx]30|wzr|xzr|wsp|fpsr|fpcr|[rcp]1[0-5]|[rcp][0-9]|a[1-4]|v[1-8]|sl|sb|fp|ip|sp|lr|(c|s)psr(_c)?|pc|[sd]3[0-1]|[sd][12][0-9]|[sd][0-9]|fpsid|fpscr|fpexc|q3[0-1]|q2[0-9]|q1[0-9]|q[0-9]|APSR_nzcv|sy)!?(?-i))?\\b'\n      scope: storage.other.register\n    - match: \\.(?i)(globl|global|macro|endm|purgem|if|elseif|else|endif|section|text|arm|align|balign|irp|rept|endr|req|unreq|error|short|func|endfunc|hidden|type|fpu|arch|code|altmacro|object_arch|word|int|string)(?-i)\\b\n      scope: keyword.control.directive\n    - match: armv(2a?|3m?|4t?|5t?e?6(j|t2|zk?|-m)?|7v?e?(-(a|r|m))?|8-a(\\+crc)?)\n      scope: keyword.control.arch.arm\n    - match: ^\\s*#\\s*(define|defined|elif|else|if|ifdef|ifndef|line|pragma|undef|endif)\\b\n      captures:\n        1: keyword.control.import.c\n      push:\n        - meta_scope: meta.preprocessor.c\n        - match: (?=(?://|/\\*))|$\n          captures:\n            1: keyword.control.import.c\n          pop: true\n        - match: (?>\\\\\\s*\\n)\n          scope: punctuation.separator.continuation.c\n    - match: |-\n        (?x)\\b((?i)\n        (\n          (bf(c|i)|(u|s)bfx|(u|s)xta?(h|b)?) |\n          (v(add|cvt|sub|mov|trn|cmp|div|qdmulh|mrs|mul|ld1|qadd|qshrun|st[1234]|addw|mull|mlal|rshrn|swp|qmovun)|qmovun)(\\.([isup]?8|[isupf]?16|[isuf]?32|[isu]?64))* |\n          (and|m(rs|sr)|eor|sub|rsb|add|adc|sbc|rsc|tst|teq|cmp|cmn|orr|mov|bic|mvn |\n            (neg) |\n            (lsr|lsl|ror|asr) # shift ops either pseudo ops or actual shifts\n          )s? |\n          (mul|mla|mull|smlabb) |\n          (mov(w|t)) |\n          rev(8|16)? |\n          (pld|adr|adrl|vswp)\n        )\n        (ne|eq|cs|hs|cc|lo|mi|pl|vs|vc|hi|ls|lt|le|gt|ge|al)?(?-i))?\\b\n      scope: support.function.mnemonic.arithmetic\n    - match: |-\n        (?x)\\b((?i)(\n          swi|svc|wfi|\n          dmb | clrex | dsb | isb |\n          v(ldr|str|push|pop) |\n          (push|pop) |\n          (st|ld)(\n              p |\n            r(ex|s?(h|b)|d)? |\n            m(\n              (f|e)(d|a) |\n              (d|i)(b|a)\n            )?\n          ) |\n          b(l|x|lx|lr|r)? |\n          (i|e)?ret|\n          b\\.(eq|ne|hs|cs|lo|cc|mi|pl|vs|vc|hi|ls|ge|lt|gt|le|al|nv)+ |\n          (c|t)?bn?z|\n        )+(ne|eq|cs|hs|cc|lo|mi|pl|vs|vc|hi|ls|lt|le|gt|ge|al)?(?-i))\\b\n      scope: support.function.mnemonic.memory\n    - match: '\\b((?i)(def(b|w|s)|equ|(include|get)(\\s+([a-zA-Z_]+[0-9a-zA-Z_]*|[0-9]+[a-zA-Z_]+[0-9a-zA-Z_]*?)\\.s)?)?(?-i))\\b'\n      scope: meta.preprocessor.c.include\n    - match: \\b((?i)(align)(?-i))?\\b\n      scope: storage.type.c.memaccess\n    - match: \\s+\\\".+\\\"\n      scope: string\n    - match: \\b((?i)nop(ne|eq|cs|hs|cc|lo|mi|pl|vs|vc|hi|ls|lt|le|gt|ge|al)?(?-i))?\\b\n      scope: comment.nop\n    - match: '\\s\\['\n      push:\n        - meta_scope: storage.type.c.memaccess\n        - match: '\\]'\n          pop: true\n        - match: (?>\\\\\\s*\\n)\n          scope: punctuation.separator.continuation.c\n        - include: $top_level_main\n    - match: (\\b|\\s+)\\=\\b\n      scope: keyword.control.evaluation\n    - match: '(\\b|\\s+)(\\#)?-?(0x|&)[0-9a-fA-F_]+\\b'\n      scope: constant.numeric.hex\n    - match: '(\\b|\\s+)\\#-?[0-9a-zA-Z_]+\\b'\n      scope: constant.numeric.literal\n    - match: '(\\b|\\s+)[0-9]+\\b'\n      scope: constant.numeric.dec\n    - match: '\\b([a-zA-Z_]+[0-9a-zA-Z_]*|[0-9]+[a-zA-Z_]+[0-9a-zA-Z_]*)\\b'\n      scope: meta.function.source.arm.label\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/Assembly (x86_64).sublime-syntax",
    "content": "%YAML 1.2\n---\nname: x86_64 Assembly\nfile_extensions: [yasm, nasm, asm, inc, mac]\nscope: source.asm.x86_64\n\nvariables:\n  num_bin: '(?:[01][01_]*)'\n  num_oct: '(?:[0-7][0-7_]*)'\n  num_dec: '(?:[0-9][0-9_]*)'\n  num_hex: '(?:[[:xdigit:]][[:xdigit:]_]*)'\n  num_bin_exp: '(?:p[+-]?{{num_dec}})'\n  num_dec_exp: '(?:e[+-]?{{num_dec}})'\n  identifier_body: '(?:[[:alnum:]_$#@~.?]*)'\n  valid_identifier: '(?:[[:alpha:]_?]{{identifier_body}})'\n\ncontexts:\n  prototype:\n    - include: comments\n\n  line-continuation:\n    - match: '(\\\\)$\\n'\n      captures:\n        1: punctuation.separator.continuation.asm.x86_64\n    - match: '\\\\(\\s+?)$'\n      captures:\n        1: invalid.illegal.space-after-continuation.asm.x86_64\n  line-ending:\n    - match: '$\\n'\n      pop: true\n  pop:\n    - match: '(?=.|$)'\n      pop: true\n  pop-if-not-whitespace:\n    - match: '(?=\\S)'\n      set: pop\n\n  main:\n    - include: comments\n    - include: prefixes\n    - include: data-types\n    - include: registers\n    - include: mnemonics\n    - include: strings\n    - include: numbers\n    - include: operators\n    - include: support\n    - include: directives\n    - include: entities\n    - include: structs\n    - include: preprocessor\n    - include: labels\n\n  numbers:\n    - include: floating-point\n    - include: integers\n  floating-point:\n    # binary\n    - match: '(?i)\\b0[by]{{num_bin}}\\.(?:{{num_bin}}?{{num_bin_exp}}?\\b)?'\n      scope: constant.numeric.binary.floating-point.asm.x86_64\n    - match: '(?i)\\b0[by]{{num_bin}}{{num_bin_exp}}\\b'\n      scope: constant.numeric.binary.floating-point.asm.x86_64\n    # octal\n    - match: '(?i)\\b0[oq]{{num_oct}}\\.(?:{{num_oct}}?{{num_bin_exp}}?\\b)?'\n      scope: constant.numeric.octal.floating-point.asm.x86_64\n    - match: '(?i)\\b0[oq]{{num_oct}}{{num_bin_exp}}\\b'\n      scope: constant.numeric.octal.floating-point.asm.x86_64\n    # decimal\n    - match: '(?i)\\b(?:0[dt])?{{num_dec}}\\.(?:{{num_dec}}?{{num_dec_exp}}?\\b)?'\n      scope: constant.numeric.decimal.floating-point.asm.x86_64\n    - match: '(?i)\\b{{num_dec}}{{num_dec_exp}}\\b'\n      scope: constant.numeric.decimal.floating-point.asm.x86_64\n    #- match: '(?i)\\.{{num_dec}}{{num_dec_exp}}?\\b'\n    #  scope: invalid.illegal.constant.numeric.decimal.floating-point.asm.x86_64\n    - match: '(?i)\\b{{num_dec}}p{{num_dec}}?\\b'\n      scope: constant.numeric.decimal.packed-bcd.asm.x86_64\n    # hex\n    - match: '(?i)\\b0[xh]{{num_hex}}\\.(?:{{num_hex}}?{{num_bin_exp}}?\\b)?'\n      scope: constant.numeric.hex.floating-point.asm.x86_64\n    - match: '(?i)\\b0[xh]{{num_hex}}{{num_bin_exp}}\\b'\n      scope: constant.numeric.hex.floating-point.asm.x86_64\n    - match: '(?i)\\$[0-9]\\_?{{num_hex}}?\\.(?:{{num_hex}}?{{num_bin_exp}}?\\b)?'\n      scope: constant.numeric.hex.floating-point.asm.x86_64\n    - match: '(?i)\\$[0-9]\\_?{{num_hex}}{{num_bin_exp}}\\b'\n      scope: constant.numeric.hex.floating-point.asm.x86_64\n  integers:\n    - match: '(?i)\\b(?:(?:0[by]{{num_bin}})|(?:{{num_bin}}[by]))\\b'\n      scope: constant.numeric.binary.asm.x86_64\n    - match: '(?i)\\b(?:(?:0[oq]{{num_oct}})|(?:{{num_oct}}[oq]))\\b'\n      scope: constant.numeric.octal.asm.x86_64\n    - match: '(?i)\\b(?:(?:0[dt]{{num_dec}})|(?:{{num_dec}}[dt]?))\\b'\n      scope: constant.numeric.decimal.asm.x86_64\n    - match: '(?i)(?:\\$[0-9]\\_?{{num_hex}}?)\\b'\n      scope: constant.numeric.hex.asm.x86_64\n    - match: '(?i)\\b(?:(?:0[xh]{{num_hex}})|(?:{{num_hex}}[hxHX]))\\b'\n      scope: constant.numeric.hex.asm.x86_64\n\n  labels:\n    # http://www.nasm.us/doc/nasmdoc3.html#section-3.9\n    - match: '(\\.\\.@)({{valid_identifier}})(?:(\\:)?|\\b)'\n      captures:\n        1: punctuation.separator.asm.x86_64 storage.modifier.asm.x86_64\n        2: entity.name.constant.special.asm.x86_64\n        3: punctuation.separator.asm.x86_64\n    - match: '(?:(\\.)?|\\b)({{valid_identifier}})(?:(\\:)?|\\b)'\n      captures:\n        1: punctuation.separator.asm.x86_64 storage.modifier.asm.x86_64\n        2: entity.name.constant.asm.x86_64\n        3: punctuation.separator.asm.x86_64\n    - match: '(\\.)([0-9]+{{identifier_body}})(?:(\\:)?|\\b)'\n      captures:\n        1: punctuation.separator.asm.x86_64 storage.modifier.asm.x86_64\n        2: entity.name.constant.asm.x86_64\n        3: punctuation.separator.asm.x86_64\n    - match: '(?:(\\.)?|\\b)([0-9$@~]{{identifier_body}})(?:(\\:)?|\\b)'\n      captures:\n        1: punctuation.separator.asm.x86_64 storage.modifier.asm.x86_64\n        2: invalid.illegal.entity.name.constant.asm.x86_64\n        3: punctuation.separator.asm.x86_64\n    - match: '((%)(\\d+))'\n      captures:\n        1: invalid.illegal.meta.preprocessor.asm.x86_64\n        #1: meta.preprocessor.asm.x86_64\n        2: punctuation.definition.variable.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64\n        3: variable.other.preprocessor.asm.x86_64\n    - match: '((%%)({{valid_identifier}})(?:(\\:)?|\\b))'\n      captures:\n        1: invalid.illegal.meta.preprocessor.asm.x86_64\n        2: punctuation.definition.keyword.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64\n        3: entity.name.constant.special.asm.x86_64\n        4: punctuation.separator.asm.x86_64\n\n  data-types:\n    # Initialized & uninitialized data: http://www.nasm.us/doc/nasmdoc3.html#section-3.2.1\n    - match: '(?i)\\b(?:s?byte|(?:[doqtyz]|dq|s[dq]?)?word|(?:d|res)[bdoqtwyz]|ddq)\\b'\n      scope: storage.type.asm.x86_64\n    - match: '(?i)\\b(?:incbin|equ|times)\\b'\n      scope: support.function.asm.x86_64\n\n  prefixes:\n    - match: '(?i)\\b(?:strict|nosplit|near|far|abs|rel)\\b'\n      scope: storage.modifier.asm.x86_64\n    - match: '(?i)\\b(?:[ao](?:16|32|64))\\b'\n      scope: storage.modifier.prefix.asm.x86_64\n    - match: '(?i)\\b(?:rep(?:n?[ez])?|lock|xacquire|xrelease|(?:no)?bnd)\\b'\n      scope: storage.modifier.prefix.asm.x86_64\n    - match: '{(vex[23]|evex)}'\n      captures:\n        1: storage.modifier.prefix.vex.asm.x86_64\n    - match: '{(k[1-7])}'\n      captures:\n        1: storage.modifier.opmask.asm.x86_64\n    - match: '{(1to(?:8|16))}'\n      captures:\n        1: storage.modifier.precision.asm.x86_64\n    - match: '{(z|(?:r[nudz]-)?sae)}'\n      captures:\n        1: storage.modifier.rounding.asm.x86_64\n\n  support:\n    # http://www.nasm.us/doc/nasmdoc7.html#section-7.4.6\n    - match: '\\.\\.(?:start|imagebase|tlvp|got(?:pc(?:rel)?|(?:tp)?off)?|plt|sym|tlsie)\\b'\n      scope: support.constant.asm.x86_64\n    - match: '\\b__(?:utf(?:(?:16|32)(?:[lb]e)?)|float(?:8|16|32|64|80[me]|128[lh])|Infinity|[QS]?NaN)__\\b'\n      scope: support.function.asm.x86_64\n    # http://www.nasm.us/doc/nasmdoc4.html#section-4.11\n    - match: '\\b__NASM_(?:MAJOR|(?:SUB)?MINOR|SNAPSHOT|VER(?:SION_ID)?)__\\b'\n      scope: support.function.asm.x86_64\n    - match: '\\b___NASM_PATCHLEVEL__\\b'\n      scope: support.function.asm.x86_64\n    - match: '\\b__(?:FILE|LINE|BITS|OUTPUT_FORMAT)__\\b'\n      scope: support.function.asm.x86_64\n    - match: '\\b__(?:(?:UTC_)?(?:DATE|TIME)(?:_NUM)?|POSIX_TIME)__\\b'\n      scope: support.function.asm.x86_64\n    - match: '\\b__USE_(?:ALTREG|SMARTALIGN|FP|IFUNC)__\\b'\n      scope: support.function.asm.x86_64\n    - match: '\\b__PASS__\\b'\n      scope: invalid.deprecated.support.constant.altreg.asm.x86_64\n    - match: '(?i)\\balignmode\\b'\n      scope: support.function.smartalign.asm.x86_64\n      push:\n        - include: line-continuation\n        - include: line-ending\n        - match: '\\b(?:generic|nop|k7|k8|p6)\\b'\n          scope: support.constant.smartalign.asm.x86_64\n          pop: true\n        - match: '\\w+'\n          scope: invalid.illegal.constant.smartalign.asm.x86_64\n          pop: true\n    - match: '\\b__ALIGNMODE__\\b'\n      scope: support.constant.smartalign.asm.x86_64\n    - match: '\\b(?:Inf|[QS]?NaN)\\b'\n      scope: support.constant.fp.asm.x86_64\n    - match: '\\b(?:float(?:8|16|32|64|80[me]|128[lh]))\\b'\n      scope: support.function.fp.asm.x86_64\n    - match: '(?i)\\bilog2(?:[ewfc]|[fc]w)?\\b'\n      scope: support.function.ifunc.asm.x86_64\n\n  directives:\n    - match: '(?i)\\b(?:ideal|jumps|p[345]86|end)\\b'\n      scope: invalid.deprecated.tasm.asm.x86_64\n    - match: '(?i)\\b(?:bits|use(?:16|32|64)|org|uppercase|safeseh|osabi)\\b'\n      scope: support.function.directive.asm.x86_64\n    - match: '(?i)\\b(default)(?:\\s+(rel|abs|(?:no)?bnd))?\\b'\n      captures:\n        1: support.function.directive.asm.x86_64\n        2: support.constant.directive.asm.x86_64\n    - match: '(?i)\\b(?:section|segment)\\b'\n      scope: support.function.directive.asm.x86_64\n      push: [section-parameters, section-name]\n    - match: '(?i)\\bgroup\\b'\n      scope: support.function.directive.asm.x86_64\n      push: section-name\n    - match: '\\b(?:__SECT__|__NASMDEFSEG|_?_GLOBAL_OFFSET_TABLE_)\\b'\n      scope: support.constant.directive.asm.x86_64\n    - match: '(?i)\\b(?:absolute|common)\\b'\n      scope: support.function.directive.asm.x86_64\n    - match: '(?i)\\b(?:subsections_via_symbols|no_dead_strip)\\b'\n      scope: support.function.directive.macho.asm.x86_64\n    - match: '(?i)import\\b'\n      scope: support.function.directive.asm.x86_64\n      push:\n        - match: '{{valid_identifier}}'\n          scope: entity.name.function.asm.x86_64\n          set:\n            - match: '{{valid_identifier}}'\n              scope: meta.path.asm.x86_64 string.unquoted.asm.x86_64\n              set:\n                - match: '{{valid_identifier}}'\n                  scope: variable.function.asm.x86_64\n                  set:\n                    - include: comments\n                    - match: '{{valid_identifier}}'\n                      scope: invalid.illegal.asm.x86_64\n                    - include: line-continuation\n                    - include: pop-if-not-whitespace\n                    - include: line-ending\n                - include: line-continuation\n                - include: pop-if-not-whitespace\n                - include: line-ending\n            - include: line-continuation\n            - include: pop-if-not-whitespace\n            - include: line-ending\n        - include: line-continuation\n        - include: pop-if-not-whitespace\n        - include: line-ending\n    - match: '(?i)export\\b'\n      scope: support.function.directive.asm.x86_64\n      push:\n        - match: '{{valid_identifier}}'\n          scope: entity.name.constant.asm.x86_64\n          set:\n            - match: '{{valid_identifier}}'\n              scope: variable.function.asm.x86_64\n              set: export-parameters\n            - include: line-continuation\n            - include: pop-if-not-whitespace\n            - include: line-ending\n        - include: line-continuation\n        - include: pop-if-not-whitespace\n        - include: line-ending\n    - match: '(?i)global\\b'\n      scope: support.function.directive.asm.x86_64\n      push:\n        - match: '(?<=\\:)(?:function|data|export)\\b'\n          scope: storage.type.directive.asm.x86_64\n        - match: '\\b(?:default|internal|hidden|protected|proc|data)\\b'\n          scope: storage.modifier.directive.asm.x86_64 variable.parameter.directive.asm.x86_64\n        - include: line-continuation\n        - include: line-ending\n        - include: preprocessor-macro-parameter\n        - include: main\n    - match: '(?i)extern\\b'\n      scope: support.function.directive.asm.x86_64\n      push:\n        - match: '(?<=\\:)(?:import)\\b'\n          scope: storage.type.directive.asm.x86_64\n        - match: '\\b(?:proc|data)\\b'\n          scope: storage.modifier.directive.asm.x86_64 variable.parameter.directive.asm.x86_64\n        - include: line-continuation\n        - include: line-ending\n        - include: preprocessor-macro-parameter\n        - include: main\n    - match: '(?i)library\\b'\n      scope: support.function.directive.asm.x86_64\n      push:\n        - match: '{{valid_identifier}}'\n          scope: meta.path.asm.x86_64 string.unquoted.asm.x86_64\n          pop: true\n        - include: line-continuation\n        - include: line-ending\n        - include: pop-if-not-whitespace\n    - match: '(?i)module\\b'\n      scope: support.function.directive.asm.x86_64\n      push:\n        - match: '\\$?{{valid_identifier}}'\n          scope: entity.name.namespace.asm.x86_64\n          pop: true\n        - include: line-continuation\n        - include: line-ending\n        - include: pop-if-not-whitespace\n    - match: '(?i)\\bcpu\\b'\n      scope: support.function.directive.asm.x86_64\n      push:\n        - match: '(?i)\\b(?:(?:80|[1-6])86|pentium|ppro|p[234]|katmai|willamette|prescott|(?:x|ia)64)\\b'\n          scope: support.constant.directive.asm.x86_64\n          pop: true\n        - include: line-continuation\n        - include: pop-if-not-whitespace\n        - include: line-ending\n        - include: main\n    - match: '(?i)\\bfloat\\b'\n      scope: support.function.directive.asm.x86_64\n      push:\n        - match: '(?i)\\b(?:(?:no)?daz|near|up|down|zero|default)\\b'\n          scope: support.constant.directive.asm.x86_64\n          pop: true\n        - include: line-continuation\n        - include: pop-if-not-whitespace\n        - include: line-ending\n        - include: main\n    - match: '(?i)(\\[)\\s*(warning)\\b'\n      captures:\n        2: support.function.directive.asm.x86_64\n      push:\n        - match: '(?i)([+\\-*])|(error)\\s*(=)\\s*'\n          captures:\n            1: keyword.control.warning.asm.x86_64\n            2: support.constant.directive.warning.asm.x86_64\n            3: keyword.operator.assignment.asm.x86_64\n          push:\n            - match: '(?i)\\b(other|macro-(?:params|selfref|defaults)|orphan-labels|number-overflow|gnu-elf-extensions|float-(?:overflow|denorm|underflow|toolong)|user|lock|hle|bnd|zext-reloc|ptr|(?:bad|unknown|not-my)-pragma|unknown-warning|all)(?=\\]|\\s)'\n              scope: support.constant.directive.warning.asm.x86_64\n              pop: true\n            - match: '\\S+(?=\\])'\n              scope: invalid.illegal.support.constant.directive.warning.asm.x86_64\n              pop: true\n            - match: '\\S+'\n              scope: invalid.illegal.support.constant.directive.warning.asm.x86_64\n              pop: true\n        - match: '(?i)\\b(?:all|error)\\b'\n          scope: support.constant.directive.warning.asm.x86_64\n        - match: ']'\n          pop: true\n        - include: line-continuation\n        - include: line-ending\n    - match: '(?i)(\\[)\\s*(map)\\b'\n      captures:\n        2: support.function.directive.asm.x86_64\n      push:\n        - match: '(?i)\\b(?:all|brief|sections|segments|symbols)\\b'\n          scope: support.constant.directive.map.asm.x86_64\n        - match: '(?i)\\b(?:std(?:out|err))\\b'\n          scope: meta.path.asm.x86_64 support.constant.directive.map.asm.x86_64\n        - match: '{{valid_identifier}}'\n          scope: meta.path.asm.x86_64 string.unquoted.asm.x86_64\n        - match: ']'\n          pop: true\n        - include: line-continuation\n        - include: line-ending\n  section-parameters:\n    - match: '='\n      scope: keyword.operator.assignment.asm.x86_64\n    - match: '(?i)\\b(?:(?:v)?start|align|absolute)\\b'\n      scope: variable.parameter.directive.asm.x86_64\n    - match: '(?i)\\b(?:(?:prog|no)bits|private|public|common|stack|code|text|data|bss|rdata|info)\\b'\n      scope: storage.modifier.directive.asm.x86_64 variable.parameter.directive.asm.x86_64\n    - match: '(?i)\\b(?:mixed|zerofill|no_dead_strip|live_support|strip_static_syms)\\b'\n      scope: storage.modifier.directive.asm.x86_64 variable.parameter.directive.macho.asm.x86_64\n    - match: '(?i)\\b(?:(?:no)?(?:alloc|exec|write)|tls)\\b'\n      scope: storage.modifier.directive.asm.x86_64 variable.parameter.directive.elf.asm.x86_64\n    - match: '(?i)\\b(?:(?:v)?follows)\\b'\n      scope: variable.parameter.directive.asm.x86_64\n      push:\n        - match: '='\n          scope: keyword.operator.assignment.asm.x86_64\n          set: [pop, section-name]\n        - include: line-continuation\n        - include: line-ending\n    - match: '(?i)\\b(?:class|overlay)\\b'\n      scope: variable.parameter.directive.asm.x86_64\n      push:\n        - match: '='\n          scope: keyword.operator.assignment.asm.x86_64\n        - match: '{{valid_identifier}}'\n          scope: entity.name.class.asm.x86_64 string.unquoted.asm.x86_64\n          pop: true\n        - include: line-continuation\n        - include: line-ending\n    - include: line-continuation\n    - include: line-ending\n    - include: main\n  section-name:\n    - match: '(?:\\.|\\b)(?:text|bss|(?:[rpx]|ro)?data|code)\\b'\n      scope: entity.name.section.asm.x86_64 string.unquoted.asm.x86_64 support.constant.section.asm.x86_64\n      pop: true\n    - match: '\\b__(?:text|const|data|bss|TEXT|CONST|DATA|BSS)\\b'\n      scope: entity.name.section.asm.x86_64 string.unquoted.asm.x86_64 support.constant.section.macho.asm.x86_64\n      pop: true\n    - match: '(?:\\.)(?:[lt](?:data|bss)|lrodata|comment)\\b'\n      scope: entity.name.section.asm.x86_64 string.unquoted.asm.x86_64 support.constant.section.elf.asm.x86_64\n      pop: true\n    - match: '(?:\\.|\\b){{valid_identifier}}\\b'\n      scope: entity.name.section.asm.x86_64 string.unquoted.asm.x86_64\n      pop: true\n    - match: '(?=`|''|\")'\n      set:\n        - meta_scope: entity.name.section.asm.x86_64\n        - include: strings\n        - include: pop\n    - include: line-continuation\n    - include: pop-if-not-whitespace\n    - include: line-ending\n  export-parameters:\n    - match: '='\n      scope: keyword.operator.assignment.asm.x86_64\n    - match: '(?i)\\b(?:resident|nodata)\\b'\n      scope: storage.modifier.directive.asm.x86_64 variable.parameter.directive.asm.x86_64\n    - match: '(?i)\\b(?:parm)\\b'\n      scope: variable.parameter.directive.asm.x86_64\n    - include: primitive-directive-end\n    - include: line-continuation\n    - include: line-ending\n    - include: main\n\n  operators:\n    - match: '[+\\-*/]'\n      scope: keyword.operator.arithmetic.asm.x86_64\n    - match: '(%%|%)[[:space:]]'\n      captures:\n        1: keyword.operator.arithmetic.asm.x86_64\n    - match: '[|&^~!]|<<|>>'\n      scope: keyword.operator.bitwise.asm.x86_64\n    - match: '(?i)\\b(seg|wrt)\\b'\n      scope: keyword.operator.word.asm.x86_64\n    - match: ','\n      scope: operator.separator.asm.x86_64\n\n  structs:\n    - match: '(?i)\\bstruc\\b'\n      scope: support.function.asm.x86_64 meta.struct.asm.x86_64\n      push:\n        - meta_content_scope: meta.struct.asm.x86_64.1\n        - match: '{{valid_identifier}}'\n          scope: entity.name.struct.asm.x86_64\n          set:\n            - meta_scope: meta.struct.asm.x86_64\n            - match: '(?i)\\bendstruc\\b'\n              scope: support.function.asm.x86_64 meta.struct.asm.x86_64\n              pop: true\n            - include: main\n        - match: '\\w'\n          scope: invalid.illegal.entity.name.struct.asm.x86_64\n    - match: '(?i)\\bendstruc\\b'\n      scope: invalid.illegal.support.function.asm.x86_64 meta.struct.asm.x86_64\n    - match: '(?i)\\bistruc\\b'\n      scope: support.function.asm.x86_64 meta.struct.asm.x86_64\n      push:\n        - meta_content_scope: meta.struct.asm.x86_64.1\n        - match: '{{valid_identifier}}'\n          scope: variable.other.asm.x86_64\n          set:\n            - meta_scope: meta.struct.asm.x86_64\n            - match: '(?i)\\bat\\b'\n              scope: support.function.asm.x86_64 meta.struct.asm.x86_64\n            - match: '(?i)\\biend\\b'\n              scope: support.function.asm.x86_64 meta.struct.asm.x86_64\n              pop: true\n            - include: main\n        - match: '\\w'\n          scope: invalid.illegal.variable.struct.asm.x86_64\n    - match: '(?i)\\biend\\b'\n      scope: invalid.illegal.support.function.asm.x86_64 meta.struct.asm.x86_64\n    - match: '(?i)\\balignb?\\b'\n      scope: support.function.asm.x86_64\n    - match: '(?i)\\b(sectalign)\\s+(on|off)?'\n      captures:\n        1: support.function.asm.x86_64\n        2: support.constant.asm.x86_64\n\n  entities:\n    - match: '\\$@feat\\.00\\b'\n      scope: variable.language.sseh.asm.x86_64\n    - match: '(\\$)(?:\\w+)\\b'\n      scope: variable.other.asm.x86_64\n      captures:\n        1: punctuation.definition.variable.asm.x86_64\n    - match: '\\${3,}'\n      scope: invalid.illegal.variable.language.asm.x86_64\n    - match: '\\$'\n      scope: variable.language.asm.x86_64\n \n  comments:\n    - match: (?:(;)|(?:^|\\s)(#)\\s).*$\n      scope: comment.line.asm.x86_64\n      captures:\n        1: punctuation.definition.comment.asm.x86_64\n        2: punctuation.definition.comment.asm.x86_64\n    - match: /\\*\n      scope: punctuation.definition.comment.asm.x86_64\n      push:\n        - meta_scope: comment.block.asm.x86_64\n        - match: \\*/\n          scope: punctuation.definition.comment.asm.x86_64\n          pop: true\n\n  preprocessor: # http://www.nasm.us/doc/nasmdoc4.html\n    - include: preprocessor-macro-multiline\n    - include: preprocessor-macro-define\n    - include: preprocessor-macro-indirection\n    - include: preprocessor-conditions\n    - include: preprocessor-other\n  # single-line macro\n  preprocessor-macro-define:\n    - match: '^\\s*((%)x?i?define)\\b'\n      captures:\n        1: meta.preprocessor.macro.asm.x86_64 keyword.control.import.preprocessor.asm.x86_64\n        2: punctuation.definition.keyword.preprocessor.asm.x86_64\n      push:\n        - meta_content_scope: meta.preprocessor.macro.asm.x86_64\n        - include: preprocessor-comments\n        - match: '(?:{{valid_identifier}})(?=\\()'\n          scope: entity.name.function.preprocessor.asm.x86_64\n          set:\n            - match: '\\('\n              scope: punctuation.section.group.begin.asm.x86_64\n              set: preprocessor-macro-params\n        - match: '{{valid_identifier}}'\n          scope: entity.name.constant.preprocessor.asm.x86_64\n          set: preprocessor-macro-definition\n        - include: line-continuation\n        - include: pop-if-not-whitespace\n        - include: line-ending\n    - match: '^\\s*((%)(?:include|depend))\\b'\n      captures:\n        1: meta.preprocessor.asm.x86_64 keyword.control.import.preprocessor.asm.x86_64\n        2: punctuation.definition.keyword.preprocessor.asm.x86_64\n      push: preprocessor-macro-definition\n    - match: '^\\s*((%)use)\\b'\n      captures:\n        1: meta.preprocessor.asm.x86_64 keyword.control.import.preprocessor.asm.x86_64\n        2: punctuation.definition.keyword.preprocessor.asm.x86_64\n      push:\n        - meta_content_scope: meta.preprocessor.macro.asm.x86_64 string.unquoted.asm.x86_64\n        - include: strings\n        - include: line-ending\n        - include: preprocessor-macro-indirection\n    - match: '^\\s*((%)(?:assign|i?deftok|strcat|strlen|substr|pathsearch|push|pop|repl|line|clear))\\b'\n      captures:\n        1: meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64\n        2: punctuation.definition.keyword.preprocessor.asm.x86_64\n      push:\n        - meta_content_scope: meta.preprocessor.macro.asm.x86_64\n        - include: preprocessor-macro-indirection\n        - include: preprocessor-conditions-constant\n    - match: '^\\s*((%)(?:arg|local))\\b'\n      captures:\n        1: meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64\n        2: punctuation.definition.keyword.preprocessor.asm.x86_64\n      push:\n        - meta_content_scope: meta.preprocessor.macro.asm.x86_64\n        - match: '({{valid_identifier}})(\\:)(?=\\w+)'\n          captures:\n            1: meta.preprocessor.asm.x86_64 variable.parameter.macro.asm.x86_64\n            2: punctuation.separator.asm.x86_64\n        - match: '\\,'\n          scope: punctuation.separator.asm.x86_64\n        - include: data-types\n        - match: '\\w+\\b'\n          scope: invalid.illegal.storage.type.asm.x86_64\n        - include: line-continuation\n        - include: line-ending\n    - match: '^\\s*((%)stacksize)\\b'\n      captures:\n        1: meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64\n        2: punctuation.definition.keyword.preprocessor.asm.x86_64\n      push:\n        - meta_content_scope: meta.preprocessor.macro.asm.x86_64\n        - match: '\\b(flat(?:64)?|large|small)\\b'\n          scope: support.constant.macro.asm.x86_64\n        - match: '\\w+\\b'\n          scope: invalid.illegal.storage.type.asm.x86_64\n        - include: line-continuation\n        - include: line-ending\n    - match: '^\\s*((%)i?defstr)\\s+(?:({{valid_identifier}})|(%%)({{valid_identifier}}))\\b'\n      captures:\n        1: meta.preprocessor.macro.asm.x86_64 keyword.control.import.preprocessor.assign.asm.x86_64\n        2: punctuation.definition.keyword.preprocessor.asm.x86_64\n        3: entity.name.constant.preprocessor.asm.x86_64\n        4: punctuation.definition.keyword.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64\n        5: entity.name.constant.special.asm.x86_64\n      push:\n        - meta_content_scope: meta.preprocessor.macro.asm.x86_64 string.unquoted.asm.x86_64\n        - include: preprocessor-macro-indirection\n        - include: line-ending\n    - match: '^\\s*((%)(?:warning|error|fatal|pragma))(?=\\s|$)'\n      captures:\n        1: meta.preprocessor.macro.asm.x86_64 keyword.control.preprocessor.assign.asm.x86_64\n        2: punctuation.definition.keyword.preprocessor.asm.x86_64\n        3: entity.name.constant.preprocessor.asm.x86_64\n      push:\n        - meta_content_scope: meta.preprocessor.macro.asm.x86_64 string.unquoted.asm.x86_64\n        - include: strings\n        - include: preprocessor-macro-indirection\n        - include: line-ending\n  preprocessor-macro-params-illegal:\n    - meta_scope: invalid.illegal.asm.x86_64\n    - include: preprocessor-macro-params\n  preprocessor-macro-params:\n    - meta_scope: meta.preprocessor.macro.parameters.asm.x86_64 meta.group.asm.x86_64\n    - match: '{{valid_identifier}}'\n      scope: variable.parameter.asm.x86_64\n    - match: '\\)'\n      scope: punctuation.section.group.end.asm.x86_64\n      set: preprocessor-macro-definition\n    - match: ','\n      scope: punctuation.separator.asm.x86_64\n      push:\n        - match: '{{valid_identifier}}'\n          scope: variable.parameter.asm.x86_64\n          pop: true\n        - include: line-continuation\n        - include: preprocessor-comments\n        - match: '\\.\\.\\.'\n          scope: keyword.operator.variadic.asm.x86_64\n        - match: '(?=\\))'\n          pop: true\n        - match: '(/\\*).*(\\*/)'\n          scope: comment.block.asm.x86_64\n          captures:\n            1: punctuation.definition.comment.asm.x86_64\n            2: punctuation.definition.comment.asm.x86_64\n        - match: '\\S+'\n          scope: invalid.illegal.unexpected-character.asm.x86_64\n    - include: line-continuation\n    - include: preprocessor-comments\n    - match: '\\.\\.\\.'\n      scope: keyword.operator.variadic.asm.x86_64\n    - match: '(/\\*).*(\\*/)'\n      scope: comment.block.asm.x86_64\n      captures:\n        1: punctuation.definition.comment.asm.x86_64\n        2: punctuation.definition.comment.asm.x86_64\n    - match: '$\\n'\n      scope: invalid.illegal.unexpected-end-of-line.asm.x86_64\n  preprocessor-macro-definition:\n    - meta_content_scope: meta.preprocessor.macro.asm.x86_64\n    - include: preprocessor-comments\n    - include: line-continuation\n    - include: line-ending\n    - include: main\n  preprocessor-macro-indirection:\n    - match: '((%)(\\[))'\n      captures:\n        1: meta.preprocessor.macro.asm.x86_64 keyword.control.preprocessor.asm.x86_64\n        2: punctuation.definition.keyword.preprocessor.asm.x86_64\n        3: meta.brackets.asm.x86_64 punctuation.section.brackets.begin.asm.x86_64\n      push:\n        - meta_scope: meta.brackets.asm.x86_64 meta.preprocessor.macro.asm.x86_64\n        - include: line-continuation\n        - include: line-ending\n        - include: main\n        - match: '\\]'\n          scope: punctuation.section.brackets.end.asm.x86_64 keyword.control.preprocessor.asm.x86_64\n          pop: true\n    - match: '((%)\\+)\\s+'\n      captures:\n        1: meta.preprocessor.asm.x86_64 keyword.operator.preprocessor.asm.x86_64\n        2: punctuation.definition.keyword.preprocessor.asm.x86_64\n    - match: '((%)(\\?\\??))'\n      captures:\n        1: meta.preprocessor.asm.x86_64 keyword.operator.preprocessor.asm.x86_64\n        2: punctuation.definition.keyword.preprocessor.asm.x86_64\n        3: variable.language.preprocessor.asm.x86_64\n    - match: '((%\\$+)({{valid_identifier}})(?:(\\:)?|\\b))'\n      captures:\n        1: meta.preprocessor.asm.x86_64\n        2: punctuation.definition.keyword.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64\n        3: entity.name.constant.special.asm.x86_64\n        4: punctuation.separator.asm.x86_64\n    - match: '((%)(\\!))'\n      captures:\n        1: meta.preprocessor.asm.x86_64 keyword.operator.preprocessor.asm.x86_64\n        2: punctuation.definition.keyword.preprocessor.asm.x86_64\n        3: punctuation.definition.variable.asm.x86_64\n      push:\n        - meta_content_scope: meta.preprocessor.asm.x86_64 keyword.operator.preprocessor.asm.x86_64 variable.parameter.preprocessor.environment.asm.x86_64\n        - match: '{{valid_identifier}}'\n          scope: variable.parameter.preprocessor.environment.unquoted.asm.x86_64\n          pop: true\n        - match: '(?=`|''|\")'\n          set:\n            - meta_scope: variable.parameter.preprocessor.environment.quoted.asm.x86_64\n            - include: strings\n            - include: pop\n        - include: pop\n  preprocessor-conditions: # also see preprocessor-macro-conditions-multiline\n    - match: '^\\s*((%)ifn?(?:idni?|id|num|str|token|empty|env)?)\\b'\n      captures:\n        1: meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64\n        2: punctuation.definition.keyword.preprocessor.asm.x86_64\n      push: preprocessor-conditions-content-block\n    - match: '^\\s*((%)ifn?(?:def|ctx))\\b'\n      captures:\n        1: meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64\n        2: punctuation.definition.keyword.preprocessor.asm.x86_64\n      push: [preprocessor-conditions-content-block, preprocessor-conditions-constant]\n    - match: '^\\s*((%)rep)\\b'\n      captures:\n        1: meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64\n        2: punctuation.definition.keyword.preprocessor.asm.x86_64\n      push: preprocessor-conditions-content-block\n    - match: '^\\s*((%)ifn?macro)\\b'\n      captures:\n        1: meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64\n        2: punctuation.definition.keyword.preprocessor.asm.x86_64\n      push: [preprocessor-conditions-content-block, preprocessor-macro-arguments-signature]\n    - include: preprocessor-conditions-parity\n  preprocessor-conditions-constant:\n    - meta_content_scope: meta.preprocessor.asm.x86_64\n    - match: '(?:{{valid_identifier}})(?=\\()'\n      scope: entity.name.constant.preprocessor.asm.x86_64\n      set:\n        - match: '\\('\n          scope: punctuation.section.group.begin.asm.x86_64\n          set: preprocessor-macro-params-illegal\n    - match: '{{valid_identifier}}\\b'\n      scope: meta.preprocessor.asm.x86_64 entity.name.constant.preprocessor.asm.x86_64\n      pop: true\n    - include: line-continuation\n    - include: pop-if-not-whitespace\n    - include: line-ending\n    - include: main\n  preprocessor-conditions-content-block:\n    - meta_content_scope: meta.block.preprocessor.asm.x86_64\n    - include: preprocessor-conditions-content-block-common\n    - include: main\n  preprocessor-conditions-content-block-common:\n    - match: '^\\s*((%)(?:elifn?(?:idni?|id|num|str|token|empty|env)?|else|exitrep))\\b'\n      captures:\n        1: meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64\n        2: punctuation.definition.keyword.preprocessor.asm.x86_64\n    - match: '^\\s*((%)(?:elifn?(?:def|ctx)))\\b'\n      captures:\n        1: meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64\n        2: punctuation.definition.keyword.preprocessor.asm.x86_64\n      push: preprocessor-conditions-constant\n    - match: '^\\s*((%)elifn?macro)\\b'\n      captures:\n        1: meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64\n        2: punctuation.definition.keyword.preprocessor.asm.x86_64\n      push: preprocessor-macro-arguments-signature\n    - match: '^\\s*((%)(?:end(?:if|rep)))\\b'\n      captures:\n        1: meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64\n        2: punctuation.definition.keyword.preprocessor.asm.x86_64\n      pop: true\n  preprocessor-conditions-parity:\n    - match: '^\\s*((%)(?:elifn?(?:macro|def|ctx|idni?|id|num|str|token|empty|env)?|else|(?:end(?:if|rep))|exitrep))\\b'\n      captures:\n        1: invalid.illegal.meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64\n        2: punctuation.definition.keyword.preprocessor.asm.x86_64\n  preprocessor-other:\n    - include: preprocessor-macro-indirection\n    - match: '^\\s*((%)undef)\\b'\n      captures:\n        1: meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64\n        2: punctuation.definition.keyword.preprocessor.asm.x86_64\n      push:\n        - meta_scope: meta.preprocessor.asm.x86_64\n        - include: line-continuation\n        - include: line-ending\n        - include: preprocessor-comments\n        - match: '{{valid_identifier}}'\n          scope: entity.name.constant.preprocessor.asm.x86_64\n          pop: true\n    - match: '^\\s*((%)unmacro)\\b'\n      captures:\n        1: meta.preprocessor.asm.x86_64 keyword.control.import.asm.x86_64\n        2: punctuation.definition.keyword.preprocessor.asm.x86_64\n      push: preprocessor-macro-arguments-signature\n  preprocessor-macro-arguments-signature:\n    - meta_scope: meta.preprocessor.asm.x86_64\n    - include: preprocessor-comments\n    - match: '({{valid_identifier}})(?:\\s+(?:(\\d+(?:(-)(?:\\d+|\\*))?)(\\+)?(\\.nolist\\b)?))'\n      captures:\n        1: entity.name.function.preprocessor.asm.x86_64\n        2: variable.parameter.preprocessor.asm.x86_64\n        3: keyword.operator.preprocessor.range.asm.x86_64\n        4: storage.modifier.preprocessor.greedy.asm.x86_64\n        5: storage.modifier.preprocessor.listing.asm.x86_64\n      pop: true\n    - include: line-continuation\n    - include: pop-if-not-whitespace\n    - include: line-ending\n  # multi-line macro\n  preprocessor-macro-multiline:\n    - match: '^\\s*((%)i?macro)\\b'\n      captures:\n        1: meta.preprocessor.macro.asm.x86_64 keyword.control.import.define.asm.x86_64\n        2: punctuation.definition.keyword.preprocessor.asm.x86_64\n      push:\n        - meta_content_scope: meta.preprocessor.macro.asm.x86_64\n        - include: preprocessor-comments\n        - match: '(?:{{valid_identifier}})(?=\\()'\n          scope: entity.name.constant.preprocessor.asm.x86_64\n          set:\n            - meta_content_scope: invalid.illegal.asm.x86_64\n            - match: '\\('\n              scope: punctuation.section.group.begin.asm.x86_64\n              set: preprocessor-macro-params-illegal\n        - match: '({{valid_identifier}})(?:\\s+(?:(\\d+(?:(-)(?:\\d+|\\*))?)(\\+)?(\\.nolist\\b)?))'\n          captures:\n            1: entity.name.function.preprocessor.asm.x86_64\n            2: variable.parameter.preprocessor.asm.x86_64\n            3: keyword.operator.preprocessor.range.asm.x86_64\n            4: storage.modifier.preprocessor.greedy.asm.x86_64\n            5: storage.modifier.preprocessor.listing.asm.x86_64\n          set: preprocessor-macro-definition-multiline-with-parameters\n    - match: '^\\s*((%)endmacro)\\b'\n      captures:\n        1: invalid.illegal.meta.preprocessor.asm.x86_64 keyword.control.import.asm.x86_64\n        2: punctuation.definition.keyword.preprocessor.asm.x86_64\n  preprocessor-macro-parameter:\n    - match: '((%)(\\-?\\d+))'\n      captures:\n        1: meta.preprocessor.asm.x86_64\n        2: punctuation.definition.variable.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64\n        3: variable.other.preprocessor.asm.x86_64\n  preprocessor-macro-definition-multiline-with-parameters:\n    - meta_content_scope: meta.preprocessor.macro.asm.x86_64\n    - include: preprocessor-comments\n    - include: preprocessor-macro-parameter\n    - include: preprocessor-macro-indirection\n    - include: preprocessor-macro-conditions-multiline\n    - include: preprocessor-macro-definition-multiline\n  preprocessor-macro-definition-multiline:\n    - meta_content_scope: meta.preprocessor.macro.asm.x86_64\n    - include: preprocessor-comments\n    - match: '^\\s*((%)endmacro)\\b'\n      captures:\n        1: meta.preprocessor.asm.x86_64 keyword.control.import.asm.x86_64\n        2: punctuation.definition.keyword.preprocessor.asm.x86_64\n      pop: true\n    - match: '((%%)({{valid_identifier}})(?:(\\:)?|\\b))'\n      captures:\n        1: meta.preprocessor.asm.x86_64\n        2: punctuation.definition.keyword.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64\n        3: entity.name.constant.special.asm.x86_64\n        4: punctuation.separator.asm.x86_64\n    - match: '((%)({))'\n      captures:\n        1: meta.preprocessor.macro.asm.x86_64 keyword.control.preprocessor.asm.x86_64\n        2: punctuation.definition.keyword.preprocessor.asm.x86_64\n        3: meta.braces.asm.x86_64 punctuation.section.braces.begin.asm.x86_64\n      push:\n        - meta_scope: meta.braces.asm.x86_64 meta.preprocessor.macro.asm.x86_64\n        - include: preprocessor-macro-indirection\n        - match: ':'\n          scope: punctuation.separator.asm.x86_64\n        - match: '}'\n          scope: punctuation.section.braces.end.asm.x86_64 keyword.control.preprocessor.asm.x86_64\n          pop: true\n    - match: '^\\s*((%)(?:rotate))\\b'\n      captures:\n        1: meta.preprocessor.asm.x86_64 keyword.operator.word.asm.x86_64\n        2: punctuation.definition.keyword.preprocessor.asm.x86_64\n    - match: '^\\s*((%)(?:include|depend))\\b'\n      captures:\n        1: meta.preprocessor.asm.x86_64 keyword.control.import.preprocessor.asm.x86_64\n        2: punctuation.definition.keyword.preprocessor.asm.x86_64\n      set: preprocessor-macro-definition-multiline-with-parameters\n    - match: '^\\s*((%)(?:pathsearch))\\b'\n      captures:\n        1: meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64\n        2: punctuation.definition.keyword.preprocessor.asm.x86_64\n      set: [preprocessor-macro-definition-multiline-with-parameters, preprocessor-conditions-constant]\n    - match: '^\\s*((%)x?i?define)\\b'\n      captures:\n        1: meta.preprocessor.macro.asm.x86_64 keyword.control.import.preprocessor.asm.x86_64\n        2: punctuation.definition.keyword.preprocessor.asm.x86_64\n      push:\n        - meta_content_scope: meta.preprocessor.macro.asm.x86_64\n        - include: preprocessor-comments\n        - match: '(?:{{valid_identifier}})(?=\\()'\n          scope: entity.name.function.preprocessor.asm.x86_64\n          set:\n            - match: '\\('\n              scope: punctuation.section.group.begin.asm.x86_64\n              set: preprocessor-macro-params\n        - match: '{{valid_identifier}}'\n          scope: entity.name.constant.preprocessor.asm.x86_64\n          set: preprocessor-macro-definition-inside-multiline\n        - include: line-continuation\n        - include: pop-if-not-whitespace\n        - include: line-ending\n\n    - include: preprocessor-macro-indirection\n    - include: preprocessor-conditions\n    - include: main\n  preprocessor-macro-conditions-multiline: # also see preprocessor-conditions\n    - match: '^\\s*((%)ifn?(?:idni?|id|num|str|token|empty|env)?)\\b'\n      captures:\n        1: meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64\n        2: punctuation.definition.keyword.preprocessor.asm.x86_64\n      push: preprocessor-conditions-content-block-multiline\n    - match: '^\\s*((%)ifn?(?:def|ctx))\\b'\n      captures:\n        1: meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64\n        2: punctuation.definition.keyword.preprocessor.asm.x86_64\n      push: [preprocessor-conditions-content-block-multiline, preprocessor-conditions-constant]\n    - match: '^\\s*((%)rep)\\b'\n      captures:\n        1: meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64\n        2: punctuation.definition.keyword.preprocessor.asm.x86_64\n      push: preprocessor-conditions-content-block-multiline\n    - match: '^\\s*((%)ifn?macro)\\b'\n      captures:\n        1: meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64\n        2: punctuation.definition.keyword.preprocessor.asm.x86_64\n      push: [preprocessor-macro-arguments-signature, preprocessor-conditions-content-block-multiline]\n    - include: preprocessor-conditions-parity\n  preprocessor-conditions-content-block-multiline:\n    - meta_content_scope: meta.block.preprocessor.asm.x86_64\n    - include: preprocessor-conditions-content-block-common\n    - include: preprocessor-macro-definition-multiline-with-parameters\n  preprocessor-macro-definition-inside-multiline:\n    - meta_content_scope: meta.preprocessor.macro.asm.x86_64\n    - include: preprocessor-macro-parameter\n    - include: preprocessor-macro-definition\n\n  strings: # Character strings: http://www.nasm.us/doc/nasmdoc3.html#section-3.4.2\n    - match: '`'\n      scope: punctuation.definition.string.begin.asm.x86_64\n      push: string-backquote\n    - match: ''''\n      scope: punctuation.definition.string.begin.asm.x86_64\n      push: string-single\n    - match: '\"'\n      scope: punctuation.definition.string.begin.asm.x86_64\n      push: string-double\n  string-content:\n    - match: '\\\\u[[:xdigit:]]{4}'\n      scope: constant.character.escape.asm.x86_64\n    - match: '\\\\U[[:xdigit:]]{8}'\n      scope: constant.character.escape.asm.x86_64\n    - match: '\\\\x[[:xdigit:]]{1,2}'\n      scope: constant.character.escape.asm.x86_64\n    - match: '\\\\[0-7]{1,3}'\n      scope: constant.character.escape.asm.x86_64\n    - match: '\\\\[''\"`\\\\?abtnvfre]'\n      scope: constant.character.escape.asm.x86_64\n    - match: '\\\\.'\n      scope: invalid.illegal.constant.character.escape.asm.x86_64\n  string-backquote:\n    - meta_scope: string.quoted.other.asm.x86_64\n    - meta_include_prototype: false\n    - include: string-content\n    - match: '`'\n      scope: punctuation.definition.string.end\n      pop: true\n  string-single:\n    - meta_scope: string.quoted.single.asm.x86_64\n    - meta_include_prototype: false\n    - match: ''''\n      scope: punctuation.definition.string.end\n      pop: true\n  string-double:\n    - meta_scope: string.quoted.double.asm.x86_64\n    - meta_include_prototype: false\n    - match: '\"'\n      scope: punctuation.definition.string.end\n      pop: true\n\n  registers:\n    - match: '(?i)\\b(?:[abcd][hl]|[er]?[abcd]x|[er]?(?:di|si|bp|sp)|dil|sil|bpl|spl|r(?:8|9|1[0-5])[bdlw]?)\\b'\n      scope: constant.language.register.general-purpose.asm.x86_64\n    - match: '(?i)\\b(?:[cdefgs]s)\\b'\n      scope: constant.language.register.segment.asm.x86_64\n    - match: '(?i)\\b(?:[er]?flags)\\b'\n      scope: constant.language.register.flags.asm.x86_64\n    - match: '(?i)\\b(?:[er]?ip)\\b'\n      scope: constant.language.register.instruction-pointer.asm.x86_64\n    - match: '(?i)\\b(?:cr[02-4])\\b'\n      scope: constant.language.register.control.asm.x86_64\n    - match: '(?i)\\b(?:(?:mm|st|fpr)[0-7])\\b'\n      scope: constant.language.register.mmx.asm.x86_64\n    - match: '(?i)\\b(?:[xy]mm(?:[0-9]|1[0-5])|mxcsr)\\b'\n      scope: constant.language.register.sse_avx.asm.x86_64\n    - match: '(?i)\\b(?:zmm(?:[12]?[0-9]|30|31))\\b'\n      scope: constant.language.register.avx512.asm.x86_64\n    - match: '(?i)\\b(?:bnd(?:[0-3]|cfg[su]|status))\\b'\n      scope: constant.language.register.memory-protection.asm.x86_64\n    - match: '(?i)\\b(?:(?:[gil]dt)r?|tr)\\b'\n      scope: constant.language.register.system-table-pointer.asm.x86_64\n    - match: '(?i)\\b(?:dr[0-367])\\b'\n      scope: constant.language.register.debug.asm.x86_64\n    - match: '(?i)\\b(?:cr8|dr(?:[89]|1[0-5])|efer|tpr|syscfg)\\b'\n      scope: constant.language.register.amd.asm.x86_64\n    - match: '(?i)\\b(?:db[0-367]|t[67]|tr[3-7]|st)\\b'\n      scope: invalid.deprecated.constant.language.register.asm.x86_64\n    - match: '(?i)\\b[xy]mm(?:1[6-9]|2[0-9]|3[01])\\b'\n      scope: invalid.deprecated.constant.language.register.asm.x86_64\n\n  mnemonics: # see valid.asm for references\n    - include: mnemonics-general-purpose\n    - include: mnemonics-fpu\n    - include: mnemonics-mmx\n    - include: mnemonics-sse\n    - include: mnemonics-sse2\n    - include: mnemonics-sse3\n    - include: mnemonics-sse4\n    - include: mnemonics-aesni\n    - include: mnemonics-avx\n    - include: mnemonics-avx2\n    - include: mnemonics-tsx\n    - include: mnemonics-system\n    - include: mnemonics-64bit\n    - include: mnemonics-vmx\n    - include: mnemonics-smx\n    - include: mnemonics-intel-isa-sgx\n    - include: mnemonics-intel-isa-mpx\n    - include: mnemonics-intel-isa-sha\n    - include: mnemonics-supplemental-amd\n    - include: mnemonics-supplemental-cyrix\n    - include: mnemonics-supplemental-via\n    - include: mnemonics-undocumented\n    - include: mnemonics-future-intel\n    - include: mnemonics-pseudo-ops\n    #- include: mnemonics-invalid\n  mnemonics-general-purpose:\n    - match: '(?i)\\b(?:mov(?:[sz]x)?|cmov(?:n?[abceglopsz]|n?[abgl]e|p[eo]))\\b'\n      scope: keyword.operator.word.mnemonic.general-purpose.data-transfer.mov\n    - match: '(?i)\\b(xchg|bswap|xadd|cmpxchg(8b)?)\\b'\n      scope: keyword.operator.word.mnemonic.general-purpose.data-transfer.xchg\n    - match: '(?i)\\b((push|pop)(ad?)?|cwde?|cdq|cbw)\\b'\n      scope: keyword.operator.word.mnemonic.general-purpose.data-transfer.other\n    - match: '(?i)\\b(adcx?|adox|add|sub|sbb|i?mul|i?div|inc|dec|neg|cmp)\\b'\n      scope: keyword.operator.word.mnemonic.general-purpose.binary-arithmetic\n    - match: '(?i)\\b(daa|das|aaa|aas|aam|aad)\\b'\n      scope: keyword.operator.word.mnemonic.general-purpose.decimal-arithmetic\n    - match: '(?i)\\b(and|x?or|not)\\b'\n      scope: keyword.operator.word.mnemonic.general-purpose.logical\n    - match: '(?i)\\b(s[ah][rl]|sh[rl]d|r[co][rl])\\b'\n      scope: keyword.operator.word.mnemonic.general-purpose.rotate\n    - match: '(?i)\\b(set(n?[abceglopsz]|n?[abgl]e|p[eo]))\\b'\n      scope: keyword.operator.word.mnemonic.general-purpose.bit-and-byte.set\n    - match: '(?i)\\b(bt[crs]?|bs[fr]|test|crc32|popcnt)\\b'\n      scope: keyword.operator.word.mnemonic.general-purpose.bit-and-byte.other\n    - match: '(?i)\\b(jmp|jn?[abceglopsz]|jn?[abgl]e|jp[eo]|j[er]?cxz)\\b'\n      scope: keyword.operator.word.mnemonic.general-purpose.control-transfer.jmp\n    - match: '(?i)\\b(loop(n?[ez])?|call|ret|iret[dq]?|into?|bound|enter|leave)\\b'\n      scope: keyword.operator.word.mnemonic.general-purpose.control-transfer.other\n    - match: '(?i)\\b((mov|cmp|sca|lod|sto)(s[bdw]?)|rep(n?[ez])?)\\b'\n      scope: keyword.operator.word.mnemonic.general-purpose.strings\n    - match: '(?i)\\b((in|out)(s[bdw]?)?)\\b'\n      scope: keyword.operator.word.mnemonic.general-purpose.io\n    - match: '(?i)\\b((st|cl)[cdi]|cmc|[ls]ahf|(push|pop)f[dq]?)\\b'\n      scope: keyword.operator.word.mnemonic.general-purpose.flag-control\n    - match: '(?i)\\b(l[defgs]s)\\b'\n      scope: keyword.operator.word.mnemonic.general-purpose.segment-registers\n    - match: '(?i)\\b(lea|nop|ud2|xlatb?|cpuid|movbe)\\b'\n      scope: keyword.operator.word.mnemonic.general-purpose.misc\n    - match: '(?i)\\b(rdrand|rdseed)\\b'\n      scope: keyword.operator.word.mnemonic.general-purpose.rng\n    - match: '(?i)\\b(andn|bextr|bls(i|r|msk)|bzhi|pdep|pext|[lt]zcnt|(mul|ror|sar|shl|shr)x)\\b'\n      scope: keyword.operator.word.mnemonic.general-purpose.bmi\n  mnemonics-fpu:\n    - match: '(?i)\\b(fcmov(n?([beu]|be)))\\b'\n      scope: keyword.operator.word.mnemonic.fpu.data-transfer.mov\n    - match: '(?i)\\b(f(i?(ld|stp?)|b(ld|stp)|xch))\\b'\n      scope: keyword.operator.word.mnemonic.fpu.data-transfer.other\n    - match: '(?i)\\b(f((add|div|mul|sub)p?|i(add|div|mul|sub)|(div|sub)rp?|i(div|sub)r))\\b'\n      scope: keyword.operator.word.mnemonic.fpu.basic-arithmetic.basic\n    - match: '(?i)\\b(f(prem1?|abs|chs|rndint|scale|sqrt|xtract))\\b'\n      scope: keyword.operator.word.mnemonic.fpu.basic-arithmetic.other\n    - match: '(?i)\\b(f(u?com[ip]?p?|icomp?|tst|xam))\\b'\n      scope: keyword.operator.word.mnemonic.fpu.comparison\n    - match: '(?i)\\b(f(sin|cos|sincos|pa?tan|2xm1|yl2x(p1)?))\\b'\n      scope: keyword.operator.word.mnemonic.fpu.transcendental\n    - match: '(?i)\\b(fld(1|z|pi|l2[et]|l[ng]2))\\b'\n      scope: keyword.operator.word.mnemonic.fpu.load-constants\n    - match: '(?i)\\b(f((inc|dec)stp|free|n?(init|clex|st[cs]w|stenv|save)|ld(cw|env)|rstor|nop)|f?wait)\\b'\n      scope: keyword.operator.word.mnemonic.fpu.control-management\n    - match: '(?i)\\b(fx(save|rstor)(64)?)\\b'\n      scope: keyword.operator.word.mnemonic.fpu.state-management\n  mnemonics-mmx:\n    - match: '(?i)\\b(mov[dq])\\b'\n      scope: keyword.operator.word.mnemonic.mmx.data-transfer\n    - match: '(?i)\\b(pack(ssdw|[su]swb)|punpck[hl](bw|dq|wd))\\b'\n      scope: keyword.operator.word.mnemonic.mmx.conversion\n    - match: '(?i)\\b(p(((add|sub)(d|(u?s)?[bw]))|maddwd|mul[lh]w))\\b'\n      scope: keyword.operator.word.mnemonic.mmx.packed-arithmetic\n    - match: '(?i)\\b(pcmp((eq|gt)[bdw]))\\b'\n      scope: keyword.operator.word.mnemonic.mmx.comparison\n    - match: '(?i)\\b(pandn?|px?or)\\b'\n      scope: keyword.operator.word.mnemonic.mmx.logical\n    - match: '(?i)\\b(ps([rl]l[dwq]|raw|rad))\\b'\n      scope: keyword.operator.word.mnemonic.mmx.shift-and-rotate\n    - match: '(?i)\\b(emms)\\b'\n      scope: keyword.operator.word.mnemonic.mmx.state-management\n  mnemonics-sse:\n    - match: '(?i)\\b(mov(([ahlu]|hl|lh|msk)ps|ss))\\b'\n      scope: keyword.operator.word.mnemonic.sse.data-transfer\n    - match: '(?i)\\b((add|div|max|min|mul|rcp|r?sqrt|sub)[ps]s)\\b'\n      scope: keyword.operator.word.mnemonic.sse.packed-arithmetic\n    - match: '(?i)\\b(cmp[ps]s|u?comiss)\\b'\n      scope: keyword.operator.word.mnemonic.sse.comparison\n    - match: '(?i)\\b((andn?|x?or)ps)\\b'\n      scope: keyword.operator.word.mnemonic.sse.logical\n    - match: '(?i)\\b((shuf|unpck[hl])ps)\\b'\n      scope: keyword.operator.word.mnemonic.sse.shuffle-and-unpack\n    - match: '(?i)\\b(cvt(pi2ps|si2ss|ps2pi|tps2pi|ss2si|tss2si))\\b'\n      scope: keyword.operator.word.mnemonic.sse.conversion\n    - match: '(?i)\\b((ld|st)mxcsr)\\b'\n      scope: keyword.operator.word.mnemonic.sse.state-management\n    - match: '(?i)\\b(p(avg[bw]|extrw|insrw|(max|min)(sw|ub)|sadbw|shufw|mulhuw|movmskb))\\b'\n      scope: keyword.operator.word.mnemonic.sse.simd-integer\n    - match: '(?i)\\b(maskmovq|movntps|sfence)\\b'\n      scope: keyword.operator.word.mnemonic.sse.cacheability-control\n    - match: '(?i)\\b(prefetch(nta|t[0-2]|w(t1)?))\\b'\n      scope: keyword.operator.word.mnemonic.sse.prefetch\n  mnemonics-sse2:\n    - match: '(?i)\\b(mov([auhl]|msk)pd)\\b'\n      scope: keyword.operator.word.mnemonic.sse2.data-transfer\n    - match: '(?i)\\b((add|div|max|min|mul|sub|sqrt)[ps]d)\\b'\n      scope: keyword.operator.word.mnemonic.sse2.packed-arithmetic\n    - match: '(?i)\\b((andn?|x?or)pd)\\b'\n      scope: keyword.operator.word.mnemonic.sse2.logical\n    - match: '(?i)\\b((cmpp|u?comis)d)\\b'\n      scope: keyword.operator.word.mnemonic.sse2.compare\n    - match: '(?i)\\b((shuf|unpck[hl])pd)\\b'\n      scope: keyword.operator.word.mnemonic.sse2.shuffle-and-unpack\n    - match: '(?i)\\b(cvt(dq2pd|pi2pd|ps2pd|pd2ps|si2sd|sd2ss|ss2sd|t?(pd2dq|pd2pi|sd2si)))\\b'\n      scope: keyword.operator.word.mnemonic.sse2.conversion\n    - match: '(?i)\\b(cvt(dq2ps|ps2dq|tps2dq))\\b'\n      scope: keyword.operator.word.mnemonic.sse2.packed-floating-point\n    - match: '(?i)\\b(mov(dq[au]|q2dq|dq2q))\\b'\n      scope: keyword.operator.word.mnemonic.sse2.simd-integer.mov\n    - match: '(?i)\\b(p((add|sub|(s[lr]l|mulu|unpck[hl]q)d)q|shuf(d|[hl]w)))\\b'\n      scope: keyword.operator.word.mnemonic.sse2.simd-integer.other\n    - match: '(?i)\\b(clflush|[lm]fence|pause|maskmovdqu|movnt(dq|i|pd))\\b'\n      scope: keyword.operator.word.mnemonic.sse2.cacheability-control\n  mnemonics-sse3:\n    - match: '(?i)\\b(fisttp|lddqu|(addsub|h(add|sub))p[sd]|mov(sh|sl|d)dup|monitor|mwait)\\b'\n      scope: keyword.operator.word.mnemonic.sse3\n    - match: '(?i)\\b(ph(add|sub)(s?w|d))\\b'\n      scope: keyword.operator.word.mnemonic.sse3.supplimental.horizontal-packed-arithmetic\n    - match: '(?i)\\b(p((abs|sign)[bdw]|maddubsw|mulhrsw|shufb|alignr))\\b'\n      scope: keyword.operator.word.mnemonic.sse3.supplimental.other\n  mnemonics-sse4:\n    - match: '(?i)\\b(pmul(ld|dq)|dpp[ds])\\b'\n      scope: keyword.operator.word.mnemonic.sse4.1.arithmetic\n    - match: '(?i)\\b(movntdqa)\\b'\n      scope: keyword.operator.word.mnemonic.sse4.1.load-hint\n    - match: '(?i)\\b(blendv?p[ds]|pblend(vb|w))\\b'\n      scope: keyword.operator.word.mnemonic.sse4.1.packed-blending\n    - match: '(?i)\\b(p(min|max)(u[dw]|s[bd]))\\b'\n      scope: keyword.operator.word.mnemonic.sse4.1.packed-integer\n    - match: '(?i)\\b(round[ps][sd])\\b'\n      scope: keyword.operator.word.mnemonic.sse4.1.packed-floating-point\n    - match: '(?i)\\b((extract|insert)ps|p((ins|ext)(r[bdq])))\\b'\n      scope: keyword.operator.word.mnemonic.sse4.1.insertion-and-extraction\n    - match: '(?i)\\b(pmov([sz]x(b[dqw]|dq|wd|wq)))\\b'\n      scope: keyword.operator.word.mnemonic.sse4.1.conversion\n    - match: '(?i)\\b(mpsadbw|phminposuw|ptest|pcmpeqq|packusdw)\\b'\n      scope: keyword.operator.word.mnemonic.sse4.1.other\n    - match: '(?i)\\b(pcmp([ei]str[im]|gtq))\\b'\n      scope: keyword.operator.word.mnemonic.sse4.2\n  mnemonics-aesni:\n    - match: '(?i)\\b(aes((dec|enc)(last)?|imc|keygenassist)|pclmulqdq)\\b'\n      scope: keyword.operator.word.mnemonic.aesni\n  mnemonics-avx:\n    - match: '(?i)\\b(v((test|permil|maskmov)p[ds]|zero(all|upper)|(perm2|insert|extract|broadcast)f128|broadcasts[ds]))\\b'\n      scope: keyword.operator.word.mnemonic.avx\n    - match: '(?i)\\b(vaes((dec|enc)(last)?|imc|keygenassist)|vpclmulqdq)\\b'\n      scope: keyword.operator.word.mnemonic.avx.promoted.aes\n    - match: '(?i)\\b(v((cmp[ps]|u?comis)[ds]|pcmp([ei]str[im]|(eq|gt)[bdqw])))\\b'\n      scope: keyword.operator.word.mnemonic.avx.promoted.comparison\n    - match: '(?i)\\b(v(cvt(dq2pd|dq2ps|pd2ps|ps2pd|sd2ss|si2sd|si2ss|ss2sd|t?(pd2dq|ps2dq|sd2si|ss2si))))\\b'\n      scope: keyword.operator.word.mnemonic.avx.promoted.conversion\n    - match: '(?i)\\b(vh((add|sub)p[ds])|vph((add|sub)([dw]|sw)|minposuw))\\b'\n      scope: keyword.operator.word.mnemonic.avx.promoted.horizontal-packed-arithmetic\n    - match: '(?i)\\b(v((andn?|x?or)p[ds]))\\b'\n      scope: keyword.operator.word.mnemonic.avx.promoted.logical\n    - match: '(?i)\\b(v(mov(([ahl]|msk|nt|u)p[ds]|(hl|lh)ps|s([ds]|[hl]dup)|q)))\\b'\n      scope: keyword.operator.word.mnemonic.avx.promoted.mov\n    - match: '(?i)\\b(v((add|div|mul|sub|max|min|round|sqrt)[ps][ds]|(addsub|dp)p[ds]|(rcp|rsqrt)[ps]s))\\b'\n      scope: keyword.operator.word.mnemonic.avx.promoted.packed-arithmetic\n    - match: '(?i)\\b(v(pack[su]s(dw|wb)|punpck[hl](bw|dq|wd|qdq)|unpck[hl]p[ds]))\\b'\n      scope: keyword.operator.word.mnemonic.avx.promoted.packed-conversion\n    - match: '(?i)\\b(vp(shuf([bd]|[hl]w))|vshufp[ds])\\b'\n      scope: keyword.operator.word.mnemonic.avx.promoted.packed-shuffle\n    - match: '(?i)\\b(vp((abs|sign|(max|min)[su])[bdw]|(add|sub)([bdqw]|u?s[bw])|avg[bw]|extr[bdqw]|madd(wd|ubsw)|mul(hu?w|hrsw|l[dw]|u?dq)|sadbw))\\b'\n      scope: keyword.operator.word.mnemonic.avx.promoted.supplemental.arithmetic\n    - match: '(?i)\\b(vp(andn?|x?or))\\b'\n      scope: keyword.operator.word.mnemonic.avx.promoted.supplemental.logical\n    - match: '(?i)\\b(vpblend(vb|w))\\b'\n      scope: keyword.operator.word.mnemonic.avx.promoted.supplemental.blending\n    - match: '(?i)\\b(vpmov(mskb|[sz]x(b[dqw]|w[dq]|dq)))\\b'\n      scope: keyword.operator.word.mnemonic.avx.promoted.supplemental.mov\n    - match: '(?i)\\b(vp(insr[bdqw]|sll(dq|[dqw])|srl(dq)))\\b'\n      scope: keyword.operator.word.mnemonic.avx.promoted.simd-integer\n    - match: '(?i)\\b(vp(sra[dwq]|srl[dqw]))\\b'\n      scope: keyword.operator.word.mnemonic.avx.promoted.shift-and-rotate\n    - match: '(?i)\\b(vblendv?p[ds])\\b'\n      scope: keyword.operator.word.mnemonic.avx.promoted.packed-blending\n    - match: '(?i)\\b(vp(test|alignr))\\b'\n      scope: keyword.operator.word.mnemonic.avx.promoted.packed-other\n    - match: '(?i)\\b(vmov(d(dup|qa|qu)?))\\b'\n      scope: keyword.operator.word.mnemonic.avx.promoted.simd-integer.mov\n    - match: '(?i)\\b(v((extract|insert)ps|lddqu|(ld|st)mxcsr|mpsadbw))\\b'\n      scope: keyword.operator.word.mnemonic.avx.promoted.other\n    - match: '(?i)\\b(v(maskmovdqu|movntdqa?))\\b'\n      scope: keyword.operator.word.mnemonic.avx.promoted.cacheability-control\n    - match: '(?i)\\b(vcvt(ph2ps|ps2ph))\\b'\n      scope: keyword.operator.word.mnemonic.16-bit-floating-point-conversion\n    - match: '(?i)\\b(vfn?m((add|sub)(132|213|231)[ps][ds])|vfm((addsub|subadd)(132|213|231)p[ds]))\\b'\n      scope: keyword.operator.word.mnemonic.fma\n  mnemonics-avx2:\n    - match: '(?i)\\b(v((broadcast|extract|insert|perm2)i128|pmaskmov[dq]|perm([dsq]|p[sd])))\\b'\n      scope: keyword.operator.word.mnemonic.avx2.promoted.simd\n    - match: '(?i)\\b(vpbroadcast[bdqw])\\b'\n      scope: keyword.operator.word.mnemonic.avx2.promoted.packed\n    - match: '(?i)\\b(vp(blendd|s[lr]lv[dq]|sravd))\\b'\n      scope: keyword.operator.word.mnemonic.avx2.blend\n    - match: '(?i)\\b(vp?gather[dq][dq]|vgather([dq]|dq)p[ds])\\b'\n      scope: keyword.operator.word.mnemonic.avx2.gather\n  mnemonics-tsx:\n    - match: '(?i)\\b(x(abort|acquire|release|begin|end|test))\\b'\n      scope: keyword.operator.word.mnemonic.tsx\n  mnemonics-system:\n    - match: '(?i)\\b((cl|st)ac|[ls]([gli]dt|tr|msw)|clts|arpl|lar|lsl|ver[rw]|inv(d|lpg|pcid)|wbinvd)\\b'\n      scope: keyword.operator.word.mnemonic.system\n    - match: '(?i)\\b(lock|hlt|rsm|(rd|wr)(msr|pkru|[fg]sbase)|rd(pmc|tscp?)|sys(enter|exit))\\b'\n      scope: keyword.operator.word.mnemonic.system\n    - match: '(?i)\\b(x((save(c|opt|s)?|rstors?)(64)?|[gs]etbv))\\b'\n      scope: keyword.operator.word.mnemonic.system\n  mnemonics-64bit:\n    - match: '(?i)\\b(cdqe|cqo|(cmp|lod|mov|sto)sq|cmpxchg16b|mov(ntq|sxd)|scasq|swapgs|sys(call|ret))\\b'\n      scope: keyword.operator.word.mnemonic.64-bit-mode\n  mnemonics-vmx:\n    - match: '(?i)\\b(vm(ptr(ld|st)|clear|read|write|launch|resume|xo(ff|n)|call|func)|inv(ept|vpid))\\b'\n      scope: keyword.operator.word.mnemonic.vmx\n  mnemonics-smx:\n    - match: '(?i)\\b(getsec)\\b'\n      scope: keyword.operator.word.mnemonic.smx.getsec\n    - match: '(?i)\\b(capabilities|enteraccs|exitac|senter|sexit|parameters|smctrl|wakeup)\\b'\n      scope: support.constant\n  mnemonics-intel-isa-sgx:\n    - match: '(?i)\\be(add|block|create|dbg(rd|wr)|extend|init|ld[bu]|pa|remove|track|wb)\\b'\n      scope: keyword.operator.word.mnemonic.sgx1.supervisor\n    - match: '(?i)\\be(enter|exit|getkey|report|resume)\\b'\n      scope: keyword.operator.word.mnemonic.sgx1.user\n    - match: '(?i)\\be(aug|mod(pr|t))\\b'\n      scope: keyword.operator.word.mnemonic.sgx2.supervisor\n    - match: '(?i)\\be(accept(copy)?|modpe)\\b'\n      scope: keyword.operator.word.mnemonic.sgx2.user\n  mnemonics-intel-isa-mpx:\n    - match: '(?i)\\b(bnd(mk|c[lnu]|mov|ldx|stx))\\b'\n      scope: keyword.operator.word.mnemonic.mpx\n  mnemonics-intel-isa-sha:\n    - match: '(?i)\\b(sha(1rnds4|256rnds2|1nexte|(1|256)msg[12]))\\b'\n      scope: keyword.operator.word.mnemonic.sha\n  mnemonics-supplemental-amd:\n    - match: '(?i)\\b(bl([cs](fill|ic?|msk)|cs)|t1mskc|tzmsk)\\b'\n      scope: keyword.operator.word.mnemonic.supplemental.amd.general-purpose\n    - match: '(?i)\\b(clgi|int3|invlpga|iretw|skinit|stgi|vm(load|mcall|run|save)|monitorx|mwaitx)\\b'\n      scope: keyword.operator.word.mnemonic.supplemental.amd.system\n    - match: '(?i)\\b([ls]lwpcb|lwp(ins|val))\\b'\n      scope: keyword.operator.word.mnemonic.supplemental.amd.profiling\n    - match: '(?i)\\b(movnts[ds])\\b'\n      scope: keyword.operator.word.mnemonic.supplemental.amd.memory-management\n    - match: '(?i)\\b(prefetch|clzero)\\b'\n      scope: keyword.operator.word.mnemonic.supplemental.amd.cache-management\n    - match: '(?i)\\b((extr|insert)q)\\b'\n      scope: keyword.operator.word.mnemonic.supplemental.amd.sse4.a\n    - match: '(?i)\\b(vfn?m((add|sub)[ps][ds])|vfm((addsub|subadd)p[ds]))\\b'\n      scope: keyword.operator.word.mnemonic.supplemental.amd.fma4\n    - match: '(?i)\\b(vp(cmov|(comu?|rot|sh[al])[bdqw]|mac(s?s(d(d|q[hl])|w[dw]))|madcss?wd|perm))\\b'\n      scope: keyword.operator.word.mnemonic.supplemental.amd.xop.simd\n    - match: '(?i)\\b(vph(addu?(b[dqw]|w[dq]|dq)|sub(bw|dq|wd)))\\b'\n      scope: keyword.operator.word.mnemonic.supplemental.amd.xop.simd-horizontal\n    - match: '(?i)\\b(vfrcz[ps][ds]|vpermil2p[ds])\\b'\n      scope: keyword.operator.word.mnemonic.supplemental.amd.xop.other\n    - match: '(?i)\\b(femms)\\b'\n      scope: keyword.operator.word.mnemonic.supplemental.amd.3dnow\n    - match: '(?i)\\b(p(avgusb|(f2i|i2f)[dw]|mulhrw|swapd)|pf((p?n)?acc|add|max|min|mul|rcp(it[12])?|rsqit1|rsqrt|subr?))\\b'\n      scope: keyword.operator.word.mnemonic.supplemental.amd.3dnow.simd\n    - match: '(?i)\\b(pfcmp(eq|ge|gt))\\b'\n      scope: keyword.operator.word.mnemonic.supplemental.amd.3dnow.comparison\n  mnemonics-supplemental-cyrix:\n    - match: '(?i)\\b((sv|rs)dc|(wr|rd)shr|paddsiw)\\b'\n      scope: keyword.operator.word.mnemonic.supplemental.cyrix\n  mnemonics-supplemental-via:\n    - match: '(?i)\\b(montmul)\\b'\n      scope: keyword.operator.word.mnemonic.supplemental.via\n    - match: '(?i)\\b(x(store(rng)?|crypt(ecb|cbc|ctr|cfb|ofb)|sha(1|256)))\\b'\n      scope: keyword.operator.word.mnemonic.supplemental.via.padlock\n  mnemonics-undocumented:\n    - match: '(?i)\\b(ret[nf]|icebp|int1|int03|smi|ud1)\\b'\n      scope: keyword.operator.word.mnemonic.undocumented\n  mnemonics-future-intel:\n    - include: mnemonics-future-intel-avx512\n    - include: mnemonics-future-intel-opmask\n    - include: mnemonics-future-intel-cet\n    - include: mnemonics-future-intel-other\n  mnemonics-future-intel-avx512:\n    - match: '(?i)\\b(vblendm(pd|ps)|vpblendm[bdqw])\\b'\n      scope: keyword.operator.word.mnemonic.avx512.blend\n    - match: '(?i)\\b(vbroadcast[fi](32x[248]|64x[24])|v(extract|insert)[fi](32x[48]|64x[24])|vshuf[fi](32x4|64x2)|vpbroadcastm(b2q|w2d))\\b'\n      scope: keyword.operator.word.mnemonic.avx512.bits-mov\n    - match: '(?i)\\b(v(compress|expand)p[ds]|vp(compress|expand|conflict)[dq])\\b'\n      scope: keyword.operator.word.mnemonic.avx512.compress\n    - match: '(?i)\\b(vcvt(t?p[sd]2(udq|u?qq)|(udq|u?qq)2p[ds]|t?s[ds]2usi|usi2s[ds]))\\b'\n      scope: keyword.operator.word.mnemonic.avx512.conversion\n    - match: '(?i)\\b(v(fixupimm|fpclass|get(exp|mant)|range|(rcp|rsqrt)(14|28)|reduce|rndscale|scalef)([ps][ds]))\\b'\n      scope: keyword.operator.word.mnemonic.avx512.math\n    - match: '(?i)\\b(v(exp2p[ds]|(scatter|(gather|scatter)pf[01])[dq]p[ds]))\\b'\n      scope: keyword.operator.word.mnemonic.avx512.math\n    - match: '(?i)\\b(vmovdq(a(32|64)|u(8|16|32|64)))\\b'\n      scope: keyword.operator.word.mnemonic.avx512.simd-integer\n    - match: '(?i)\\b(vp(andn?|x?or)[dq])\\b'\n      scope: keyword.operator.word.mnemonic.avx512.logical\n    - match: '(?i)\\b(vpcmpu?[dqw])\\b'\n      scope: keyword.operator.word.mnemonic.avx512.packed-comparison\n    - match: '(?i)\\b(vp(absq|(lzcnt|ternlog)[dq]|madd52[lh]uq|(max|min)[su]q|mullq))\\b'\n      scope: keyword.operator.word.mnemonic.avx512.packed-math\n    - match: '(?i)\\b(vpmov(m2[bdqw]|[bdqw]2m|(u?s)?([qd][bw]|qd|wb)))\\b'\n      scope: keyword.operator.word.mnemonic.avx512.packed-mov\n    - match: '(?i)\\b(vp(ro[rl]v?[dq]|scatter[dq][dq]))\\b'\n      scope: keyword.operator.word.mnemonic.avx512.packed-shift\n    - match: '(?i)\\b(vptestn?m[bdqw])\\b'\n      scope: keyword.operator.word.mnemonic.avx512.packed-test\n    - match: '(?i)\\b(vperm([bdw]|[it]2([bdwq]|p[ds])))\\b'\n      scope: keyword.operator.word.mnemonic.avx512.permutations\n    - match: '(?i)\\b(valign[dq]|vdbpsadbw|vpmultishiftqb|vpsrav[dqw])\\b'\n      scope: keyword.operator.word.mnemonic.avx512.other\n  mnemonics-future-intel-opmask:\n    - match: '(?i)\\b(k(add|andn?|(xn?)?or|mov|not|(or)?test|shift[lr])[bdqw]|kunpck(bw|wd|dq))\\b'\n      scope: keyword.operator.word.mnemonic.opmask\n  mnemonics-future-intel-cet:\n    - match: '(?i)\\b((inc|save|rstor)ssp|wru?ss|(set|clr)ssbsy|endbranch|endbr(32|64))\\b'\n      scope: keyword.operator.word.mnemonic.cet\n  mnemonics-future-intel-other:\n    - match: '(?i)\\b(clflushopt|clwb|pcommit)\\b'\n      scope: keyword.operator.word.mnemonic.other\n  mnemonics-pseudo-ops:\n    - match: '(?i)\\b(cmp(n?(eq|lt|le)|(un)?ord)[ps][ds])\\b'\n      scope: keyword.pseudo-mnemonic.sse2.compare\n    - match: '(?i)\\b(v?pclmul([hl]q[hl]q|[hl]qh)dq)\\b'\n      scope: keyword.pseudo-mnemonic.avx.promoted.aes\n    - match: '(?i)\\b(vcmp(eq(_(os|uq|us))?|neq(_(oq|os|us))?|[gl][et](_oq)?|n[gl][et](_uq)?|(un)?ord(_s)?|false(_os)?|true(_us)?)[ps][ds])\\b'\n      scope: keyword.pseudo-mnemonic.avx.promoted.comparison\n    - match: '(?i)\\b(vpcom(n?eq|[gl][et]|false|true)(b|uw))\\b'\n      scope: keyword.pseudo-mnemonic.supplemental.amd.xop.simd\n  mnemonics-invalid:\n    - include: mnemonics-invalid-amd-sse5\n  mnemonics-invalid-amd-sse5:\n    - match: '(?i)\\b(com[ps][ds]|pcomu?[bdqw])\\b'\n      scope: invalid.keyword.operator.word.mnemonic.sse5.comparison\n    - match: '(?i)\\b(cvtp(h2ps|s2ph)|frcz[ps][ds])\\b'\n      scope: invalid.keyword.operator.word.mnemonic.sse5.conversion\n    - match: '(?i)\\b(fn?m((add|sub)[ps][ds])|ph(addu?(b[dqw]|w[dq]|dq)|sub(bw|dq|wd))|pma(css?(d(d|q[hl])|w[dw])|dcss?wd))\\b'\n      scope: invalid.keyword.operator.word.mnemonic.sse5.packed-arithmetic\n    - match: '(?i)\\b(pcmov|permp[ds]|pperm|prot[bdqw]|psh[al][bdqw])\\b'\n      scope: invalid.keyword.operator.word.mnemonic.sse5.simd-integer\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/CSV/CSV-comma.sublime-syntax",
    "content": "%YAML 1.2\n---\n# See http://www.sublimetext.com/docs/3/syntax.html\nname: Comma Separated Values\nscope: text.csv.comma\nvariables:\n  field_separator: (?:,)\n  record_separator: (?:$\\n?)\ncontexts:\n  main:\n    - match: '^'\n      push: fields\n\n  fields:\n    - include: record_separator\n    - match: ''\n      push:\n        - field_or_record_separator\n        - field5\n        - field_or_record_separator\n        - field4\n        - field_or_record_separator\n        - field3\n        - field_or_record_separator\n        - field2\n        - field_or_record_separator\n        - field1\n\n  record_separator_pop:\n    - match: (?={{record_separator}})\n      pop: true\n\n  record_separator:\n    - meta_include_prototype: false\n    - match: '{{record_separator}}'\n      scope: punctuation.terminator.record.csv\n      pop: true\n\n  field_or_record_separator:\n    - meta_include_prototype: false\n    - include: record_separator_pop\n    - match: '{{field_separator}}'\n      scope: punctuation.separator.sequence.csv\n      pop: true\n\n  field_contents:\n    - match: '\"'\n      scope: punctuation.definition.string.begin.csv\n      push: scope:text.csv#double_quoted_string\n\n    - include: record_separator_pop\n    - match: (?={{field_separator}})\n      pop: true\n\n  field1:\n    - match: ''\n      set:\n        - meta_content_scope: meta.field-1.csv variable.parameter\n        - include: field_contents\n  field2:\n    - match: ''\n      set:\n        - meta_content_scope: meta.field-2.csv support.function\n        - include: field_contents\n  field3:\n    - match: ''\n      set:\n        - meta_content_scope: meta.field-3.csv constant.numeric\n        - include: field_contents\n  field4:\n    - match: ''\n      set:\n        - meta_content_scope: meta.field-4.csv keyword.operator\n        - include: field_contents\n  field5:\n    - match: ''\n      set:\n        - meta_content_scope: meta.field-5.csv string.unquoted\n        - include: field_contents\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/CSV/CSV-pipe.sublime-syntax",
    "content": "%YAML 1.2\n---\n# See http://www.sublimetext.com/docs/3/syntax.html\nname: Pipe Separated Values\nscope: text.csv.pipe\nvariables:\n  field_separator: (?:\\|)\n  record_separator: (?:$\\n?)\n\ncontexts:\n  main:\n    - match: '^'\n      push: fields\n\n  fields:\n    - include: record_separator\n    - match: ''\n      push:\n        - field_or_record_separator\n        - field5\n        - field_or_record_separator\n        - field4\n        - field_or_record_separator\n        - field3\n        - field_or_record_separator\n        - field2\n        - field_or_record_separator\n        - field1\n\n  record_separator_pop:\n    - match: (?={{record_separator}})\n      pop: true\n\n  record_separator:\n    - meta_include_prototype: false\n    - match: '{{record_separator}}'\n      scope: punctuation.terminator.record.csv\n      pop: true\n\n  field_or_record_separator:\n    - meta_include_prototype: false\n    - include: record_separator_pop\n    - match: '{{field_separator}}'\n      scope: punctuation.separator.sequence.csv\n      pop: true\n\n  field_contents:\n    - match: '\"'\n      scope: punctuation.definition.string.begin.csv\n      push: scope:text.csv#double_quoted_string\n\n    - include: record_separator_pop\n    - match: (?={{field_separator}})\n      pop: true\n\n  field1:\n    - match: ''\n      set:\n        - meta_content_scope: meta.field-1.csv variable.parameter\n        - include: field_contents\n  field2:\n    - match: ''\n      set:\n        - meta_content_scope: meta.field-2.csv support.function\n        - include: field_contents\n  field3:\n    - match: ''\n      set:\n        - meta_content_scope: meta.field-3.csv constant.numeric\n        - include: field_contents\n  field4:\n    - match: ''\n      set:\n        - meta_content_scope: meta.field-4.csv keyword.operator\n        - include: field_contents\n  field5:\n    - match: ''\n      set:\n        - meta_content_scope: meta.field-5.csv string.unquoted\n        - include: field_contents\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/CSV/CSV-semi-colon.sublime-syntax",
    "content": "%YAML 1.2\n---\n# See http://www.sublimetext.com/docs/3/syntax.html\nname: Semi-Colon Separated Values\nscope: text.csv.semi-colon\nvariables:\n  field_separator: (?:;)\n  record_separator: (?:$\\n?)\ncontexts:\n  main:\n    - match: '^'\n      push: fields\n\n  fields:\n    - include: record_separator\n    - match: ''\n      push:\n        - field_or_record_separator\n        - field5\n        - field_or_record_separator\n        - field4\n        - field_or_record_separator\n        - field3\n        - field_or_record_separator\n        - field2\n        - field_or_record_separator\n        - field1\n\n  record_separator_pop:\n    - match: (?={{record_separator}})\n      pop: true\n\n  record_separator:\n    - meta_include_prototype: false\n    - match: '{{record_separator}}'\n      scope: punctuation.terminator.record.csv\n      pop: true\n\n  field_or_record_separator:\n    - meta_include_prototype: false\n    - include: record_separator_pop\n    - match: '{{field_separator}}'\n      scope: punctuation.separator.sequence.csv\n      pop: true\n\n  field_contents:\n    - match: '\"'\n      scope: punctuation.definition.string.begin.csv\n      push: scope:text.csv#double_quoted_string\n\n    - include: record_separator_pop\n    - match: (?={{field_separator}})\n      pop: true\n\n  field1:\n    - match: ''\n      set:\n        - meta_content_scope: meta.field-1.csv variable.parameter\n        - include: field_contents\n  field2:\n    - match: ''\n      set:\n        - meta_content_scope: meta.field-2.csv support.function\n        - include: field_contents\n  field3:\n    - match: ''\n      set:\n        - meta_content_scope: meta.field-3.csv constant.numeric\n        - include: field_contents\n  field4:\n    - match: ''\n      set:\n        - meta_content_scope: meta.field-4.csv keyword.operator\n        - include: field_contents\n  field5:\n    - match: ''\n      set:\n        - meta_content_scope: meta.field-5.csv string.unquoted\n        - include: field_contents\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/CSV/CSV.sublime-syntax",
    "content": "%YAML 1.2\n---\n# See http://www.sublimetext.com/docs/3/syntax.html\nname: Separated Values\nfile_extensions:\n  - csv\nscope: text.csv\nvariables:\n  field_separator_chars: ',;\\t|'\n  field_separator: (?:[{{field_separator_chars}}])\n  record_separator: (?:$\\n?)\ncontexts:\n  main:\n    - meta_include_prototype: false\n    - include: three_field_separators\n    - include: single_separator_type_on_line\n    - match: '^'\n      push: unknown-separated-main\n\n  three_field_separators:\n    - match: ^(?=(?:[^,]*,){3})\n      set: scope:text.csv.comma\n    - match: ^(?=(?:[^;]*;){3})\n      set: scope:text.csv.semi-colon\n    - match: ^(?=(?:[^\\t]*\\t){3})\n      set: scope:text.csv.tab\n    - match: ^(?=(?:[^|]*\\|){3})\n      set: scope:text.csv.pipe\n\n  single_separator_type_on_line:\n    - match: ^(?=[^{{field_separator_chars}}]*,[^;\\t|]*$)\n      set: scope:text.csv.comma\n    - match: ^(?=[^{{field_separator_chars}}]*;[^,\\t|]*$)\n      set: scope:text.csv.semi-colon\n    - match: ^(?=[^{{field_separator_chars}}]*\\t[^,;|]*$)\n      set: scope:text.csv.tab\n    - match: ^(?=[^{{field_separator_chars}}]*\\|[^,;\\t]*$)\n      set: scope:text.csv.pipe\n\n  unknown-separated-main:\n    - include: record_separator\n    - match: ''\n      push:\n        - field_or_record_separator\n        - field5\n        - field_or_record_separator\n        - field4\n        - field_or_record_separator\n        - field3\n        - field_or_record_separator\n        - field2\n        - field_or_record_separator\n        - field1\n\n  record_separator_pop:\n    - match: (?={{record_separator}})\n      pop: true\n\n  record_separator:\n    - meta_include_prototype: false\n    - match: '{{record_separator}}'\n      scope: punctuation.terminator.record.csv\n\n  field_or_record_separator:\n    - meta_include_prototype: false\n    - include: record_separator_pop\n    - match: '{{field_separator}}'\n      scope: punctuation.separator.sequence.csv\n      pop: true\n\n  field_contents:\n    - match: '\"'\n      scope: punctuation.definition.string.begin.csv\n      push: double_quoted_string\n\n    - include: record_separator_pop\n    - match: (?={{field_separator}})\n      pop: true\n\n  double_quoted_string:\n    - meta_include_prototype: false\n    - meta_scope: meta.string.quoted.double.csv\n    - match: '\"\"'\n      scope: constant.character.escape.csv\n    - match: '\"'\n      scope: punctuation.definition.string.end.csv\n      pop: true\n\n  field1:\n    - match: ''\n      set:\n        - meta_content_scope: meta.field-1.csv variable.parameter\n        - include: field_contents\n  field2:\n    - match: ''\n      set:\n        - meta_content_scope: meta.field-2.csv support.function\n        - include: field_contents\n  field3:\n    - match: ''\n      set:\n        - meta_content_scope: meta.field-3.csv constant.numeric\n        - include: field_contents\n  field4:\n    - match: ''\n      set:\n        - meta_content_scope: meta.field-4.csv keyword.operator\n        - include: field_contents\n  field5:\n    - match: ''\n      set:\n        - meta_content_scope: meta.field-5.csv string.unquoted\n        - include: field_contents\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/CSV/TSV.sublime-syntax",
    "content": "%YAML 1.2\n---\n# See http://www.sublimetext.com/docs/3/syntax.html\nname: Tab Separated Values\nscope: text.csv.tab\nfile_extensions:\n  - tsv\n\nvariables:\n  field_separator: (?:\\t)\n  record_separator: (?:$\\n?)\n\ncontexts:\n  main:\n    - match: '^'\n      push: fields\n\n  fields:\n    - include: record_separator\n    - match: ''\n      push:\n        - field_or_record_separator\n        - field5\n        - field_or_record_separator\n        - field4\n        - field_or_record_separator\n        - field3\n        - field_or_record_separator\n        - field2\n        - field_or_record_separator\n        - field1\n\n  record_separator_pop:\n    - match: (?={{record_separator}})\n      pop: true\n\n  record_separator:\n    - meta_include_prototype: false\n    - match: '{{record_separator}}'\n      scope: punctuation.terminator.record.csv\n      pop: true\n\n  field_or_record_separator:\n    - meta_include_prototype: false\n    - include: record_separator_pop\n    - match: '{{field_separator}}'\n      scope: punctuation.separator.sequence.csv\n      pop: true\n\n  field_contents:\n    - match: '\"'\n      scope: punctuation.definition.string.begin.csv\n      push: scope:text.csv#double_quoted_string\n\n    - include: record_separator_pop\n    - match: (?={{field_separator}})\n      pop: true\n\n  field1:\n    - match: ''\n      set:\n        - meta_content_scope: meta.field-1.csv variable.parameter\n        - include: field_contents\n  field2:\n    - match: ''\n      set:\n        - meta_content_scope: meta.field-2.csv support.function\n        - include: field_contents\n  field3:\n    - match: ''\n      set:\n        - meta_content_scope: meta.field-3.csv constant.numeric\n        - include: field_contents\n  field4:\n    - match: ''\n      set:\n        - meta_content_scope: meta.field-4.csv keyword.operator\n        - include: field_contents\n  field5:\n    - match: ''\n      set:\n        - meta_content_scope: meta.field-5.csv string.unquoted\n        - include: field_contents\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/Cabal.sublime-syntax",
    "content": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: Cabal\nfile_extensions:\n  - cabal\nscope: source.cabal\ncontexts:\n  main:\n    - match: ^(\\s*)(exposed-modules):$\n      captures:\n        2: constant.other.cabal\n      push:\n        - meta_scope: exposed.modules.cabal\n        - match: ^(?!\\1\\s)\n          pop: true\n        - include: module_name\n    - match: ^(\\s*)(build-depends):$\n      captures:\n        2: constant.other.cabal\n      push:\n        - meta_scope: exposed.modules.cabal\n        - match: ^(?!\\1\\s)\n          pop: true\n        - match: \"([<>=]+)|([&|]+)\"\n          scope: keyword.operator.haskell\n        - match: ((\\d+|\\*)\\.)*(\\d+|\\*)\n          scope: constant.numeric.haskell\n        - match: '([\\w\\-]+)'\n          scope: support.function.haskell\n    - match: '^\\s*([a-zA-Z_-]+)(:)\\s+'\n      scope: entity.cabal\n      captures:\n        1: constant.other.cabal\n        2: punctuation.entity.cabal\n    - match: '^(?i)(executable|library|test-suite|benchmark|flag|source-repository|custom-setup)\\s+([^\\s,]+)\\s*$'\n      scope: entity.cabal\n      captures:\n        1: keyword.entity.cabal\n        2: string.cabal\n    - match: ^(?i)library\\s*$\n      scope: keyword.entity.cabal\n    - match: \"--.*$\"\n      scope: comment.cabal\n  module_name:\n    - match: '([A-Z][A-Za-z_''0-9]*)(\\.[A-Z][A-Za-z_''0-9]*)*'\n      scope: storage.module.haskell\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/CoffeeScript.sublime-syntax",
    "content": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: CoffeeScript\ncomment: \"CoffeeScript Syntax: version 1\"\nfile_extensions:\n  - coffee\n  - Cakefile\n  - coffee.erb\n  - cson\nfirst_line_match: ^#!.*\\bcoffee\nscope: source.coffee\ncontexts:\n  main:\n    - match: '(\\([^()]*?\\))\\s*([=-]>)'\n      comment: \"match stuff like: a -> …\"\n      scope: meta.inline.function.coffee\n      captures:\n        1: variable.parameter.function.coffee\n        2: storage.type.function.coffee\n    - match: (new)\\s+(\\w+(?:\\.\\w*)*)\n      scope: meta.class.instance.constructor\n      captures:\n        1: keyword.operator.new.coffee\n        2: support.class.coffee\n    - match: \"'''\"\n      captures:\n        0: punctuation.definition.string.begin.coffee\n      push:\n        - meta_scope: string.quoted.heredoc.coffee\n        - match: \"'''\"\n          captures:\n            0: punctuation.definition.string.end.coffee\n          pop: true\n    - match: '\"\"\"'\n      captures:\n        0: punctuation.definition.string.begin.coffee\n      push:\n        - meta_scope: string.quoted.double.heredoc.coffee\n        - match: '\"\"\"'\n          captures:\n            0: punctuation.definition.string.end.coffee\n          pop: true\n        - match: \\\\.\n          scope: constant.character.escape.coffee\n        - include: interpolated_coffee\n    - match: \"`\"\n      captures:\n        0: punctuation.definition.string.begin.coffee\n      push:\n        - meta_scope: string.quoted.script.coffee\n        - match: \"`\"\n          captures:\n            0: punctuation.definition.string.end.coffee\n          pop: true\n        - match: '\\\\(x\\h{2}|[0-2][0-7]{,2}|3[0-6][0-7]|37[0-7]?|[4-7][0-7]?|.)'\n          scope: constant.character.escape.coffee\n    - match: (?<!#)###(?!#)\n      captures:\n        0: punctuation.definition.comment.coffee\n      push:\n        - meta_scope: comment.block.coffee\n        - match: '###(?:[ \\t]*\\n)'\n          captures:\n            0: punctuation.definition.comment.coffee\n          pop: true\n        - match: '@\\w*'\n          scope: storage.type.annotation.coffeescript\n    - match: '(#)(?!\\{).*$\\n?'\n      scope: comment.line.number-sign.coffee\n      captures:\n        1: punctuation.definition.comment.coffee\n    - match: \"/{3}\"\n      push:\n        - meta_scope: string.regexp.coffee\n        - match: \"/{3}[imgy]{0,4}\"\n          pop: true\n        - include: interpolated_coffee\n        - include: embedded_comment\n    - match: '/(?![\\s=/*+{}?]).*?[^\\\\]/[igmy]{0,4}(?![a-zA-Z0-9])'\n      scope: string.regexp.coffee\n    - match: |-\n        (?x)\n          \\b(?<![\\.\\$])(\n            break|by|catch|continue|else|finally|for|in|of|if|return|switch|\n            then|throw|try|unless|when|while|until|loop|do|(?<=for)\\s+own\n          )(?!\\s*:)\\b\n      scope: keyword.control.coffee\n    - match: |-\n        (?x)\n          and=|or=|!|%|&|\\^|\\*|\\/|(\\-)?\\-(?!>)|\\+\\+|\\+|~|==|=(?!>)|!=|<=|>=|<<=|>>=|\n          >>>=|<>|<|>|!|&&|\\.\\.(\\.)?|\\?|\\||\\|\\||\\:|\\*=|(?<!\\()/=|%=|\\+=|\\-=|&=|\n          \\^=|\\b(?<![\\.\\$])(instanceof|new|delete|typeof|and|or|is|isnt|not|super)\\b\n      scope: keyword.operator.coffee\n    - match: '([a-zA-Z\\$_](\\w|\\$|\\.)*\\s*(?!\\::)((:)|(=[^=]))(?!(\\s*\\(.*\\))?\\s*((=|-)>)))'\n      scope: variable.assignment.coffee\n      captures:\n        1: variable.assignment.coffee\n        4: punctuation.separator.key-value\n        5: keyword.operator.coffee\n    - match: '(?<=\\s|^)([\\[\\{])(?=.*?[\\]\\}]\\s+[:=])'\n      captures:\n        0: keyword.operator.coffee\n      push:\n        - meta_scope: meta.variable.assignment.destructured.coffee\n        - match: '([\\]\\}]\\s*[:=])'\n          captures:\n            0: keyword.operator.coffee\n          pop: true\n        - include: variable_name\n        - include: instance_variable\n        - include: single_quoted_string\n        - include: double_quoted_string\n        - include: numeric\n    - match: |-\n        (?x)\n          (\\s*)\n          (?=[a-zA-Z\\$_])\n          (\n            [a-zA-Z\\$_](\\w|\\$|:|\\.)*\\s*\n            (?=[:=](\\s*\\(.*\\))?\\s*([=-]>))\n          )\n      scope: meta.function.coffee\n      captures:\n        2: entity.name.function.coffee\n        3: entity.name.function.coffee\n        4: variable.parameter.function.coffee\n        5: storage.type.function.coffee\n    - match: ^\\s*(describe|it|app\\.(get|post|put|all|del|delete))\n      comment: Show well-known functions from Express and Mocha in Go To Symbol view\n      push:\n        - meta_scope: meta.function.symbols.coffee\n        - match: $\n          pop: true\n        - include: main\n    - match: \"[=-]>\"\n      scope: storage.type.function.coffee\n    - match: '\\b(?<!\\.)(true|on|yes)(?!\\s*[:=])\\b'\n      scope: constant.language.boolean.true.coffee\n    - match: '\\b(?<!\\.)(false|off|no)(?!\\s*[:=])\\b'\n      scope: constant.language.boolean.false.coffee\n    - match: '\\b(?<!\\.)null(?!\\s*[:=])\\b'\n      scope: constant.language.null.coffee\n    - match: '\\b(?<!\\.)(this|extends)(?!\\s*[:=])\\b'\n      scope: variable.language.coffee\n    - match: '(class\\b)\\s+(@?[a-zA-Z\\$_][\\w\\.]*)?(?:\\s+(extends)\\s+(@?[a-zA-Z\\$\\._][\\w\\.]*))?'\n      scope: meta.class.coffee\n      captures:\n        1: storage.type.class.coffee\n        2: entity.name.type.class.coffee\n        3: keyword.control.inheritance.coffee\n        4: entity.other.inherited-class.coffee\n    - match: \\b(debugger|\\\\)\\b\n      scope: keyword.other.coffee\n    - match: |-\n        (?x)\\b(\n          Array|ArrayBuffer|Blob|Boolean|Date|document|event|Function|\n          Int(8|16|32|64)Array|Math|Map|Number|\n          Object|Proxy|RegExp|Set|String|WeakMap|\n          window|Uint(8|16|32|64)Array|XMLHttpRequest\n        )\\b\n      scope: support.class.coffee\n    - match: ((?<=console\\.)(debug|warn|info|log|error|time|timeEnd|assert))\\b\n      scope: support.function.console.coffee\n    - match: |-\n        (?x)\\b(\n          decodeURI(Component)?|encodeURI(Component)?|eval|parse(Float|Int)|require\n        )\\b\n      scope: support.function.coffee\n    - match: |-\n        (?x)((?<=\\.)(\n          apply|call|concat|every|filter|forEach|from|hasOwnProperty|indexOf|\n          isPrototypeOf|join|lastIndexOf|map|of|pop|propertyIsEnumerable|push|\n          reduce(Right)?|reverse|shift|slice|some|sort|splice|to(Locale)?String|\n          unshift|valueOf\n        ))\\b\n      scope: support.function.method.array.coffee\n    - match: |-\n        (?x)((?<=Array\\.)(\n          isArray\n        ))\\b\n      scope: support.function.static.array.coffee\n    - match: |-\n        (?x)((?<=Object\\.)(\n          create|definePropert(ies|y)|freeze|getOwnProperty(Descriptors?|Names)|\n          getProperty(Descriptor|Names)|getPrototypeOf|is(Extensible|Frozen|Sealed)?|\n          isnt|keys|preventExtensions|seal\n        ))\\b\n      scope: support.function.static.object.coffee\n    - match: |-\n        (?x)((?<=Math\\.)(\n          abs|acos|acosh|asin|asinh|atan|atan2|atanh|ceil|cos|cosh|exp|expm1|floor|\n          hypot|log|log10|log1p|log2|max|min|pow|random|round|sign|sin|sinh|sqrt|\n          tan|tanh|trunc\n        ))\\b\n      scope: support.function.static.math.coffee\n    - match: |-\n        (?x)((?<=Number\\.)(\n          is(Finite|Integer|NaN)|toInteger\n        ))\\b\n      scope: support.function.static.number.coffee\n    - match: \\b(Infinity|NaN|undefined)\\b\n      scope: constant.language.coffee\n    - match: \\;\n      scope: punctuation.terminator.statement.coffee\n    - match: ',[ |\\t]*'\n      scope: meta.delimiter.object.comma.coffee\n    - match: \\.\n      scope: meta.delimiter.method.period.coffee\n    - match: '\\{|\\}'\n      scope: meta.brace.curly.coffee\n    - match: \\(|\\)\n      scope: meta.brace.round.coffee\n    - match: '\\[|\\]\\s*'\n      scope: meta.brace.square.coffee\n    - include: instance_variable\n    - include: single_quoted_string\n    - include: double_quoted_string\n    - include: numeric\n  double_quoted_string:\n    - match: '\"'\n      captures:\n        0: punctuation.definition.string.begin.coffee\n      push:\n        - meta_scope: string.quoted.double.coffee\n        - match: '\"'\n          captures:\n            0: punctuation.definition.string.end.coffee\n          pop: true\n        - match: '\\\\(x\\h{2}|[0-2][0-7]{,2}|3[0-6][0-7]|37[0-7]?|[4-7][0-7]?|.)'\n          scope: constant.character.escape.coffee\n        - include: interpolated_coffee\n  embedded_comment:\n    - match: (?<!\\\\)(#).*$\\n?\n      scope: comment.line.number-sign.coffee\n      captures:\n        1: punctuation.definition.comment.coffee\n  instance_variable:\n    - match: '(@)([a-zA-Z_\\$]\\w*)?'\n      scope: variable.other.readwrite.instance.coffee\n  interpolated_coffee:\n    - match: '\\#\\{'\n      captures:\n        0: punctuation.section.embedded.coffee\n      push:\n        - meta_scope: source.coffee.embedded.source\n        - match: '\\}'\n          captures:\n            0: punctuation.section.embedded.coffee\n          pop: true\n        - include: main\n  numeric:\n    - match: '(?<!\\$)\\b((0([box])[0-9a-fA-F]+)|([0-9]+(\\.[0-9]+)?(e[+\\-]?[0-9]+)?))\\b'\n      scope: constant.numeric.coffee\n  single_quoted_string:\n    - match: \"'\"\n      captures:\n        0: punctuation.definition.string.begin.coffee\n      push:\n        - meta_scope: string.quoted.single.coffee\n        - match: \"'\"\n          captures:\n            0: punctuation.definition.string.end.coffee\n          pop: true\n        - match: '\\\\(x\\h{2}|[0-2][0-7]{,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)'\n          scope: constant.character.escape.coffee\n  variable_name:\n    - match: '([a-zA-Z\\$_]\\w*(\\.\\w+)*)'\n      scope: variable.assignment.coffee\n      captures:\n        1: variable.assignment.coffee\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/CpuInfo.sublime-syntax",
    "content": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: CpuInfo\nfile_extensions:\n  - cpuinfo\nscope: source.cpuinfo\n\ncontexts:\n  main:\n    - match: '^([^:]+)\\w*:\\w*(.*)$'\n      captures:\n        1: keyword.other.cpuinfo-key\n        2: string.other.cpuinfo-value\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/Crystal.sublime-syntax",
    "content": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: Crystal\ncomment: |\n  TODO: unresolved issues\n\n      text:\n      \"p << end\n      print me!\n      end\"\n      symptoms:\n      not recognized as a heredoc\n      solution:\n      there is no way to distinguish perfectly between the << operator and the start\n      of a heredoc. Currently, we require assignment to recognize a heredoc. More\n      refinement is possible.\n      • Heredocs with indented terminators (<<-) are always distinguishable, however.\n      • Nested heredocs are not really supportable at present\n\n      text:\n      print <<-'THERE'\n      This is single quoted.\n      The above used #{Time.now}\n      THERE\n      symtoms:\n      From Programming Ruby p306; should be a non-interpolated heredoc.\n\n      text:\n      \"a\\332a\"\n      symptoms:\n      '\\332' is not recognized as slash3.. which should be octal 332.\n      solution:\n      plain regexp.. should be easy.\n\n      text:\n      val?(a):p(b)\n      val?'a':'b'\n      symptoms:\n      ':p' is recognized as a symbol.. its 2 things ':' and 'p'.\n      :'b' has same problem.\n      solution:\n      ternary operator rule, precedence stuff, symbol rule.\n      but also consider 'a.b?(:c)' ??\nfile_extensions:\n  - cr\nfirst_line_match: ^#!/.*\\bcrystal\nscope: source.crystal\ncontexts:\n  main:\n    - match: |-\n        (?x)\n          ^\n          \\s*\n          (abstract)?\n          \\s*\n          (class|struct|union)\n          \\s+\n          (\n            (\n              [.A-Z_:\\x{80}-\\x{10FFFF}][.\\w:\\x{80}-\\x{10FFFF}]*\n              (\\(([,\\s.a-zA-Z0-9_:\\x{80}-\\x{10FFFF}]+)\\))?\n              (\n                \\s*(<)\\s*\n                [.:A-Z\\x{80}-\\x{10FFFF}][.:\\w\\x{80}-\\x{10FFFF}]*\n                (\\(([.a-zA-Z0-9_:]+\\s,)\\))?\n              )?\n            )|(\n              (<<)\n              \\s*\n              [.A-Z0-9_:\\x{80}-\\x{10FFFF}]+\n            )\n          )\n      scope: meta.class.crystal\n      captures:\n        1: keyword.control.class.crystal\n        2: keyword.control.class.crystal\n        3: entity.name.type.class.crystal\n        5: punctuation.separator.crystal\n        6: support.class.other.type-param.crystal\n        7: entity.other.inherited-class.crystal\n        8: punctuation.separator.crystal\n        9: punctuation.separator.crystal\n        10: support.class.other.type-param.crystal\n        11: punctuation.definition.variable.crystal\n    - match: '^\\s*(module)\\s+(([A-Z\\x{80}-\\x{10FFFF}][\\w\\x{80}-\\x{10FFFF}]*(::))?([A-Z\\x{80}-\\x{10FFFF}][\\w\\x{80}-\\x{10FFFF}]*(::))?([A-Z\\x{80}-\\x{10FFFF}][\\w\\x{80}-\\x{10FFFF}]*(::))*[A-Z\\x{80}-\\x{10FFFF}][\\w\\x{80}-\\x{10FFFF}]*)'\n      scope: meta.module.crystal\n      captures:\n        1: keyword.control.module.crystal\n        2: entity.name.type.module.crystal\n        3: entity.other.inherited-class.module.first.crystal\n        4: punctuation.separator.inheritance.crystal\n        5: entity.other.inherited-class.module.second.crystal\n        6: punctuation.separator.inheritance.crystal\n        7: entity.other.inherited-class.module.third.crystal\n        8: punctuation.separator.inheritance.crystal\n    - match: '^\\s*(lib)\\s+(([A-Z]\\w*(::))?([A-Z]\\w*(::))?([A-Z]\\w*(::))*[A-Z]\\w*)'\n      scope: meta.lib.crystal\n      captures:\n        1: keyword.control.lib.crystal\n        2: entity.name.type.lib.crystal\n        3: entity.other.inherited-class.lib.first.crystal\n        4: punctuation.separator.inheritance.crystal\n        5: entity.other.inherited-class.lib.second.crystal\n        6: punctuation.separator.inheritance.crystal\n        7: entity.other.inherited-class.lib.third.crystal\n        8: punctuation.separator.inheritance.crystal\n    - match: (?<!\\.)\\belse(\\s)+if\\b\n      comment: else if is a common mistake carried over from other languages. it works if you put in a second end, but it’s never what you want.\n      scope: invalid.deprecated.crystal\n    - match: '(?<!\\.)\\b(BEGIN|alias|as|begin|case|select|abstract|class|END|ensure|for|fun|if|ifdef|in|lib|module|of|out|private|protected|rescue|struct|with|union|enum|macro|then|unless|until|while)\\b(?![?!])|(?<!\\.)\\btype\\b\\s*(?=[A-Z])'\n      comment: everything being a reserved word, not a value and needing a 'end' is a..\n      scope: keyword.control.primary.crystal\n    - match: '(?<!\\.)\\b(when|else|elsif)\\b(?![?!])'\n      comment: everything being a reserved word, not a value and needing a 'end' is a..\n      scope: keyword.control.secondary.crystal\n    - match: '(?<!\\.)\\b(end)\\b(?![?!])'\n      comment: Give the end keyword an additional scope\n      scope: keyword.control.secondary.end.crystal\n    - match: (?<!\\.)\\bdo\\b\\s*\n      comment: contextual smart pair support for block parameters\n      scope: keyword.control.start-block.crystal\n    - match: '(?<=\\{)(\\s+)'\n      comment: contextual smart pair support\n      scope: meta.syntax.crystal.start-block\n    - match: (?<!\\.)\\b(and|not|or)\\b\n      comment: as above, just doesn't need a 'end' and does a logic operation\n      scope: keyword.operator.logical.crystal\n    - match: '(?<!\\.)\\b(alias|alias_method|break|next|pointerof|typeof|sizeof|instance_sizeof|return|super|yield|uninitialized|forall)\\b(?![?!])'\n      comment: just as above but being not a logical operation\n      scope: keyword.control.pseudo-method.crystal\n    - match: '\\b(nil|true|false)\\b(?![?!])'\n      scope: constant.language.crystal\n    - match: '\\b(__(DIR|FILE|LINE|END_LINE)__|self)\\b(?![?!])|self[?]'\n      scope: variable.language.crystal\n    - match: '\\b(initialize|new|loop|include|extend|raise|getter|setter|property|class_getter|class_setter|class_property|describe|context|it|with|delegate|def_hash|def_equals|def_equals_and_hash|forward_missing_to|record|assert_responds_to|spawn|annotation|verbatim)\\b[!?]?'\n      comment: everything being a method but having a special function is a..\n      scope: keyword.control.special-method.crystal\n    - match: \\b(require)\\b\n      captures:\n        1: keyword.control.special-method.crystal\n      push:\n        - meta_scope: meta.require.crystal\n        - match: $|(?=#)\n          captures:\n            1: keyword.control.special-method.crystal\n          pop: true\n        - include: main\n    - match: '(@)[a-zA-Z_\\x{80}-\\x{10FFFF}][\\w\\x{80}-\\x{10FFFF}]*[?!=]?'\n      scope: variable.other.readwrite.instance.crystal\n      captures:\n        1: punctuation.definition.variable.crystal\n    - match: '(@@)[a-zA-Z_\\x{80}-\\x{10FFFF}][\\w\\x{80}-\\x{10FFFF}]*[?!=]?'\n      scope: variable.other.readwrite.class.crystal\n      captures:\n        1: punctuation.definition.variable.crystal\n    - match: '(\\$)[a-zA-Z_]\\w*'\n      scope: variable.other.readwrite.global.crystal\n      captures:\n        1: punctuation.definition.variable.crystal\n    - match: '(\\$)(!|@|&|`|''|\\+|\\d+|~|=|/|\\\\|,|;|\\.|<|>|_|\\*|\\$|\\?|:|\"|-[0adFiIlpv])'\n      scope: variable.other.readwrite.global.pre-defined.crystal\n      captures:\n        1: punctuation.definition.variable.crystal\n    - match: '\\b(ENV)\\['\n      captures:\n        1: variable.other.constant.crystal\n      push:\n        - meta_scope: meta.environment-variable.crystal\n        - match: '\\]'\n          pop: true\n        - include: main\n    - match: '\\b[A-Z\\x{80}-\\x{10FFFF}][\\w\\x{80}-\\x{10FFFF}]*'\n      scope: support.class.crystal\n    - match: '\\b[A-Z\\x{80}-\\x{10FFFF}][\\w\\x{80}-\\x{10FFFF}]*\\b'\n      scope: variable.other.constant.crystal\n    - match: |-\n        (?x)\n         (?=def\\b)                                                      # an optimization to help Oniguruma fail fast\n         (?<=^|\\s)(def)\\s+                                              # the def keyword\n         ( (?>[a-zA-Z_\\x{80}-\\x{10FFFF}][\\x{80}-\\x{10FFFF}\\w]*(?>\\.|::))?                                   # a method name prefix\n           (?>[a-zA-Z_\\x{80}-\\x{10FFFF}][\\x{80}-\\x{10FFFF}\\w]*(?>[?!]|=(?!>))?                              # the method name\n           |===?|>[>=]?|<=>|<[<=]?|[%&`/\\|]|\\*\\*?|=?~|[-+]@?|\\[\\](?:=|\\?)?) )  # …or an operator method\n         \\s*(\\()                                                        # the openning parenthesis for arguments\n      comment: the method pattern comes from the symbol pattern, see there for a explaination\n      captures:\n        1: keyword.control.def.crystal\n        2: entity.name.function.crystal\n        3: punctuation.definition.parameters.crystal\n      push:\n        - meta_scope: meta.function.method.with-arguments.crystal\n        - meta_content_scope: variable.parameter.function.crystal\n        - match: \\)\n          captures:\n            0: punctuation.definition.parameters.crystal\n          pop: true\n        - include: main\n    - match: |-\n        (?x)\n         (?=def\\b)                                                      # an optimization to help Oniguruma fail fast\n         (?<=^|\\s)(def)\\s+                                              # the def keyword\n         ( (?>[a-zA-Z_\\x{80}-\\x{10FFFF}][\\w\\x{80}-\\x{10FFFF}]*(?>\\.|::))?                                   # a method name prefix\n           (?>[a-zA-Z_\\x{80}-\\x{10FFFF}][\\w\\x{80}-\\x{10FFFF}]*(?>[?!]|=(?!>))?                              # the method name\n           |===?|>[>=]?|<=>|<[<=]?|[%&`/\\|]|\\*\\*?|=?~|[-+]@?|\\[\\](?:=|\\?)?) )  # …or an operator method\n         [ \\t]                                                          # the space separating the arguments\n         (?=[ \\t]*[^\\s#;])                                              # make sure arguments and not a comment follow\n      comment: same as the previous rule, but without parentheses around the arguments\n      captures:\n        1: keyword.control.def.crystal\n        2: entity.name.function.crystal\n      push:\n        - meta_scope: meta.function.method.with-arguments.crystal\n        - meta_content_scope: variable.parameter.function.crystal\n        - match: $\n          pop: true\n        - include: main\n    - match: |-\n        (?x)\n         (?=def\\b)                                                           # an optimization to help Oniguruma fail fast\n         (?<=^|\\s)(def)\\b                                                    # the def keyword\n         ( \\s+                                                               # an optional group of whitespace followed by…\n           ( (?>[a-zA-Z_\\x{80}-\\x{10FFFF}][\\w\\x{80}-\\x{10FFFF}]*(?>\\.|::))?                                      # a method name prefix\n             (?>[a-zA-Z_\\x{80}-\\x{10FFFF}][\\w\\x{80}-\\x{10FFFF}]*(?>[?!]|=(?!>))?                                 # the method name\n             |===?|>[>=]?|<=>|<[<=]?|[%&`/\\|]|\\*\\*?|=?~|[-+]@?|\\[\\](?:=|\\?)?) ) )?  # …or an operator method\n      comment: the optional name is just to catch the def also without a method-name\n      scope: meta.function.method.without-arguments.crystal\n      captures:\n        1: keyword.control.def.crystal\n        3: entity.name.function.crystal\n    - match: '\\b(0[xX]\\h(?>_?\\h)*|\\d(?>_?\\d)*(\\.(?![^[:space:][:digit:]])(?>_?\\d)*)?([eE][-+]?\\d(?>_?\\d)*)?|0[bB][01]+|0o[0-7]+)(_?(u8|u16|u32|u64|i8|i16|i32|i64|f32|f64))?\\b'\n      scope: constant.numeric.crystal\n    - match: \":'\"\n      captures:\n        0: punctuation.definition.constant.crystal\n      push:\n        - meta_scope: constant.other.symbol.single-quoted.crystal\n        - match: \"'\"\n          captures:\n            0: punctuation.definition.constant.crystal\n          pop: true\n        - match: '\\\\[''\\\\]'\n          scope: constant.character.escape.crystal\n    - match: ':\"'\n      captures:\n        0: punctuation.definition.constant.crystal\n      push:\n        - meta_scope: constant.other.symbol.double-quoted.crystal\n        - match: '\"'\n          captures:\n            0: punctuation.definition.constant.crystal\n          pop: true\n        - include: interpolated_crystal\n        - include: escaped_char\n    - match: /=\n      comment: Needs higher precidence than regular expressions.\n      scope: keyword.operator.assignment.augmented.crystal\n    - match: \"'\"\n      comment: single quoted string (does not allow interpolation)\n      captures:\n        0: punctuation.definition.string.begin.crystal\n      push:\n        - meta_scope: string.quoted.single.crystal\n        - match: \"'\"\n          captures:\n            0: punctuation.definition.string.end.crystal\n          pop: true\n        - match: \\\\'|\\\\\\\\\n          scope: constant.character.escape.crystal\n    - match: '\"'\n      comment: double quoted string (allows for interpolation)\n      captures:\n        0: punctuation.definition.string.begin.crystal\n      push:\n        - meta_scope: string.quoted.double.crystal\n        - match: '\"'\n          captures:\n            0: punctuation.definition.string.end.crystal\n          pop: true\n        - include: interpolated_crystal\n        - include: escaped_char\n    - match: \"`\"\n      comment: execute string (allows for interpolation)\n      captures:\n        0: punctuation.definition.string.begin.crystal\n      push:\n        - meta_scope: string.interpolated.crystal\n        - match: \"`\"\n          captures:\n            0: punctuation.definition.string.end.crystal\n          pop: true\n        - include: interpolated_crystal\n        - include: escaped_char\n    - match: '%x\\{'\n      comment: execute string (allow for interpolation)\n      captures:\n        0: punctuation.definition.string.begin.crystal\n      push:\n        - meta_scope: string.interpolated.crystal\n        - match: '\\}'\n          captures:\n            0: punctuation.definition.string.end.crystal\n          pop: true\n        - include: interpolated_crystal\n        - include: escaped_char\n        - include: nest_curly_i\n    - match: '%x\\['\n      comment: execute string (allow for interpolation)\n      captures:\n        0: punctuation.definition.string.begin.crystal\n      push:\n        - meta_scope: string.interpolated.crystal\n        - match: '\\]'\n          captures:\n            0: punctuation.definition.string.end.crystal\n          pop: true\n        - include: interpolated_crystal\n        - include: escaped_char\n        - include: nest_brackets_i\n    - match: '%x\\<'\n      comment: execute string (allow for interpolation)\n      captures:\n        0: punctuation.definition.string.begin.crystal\n      push:\n        - meta_scope: string.interpolated.crystal\n        - match: \\>\n          captures:\n            0: punctuation.definition.string.end.crystal\n          pop: true\n        - include: interpolated_crystal\n        - include: escaped_char\n        - include: nest_ltgt_i\n    - match: '%x\\('\n      comment: execute string (allow for interpolation)\n      captures:\n        0: punctuation.definition.string.begin.crystal\n      push:\n        - meta_scope: string.interpolated.crystal\n        - match: \\)\n          captures:\n            0: punctuation.definition.string.end.crystal\n          pop: true\n        - include: interpolated_crystal\n        - include: escaped_char\n        - include: nest_parens_i\n    - match: '%x([^\\w])'\n      comment: execute string (allow for interpolation)\n      captures:\n        0: punctuation.definition.string.begin.crystal\n      push:\n        - meta_scope: string.interpolated.crystal\n        - match: \\1\n          captures:\n            0: punctuation.definition.string.end.crystal\n          pop: true\n        - include: interpolated_crystal\n        - include: escaped_char\n    - match: |-\n        (?x)\n           (?:\n             ^                      # beginning of line\n           | (?<=                   # or look-behind on:\n               [=>~(?:\\[,|&;]\n             | [\\s;]if\\s      # keywords\n             | [\\s;]elsif\\s\n             | [\\s;]while\\s\n             | [\\s;]unless\\s\n             | [\\s;]when\\s\n             | [\\s;]assert_match\\s\n             | [\\s;]or\\s      # boolean opperators\n             | [\\s;]and\\s\n             | [\\s;]not\\s\n             | [\\s.]index\\s     # methods\n             | [\\s.]scan\\s\n             | [\\s.]sub\\s\n             | [\\s.]sub!\\s\n             | [\\s.]gsub\\s\n             | [\\s.]gsub!\\s\n             | [\\s.]match\\s\n             )\n           | (?<=                  # or a look-behind with line anchor:\n                ^when\\s            # duplication necessary due to limits of regex\n              | ^if\\s\n              | ^elsif\\s\n              | ^while\\s\n              | ^unless\\s\n              )\n           )\n           \\s*((/))(?![*+{}?])\n      comment: |\n        regular expressions (normal)\n                    we only start a regexp if the character before it (excluding whitespace)\n                    is what we think is before a regexp\n      captures:\n        1: string.regexp.classic.crystal\n        2: punctuation.definition.string.crystal\n      push:\n        - meta_content_scope: string.regexp.classic.crystal\n        - match: \"((/[eimnosux]*))\"\n          captures:\n            1: string.regexp.classic.crystal\n            2: punctuation.definition.string.crystal\n          pop: true\n        - include: regex_sub\n    - match: '%r\\{'\n      comment: regular expressions (literal)\n      captures:\n        0: punctuation.definition.string.begin.crystal\n      push:\n        - meta_scope: string.regexp.mod-r.crystal\n        - match: '\\}[eimnosux]*'\n          captures:\n            0: punctuation.definition.string.end.crystal\n          pop: true\n        - include: regex_sub\n        - include: nest_curly_r\n    - match: '%r\\['\n      comment: regular expressions (literal)\n      captures:\n        0: punctuation.definition.string.begin.crystal\n      push:\n        - meta_scope: string.regexp.mod-r.crystal\n        - match: '\\][eimnosux]*'\n          captures:\n            0: punctuation.definition.string.end.crystal\n          pop: true\n        - include: regex_sub\n        - include: nest_brackets_r\n    - match: '%r\\('\n      comment: regular expressions (literal)\n      captures:\n        0: punctuation.definition.string.begin.crystal\n      push:\n        - meta_scope: string.regexp.mod-r.crystal\n        - match: '\\)[eimnosux]*'\n          captures:\n            0: punctuation.definition.string.end.crystal\n          pop: true\n        - include: regex_sub\n        - include: nest_parens_r\n    - match: '%r\\<'\n      comment: regular expressions (literal)\n      captures:\n        0: punctuation.definition.string.begin.crystal\n      push:\n        - meta_scope: string.regexp.mod-r.crystal\n        - match: '\\>[eimnosux]*'\n          captures:\n            0: punctuation.definition.string.end.crystal\n          pop: true\n        - include: regex_sub\n        - include: nest_ltgt_r\n    - match: '%r([^\\w])'\n      comment: regular expressions (literal)\n      captures:\n        0: punctuation.definition.string.begin.crystal\n      push:\n        - meta_scope: string.regexp.mod-r.crystal\n        - match: '\\1[eimnosux]*'\n          captures:\n            0: punctuation.definition.string.end.crystal\n          pop: true\n        - include: regex_sub\n    - match: '%[QWSR]?\\('\n      comment: literal capable of interpolation ()\n      captures:\n        0: punctuation.definition.string.begin.crystal\n      push:\n        - meta_scope: string.quoted.other.literal.upper.crystal\n        - match: \\)\n          captures:\n            0: punctuation.definition.string.end.crystal\n          pop: true\n        - include: interpolated_crystal\n        - include: escaped_char\n        - include: nest_parens_i\n    - match: '%[QWSR]?\\['\n      comment: \"literal capable of interpolation []\"\n      captures:\n        0: punctuation.definition.string.begin.crystal\n      push:\n        - meta_scope: string.quoted.other.literal.upper.crystal\n        - match: '\\]'\n          captures:\n            0: punctuation.definition.string.end.crystal\n          pop: true\n        - include: interpolated_crystal\n        - include: escaped_char\n        - include: nest_brackets_i\n    - match: '%[QWSR]?\\<'\n      comment: literal capable of interpolation <>\n      captures:\n        0: punctuation.definition.string.begin.crystal\n      push:\n        - meta_scope: string.quoted.other.literal.upper.crystal\n        - match: \\>\n          captures:\n            0: punctuation.definition.string.end.crystal\n          pop: true\n        - include: interpolated_crystal\n        - include: escaped_char\n        - include: nest_ltgt_i\n    - match: '%[QWSR]?\\{'\n      comment: \"literal capable of interpolation -- {}\"\n      captures:\n        0: punctuation.definition.string.begin.crystal\n      push:\n        - meta_scope: string.quoted.double.crystal.mod\n        - match: '\\}'\n          captures:\n            0: punctuation.definition.string.end.crystal\n          pop: true\n        - include: interpolated_crystal\n        - include: escaped_char\n        - include: nest_curly_i\n    - match: '%[QWSR]([^\\w])'\n      comment: literal capable of interpolation -- wildcard\n      captures:\n        0: punctuation.definition.string.begin.crystal\n      push:\n        - meta_scope: string.quoted.other.literal.upper.crystal\n        - match: \\1\n          captures:\n            0: punctuation.definition.string.end.crystal\n          pop: true\n        - include: interpolated_crystal\n        - include: escaped_char\n    - match: '%[qws]\\('\n      comment: literal incapable of interpolation -- ()\n      captures:\n        0: punctuation.definition.string.begin.crystal\n      push:\n        - meta_scope: string.quoted.other.literal.lower.crystal\n        - match: \\)\n          captures:\n            0: punctuation.definition.string.end.crystal\n          pop: true\n        - match: \\\\\\)|\\\\\\\\\n          scope: constant.character.escape.crystal\n        - include: nest_parens\n    - match: '%[qws]\\<'\n      comment: literal incapable of interpolation -- <>\n      captures:\n        0: punctuation.definition.string.begin.crystal\n      push:\n        - meta_scope: string.quoted.other.literal.lower.crystal\n        - match: \\>\n          captures:\n            0: punctuation.definition.string.end.crystal\n          pop: true\n        - match: \\\\\\>|\\\\\\\\\n          scope: constant.character.escape.crystal\n        - include: nest_ltgt\n    - match: '%[qws]\\['\n      comment: \"literal incapable of interpolation -- []\"\n      captures:\n        0: punctuation.definition.string.begin.crystal\n      push:\n        - meta_scope: string.quoted.other.literal.lower.crystal\n        - match: '\\]'\n          captures:\n            0: punctuation.definition.string.end.crystal\n          pop: true\n        - match: '\\\\\\]|\\\\\\\\'\n          scope: constant.character.escape.crystal\n        - include: nest_brackets\n    - match: '%[qws]\\{'\n      comment: \"literal incapable of interpolation -- {}\"\n      captures:\n        0: punctuation.definition.string.begin.crystal\n      push:\n        - meta_scope: string.quoted.other.literal.lower.crystal\n        - match: '\\}'\n          captures:\n            0: punctuation.definition.string.end.crystal\n          pop: true\n        - match: '\\\\\\}|\\\\\\\\'\n          scope: constant.character.escape.crystal\n        - include: nest_curly\n    - match: '%[qws]([^\\w])'\n      comment: literal incapable of interpolation -- wildcard\n      captures:\n        0: punctuation.definition.string.begin.crystal\n      push:\n        - meta_scope: string.quoted.other.literal.lower.crystal\n        - match: \\1\n          captures:\n            0: punctuation.definition.string.end.crystal\n          pop: true\n        - match: \\\\.\n          comment: Cant be named because its not neccesarily an escape.\n    - match: '(?<!:)(:)(?>[a-zA-Z_\\x{80}-\\x{10FFFF}][\\w\\x{80}-\\x{10FFFF}]*(?>[?!]|=(?![>=]))?|===?|>[>=]?|<[<=]?|<=>|[%&`/\\|]|\\*\\*?|=?~|[-+]@?|\\[\\](?:=|\\?)?|@@?[a-zA-Z_\\x{80}-\\x{10FFFF}][\\w\\x{80}-\\x{10FFFF}]*|!=?(?![?!]))'\n      comment: symbols\n      scope: constant.other.symbol.crystal\n      captures:\n        1: punctuation.definition.constant.crystal\n    - match: '(?>[a-zA-Z_\\x{80}-\\x{10FFFF}][\\w\\x{80}-\\x{10FFFF}]*(?>[?!])?)(:)(?!:)'\n      comment: symbols\n      scope: constant.other.symbol.crystal.19syntax\n      captures:\n        1: punctuation.definition.constant.crystal\n    - match: '(?:^[ \\t]+)?(#).*$\\n?'\n      scope: comment.line.number-sign.crystal\n      captures:\n        1: punctuation.definition.comment.crystal\n    - match: ^__END__\\n\n      comment: __END__ marker\n      captures:\n        0: string.unquoted.program-block.crystal\n      push:\n        - meta_content_scope: text.plain\n        - match: (?=not)impossible\n          captures:\n            0: string.unquoted.program-block.crystal\n          pop: true\n        - match: (?=<?xml|<(?i:html\\b)|!DOCTYPE (?i:html\\b))\n          push:\n            - meta_scope: text.html.embedded.crystal\n            - match: (?=not)impossible\n              pop: true\n            - include: scope:text.html.basic\n    - match: '(?><<-(\"?)((?:[_\\w]+_|)HTML)\\b\\1)'\n      comment: heredoc with embedded HTML and indented terminator\n      captures:\n        0: punctuation.definition.string.begin.crystal\n      push:\n        - meta_scope: string.unquoted.embedded.html.crystal\n        - meta_content_scope: text.html.embedded.crystal\n        - match: \\s*\\2$\n          captures:\n            0: punctuation.definition.string.end.crystal\n          pop: true\n        - include: heredoc\n        - include: scope:text.html.basic\n        - include: interpolated_crystal\n        - include: escaped_char\n    - match: '(?><<-(\"?)((?:[_\\w]+_|)SQL)\\b\\1)'\n      comment: heredoc with embedded SQL and indented terminator\n      captures:\n        0: punctuation.definition.string.begin.crystal\n      push:\n        - meta_scope: string.unquoted.embedded.sql.crystal\n        - meta_content_scope: text.sql.embedded.crystal\n        - match: \\s*\\2$\n          captures:\n            0: punctuation.definition.string.end.crystal\n          pop: true\n        - include: heredoc\n        - include: scope:source.sql\n        - include: interpolated_crystal\n        - include: escaped_char\n    - match: '(?><<-(\"?)((?:[_\\w]+_|)CSS)\\b\\1)'\n      comment: heredoc with embedded css and intented terminator\n      captures:\n        0: punctuation.definition.string.begin.crystal\n      push:\n        - meta_scope: string.unquoted.embedded.css.crystal\n        - meta_content_scope: text.css.embedded.crystal\n        - match: \\s*\\2$\n          captures:\n            0: punctuation.definition.string.end.crystal\n          pop: true\n        - include: heredoc\n        - include: scope:source.css\n        - include: interpolated_crystal\n        - include: escaped_char\n    - match: '(?><<-(\"?)((?:[_\\w]+_|)CPP)\\b\\1)'\n      comment: heredoc with embedded c++ and intented terminator\n      captures:\n        0: punctuation.definition.string.begin.crystal\n      push:\n        - meta_scope: string.unquoted.embedded.cplusplus.crystal\n        - meta_content_scope: text.c++.embedded.crystal\n        - match: \\s*\\2$\n          captures:\n            0: punctuation.definition.string.end.crystal\n          pop: true\n        - include: heredoc\n        - include: scope:source.c++\n        - include: interpolated_crystal\n        - include: escaped_char\n    - match: '(?><<-(\"?)((?:[_\\w]+_|)C)\\b\\1)'\n      comment: heredoc with embedded c++ and intented terminator\n      captures:\n        0: punctuation.definition.string.begin.crystal\n      push:\n        - meta_scope: string.unquoted.embedded.c.crystal\n        - meta_content_scope: text.c.embedded.crystal\n        - match: \\s*\\2$\n          captures:\n            0: punctuation.definition.string.end.crystal\n          pop: true\n        - include: heredoc\n        - include: scope:source.c\n        - include: interpolated_crystal\n        - include: escaped_char\n    - match: '(?><<-(\"?)((?:[_\\w]+_|)(?:JS|JAVASCRIPT))\\b\\1)'\n      comment: heredoc with embedded javascript and intented terminator\n      captures:\n        0: punctuation.definition.string.begin.crystal\n      push:\n        - meta_scope: string.unquoted.embedded.js.crystal\n        - meta_content_scope: text.js.embedded.crystal\n        - match: \\s*\\2$\n          captures:\n            0: punctuation.definition.string.end.crystal\n          pop: true\n        - include: heredoc\n        - include: scope:text.html.basic\n        - include: scope:source.js\n        - include: interpolated_crystal\n        - include: escaped_char\n    - match: '(?><<-(\"?)((?:[_\\w]+_|)JQUERY)\\b\\1)'\n      comment: heredoc with embedded javascript and intented terminator\n      captures:\n        0: punctuation.definition.string.begin.crystal\n      push:\n        - meta_scope: string.unquoted.embedded.js.crystal\n        - meta_content_scope: text.js.embedded.crystal\n        - match: \\s*\\2$\n          captures:\n            0: punctuation.definition.string.end.crystal\n          pop: true\n        - include: heredoc\n        - include: scope:source.js\n        - include: interpolated_crystal\n        - include: escaped_char\n    - match: '(?><<-(\"?)((?:[_\\w]+_|)(?:SH|SHELL))\\b\\1)'\n      comment: heredoc with embedded shell and intented terminator\n      captures:\n        0: punctuation.definition.string.begin.crystal\n      push:\n        - meta_scope: string.unquoted.embedded.shell.crystal\n        - meta_content_scope: text.shell.embedded.crystal\n        - match: \\s*\\2$\n          captures:\n            0: punctuation.definition.string.end.crystal\n          pop: true\n        - include: heredoc\n        - include: scope:source.shell\n        - include: interpolated_crystal\n        - include: escaped_char\n    - match: '(?><<-(\"?)((?:[_\\w]+_|)RUBY)\\b\\1)'\n      comment: heredoc with embedded crystal and intented terminator\n      captures:\n        0: punctuation.definition.string.begin.crystal\n      push:\n        - meta_scope: string.unquoted.embedded.crystal.crystal\n        - meta_content_scope: text.crystal.embedded.crystal\n        - match: \\s*\\2$\n          captures:\n            0: punctuation.definition.string.end.crystal\n          pop: true\n        - include: heredoc\n        - include: scope:source.crystal\n        - include: interpolated_crystal\n        - include: escaped_char\n    - match: (?>\\=\\s*<<(\\w+))\n      captures:\n        0: punctuation.definition.string.begin.crystal\n      push:\n        - meta_scope: string.unquoted.heredoc.crystal\n        - match: ^\\1$\n          captures:\n            0: punctuation.definition.string.end.crystal\n          pop: true\n        - include: heredoc\n        - include: interpolated_crystal\n        - include: escaped_char\n    - match: (?><<-(\\w+))\n      comment: heredoc with indented terminator\n      captures:\n        0: punctuation.definition.string.begin.crystal\n      push:\n        - meta_scope: string.unquoted.heredoc.crystal\n        - match: \\s*\\1$\n          captures:\n            0: punctuation.definition.string.end.crystal\n          pop: true\n        - include: heredoc\n        - include: interpolated_crystal\n        - include: escaped_char\n    - match: '(?<=\\{|do|\\{\\s|do\\s)(\\|)'\n      captures:\n        1: punctuation.separator.variable.crystal\n      push:\n        - match: (\\|)\n          captures:\n            1: punctuation.separator.variable.crystal\n          pop: true\n        - match: \"[_a-zA-Z][_a-zA-Z0-9]*\"\n          scope: variable.other.block.crystal\n        - match: \",\"\n          scope: punctuation.separator.variable.crystal\n    - match: \"=>\"\n      scope: punctuation.separator.key-value\n    - match: '<<=|%=|&=|\\*=|\\*\\*=|\\+=|\\-=|\\^=|\\|{1,2}=|<<'\n      scope: keyword.operator.assignment.augmented.crystal\n    - match: '<=>|<(?!<|=)|>(?!<|=|>)|<=|>=|===|==|=~|!=|!~|(?<=[ \\t])\\?'\n      scope: keyword.operator.comparison.crystal\n    - match: '(?<=[ \\t])!+|\\bnot\\b|&&|\\band\\b|\\|\\||\\bor\\b|\\^'\n      scope: keyword.operator.logical.crystal\n    - match: '(\\{\\%|\\%\\}|\\{\\{|\\}\\})'\n      scope: keyword.operator.macro.crystal\n    - match: (%|&|\\*\\*|\\*|\\+|\\-|/)\n      scope: keyword.operator.arithmetic.crystal\n    - match: \"=\"\n      scope: keyword.operator.assignment.crystal\n    - match: \\||~|>>\n      scope: keyword.operator.other.crystal\n    - match: \":\"\n      scope: punctuation.separator.other.crystal\n    - match: \\;\n      scope: punctuation.separator.statement.crystal\n    - match: \",\"\n      scope: punctuation.separator.object.crystal\n    - match: '\\.|::'\n      scope: punctuation.separator.method.crystal\n    - match: '\\{|\\}'\n      scope: punctuation.section.scope.crystal\n    - match: '\\[|\\]'\n      scope: punctuation.section.array.crystal\n    - match: \\(|\\)\n      scope: punctuation.section.function.crystal\n  escaped_char:\n    - match: '\\\\(?:[0-7]{1,3}|x[\\da-fA-F]{1,2}|.)'\n      scope: constant.character.escape.crystal\n  heredoc:\n    - match: ^<<-?\\w+\n      push:\n        - match: $\n          pop: true\n        - include: main\n  interpolated_crystal:\n    - match: '#\\{(\\})'\n      scope: source.crystal.embedded.source\n      captures:\n        0: punctuation.section.embedded.crystal\n        1: source.crystal.embedded.source.empty\n    - match: '#\\{'\n      captures:\n        0: punctuation.section.embedded.crystal\n      push:\n        - meta_scope: source.crystal.embedded.source\n        - match: '\\}'\n          captures:\n            0: punctuation.section.embedded.crystal\n          pop: true\n        - include: nest_curly_and_self\n        - include: main\n    - match: '(#@)[a-zA-Z_]\\w*'\n      scope: variable.other.readwrite.instance.crystal\n      captures:\n        1: punctuation.definition.variable.crystal\n    - match: '(#@@)[a-zA-Z_]\\w*'\n      scope: variable.other.readwrite.class.crystal\n      captures:\n        1: punctuation.definition.variable.crystal\n    - match: '(#\\$)[a-zA-Z_]\\w*'\n      scope: variable.other.readwrite.global.crystal\n      captures:\n        1: punctuation.definition.variable.crystal\n  nest_brackets:\n    - match: '\\['\n      captures:\n        0: punctuation.section.scope.crystal\n      push:\n        - match: '\\]'\n          captures:\n            0: punctuation.section.scope.crystal\n          pop: true\n        - include: nest_brackets\n  nest_brackets_i:\n    - match: '\\['\n      captures:\n        0: punctuation.section.scope.crystal\n      push:\n        - match: '\\]'\n          captures:\n            0: punctuation.section.scope.crystal\n          pop: true\n        - include: interpolated_crystal\n        - include: escaped_char\n        - include: nest_brackets_i\n  nest_brackets_r:\n    - match: '\\['\n      captures:\n        0: punctuation.section.scope.crystal\n      push:\n        - match: '\\]'\n          captures:\n            0: punctuation.section.scope.crystal\n          pop: true\n        - include: regex_sub\n        - include: nest_brackets_r\n  nest_curly:\n    - match: '\\{'\n      captures:\n        0: punctuation.section.scope.crystal\n      push:\n        - match: '\\}'\n          captures:\n            0: punctuation.section.scope.crystal\n          pop: true\n        - include: nest_curly\n  nest_curly_and_self:\n    - match: '\\{'\n      captures:\n        0: punctuation.section.scope.crystal\n      push:\n        - match: '\\}'\n          captures:\n            0: punctuation.section.scope.crystal\n          pop: true\n        - include: nest_curly_and_self\n    - include: main\n  nest_curly_i:\n    - match: '\\{'\n      captures:\n        0: punctuation.section.scope.crystal\n      push:\n        - match: '\\}'\n          captures:\n            0: punctuation.section.scope.crystal\n          pop: true\n        - include: interpolated_crystal\n        - include: escaped_char\n        - include: nest_curly_i\n  nest_curly_r:\n    - match: '\\{'\n      captures:\n        0: punctuation.section.scope.crystal\n      push:\n        - match: '\\}'\n          captures:\n            0: punctuation.section.scope.crystal\n          pop: true\n        - include: regex_sub\n        - include: nest_curly_r\n  nest_ltgt:\n    - match: \\<\n      captures:\n        0: punctuation.section.scope.crystal\n      push:\n        - match: \\>\n          captures:\n            0: punctuation.section.scope.crystal\n          pop: true\n        - include: nest_ltgt\n  nest_ltgt_i:\n    - match: \\<\n      captures:\n        0: punctuation.section.scope.crystal\n      push:\n        - match: \\>\n          captures:\n            0: punctuation.section.scope.crystal\n          pop: true\n        - include: interpolated_crystal\n        - include: escaped_char\n        - include: nest_ltgt_i\n  nest_ltgt_r:\n    - match: \\<\n      captures:\n        0: punctuation.section.scope.crystal\n      push:\n        - match: \\>\n          captures:\n            0: punctuation.section.scope.crystal\n          pop: true\n        - include: regex_sub\n        - include: nest_ltgt_r\n  nest_parens:\n    - match: \\(\n      captures:\n        0: punctuation.section.scope.crystal\n      push:\n        - match: \\)\n          captures:\n            0: punctuation.section.scope.crystal\n          pop: true\n        - include: nest_parens\n  nest_parens_i:\n    - match: \\(\n      captures:\n        0: punctuation.section.scope.crystal\n      push:\n        - match: \\)\n          captures:\n            0: punctuation.section.scope.crystal\n          pop: true\n        - include: interpolated_crystal\n        - include: escaped_char\n        - include: nest_parens_i\n  nest_parens_r:\n    - match: \\(\n      captures:\n        0: punctuation.section.scope.crystal\n      push:\n        - match: \\)\n          captures:\n            0: punctuation.section.scope.crystal\n          pop: true\n        - include: regex_sub\n        - include: nest_parens_r\n  regex_sub:\n    - include: interpolated_crystal\n    - include: escaped_char\n    - match: '(\\{)\\d+(,\\d+)?(\\})'\n      scope: string.regexp.arbitrary-repitition.crystal\n      captures:\n        1: punctuation.definition.arbitrary-repitition.crystal\n        3: punctuation.definition.arbitrary-repitition.crystal\n    - match: '\\[(?:\\^?\\])?'\n      captures:\n        0: punctuation.definition.character-class.crystal\n      push:\n        - meta_scope: string.regexp.character-class.crystal\n        - match: '\\]'\n          captures:\n            0: punctuation.definition.character-class.crystal\n          pop: true\n        - include: escaped_char\n    - match: \\(\n      captures:\n        0: punctuation.definition.group.crystal\n      push:\n        - meta_scope: string.regexp.group.crystal\n        - match: \\)\n          captures:\n            0: punctuation.definition.group.crystal\n          pop: true\n        - include: regex_sub\n    - match: '(?<=^|\\s)(#)\\s[[a-zA-Z0-9,. \\t?!-][^\\x{00}-\\x{7F}]]*$'\n      comment: We are restrictive in what we allow to go after the comment character to avoid false positives, since the availability of comments depend on regexp flags.\n      scope: comment.line.number-sign.crystal\n      captures:\n        1: punctuation.definition.comment.crystal\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/Dart.sublime-syntax",
    "content": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/syntax.html\nname: Dart\nfile_extensions:\n  - dart\nscope: source.dart\ncontexts:\n  main:\n    - match: ^(#!.*)$\n      scope: meta.preprocessor.script.dart\n    - match: ^\\w*\\b(library|import|part of|part|export)\\b\n      captures:\n        0: keyword.other.import.dart\n      push:\n        - meta_scope: meta.declaration.dart\n        - match: ;\n          captures:\n            0: punctuation.terminator.dart\n          pop: true\n        - include: strings\n        - include: comments\n        - match: \\b(as|show|hide)\\b\n          scope: keyword.other.import.dart\n    - include: comments\n    - include: punctuation\n    - include: annotations\n    - include: keywords\n    - include: constants-and-special-vars\n    - include: strings\n  annotations:\n    - match: '@[a-zA-Z]+'\n      scope: storage.type.annotation.dart\n  comments:\n    - match: /\\*\\*/\n      scope: comment.block.empty.dart\n      captures:\n        0: punctuation.definition.comment.dart\n    - include: comments-doc-oldschool\n    - include: comments-doc\n    - include: comments-inline\n  comments-block:\n    - match: /\\*\n      push:\n        - meta_scope: comment.block.dart\n        - match: \\*/\n          pop: true\n        - include: comments-block\n  comments-doc:\n    - match: ///\n      push:\n        - meta_scope: comment.block.documentation.dart\n        - match: .*\n          pop: true\n        - include: dartdoc\n  comments-doc-oldschool:\n    - match: /\\*\\*\n      push:\n        - meta_scope: comment.block.documentation.dart\n        - match: \\*/\n          pop: true\n        - include: comments-doc-oldschool\n        - include: comments-block\n        - include: dartdoc\n  comments-inline:\n    - include: comments-block\n    - match: ((//).*)$\n      captures:\n        1: comment.line.double-slash.dart\n  constants-and-special-vars:\n    - match: (?<!\\$)\\b(true|false|null)\\b(?!\\$)\n      scope: constant.language.dart\n    - match: (?<!\\$)\\b(this|super)\\b(?!\\$)\n      scope: variable.language.dart\n    - match: '(?<!\\$)\\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\\.?[0-9]*)|(\\.[0-9]+))((e|E)(\\+|-)?[0-9]+)?)\\b(?!\\$)'\n      scope: constant.numeric.dart\n    - match: '(?<![a-zA-Z0-9_$])([_$]*[A-Z][a-zA-Z0-9_$]*|bool\\b|num\\b|int\\b|double\\b|dynamic\\b)'\n      scope: support.class.dart\n    - match: '([_$]*[a-z][a-zA-Z0-9_$]*)(<|\\(|\\s+=>)'\n      captures:\n        1: entity.name.function.dart\n  dartdoc:\n    - match: '(\\[.*?\\])'\n      captures:\n        0: variable.name.source.dart\n    - match: '^ {4,}(?![ \\*]).*'\n      captures:\n        0: variable.name.source.dart\n    - match: '```.*?$'\n      push:\n        - meta_content_scope: variable.other.source.dart\n        - match: '```'\n          pop: true\n    - match: (`.*?`)\n      captures:\n        0: variable.other.source.dart\n    - match: (`.*?`)\n      captures:\n        0: variable.other.source.dart\n    - match: (\\* ((    ).*))$\n      captures:\n        2: variable.other.source.dart\n    - match: (\\*    .*)$\n  keywords:\n    - match: (?<!\\$)\\bas\\b(?!\\$)\n      scope: keyword.cast.dart\n    - match: (?<!\\$)\\b(try|on|catch|finally|throw|rethrow)\\b(?!\\$)\n      scope: keyword.control.catch-exception.dart\n    - match: (?<!\\$)\\b(break|case|continue|default|do|else|for|if|in|return|switch|while)\\b(?!\\$)\n      scope: keyword.control.dart\n    - match: (?<!\\$)\\b(sync(\\*)?|async(\\*)?|await|yield(\\*)?)\\b(?!\\$)\n      scope: keyword.control.dart\n    - match: (?<!\\$)\\bassert\\b(?!\\$)\n      scope: keyword.control.dart\n    - match: (?<!\\$)\\b(new)\\b(?!\\$)\n      scope: keyword.control.new.dart\n    - match: (?<!\\$)\\b(abstract|class|enum|extends|external|factory|implements|get|mixin|native|operator|set|typedef|with|covariant)\\b(?!\\$)\n      scope: keyword.declaration.dart\n    - match: (?<!\\$)\\b(is\\!?)\\b(?!\\$)\n      scope: keyword.operator.dart\n    - match: '\\?|:'\n      scope: keyword.operator.ternary.dart\n    - match: (<<|>>>?|~|\\^|\\||&)\n      scope: keyword.operator.bitwise.dart\n    - match: ((&|\\^|\\||<<|>>>?)=)\n      scope: keyword.operator.assignment.bitwise.dart\n    - match: (=>)\n      scope: keyword.operator.closure.dart\n    - match: (==|!=|<=?|>=?)\n      scope: keyword.operator.comparison.dart\n    - match: '(([+*/%-]|\\~)=)'\n      scope: keyword.operator.assignment.arithmetic.dart\n    - match: (=)\n      scope: keyword.operator.assignment.dart\n    - match: (\\-\\-|\\+\\+)\n      scope: keyword.operator.increment-decrement.dart\n    - match: (\\-|\\+|\\*|\\/|\\~\\/|%)\n      scope: keyword.operator.arithmetic.dart\n    - match: (!|&&|\\|\\|)\n      scope: keyword.operator.logical.dart\n    - match: (?<!\\$)\\b(static|final|const)\\b(?!\\$)\n      scope: storage.modifier.dart\n    - match: (?<!\\$)\\b(?:void|var)\\b(?!\\$)\n      scope: storage.type.primitive.dart\n  punctuation:\n    - match: ','\n      scope: punctuation.comma.dart\n    - match: ;\n      scope: punctuation.terminator.dart\n    - match: \\.\n      scope: punctuation.dot.dart\n  string-interp:\n    - match: '\\$((\\w+)|\\{([^{}]+)\\})'\n      captures:\n        2: variable.parameter.dart\n        3: variable.parameter.dart\n    - match: \\\\.\n      scope: constant.character.escape.dart\n  strings:\n    - match: (?<!r)\"\"\"\n      push:\n        - meta_scope: string.interpolated.triple.double.dart\n        - match: '\"\"\"(?!\")'\n          pop: true\n        - include: string-interp\n    - match: (?<!r)'''\n      push:\n        - meta_scope: string.interpolated.triple.single.dart\n        - match: '''''''(?!'')'\n          pop: true\n        - include: string-interp\n    - match: r\"\"\"\n      push:\n        - meta_scope: string.quoted.triple.double.dart\n        - match: '\"\"\"(?!\")'\n          pop: true\n    - match: r'''\n      push:\n        - meta_scope: string.quoted.triple.single.dart\n        - match: '''''''(?!'')'\n          pop: true\n    - match: (?<!\\|r)\"\n      push:\n        - meta_scope: string.interpolated.double.dart\n        - match: '\"'\n          pop: true\n        - match: \\n\n          scope: invalid.string.newline\n        - include: string-interp\n    - match: r\"\n      push:\n        - meta_scope: string.quoted.double.dart\n        - match: '\"'\n          pop: true\n        - match: \\n\n          scope: invalid.string.newline\n    - match: (?<!\\|r)'\n      push:\n        - meta_scope: string.interpolated.single.dart\n        - match: \"'\"\n          pop: true\n        - match: \\n\n          scope: invalid.string.newline\n        - include: string-interp\n    - match: r'\n      push:\n        - meta_scope: string.quoted.single.dart\n        - match: \"'\"\n          pop: true\n        - match: \\n\n          scope: invalid.string.newline\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/DotENV.sublime-syntax",
    "content": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: DotENV\nfile_extensions:\n  - .env\n  - .env.dist\n  - .env.local\n  - .env.sample\n  - .env.example\n  - .env.template\n  - .env.test\n  - .env.test.local\n  - .env.testing\n  - .env.dev\n  - .env.development\n  - .env.development.local\n  - .env.prod\n  - .env.production\n  - .env.production.local\n  - .env.dusk.local\n  - .env.staging\n  - .env.default\n  - .env.defaults\n  - .envrc\n  - .flaskenv\n  - env\n  - env.example\n  - env.sample\n  - env.template\nscope: source.env\ncontexts:\n  main:\n    - match: (#).*$\\n?\n      comment: \"Comments - starts with #\"\n      scope: comment.line.number-sign.env\n      captures:\n        1: punctuation.definition.comment.env\n    - match: (\\\")\n      comment: Strings (double)\n      captures:\n        1: punctuation.definition.string.begin.env\n      push:\n        - meta_scope: string.quoted.double.env\n        - match: (\\\")\n          captures:\n            1: punctuation.definition.string.end\n          pop: true\n        - include: interpolation\n        - include: variable\n        - include: escape-characters\n    - match: (\\')\n      comment: Strings (single)\n      captures:\n        1: punctuation.definition.string.begin.env\n      push:\n        - meta_scope: string.quoted.single.env\n        - match: (\\')\n          captures:\n            1: punctuation.definition.string.end\n          pop: true\n    - match: '(?<=[\\w])\\s?='\n      comment: Assignment Operator\n      scope: keyword.operator.assignment.env\n    - match: '([\\w]+)(?=\\s?\\=)'\n      comment: Variable\n      scope: variable.other.env\n    - match: (?i)\\s?(export)\n      comment: Keywords\n      scope: keyword.other.env\n    - match: (?i)(?<=\\=)\\s?(true|false|null)\n      comment: Constants\n      scope: constant.language.env\n    - match: '\\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\\.?[0-9]*)|(\\.[0-9]+))((e|E)(\\+|-)?[0-9]+)?)\\b'\n      comment: Numeric\n      scope: constant.numeric.env\n  escape-characters:\n    - match: '\\\\[nrt\\\\\\$\\\"\\'']'\n      scope: constant.character.escape.env\n  interpolation:\n    - match: '(\\$\\{|\\{)'\n      comment: 'Template Syntax: \"foo ${bar} {$baz}\"'\n      captures:\n        1: string.interpolated.env keyword.other.template.begin.env\n      push:\n        - match: '(\\})'\n          captures:\n            1: string.interpolated.env keyword.other.template.end.env\n          pop: true\n        - match: '(?x)(\\$+)?([a-zA-Z_\\x{7f}-\\x{ff}][a-zA-Z0-9_\\x{7f}-\\x{ff}]*?\\b)'\n          captures:\n            1: punctuation.definition.variable.env variable.other.env\n            2: variable.other.env\n  variable:\n    - match: '(?x)(\\$+)([a-zA-Z_\\x{7f}-\\x{ff}][a-zA-Z0-9_\\x{7f}-\\x{ff}]*?\\b)'\n      captures:\n        1: punctuation.definition.variable.env variable.other.env\n        2: variable.other.env\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/Fstab.sublime-syntax",
    "content": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: fstab\nfile_extensions:\n  - fstab\n  - crypttab\n  - mtab\nscope: source.fstab\n\ncontexts:\n  main:\n    - include: comment\n    - match: '^'\n      push: fstab_device\n      comment: leading spaces\n\n  fstab_device:\n    - include: comment\n    - match: '\\s*([^=\\s]+=)([^\\s]+)\\s*'\n      comment: device by uuid or label\n      set: fstab_mountpoint\n      captures:\n        1: punctuation.accessor\n        2: keyword.other.device\n    - match: '\\s*(//|\\\\\\\\)([^\\s]+)\\s*'\n      comment: device by samba share\n      set: fstab_mountpoint\n      captures:\n        1: punctuation.accessor\n        2: keyword.other.device\n    - match: '\\s*([^\\s]+)(:)([^\\s]+)\\s*'\n      comment: device by server\n      set: fstab_mountpoint\n      captures:\n        1: keyword.other.device\n        2: punctuation.accessor\n        3: keyword.other.device\n    - match: '\\s*[^\\s/\\\\]+\\s*'\n      comment: device by dev name\n      set: fstab_mountpoint\n      scope: keyword.other.device\n    - match: '\\s*(/dev/)([^\\s]+)\\s*'\n      comment: device by dev path\n      set: fstab_mountpoint\n      captures: \n        1: punctuation.accessor\n        2: keyword.other.device\n    - match: '\\s*([^\\s/]*/)*([^\\s]+)\\s*'\n      comment: device by unknown path\n      set: fstab_mountpoint\n      captures:\n        1: punctuation.accessor\n        2: keyword.other.device\n    - include: clear\n\n  fstab_mountpoint:\n    - include: comment\n    - match: '\\s*/[^\\s]*\\s*'\n      comment: mount point\n      set: fstab_filesystem\n      scope: string.unquoted.mountpoint\n    - match: '\\s*[^\\s]+\\s*'\n      comment: mount point without leading slash (invalid)\n      set: fstab_filesystem\n      scope: invalid.illegal\n    - include: clear\n\n  fstab_filesystem:\n    - include: comment\n    - match: '\\s*[^\\s]+\\s*'\n      comment: filesystem type\n      set: fstab_options\n      scope: variable.parameter.filesystem\n    - include: clear\n\n  fstab_options:\n    - include: comment\n    - match: '([^\\s,=]+)(=)([^\\s,]+)'\n      comment: key-value option\n      captures:\n       1: entity.name.option\n       2: entity.other.separator\n       3: variable.parameter\n    - match: '[^\\s,]+'\n      comment: flag option\n      scope: entity.name.option\n    - match: ','\n      comment: option separator\n      scope: punctuation.separator\n    - match: '\\s+'\n      comment: next field\n      set: fstab_dump\n    - include: clear\n\n  fstab_dump:\n    - include: comment\n    - match: '\\s*[012]\\s*'\n      comment: dump field\n      scope: constant.numeric\n      set: fstab_pass\n    - match: '\\s*[^\\s]+\\s*'\n      comment: invalid dump field\n      scope: invalid.illegal\n      set: fstab_pass\n    - include: clear\n\n  fstab_pass:\n    - include: comment\n    - match: '\\s*[012]\\s*'\n      comment: pass field\n      scope: constant.numeric\n      set: expected_eol\n    - match: '\\s*[^\\s]+\\s*'\n      comment: invalid pass field\n      scope: invalid.illegal\n      set: expected_eol\n    - include: clear\n\n  expected_eol:\n    - include: comment\n    - include: clear\n    - match: '.*'\n      scope: invalid.illegal\n\n  comment:\n    - match: '\\s*#.*$'\n      comment: comment using the number sign\n      scope: comment.line\n\n  clear:\n    - match: '.*$'\n      comment: used for clearing the context\n      pop: true\n\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/Group.sublime-syntax",
    "content": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: group\nfile_extensions:\n  - group\nscope: source.group\n\ncontexts:\n  main:\n    - comment: name\n      match: ^[^:]+\n      scope: keyword\n\n    - comment: password\n      match: \":\"\n      push: password\n\n  password:\n    - comment: uid\n      match: \":\"\n      set: gid\n\n    - comment: shadowpassword\n      match: \"[^:]+\"\n      scope: invalid\n\n  gid:\n    - comment: gid\n      match: \":\"\n      set: users\n\n    - comment: number\n      match: \"[0-9]+\"\n      scope: constant.numeric\n\n  users:\n    - comment: newline\n      match: \"\\n\"\n      pop: true\n\n    - comment: directory\n      match: \"[^:\\n]+\"\n      scope: variable.parameter\n\n    - comment: separator\n      match: \",\"\n      scope: punctuation\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/HTML (Twig).sublime-syntax",
    "content": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: HTML (Twig)\nfile_extensions:\n  - twig\n  - html.twig\nscope: text.html.twig\ncontexts:\n  main:\n    - match: '(<)([a-zA-Z0-9:]++)(?=[^>]*></\\2>)'\n      captures:\n        1: punctuation.definition.tag.html\n        2: entity.name.tag.html\n      push:\n        - meta_scope: meta.tag.any.html\n        - match: (>(<)/)(\\2)(>)\n          captures:\n            1: punctuation.definition.tag.html\n            2: meta.scope.between-tag-pair.html\n            3: entity.name.tag.html\n            4: punctuation.definition.tag.html\n          pop: true\n        - include: tag-stuff\n    - match: (<\\?)(xml)\n      captures:\n        1: punctuation.definition.tag.html\n        2: entity.name.tag.xml.html\n      push:\n        - meta_scope: meta.tag.preprocessor.xml.html\n        - match: (\\?>)\n          captures:\n            1: punctuation.definition.tag.html\n            2: entity.name.tag.xml.html\n          pop: true\n        - include: tag-generic-attribute\n        - include: string-double-quoted\n        - include: string-single-quoted\n    - match: <!--\n      captures:\n        0: punctuation.definition.comment.html\n      push:\n        - meta_scope: comment.block.html\n        - match: '--\\s*>'\n          captures:\n            0: punctuation.definition.comment.html\n          pop: true\n        - match: \"--\"\n          scope: invalid.illegal.bad-comments-or-CDATA.html\n        - include: embedded-code\n    - match: <!\n      captures:\n        0: punctuation.definition.tag.html\n      push:\n        - meta_scope: meta.tag.sgml.html\n        - match: \">\"\n          captures:\n            0: punctuation.definition.tag.html\n          pop: true\n        - match: (?i:DOCTYPE)\n          captures:\n            1: entity.name.tag.doctype.html\n          push:\n            - meta_scope: meta.tag.sgml.doctype.html\n            - match: (?=>)\n              captures:\n                1: entity.name.tag.doctype.html\n              pop: true\n            - match: '\"[^\">]*\"'\n              scope: string.quoted.double.doctype.identifiers-and-DTDs.html\n        - match: '\\[CDATA\\['\n          push:\n            - meta_scope: constant.other.inline-data.html\n            - match: \"]](?=>)\"\n              pop: true\n        - match: (\\s*)(?!--|>)\\S(\\s*)\n          scope: invalid.illegal.bad-comments-or-CDATA.html\n    - include: embedded-code\n    - match: '(?:^\\s+)?(<)((?i:style))\\b(?![^>]*/>)'\n      captures:\n        1: punctuation.definition.tag.html\n        2: entity.name.tag.style.html\n        3: punctuation.definition.tag.html\n      push:\n        - meta_scope: source.css.embedded.html\n        - match: (</)((?i:style))(>)(?:\\s*\\n)?\n          captures:\n            1: punctuation.definition.tag.html\n            2: entity.name.tag.style.html\n            3: punctuation.definition.tag.html\n          pop: true\n        - include: tag-stuff\n        - match: (>)\n          captures:\n            1: punctuation.definition.tag.html\n          push:\n            - match: (?=</(?i:style))\n              pop: true\n            - include: embedded-code\n            - include: scope:source.css\n    - match: '(?:^\\s+)?(<)((?i:script))\\b(?![^>]*/>)'\n      captures:\n        1: punctuation.definition.tag.html\n        2: entity.name.tag.script.html\n      push:\n        - meta_scope: source.js.embedded.html\n        - match: (?<=</(script|SCRIPT))(>)(?:\\s*\\n)?\n          captures:\n            2: punctuation.definition.tag.html\n          pop: true\n        - include: tag-stuff\n        - match: (?<!</(?:script|SCRIPT))(>)\n          captures:\n            1: punctuation.definition.tag.html\n            2: entity.name.tag.script.html\n          push:\n            - match: (</)((?i:script))\n              captures:\n                1: punctuation.definition.tag.html\n                2: entity.name.tag.script.html\n              pop: true\n            - match: (//).*?((?=</script)|$\\n?)\n              scope: comment.line.double-slash.js\n              captures:\n                1: punctuation.definition.comment.js\n            - match: /\\*\n              captures:\n                0: punctuation.definition.comment.js\n              push:\n                - meta_scope: comment.block.js\n                - match: \\*/|(?=</script)\n                  captures:\n                    0: punctuation.definition.comment.js\n                  pop: true\n            - include: php\n            - include: twig-print-tag\n            - include: twig-statement-tag\n            - include: twig-comment-tag\n            - include: scope:source.js\n    - match: (</?)((?i:body|head|html)\\b)\n      captures:\n        1: punctuation.definition.tag.html\n        2: entity.name.tag.structure.any.html\n      push:\n        - meta_scope: meta.tag.structure.any.html\n        - match: (>)\n          captures:\n            1: punctuation.definition.tag.html\n            2: entity.name.tag.structure.any.html\n          pop: true\n        - include: tag-stuff\n    - match: (</?)((?i:address|blockquote|dd|div|dl|dt|fieldset|form|frame|frameset|h1|h2|h3|h4|h5|h6|iframe|noframes|object|ol|p|ul|applet|center|dir|hr|menu|pre)\\b)\n      captures:\n        1: punctuation.definition.tag.begin.html\n        2: entity.name.tag.block.any.html\n      push:\n        - meta_scope: meta.tag.block.any.html\n        - match: (>)\n          captures:\n            1: punctuation.definition.tag.end.html\n          pop: true\n        - include: tag-stuff\n    - match: (</?)((?i:a|abbr|acronym|area|b|base|basefont|bdo|big|br|button|caption|cite|code|col|colgroup|del|dfn|em|font|head|html|i|img|input|ins|isindex|kbd|label|legend|li|link|map|meta|noscript|optgroup|option|param|q|s|samp|script|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|title|tr|tt|u|var)\\b)\n      captures:\n        1: punctuation.definition.tag.begin.html\n        2: entity.name.tag.inline.any.html\n      push:\n        - meta_scope: meta.tag.inline.any.html\n        - match: \"((?: ?/)?>)\"\n          captures:\n            1: punctuation.definition.tag.end.html\n          pop: true\n        - include: tag-stuff\n    - match: \"(</?)([a-zA-Z0-9:]+)\"\n      captures:\n        1: punctuation.definition.tag.begin.html\n        2: entity.name.tag.other.html\n      push:\n        - meta_scope: meta.tag.other.html\n        - match: (>)\n          captures:\n            1: punctuation.definition.tag.end.html\n          pop: true\n        - include: tag-stuff\n    - include: entities\n    - match: <>\n      scope: invalid.illegal.incomplete.html\n    - match: <\n      scope: invalid.illegal.bad-angle-bracket.html\n    - include: twig-print-tag\n    - include: twig-statement-tag\n    - include: twig-comment-tag\n  embedded-code:\n    - include: ruby\n    - include: php\n    - include: twig-print-tag\n    - include: twig-statement-tag\n    - include: twig-comment-tag\n    - include: python\n  entities:\n    - match: \"(&)([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+)(;)\"\n      scope: constant.character.entity.html\n      captures:\n        1: punctuation.definition.entity.html\n        3: punctuation.definition.entity.html\n    - match: \"&\"\n      scope: invalid.illegal.bad-ampersand.html\n  php:\n    - match: (?=(^\\s*)?<\\?)\n      push:\n        - match: (?!(^\\s*)?<\\?)\n          pop: true\n        - include: scope:text.html.php\n  python:\n    - match: (?:^\\s*)<\\?python(?!.*\\?>)\n      push:\n        - meta_scope: source.python.embedded.html\n        - match: \\?>(?:\\s*$\\n)?\n          pop: true\n        - include: scope:source.python\n  ruby:\n    - match: \"<%+#\"\n      captures:\n        0: punctuation.definition.comment.erb\n      push:\n        - meta_scope: comment.block.erb\n        - match: \"%>\"\n          captures:\n            0: punctuation.definition.comment.erb\n          pop: true\n    - match: <%+(?!>)=?\n      captures:\n        0: punctuation.section.embedded.ruby\n      push:\n        - meta_scope: source.ruby.embedded.html\n        - match: \"-?%>\"\n          captures:\n            0: punctuation.section.embedded.ruby\n          pop: true\n        - match: (#).*?(?=-?%>)\n          scope: comment.line.number-sign.ruby\n          captures:\n            1: punctuation.definition.comment.ruby\n        - include: scope:source.ruby\n    - match: <\\?r(?!>)=?\n      captures:\n        0: punctuation.section.embedded.ruby.nitro\n      push:\n        - meta_scope: source.ruby.nitro.embedded.html\n        - match: '-?\\?>'\n          captures:\n            0: punctuation.section.embedded.ruby.nitro\n          pop: true\n        - match: (#).*?(?=-?\\?>)\n          scope: comment.line.number-sign.ruby.nitro\n          captures:\n            1: punctuation.definition.comment.ruby.nitro\n        - include: scope:source.ruby\n  string-double-quoted:\n    - match: '\"'\n      captures:\n        0: punctuation.definition.string.begin.html\n      push:\n        - meta_scope: string.quoted.double.html\n        - match: '\"'\n          captures:\n            0: punctuation.definition.string.end.html\n          pop: true\n        - include: embedded-code\n        - include: entities\n  string-single-quoted:\n    - match: \"'\"\n      captures:\n        0: punctuation.definition.string.begin.html\n      push:\n        - meta_scope: string.quoted.single.html\n        - match: \"'\"\n          captures:\n            0: punctuation.definition.string.end.html\n          pop: true\n        - include: embedded-code\n        - include: entities\n  tag-generic-attribute:\n    - match: '\\b([a-zA-Z\\-:]+)'\n      scope: entity.other.attribute-name.html\n  tag-id-attribute:\n    - match: \\b(id)\\b\\s*(=)\n      captures:\n        1: entity.other.attribute-name.id.html\n        2: punctuation.separator.key-value.html\n      push:\n        - meta_scope: meta.attribute-with-value.id.html\n        - match: (?<='|\")\n          captures:\n            1: entity.other.attribute-name.id.html\n            2: punctuation.separator.key-value.html\n          pop: true\n        - match: '\"'\n          captures:\n            0: punctuation.definition.string.begin.html\n          push:\n            - meta_scope: string.quoted.double.html\n            - meta_content_scope: meta.toc-list.id.html\n            - match: '\"'\n              captures:\n                0: punctuation.definition.string.end.html\n              pop: true\n            - include: embedded-code\n            - include: entities\n        - match: \"'\"\n          captures:\n            0: punctuation.definition.string.begin.html\n          push:\n            - meta_scope: string.quoted.single.html\n            - meta_content_scope: meta.toc-list.id.html\n            - match: \"'\"\n              captures:\n                0: punctuation.definition.string.end.html\n              pop: true\n            - include: embedded-code\n            - include: entities\n  tag-stuff:\n    - include: tag-id-attribute\n    - include: tag-generic-attribute\n    - include: string-double-quoted\n    - include: string-single-quoted\n    - include: embedded-code\n  twig-arrays:\n    - match: '(?<=[\\s\\(\\{\\[:,])\\['\n      captures:\n        0: punctuation.section.array.begin.twig\n      push:\n        - meta_scope: meta.array.twig\n        - match: '\\]'\n          captures:\n            0: punctuation.section.array.end.twig\n          pop: true\n        - include: twig-arrays\n        - include: twig-hashes\n        - include: twig-constants\n        - include: twig-strings\n        - include: twig-functions-warg\n        - include: twig-functions\n        - include: twig-macros\n        - include: twig-objects\n        - include: twig-properties\n        - include: twig-filters-warg\n        - include: twig-filters\n        - include: twig-filters-warg-ud\n        - include: twig-filters-ud\n        - match: \",\"\n          scope: punctuation.separator.object.twig\n  twig-comment-tag:\n    - match: '\\{#-?'\n      captures:\n        0: punctuation.definition.comment.begin.twig\n      push:\n        - meta_scope: comment.block.twig\n        - match: '-?#\\}'\n          captures:\n            0: punctuation.definition.comment.end.twig\n          pop: true\n  twig-constants:\n    - match: '(?i)(?<=[\\s\\[\\(\\{:,])(?:true|false|null|none)(?=[\\s\\)\\]\\}\\,])'\n      scope: constant.language.twig\n    - match: '(?<=[\\s\\[\\(\\{:,]|\\.\\.|\\*\\*)[0-9]+(?:\\.[0-9]+)?(?=[\\s\\)\\]\\}\\,]|\\.\\.|\\*\\*)'\n      scope: constant.numeric.twig\n  twig-filters:\n    - match: '(?<=(?:[a-zA-Z0-9_\\x{7f}-\\x{ff}\\]\\)\\''\\\"]\\|)|\\{%\\sfilter\\s)(abs|capitalize|e(?:scape)?|first|join|(?:json|url)_encode|keys|last|length|lower|nl2br|number_format|raw|reverse|round|sort|striptags|title|trim|upper)(?=[\\s\\|\\]\\}\\):,]|\\.\\.|\\*\\*)'\n      captures:\n        1: support.function.twig\n  twig-filters-ud:\n    - match: '(?<=(?:[a-zA-Z0-9_\\x{7f}-\\x{ff}\\]\\)\\''\\\"]\\|)|\\{%\\sfilter\\s)([a-zA-Z_\\x{7f}-\\x{ff}][a-zA-Z0-9_\\x{7f}-\\x{ff}]*)'\n      captures:\n        1: meta.function-call.other.twig\n  twig-filters-warg:\n    - match: '(?<=(?:[a-zA-Z0-9_\\x{7f}-\\x{ff}\\]\\)\\''\\\"]\\|)|\\{%\\sfilter\\s)(batch|convert_encoding|date|date_modify|default|e(?:scape)?|format|join|merge|number_format|replace|round|slice|split|trim)(\\()'\n      captures:\n        1: support.function.twig\n        2: punctuation.definition.parameters.begin.twig\n      push:\n        - meta_content_scope: meta.function.arguments.twig\n        - match: \\)\n          captures:\n            0: punctuation.definition.parameters.end.twig\n          pop: true\n        - include: twig-constants\n        - include: twig-functions-warg\n        - include: twig-functions\n        - include: twig-macros\n        - include: twig-objects\n        - include: twig-properties\n        - include: twig-filters-warg\n        - include: twig-filters\n        - include: twig-filters-warg-ud\n        - include: twig-filters-ud\n        - include: twig-strings\n        - include: twig-arrays\n        - include: twig-hashes\n  twig-filters-warg-ud:\n    - match: '(?<=(?:[a-zA-Z0-9_\\x{7f}-\\x{ff}\\]\\)\\''\\\"]\\|)|\\{%\\sfilter\\s)([a-zA-Z_\\x{7f}-\\x{ff}][a-zA-Z0-9_\\x{7f}-\\x{ff}]*)(\\()'\n      captures:\n        1: meta.function-call.other.twig\n        2: punctuation.definition.parameters.begin.twig\n      push:\n        - meta_content_scope: meta.function.arguments.twig\n        - match: \\)\n          captures:\n            0: punctuation.definition.parameters.end.twig\n          pop: true\n        - include: twig-constants\n        - include: twig-functions-warg\n        - include: twig-functions\n        - include: twig-macros\n        - include: twig-objects\n        - include: twig-properties\n        - include: twig-filters-warg\n        - include: twig-filters\n        - include: twig-filters-warg-ud\n        - include: twig-filters-ud\n        - include: twig-strings\n        - include: twig-arrays\n        - include: twig-hashes\n  twig-functions:\n    - match: (?<=is\\s)(defined|empty|even|iterable|odd)\n      captures:\n        1: support.function.twig\n  twig-functions-warg:\n    - match: '(?<=[\\s\\(\\[\\{:,])(attribute|block|constant|cycle|date|divisible by|dump|include|max|min|parent|random|range|same as|source|template_from_string)(\\()'\n      captures:\n        1: support.function.twig\n        2: punctuation.definition.parameters.begin.twig\n      push:\n        - meta_content_scope: meta.function.arguments.twig\n        - match: \\)\n          captures:\n            0: punctuation.definition.parameters.end.twig\n          pop: true\n        - include: twig-constants\n        - include: twig-functions-warg\n        - include: twig-functions\n        - include: twig-macros\n        - include: twig-objects\n        - include: twig-properties\n        - include: twig-filters-warg\n        - include: twig-filters\n        - include: twig-filters-warg-ud\n        - include: twig-filters-ud\n        - include: twig-strings\n        - include: twig-arrays\n  twig-hashes:\n    - match: '(?<=[\\s\\(\\{\\[:,])\\{'\n      captures:\n        0: punctuation.section.hash.begin.twig\n      push:\n        - meta_scope: meta.hash.twig\n        - match: '\\}'\n          captures:\n            0: punctuation.section.hash.end.twig\n          pop: true\n        - include: twig-hashes\n        - include: twig-arrays\n        - include: twig-constants\n        - include: twig-strings\n        - include: twig-functions-warg\n        - include: twig-functions\n        - include: twig-macros\n        - include: twig-objects\n        - include: twig-properties\n        - include: twig-filters-warg\n        - include: twig-filters\n        - include: twig-filters-warg-ud\n        - include: twig-filters-ud\n        - match: \":\"\n          scope: punctuation.separator.key-value.twig\n        - match: \",\"\n          scope: punctuation.separator.object.twig\n  twig-keywords:\n    - match: (?<=\\s)((?:end)?(?:autoescape|block|embed|filter|for|if|macro|raw|sandbox|set|spaceless|trans|verbatim)|as|do|else|elseif|extends|flush|from|ignore missing|import|include|only|use|with)(?=\\s)\n      scope: keyword.control.twig\n  twig-macros:\n    - match: |-\n        (?x)\n                (?<=[\\s\\(\\[\\{:,])\n                ([a-zA-Z_\\x{7f}-\\x{ff}][a-zA-Z0-9_\\x{7f}-\\x{ff}]*)\n                (?:\n                    (\\.)([a-zA-Z_\\x{7f}-\\x{ff}][a-zA-Z0-9_\\x{7f}-\\x{ff}]*)\n                )?\n                (\\()\n      captures:\n        1: meta.function-call.twig\n        2: punctuation.separator.property.twig\n        3: variable.other.property.twig\n        4: punctuation.definition.parameters.begin.twig\n      push:\n        - meta_content_scope: meta.function.arguments.twig\n        - match: \\)\n          captures:\n            0: punctuation.definition.parameters.end.twig\n          pop: true\n        - include: twig-constants\n        - include: twig-operators\n        - include: twig-functions-warg\n        - include: twig-functions\n        - include: twig-macros\n        - include: twig-objects\n        - include: twig-properties\n        - include: twig-filters-warg\n        - include: twig-filters\n        - include: twig-filters-warg-ud\n        - include: twig-filters-ud\n        - include: twig-strings\n        - include: twig-arrays\n        - include: twig-hashes\n  twig-objects:\n    - match: '(?<=[\\s\\{\\[\\(:,])([a-zA-Z_\\x{7f}-\\x{ff}][a-zA-Z0-9_\\x{7f}-\\x{ff}]*)(?=[\\s\\}\\[\\]\\(\\)\\.\\|,:])'\n      captures:\n        1: variable.other.twig\n  twig-operators:\n    - match: (?<=\\s)(\\+|-|//?|%|\\*\\*?)(?=\\s)\n      captures:\n        1: keyword.operator.arithmetic.twig\n    - match: (?<=\\s)(=|~)(?=\\s)\n      captures:\n        1: keyword.operator.assignment.twig\n    - match: (?<=\\s)(b-(?:and|or|xor))(?=\\s)\n      captures:\n        1: keyword.operator.bitwise.twig\n    - match: '(?<=\\s)((?:!|=)=|<=?|>=?|(?:not )?in|is(?: not)?|(?:ends|starts) with|matches)(?=\\s)'\n      captures:\n        1: keyword.operator.comparison.twig\n    - match: (?<=\\s)(\\?|:|and|not|or)(?=\\s)\n      captures:\n        1: keyword.operator.logical.twig\n    - match: '(?<=[a-zA-Z0-9_\\x{7f}-\\x{ff}\\]\\)''\"])\\.\\.(?=[a-zA-Z0-9_\\x{7f}-\\x{ff}''\"])'\n      captures:\n        0: keyword.operator.other.twig\n    - match: '(?<=[a-zA-Z0-9_\\x{7f}-\\x{ff}\\]\\}\\)''\"])\\|(?=[a-zA-Z_\\x{7f}-\\x{ff}])'\n      captures:\n        0: keyword.operator.other.twig\n  twig-print-tag:\n    - match: '\\{\\{-?'\n      captures:\n        0: punctuation.section.tag.twig\n      push:\n        - meta_scope: meta.tag.template.value.twig\n        - match: '-?\\}\\}'\n          captures:\n            0: punctuation.section.tag.twig\n          pop: true\n        - include: twig-constants\n        - include: twig-operators\n        - include: twig-functions-warg\n        - include: twig-functions\n        - include: twig-macros\n        - include: twig-objects\n        - include: twig-properties\n        - include: twig-filters-warg\n        - include: twig-filters\n        - include: twig-filters-warg-ud\n        - include: twig-filters-ud\n        - include: twig-strings\n        - include: twig-arrays\n        - include: twig-hashes\n  twig-properties:\n    - match: |-\n        (?x)\n            (?<=[a-zA-Z0-9_\\x{7f}-\\x{ff}])\n            (\\.)([a-zA-Z_\\x{7f}-\\x{ff}][a-zA-Z0-9_\\x{7f}-\\x{ff}]*)\n            (?=[\\.\\s\\|\\[\\)\\]\\}:,])\n      captures:\n        1: punctuation.separator.property.twig\n        2: variable.other.property.twig\n    - match: |-\n        (?x)\n            (?<=[a-zA-Z0-9_\\x{7f}-\\x{ff}])\n            (\\.)([a-zA-Z_\\x{7f}-\\x{ff}][a-zA-Z0-9_\\x{7f}-\\x{ff}]*)\n            (\\()\n      captures:\n        1: punctuation.separator.property.twig\n        2: variable.other.property.twig\n        3: punctuation.definition.parameters.begin.twig\n      push:\n        - meta_content_scope: meta.function.arguments.twig\n        - match: \\)\n          captures:\n            0: punctuation.definition.parameters.end.twig\n          pop: true\n        - include: twig-constants\n        - include: twig-functions-warg\n        - include: twig-functions\n        - include: twig-macros\n        - include: twig-objects\n        - include: twig-properties\n        - include: twig-filters-warg\n        - include: twig-filters\n        - include: twig-filters-warg-ud\n        - include: twig-filters-ud\n        - include: twig-strings\n        - include: twig-arrays\n    - match: |-\n        (?x)\n            (?<=[a-zA-Z0-9_\\x{7f}-\\x{ff}\\]])\n            (?:\n                (\\[)('[a-zA-Z_\\x{7f}-\\x{ff}][a-zA-Z0-9_\\x{7f}-\\x{ff}]*')(\\])\n                |(\\[)(\"[a-zA-Z_\\x{7f}-\\x{ff}][a-zA-Z0-9_\\x{7f}-\\x{ff}]*\")(\\])\n                |(\\[)([a-zA-Z_\\x{7f}-\\x{ff}][a-zA-Z0-9_\\x{7f}-\\x{ff}]*)(\\])\n            )\n      captures:\n        1: punctuation.section.array.begin.twig\n        2: variable.other.property.twig\n        3: punctuation.section.array.end.twig\n        4: punctuation.section.array.begin.twig\n        5: variable.other.property.twig\n        6: punctuation.section.array.end.twig\n        7: punctuation.section.array.begin.twig\n        8: variable.other.property.twig\n        9: punctuation.section.array.end.twig\n  twig-statement-tag:\n    - match: '\\{%-?'\n      captures:\n        0: punctuation.section.tag.twig\n      push:\n        - meta_scope: meta.tag.template.block.twig\n        - match: '-?%\\}'\n          captures:\n            0: punctuation.section.tag.twig\n          pop: true\n        - include: twig-constants\n        - include: twig-keywords\n        - include: twig-operators\n        - include: twig-functions-warg\n        - include: twig-functions\n        - include: twig-macros\n        - include: twig-filters-warg\n        - include: twig-filters\n        - include: twig-filters-warg-ud\n        - include: twig-filters-ud\n        - include: twig-objects\n        - include: twig-properties\n        - include: twig-strings\n        - include: twig-arrays\n        - include: twig-hashes\n  twig-strings:\n    - match: (?:(?<!\\\\)|(?<=\\\\\\\\))'\n      captures:\n        0: punctuation.definition.string.begin.twig\n      push:\n        - meta_scope: string.quoted.single.twig\n        - match: (?:(?<!\\\\)|(?<=\\\\\\\\))'\n          captures:\n            0: punctuation.definition.string.end.twig\n          pop: true\n    - match: (?:(?<!\\\\)|(?<=\\\\\\\\))\"\n      captures:\n        0: punctuation.definition.string.begin.twig\n      push:\n        - meta_scope: string.quoted.double.twig\n        - match: (?:(?<!\\\\)|(?<=\\\\\\\\))\"\n          captures:\n            0: punctuation.definition.string.end.twig\n          pop: true\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/INI.sublime-syntax",
    "content": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: INI\nfile_extensions:\n  - ini\n  - INI\n  - \"inf\"\n  - \"INF\"\n  - reg\n  - REG\n  - lng\n  - cfg\n  - CFG\n  - desktop\n  - url\n  - URL\n  - .editorconfig\n  - .coveragerc\n  - .pylintrc\n  - .gitlint\n  - .hgrc\n  - hgrc\nscope: source.ini\ncontexts:\n  main:\n    - match: ^\\s*(;|#).*$\\n?\n      scope: comment.line.semicolon.ini\n      captures:\n        1: punctuation.definition.comment.ini\n    - match: '^\\s*(\\[)(.*?)(\\])\\s*(;.*)?$\\n?'\n      scope: meta.tag.section.ini\n      captures:\n        1: punctuation.definition.section.ini\n        2: entity.section.ini\n        3: punctuation.definition.section.ini\n        4: comment.definition.section.ini\n    - match: '^(\\s*([\"'']?)(.+?)(\\2)\\s*(=))?\\s*(([\"'']?)(.*?)(\\7))\\s*(;.*)?$\\n?'\n      scope: meta.declaration.ini\n      captures:\n        1: meta.property.ini\n        2: punctuation.definition.quote.ini\n        3: keyword.name.ini\n        4: punctuation.definition.quote.ini\n        5: punctuation.definition.equals.ini\n        6: meta.value.ini\n        7: punctuation.definition.quote.ini\n        8: string.name.value.ini\n        9: punctuation.definition.quote.ini\n        10: comment.declarationline.semicolon.ini\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/JavaScript (Babel).sublime-syntax",
    "content": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: JavaScript (Babel)\nfile_extensions:\n  - js\n  - mjs\n  - jsx\n  - babel\n  - es6\n  - cjs\nfirst_line_match: ^#!\\s*/.*\\b(node|js)$\\n?\nscope: source.js\ncontexts:\n  main:\n    - include: core\n  brackets:\n    - include: round-brackets\n    - include: square-brackets\n    - include: curly-brackets\n  class-method-definition:\n    - match: '(@@[_$a-zA-Z][$\\w]*|static|return)(?=\\s*[<(])|(?=\\s*<)'\n      captures:\n        1: keyword.operator.flowtype.js\n      push:\n        - meta_scope: meta.short-method.flowtype.js\n        - match: '(?=\\s*[;{])'\n          pop: true\n        - include: flowtype-polymorph\n        - include: function-declaration-parameters\n        - include: flowtype-annotation\n        - include: comments\n        - include: curly-brackets\n    - match: '(?<=[]\"''])\\s*(?=[<(])'\n      push:\n        - meta_scope: meta.class-method.computed.js\n        - match: '(?=\\s*[;{])'\n          pop: true\n        - include: flowtype-polymorph\n        - include: function-declaration-parameters\n        - include: flowtype-annotation\n        - include: comments\n        - include: curly-brackets\n    - match: |-\n        (?x)\n        ((?>get|set)\\s+)\n        (?>\n          ((')((?>[^'\\\\]|\\\\.)*)('))|\n          ((\")((?>[^\"\\\\]|\\\\.)*)(\"))|\n          (([_$a-zA-Z][$\\w]*|\\d+))\n        )(?=\\s*[<(])\n      captures:\n        1: storage.type.js\n        2: string.quoted.js\n        3: punctuation.definition.string.begin.js\n        4: entity.name.function.js\n        5: punctuation.definition.string.end.js\n        6: string.quoted.js\n        7: punctuation.definition.string.begin.js\n        8: entity.name.function.js\n        9: punctuation.definition.string.end.js\n        10: string.unquoted.js\n        11: entity.name.function.js\n      push:\n        - meta_scope: meta.class-accessor.js\n        - match: '(?=\\s*[;{])'\n          pop: true\n        - include: flowtype-polymorph\n        - include: function-declaration-parameters\n        - include: flowtype-annotation\n        - include: comments\n        - include: curly-brackets\n    - match: |-\n        (?x)\n        (?>\n          ((')((?>[^'\\\\]|\\\\.)*)('))|\n          ((\")((?>[^\"\\\\]|\\\\.)*)(\"))|\n          (([_$a-zA-Z][$\\w]*|\\d+))\n        )(?=\\s*[<(])\n      captures:\n        1: string.quoted.js\n        2: punctuation.definition.string.begin.js\n        3: entity.name.function.js\n        4: punctuation.definition.string.end.js\n        5: string.quoted.js\n        6: punctuation.definition.string.begin.js\n        7: entity.name.function.js\n        8: punctuation.definition.string.end.js\n        9: string.unquoted.js\n        10: entity.name.function.js\n      push:\n        - meta_scope: meta.class-method.js\n        - match: '(?=\\s*[;{])'\n          pop: true\n        - include: flowtype-polymorph\n        - include: function-declaration-parameters\n        - include: flowtype-annotation\n        - include: comments\n        - include: curly-brackets\n  class-method-storage:\n    - match: (?<!\\.)\\b(?>static|declare)\\b\n      scope: storage.modifier.js\n    - match: (?<!\\.)\\b(async)\\b\n      scope: storage.type.js\n    - match: (?<!\\.)\\b(get|set)\\b(?!\\s*\\()\n      scope: storage.type.js\n    - match: \\*\n      scope: keyword.generator.asterisk.js\n  class-properties:\n    - match: '([_$a-zA-Z][$\\w]*)(?=\\s*[:=])'\n      captures:\n        1: variable.other.property.js\n      push:\n        - meta_scope: meta.class.property.js\n        - match: '(?=\\s*[;}])'\n          pop: true\n        - include: flowtype-annotation\n        - include: expression\n  comments:\n    - match: /\\*\\*(?!/)\n      captures:\n        0: punctuation.definition.comment.js\n      push:\n        - meta_scope: comment.block.documentation.js\n        - match: \\*/\n          captures:\n            0: punctuation.definition.comment.js\n          pop: true\n    - match: /\\*\n      captures:\n        0: punctuation.definition.comment.begin.js\n      push:\n        - meta_scope: comment.block.js\n        - match: \\*/\n          captures:\n            0: punctuation.definition.comment.end.js\n          pop: true\n    - match: (?><!--|-->)\n      scope: comment.block.html.js\n      captures:\n        0: punctuation.definition.comment.js\n    - match: (//).*$\\n?\n      scope: comment.line.double-slash.js\n      captures:\n        1: punctuation.definition.comment.js\n    - match: ^(#!).*$\\n?\n      scope: comment.line.shebang.js\n      captures:\n        1: punctuation.definition.comment.js\n  core:\n    - include: literal-function-labels\n    - include: literal-arrow-function-labels\n    - include: literal-labels\n    - include: literal-for\n    - include: literal-switch\n    - include: styled-components\n    - include: graphql\n    - include: expression\n    - include: literal-punctuation\n  curly-brackets:\n    - match: \"{\"\n      captures:\n        0: meta.brace.curly.begin.js\n      push:\n        - meta_scope: meta.group.braces.curly.js\n        - match: \"}\"\n          captures:\n            0: meta.brace.curly.end.js\n          pop: true\n        - include: main\n  es7-decorators:\n    - match: |-\n        (?x)\n        (@)([_$a-zA-Z][$\\w]*)\\b\n      scope: tag.decorator.js\n      captures:\n        1: punctuation.definition.tag.js\n        2: entity.name.tag.js\n  expression:\n    - include: merge-conflits\n    - include: literal-regexp\n    - include: literal-jsx\n    - include: es7-decorators\n    - include: support-class\n    - include: support-other\n    - include: literal-function\n    - include: literal-arrow-function\n    - include: literal-prototype\n    - include: literal-keywords\n    - include: literal-method\n    - include: literal-module\n    - include: literal-class\n    - include: flowtype-declaration\n    - include: literal-number\n    - include: literal-template-string\n    - include: literal-string\n    - include: literal-language-constant\n    - include: literal-language-variable\n    - include: literal-constructor\n    - include: literal-method-call\n    - include: literal-function-call\n    - include: comments\n    - include: brackets\n    - include: literal-operators\n    - include: literal-variable\n  flowtype-annotation:\n    - match: (?:(\\?)\\s*)?(:)\n      captures:\n        1: keyword.operator.flowtype.optional.js\n        2: keyword.operator.flowtype.annotation.js\n      push:\n        - meta_scope: meta.flowtype.annotation.js\n        - include: flowtype-tokens\n        - match: (?=\\S)\n          pop: true\n  flowtype-brackets:\n    - match: \"{\"\n      captures:\n        0: punctuation.section.flowtype.begin.js\n      push:\n        - match: \"}\"\n          captures:\n            0: punctuation.section.flowtype.end.js\n          pop: true\n        - include: flowtype-tokens\n  flowtype-declaration:\n    - match: (?<!\\.)\\b(declare)\\b\n      scope: support.type.declare.flowtype.js\n    - match: '(?<!\\.)\\b(type)\\b(?=\\s*[_$a-zA-Z])'\n      captures:\n        1: support.type.type.flowtype.js\n      push:\n        - meta_scope: meta.type.flowtype.js\n        - match: (?=\\s*(;|from))\n          pop: true\n        - include: flowtype-tokens\n    - match: '(?<!\\.)\\b(type)\\b(?=\\s*{)'\n      captures:\n        1: support.type.type.flowtype.js\n      push:\n        - meta_scope: meta.type.flowtype.js\n        - match: \"(?<=})\"\n          pop: true\n        - include: comments\n        - include: flowtype-brackets\n        - include: flowtype-polymorph\n        - match: '([_$a-zA-Z][$\\w]*)'\n          scope: entity.name.type.js\n  flowtype-identifier:\n    - include: support-class\n    - match: \\b(?:any|bool|boolean|mixed|number|string|void)\\b\n      scope: constant.other.primitve.flowtype.js\n    - match: '[_$a-zA-Z][$\\w]*'\n      scope: variable.other.flowtype.js\n    - match: \\?\n      scope: keyword.operator.flowtype.optional.js\n  flowtype-polymorph:\n    - match: <\n      captures:\n        0: punctuation.section.flowtype.begin.js\n      push:\n        - meta_scope: meta.flowtype.polymorph.js\n        - match: \">\"\n          captures:\n            0: punctuation.section.flowtype.end.js\n          pop: true\n        - include: flowtype-tokens\n  flowtype-tokens:\n    - match: '(?<=[:?|&=])(?=\\s*{)'\n      push:\n        - match: \"(?<=})\"\n          pop: true\n        - include: flowtype-brackets\n    - match: '\\s*([|&])\\s*'\n      scope: meta.flowtype.set.js\n      captures:\n        1: keyword.operator.flowtype.other.js\n    - match: '[*:?&|.]|\\.\\.\\.|\\b(typeof)\\b'\n      scope: keyword.operator.flowtype.other.js\n    - match: <\n      captures:\n        0: punctuation.section.flowtype.begin.js\n      push:\n        - match: \">\"\n          captures:\n            0: punctuation.section.flowtype.end.js\n          pop: true\n        - include: flowtype-tokens\n    - match: '\\['\n      captures:\n        0: punctuation.section.flowtype.begin.js\n      push:\n        - match: '\\]'\n          captures:\n            0: punctuation.section.flowtype.end.js\n          pop: true\n        - include: flowtype-tokens\n    - match: \\(\n      captures:\n        0: punctuation.section.flowtype.begin.js\n      push:\n        - match: \\)\n          captures:\n            0: punctuation.section.flowtype.end.js\n          pop: true\n        - include: flowtype-tokens\n    - match: \"=>\"\n      captures:\n        0: keyword.operator.flowtype.js\n      push:\n        - meta_scope: meta.flowtype.function.js\n        - match: \"(?<=}|[_$a-zA-Z])\"\n          pop: true\n        - include: flowtype-brackets\n        - include: flowtype-identifier\n        - include: comments\n    - include: flowtype-identifier\n    - include: literal-string\n    - include: comments\n  function-declaration-parameters:\n    - match: \\(\n      captures:\n        0: punctuation.definition.parameters.begin.js\n      push:\n        - match: \\)\n          captures:\n            0: punctuation.definition.parameters.end.js\n          pop: true\n        - include: comments\n        - include: flowtype-annotation\n        - match: (?<!\\.)\\.\\.\\.\n          scope: keyword.operator.spread.js\n        - match: '([_$a-zA-Z][$\\w]*)'\n          scope: variable.parameter.function.js\n        - match: \",\"\n          scope: punctuation.separator.parameter.function.js\n        - match: \"=\"\n          captures:\n            0: keyword.operator.assignment.js\n          push:\n            - meta_scope: meta.parameter.optional.js\n            - match: \"(?=[,)])\"\n              pop: true\n            - include: expression\n  graphql:\n    - match: \\s*+gql`\n      push:\n        - meta_scope: meta.graphql.js\n        - match: \"`\"\n          pop: true\n        - include: scope:source.graphql\n        - match: '\\${'\n          push:\n            - meta_scope: js\n            - match: \"}\"\n              pop: true\n            - include: core\n    - match: \\s*+`#graphql\n      push:\n        - meta_scope: meta.graphql.js\n        - match: \"`\"\n          pop: true\n        - include: scope:source.graphql\n        - match: '\\${'\n          push:\n            - meta_scope: js\n            - match: \"}\"\n              pop: true\n            - include: core\n  jsx-attribute-assignment:\n    - match: \"=\"\n      scope: keyword.operator.assignment.jsx\n  jsx-attribute-name:\n    - match: '[_$a-zA-Z][-$\\w]*'\n      scope: entity.other.attribute-name.jsx\n  jsx-attributes:\n    - include: jsx-attribute-name\n    - include: jsx-attribute-assignment\n    - include: jsx-string-quoted\n    - include: jsx-evaluated-code\n    - include: comments\n  jsx-entities:\n    - match: '&(?:[a-zA-Z0-9]+|#\\d+|#x\\h+);'\n      scope: constant.character.entity.jsx\n    - match: '&\\S*;'\n      scope: invalid.illegal.bad-ampersand.jsx\n  jsx-evaluated-code:\n    - match: \"{\"\n      captures:\n        0: punctuation.section.embedded.begin.jsx\n      push:\n        - meta_scope: meta.embedded.expression.jsx\n        - match: \"}\"\n          captures:\n            0: punctuation.section.embedded.end.jsx\n          pop: true\n        - include: expression\n  jsx-string-quoted:\n    - match: '([\"''])'\n      captures:\n        0: punctuation.definition.string.begin.jsx\n      push:\n        - meta_scope: string.quoted.jsx\n        - match: \\1\n          captures:\n            0: punctuation.definition.string.end.jsx\n          pop: true\n        - include: jsx-entities\n  jsx-tag-end:\n    - match: \">\"\n      captures:\n        0: meta.tag.jsx punctuation.definition.tag.end.jsx\n      push:\n        - match: (?=</)\n          pop: true\n        - include: jsx-tag-start\n        - include: jsx-evaluated-code\n        - include: jsx-entities\n  jsx-tag-start:\n    - match: '(<)([_$a-zA-Z][-$:.\\w]*[$\\w]*)'\n      captures:\n        1: meta.tag.jsx punctuation.definition.tag.begin.jsx\n        2: meta.tag.jsx entity.name.tag.jsx\n      push:\n        - match: (</)(\\2)(>)|(/>)\n          captures:\n            1: meta.tag.jsx punctuation.definition.tag.begin.jsx\n            2: meta.tag.jsx entity.name.tag.jsx\n            3: meta.tag.jsx punctuation.definition.tag.end.jsx\n            4: meta.tag.jsx punctuation.definition.tag.end.jsx\n          pop: true\n        - include: jsx-tag-end\n        - include: jsx-attributes\n    - match: <\n      scope: invalid.illegal.tag.incomplete.jsx\n  literal-arrow-function:\n    - match: |-\n        (?x)\n        (?:([_$a-zA-Z][$\\w]*)\\s*(=)\\s*)?\n        (?:\\b(async)\\s+)?\n        (?=(\\((?>(?>[^()]+)|\\g<-1>)*\\))\\s*(=>))\n      captures:\n        1: entity.name.function.js\n        2: keyword.operator.assignment.js\n        3: storage.type.js\n      push:\n        - meta_scope: meta.function.arrow.js\n        - match: (?<=\\))\\s*(=>)\n          captures:\n            1: storage.type.function.arrow.js\n          pop: true\n        - include: function-declaration-parameters\n    - match: |-\n        (?x)\n        (?:([_$a-zA-Z][$\\w]*)\\s*(=)\\s*)?\n        (?:(async)\\s+)?\n        \\b([_$a-zA-Z][$\\w]*)\\s*(=>)\n      scope: meta.function.arrow.js\n      captures:\n        1: entity.name.function.js\n        2: keyword.operator.assignment.js\n        3: storage.type.js\n        4: variable.parameter.function.js\n        5: storage.type.function.arrow.js\n    - match: |-\n        (?x)\n        (\\b_?[A-Z][$\\w]*)?\n        (\\.)(prototype)\n        (\\.)([_$a-zA-Z][$\\w]*)\n        \\s*(=)\n        \\s*(async)?\n        \\s*(?=(\\((?>(?>[^()]+)|\\g<-1>)*\\))\\s*(=>))\n      captures:\n        1: entity.name.class.js\n        2: keyword.operator.accessor.js\n        3: variable.language.prototype.js\n        4: keyword.operator.accessor.js\n        5: entity.name.function.js\n        6: keyword.operator.assignment.js\n        7: storage.type.js\n      push:\n        - meta_scope: meta.prototype.function.arrow.js\n        - match: (?<=\\))\\s*(=>)\n          captures:\n            1: storage.type.function.arrow.js\n          pop: true\n        - include: function-declaration-parameters\n    - match: |-\n        (?x)\n        (\\b_?[A-Z][$\\w]*)?\n        (\\.)(prototype)\n        (\\.)([_$a-zA-Z][$\\w]*)\n        \\s*(=)\n        \\s*(async)?\n        \\s*\\b([_$a-zA-Z][$\\w]*)\\s*(=>)\n      scope: meta.prototype.function.arrow.js\n      captures:\n        1: entity.name.class.js\n        2: keyword.operator.accessor.js\n        3: variable.language.prototype.js\n        4: keyword.operator.accessor.js\n        5: entity.name.function.js\n        6: keyword.operator.assignment.js\n        7: storage.type.js\n        8: variable.parameter.function.js\n        9: storage.type.function.arrow.js\n    - match: |-\n        (?x)\n        (\\b_?[A-Z][$\\w]*)?\n        (\\.)([_$a-zA-Z][$\\w]*)\n        \\s*(=)\n        \\s*(async)?\n        \\s*(?=(\\((?>(?>[^()]+)|\\g<-1>)*\\))\\s*(=>))\n      captures:\n        1: entity.name.class.js\n        2: keyword.operator.accessor.js\n        3: entity.name.function.js\n        4: keyword.operator.assignment.js\n        5: storage.type.js\n      push:\n        - meta_scope: meta.function.static.arrow.js\n        - match: (?<=\\))\\s*(=>)\n          captures:\n            1: storage.type.function.arrow.js\n          pop: true\n        - include: function-declaration-parameters\n    - match: |-\n        (?x)\n        (\\b_?[A-Z][$\\w]*)?\n        (\\.)([_$a-zA-Z][$\\w]*)\n        \\s*(=)\n        \\s*(async)?\n        \\s*\\b([_$a-zA-Z][$\\w]*)\\s*(=>)\n      scope: meta.function.static.arrow.js\n      captures:\n        1: entity.name.class.js\n        2: keyword.operator.accessor.js\n        3: entity.name.function.js\n        4: keyword.operator.assignment.js\n        5: storage.type.js\n        6: variable.parameter.function.js\n        7: storage.type.function.arrow.js\n  literal-arrow-function-labels:\n    - match: |-\n        (?x)\n        (?>\n          ((')((?>[^'\\\\]|\\\\.)*)('))|\n          ((\")((?>[^\"\\\\]|\\\\.)*)(\"))|\n          (([_$a-zA-Z][$\\w]*|\\d+))\n        )\n        \\s*(:)\n        \\s*(?:\\b(async)\\s+)?\n        \\s*(?=(\\((?>(?>[^()]+)|\\g<-1>)*\\))\\s*(=>))\n      captures:\n        1: string.quoted.js\n        2: punctuation.definition.string.begin.js\n        3: entity.name.function.js\n        4: punctuation.definition.string.end.js\n        5: string.quoted.js\n        6: punctuation.definition.string.begin.js\n        7: entity.name.function.js\n        8: punctuation.definition.string.end.js\n        9: string.unquoted.js\n        10: entity.name.function.js\n        11: punctuation.separator.key-value.js\n        12: storage.type.js\n      push:\n        - meta_scope: meta.function.json.arrow.js\n        - match: (?<=\\))\\s*(=>)\n          captures:\n            1: storage.type.function.arrow.js\n          pop: true\n        - include: function-declaration-parameters\n    - match: |-\n        (?x)\n        (?>\n          ((')((?>[^'\\\\]|\\\\.)*)('))|\n          ((\")((?>[^\"\\\\]|\\\\.)*)(\"))|\n          (([_$a-zA-Z][$\\w]*|\\d+))\n        )\n        \\s*(:)\n        \\s*(?:\\b(async)\\s+)?\n        \\s*\\b([_$a-zA-Z][$\\w]*)\\s*(=>)\n      scope: meta.function.json.arrow.js\n      captures:\n        1: string.quoted.js\n        2: punctuation.definition.string.begin.js\n        3: entity.name.function.js\n        4: punctuation.definition.string.end.js\n        5: string.quoted.js\n        6: punctuation.definition.string.begin.js\n        7: entity.name.function.js\n        8: punctuation.definition.string.end.js\n        9: string.unquoted.js\n        10: entity.name.function.js\n        11: punctuation.separator.key-value.js\n        12: storage.type.js\n        13: variable.parameter.function.js\n        14: storage.type.function.arrow.js\n  literal-class:\n    - match: (?<!\\.)\\b(?:(class)|(interface))\\b\n      captures:\n        1: storage.type.class.js\n        2: storage.type.interface.flowtype.js\n      push:\n        - meta_scope: meta.class.js\n        - match: '\\}'\n          captures:\n            0: meta.brace.curly.end.js\n          pop: true\n        - include: comments\n        - match: '([_$a-zA-Z][$\\w]*)'\n          captures:\n            0: entity.name.class.js\n          push:\n            - match: \"(?={)\"\n              pop: true\n            - include: comments\n            - include: flowtype-polymorph\n            - match: (?<!\\.)\\b(extends)\\b\n              captures:\n                0: storage.type.extends.js\n              push:\n                - meta_scope: meta.class.extends.js\n                - match: \"(?={)\"\n                  pop: true\n                - include: flowtype-polymorph\n                - include: expression\n        - match: '\\{'\n          captures:\n            0: meta.brace.curly.begin.js\n          push:\n            - match: \"(?=})\"\n              pop: true\n            - include: es7-decorators\n            - include: class-properties\n            - include: class-method-definition\n            - include: class-method-storage\n            - include: brackets\n            - include: comments\n  literal-constructor:\n    - match: '(new)\\s+(?=[_$a-zA-Z][$\\w.]*)'\n      captures:\n        1: keyword.operator.new.js\n      push:\n        - meta_scope: meta.instance.constructor.js\n        - match: '(?![_$a-zA-Z][$\\w.]*)'\n          pop: true\n        - include: support-class\n        - include: support-other\n        - match: '([_$a-zA-Z][$\\w.]*\\.)?([_$a-zA-Z][$\\w]*)'\n          captures:\n            2: variable.function.constructor.js\n  literal-for:\n    - match: (?<!\\.)\\b(for)\\b\n      captures:\n        1: keyword.control.loop.js\n      push:\n        - meta_scope: meta.for.js\n        - match: \\)\n          captures:\n            0: meta.brace.round.end.js\n          pop: true\n        - include: comments\n        - match: \\(\n          captures:\n            0: meta.brace.round.begin.js\n          push:\n            - match: (?=\\))\n              pop: true\n            - include: literal-keyword-storage\n            - include: expression\n            - include: literal-punctuation\n  literal-function:\n    - match: |-\n        (?x)\n        (?:([_$a-zA-Z][$\\w]*)\\s*(=)\\s*)?\n        (?:(async)\\s+)?\n        (function)(?>\\s*(\\*)|(?=[\\s(<]))\n        \\s*([_$a-zA-Z][$\\w]*)?\n      captures:\n        1: entity.name.function.js\n        2: keyword.operator.assignment.js\n        3: storage.type.js\n        4: storage.type.function.js\n        5: keyword.generator.asterisk.js\n        6: entity.name.function.js\n      push:\n        - meta_scope: meta.function.js\n        - match: (?<=\\))\n          pop: true\n        - include: flowtype-polymorph\n        - include: function-declaration-parameters\n    - match: |-\n        (?x)\n        (\\b_?[A-Z][$\\w]*)?\n        (\\.)(prototype)\n        (\\.)([_$a-zA-Z][$\\w]*)\n        \\s*(=)\n        \\s*(?:(async)\\s+)?\n        \\s*(function)(?>\\s*(\\*)|(?=[\\s(<]))\n        \\s*([_$a-zA-Z][$\\w]*)?\\s*\n      captures:\n        1: entity.name.class.js\n        2: keyword.operator.accessor.js\n        3: variable.language.prototype.js\n        4: keyword.operator.accessor.js\n        5: entity.name.function.js\n        6: keyword.operator.assignment.js\n        7: storage.type.js\n        8: storage.type.function.js\n        9: keyword.generator.asterisk.js\n        10: entity.name.function.js\n      push:\n        - meta_scope: meta.function.prototype.js\n        - match: (?<=\\))\n          pop: true\n        - include: flowtype-polymorph\n        - include: function-declaration-parameters\n    - match: |-\n        (?x)\n        (\\b_?[A-Z][$\\w]*)?\n        (\\.)([_$a-zA-Z][$\\w]*)\n        \\s*(=)\n        \\s*(?:(async)\\s+)?\n        \\s*(function)(?>\\s*(\\*)|(?=[\\s(<]))\n        \\s*([_$a-zA-Z][$\\w]*)?\\s*\n      captures:\n        1: entity.name.class.js\n        2: keyword.operator.accessor.js\n        3: entity.name.function.js\n        4: keyword.operator.assignment.js\n        5: storage.type.js\n        6: storage.type.function.js\n        7: keyword.generator.asterisk.js\n        8: entity.name.function.js\n      push:\n        - meta_scope: meta.function.static.js\n        - match: (?<=\\))\n          pop: true\n        - include: flowtype-polymorph\n        - include: function-declaration-parameters\n  literal-function-call:\n    - match: '([_$a-zA-Z][$\\w]*)\\s*(\\(\\s*\\))'\n      scope: meta.function-call.without-arguments.js\n      captures:\n        1: variable.function.js\n        2: meta.group.braces.round.function.arguments.js\n    - match: '([_$a-zA-Z][$\\w]*)\\s*(?=\\()'\n      scope: meta.function-call.with-arguments.js\n      captures:\n        1: variable.function.js\n    - match: '([_$a-zA-Z][$\\w]*)\\s*(?=`)'\n      scope: meta.function-call.tagged-template.js\n      captures:\n        1: variable.function.js\n  literal-function-labels:\n    - match: |-\n        (?x)\n        (?>\n          ((')((?>[^'\\\\]|\\\\.)*)('))|\n          ((\")((?>[^\"\\\\]|\\\\.)*)(\"))|\n          (([_$a-zA-Z][$\\w]*|\\d+))\n        )\n        \\s*(:)\n        \\s*(?:\\b(async)\\s+)?\n        \\s*(function)(?>\\s*(\\*)|(?=[\\s(<]))\n        \\s*([_$a-zA-Z][$\\w]*)?\n      captures:\n        1: string.quoted.js\n        2: punctuation.definition.string.begin.js\n        3: entity.name.function.js\n        4: punctuation.definition.string.end.js\n        5: string.quoted.js\n        6: punctuation.definition.string.begin.js\n        7: entity.name.function.js\n        8: punctuation.definition.string.end.js\n        9: string.unquoted.js\n        10: entity.name.function.js\n        11: punctuation.separator.key-value.js\n        12: storage.type.js\n        13: storage.type.function.js\n        14: keyword.generator.asterisk.js\n        15: entity.name.function.js\n      push:\n        - meta_scope: meta.function.json.js\n        - match: (?<=\\))\n          pop: true\n        - include: flowtype-polymorph\n        - include: function-declaration-parameters\n  literal-jsx:\n    - match: '(?<=\\(|\\{|\\[|,|&&|\\|\\||\\?|:|=|=>|\\Wreturn|^return|\\Wdefault|^)(?=\\s*<[_$a-zA-Z])'\n      push:\n        - meta_content_scope: meta.jsx.js\n        - match: (?<=/>|>)\n          pop: true\n        - include: jsx-tag-start\n  literal-keyword-storage:\n    - match: (?<!\\.)\\b(?>const|let|var)\\b\n      scope: storage.type.js\n  literal-keywords:\n    - include: literal-keyword-storage\n    - match: (?<!\\.)\\b((?>await|yield))\\b(?:\\s*(\\*))?\n      captures:\n        1: keyword.control.flow.js\n        2: keyword.generator.asterisk.js\n    - match: (?<!\\.)\\b(return)\\b\n      scope: keyword.control.flow.js\n    - match: (?<!\\.)\\b(?>if|else)\\b\n      scope: keyword.control.conditional.js\n    - match: (?<!\\.)\\b(?>catch|finally|throw|try)\\b\n      scope: keyword.control.trycatch.js\n    - match: (?<!\\.)\\b(?>break|continue|do|goto|while|case|default)\\b\n      scope: keyword.control.loop.js\n    - match: (?<!\\.)\\b(?>enum|module|public|package|private|interface|protected)\\b\n      scope: keyword.other.reserved.js\n    - match: (?<!\\.)\\b(debugger)\\b\n      scope: keyword.other.js\n  literal-labels:\n    - match: |-\n        (?x)\n        (?<!\\?)(?<!\\?\\s)(?=(?>\n          ((')((?>[^'\\\\]|\\\\.)*)('))|\n          ((\")((?>[^\"\\\\]|\\\\.)*)(\"))|\n        )\\s*:)\n      push:\n        - match: \":\"\n          captures:\n            0: punctuation.separator.key-value.js\n          pop: true\n        - include: literal-string\n    - match: '(?<!\\.|\\?|\\?\\s)([_$a-zA-Z][$\\w]*)\\s*(:)'\n      scope: constant.other.object.key.js\n      captures:\n        1: string.unquoted.label.js\n        2: punctuation.separator.key-value.js\n  literal-language-constant:\n    - match: (?<!\\.)\\b(true)\\b\n      scope: constant.language.boolean.true.js\n    - match: (?<!\\.)\\b(false)\\b\n      scope: constant.language.boolean.false.js\n    - match: (?<!\\.)\\b(null)\\b\n      scope: constant.language.null.js\n    - match: (?<!\\.)\\b(undefined)\\b\n      scope: constant.language.undefined.js\n    - match: (?<!\\.)\\b(NaN)\\b\n      scope: constant.language.nan.js\n  literal-language-variable:\n    - match: (?<!(?<!\\.\\.)\\.)\\b(arguments)\\b\n      scope: variable.language.arguments.js\n    - match: (?<!(?<!\\.\\.)\\.)\\b(super)\\b\n      scope: variable.language.super.js\n    - match: (?<!(?<!\\.\\.)\\.)\\b(this)\\b\n      scope: variable.language.this.js\n    - match: (?<!(?<!\\.\\.)\\.)\\b(self)\\b\n      scope: variable.language.self.js\n    - match: (?<=\\.)(__proto__)\\b\n      scope: variable.language.proto.js\n    - match: (?<=\\.)(constructor)\\b\n      scope: variable.language.constructor.js\n    - match: (?<=\\.)(prototype)\\b\n      scope: variable.language.prototype.js\n  literal-method:\n    - match: |-\n        (?x)\n        (?:\\b(static)\\s+)?\n        (?:\\b(async)\\s+)?\n        (?:(\\*)\\s*)?\n        (?>\n          ((')((?>[^'\\\\]|\\\\.)*)('))|\n          ((\")((?>[^\"\\\\]|\\\\.)*)(\"))|\n          (([_$a-zA-Z][$\\w]*|\\d+))\n        )\n        (?=\\s*(\\((?>(?>[^()]+)|\\g<-1>)*\\))(?>\\s|/\\*.*\\*/)*\\{)\n      captures:\n        1: storage.type.js\n        2: storage.type.js\n        3: keyword.generator.asterisk.js\n        4: string.quoted.js\n        5: punctuation.definition.string.begin.js\n        6: entity.name.function.js\n        7: punctuation.definition.string.end.js\n        8: string.quoted.js\n        9: punctuation.definition.string.begin.js\n        10: entity.name.function.js\n        11: punctuation.definition.string.end.js\n        12: string.unquoted.js\n        13: entity.name.function.js\n      push:\n        - meta_scope: meta.method.js\n        - match: (?<=\\))\n          pop: true\n        - include: function-declaration-parameters\n    - match: |-\n        (?x)\n        \\b(?:(static)\\s+)?\n        (get|set)\\s+\n        ([_$a-zA-Z][$\\w]*|\\d+)\\s*\n        (?=(\\((?>(?>[^()]+)|\\g<-1>)*\\))(?>\\s|/\\*.*\\*/)*\\{)\n      captures:\n        1: storage.type.js\n        2: storage.type.accessor.js\n        3: entity.name.accessor.js\n      push:\n        - meta_scope: meta.accessor.js\n        - match: (?<=\\))\n          pop: true\n        - include: function-declaration-parameters\n  literal-method-call:\n    - match: |-\n        (?x)\n        (?:(?<=\\.)|\\b)\n        ([A-Z][$\\w]*)\\s*(\\.)\n        ([_$a-zA-Z][$\\w]*)\\s*\n        (\\(\\s*\\))\n      scope: meta.function-call.static.without-arguments.js\n      captures:\n        1: variable.other.class.js\n        2: keyword.operator.accessor.js\n        3: variable.function.js\n        4: meta.group.braces.round.function.arguments.js\n    - match: |-\n        (?x)\n        (?:(?<=\\.)|\\b)\n        ([A-Z][$\\w]*)\\s*(\\.)\n        ([_$a-zA-Z][$\\w]*)\\s*\n        (?=\\()\n      scope: meta.function-call.static.with-arguments.js\n      captures:\n        1: variable.other.class.js\n        2: keyword.operator.accessor.js\n        3: variable.function.js\n    - match: |-\n        (?x)\n        (?<=\\.)\n        ([_$a-zA-Z][$\\w]*)\\s*\n        (\\(\\s*\\))\n      scope: meta.function-call.method.without-arguments.js\n      captures:\n        1: variable.function.js\n        2: meta.group.braces.round.function.arguments.js\n    - match: |-\n        (?x)\n        (?<=\\.)\n        ([_$a-zA-Z][$\\w]*)\\s*\n        (?=\\()\n      scope: meta.function-call.method.with-arguments.js\n      captures:\n        1: variable.function.js\n  literal-module:\n    - match: (?<!\\.)\\b(?>import|export|default|from|as)\\b\n      scope: keyword.operator.module.js\n  literal-number:\n    - match: '(?i)(?:\\B[-+]|\\b)0x[0-9a-f]*\\.(\\B|\\b[0-9]+)'\n      scope: invalid.illegal.numeric.hex.js\n    - match: '(?:\\B[-+]|\\b)0[0-9]+\\.(\\B|\\b[0-9]+)'\n      scope: invalid.illegal.numeric.octal.js\n    - match: |-\n        (?xi)\n        (?:\\B[-+])?\n        (?:\n          \\b0b[0-1]*|                 # binary\n          \\b0o[0-7]*|                 # octal\n          \\b0x[0-9a-f]*|              # hex\n          (\n            \\B\\.[0-9]+|               # e.g. .999\n            \\b[0-9]+(\\.[0-9]*)?       # e.g. 999.999, 999. or 999\n          )(e[-+]?[0-9]+)?            # e.g. e+123, E-123\n        )\n      scope: constant.numeric.js\n    - match: '(?:\\B[-+]|\\b)(Infinity)\\b'\n      scope: constant.language.infinity.js\n  literal-operators:\n    - match: (?<!\\.)\\b(?>delete|instanceof|in|new|of|typeof|void|with)\\b\n      scope: keyword.operator.js\n    - match: |-\n        (?x)\n        !(?!=)| # logical-not     right-to-left   right\n        &&    | # logical-and     left-to-right   both\n        \\|\\|    # logical-or      left-to-right   both\n      scope: keyword.operator.logical.js\n    - match: |-\n        (?x)\n        =(?!=)  # assignment      right-to-left   both\n      scope: keyword.operator.assignment.js\n    - match: |-\n        (?x)\n        %=   | # assignment      right-to-left   both\n        &=   | # assignment      right-to-left   both\n        \\*=  | # assignment      right-to-left   both\n        \\+=  | # assignment      right-to-left   both\n        -=   | # assignment      right-to-left   both\n        /=   | # assignment      right-to-left   both\n        \\^=  | # assignment      right-to-left   both\n        \\|=  | # assignment      right-to-left   both\n        <<=  | # assignment      right-to-left   both\n        >>=  | # assignment      right-to-left   both\n        >>>=   # assignment      right-to-left   both\n      scope: keyword.operator.assignment.augmented.js\n    - match: |-\n        (?x)\n        ~    | # bitwise-not     right-to-left   right\n        <<   | # bitwise-shift   left-to-right   both\n        >>>  | # bitwise-shift   left-to-right   both\n        >>   | # bitwise-shift   left-to-right   both\n        &    | # bitwise-and     left-to-right   both\n        \\^   | # bitwise-xor     left-to-right   both\n        \\|     # bitwise-or      left-to-right   both\n      scope: keyword.operator.bitwise.js\n    - match: |-\n        (?x)\n        <=   | # relational      left-to-right   both\n        >=   | # relational      left-to-right   both\n        <    | # relational      left-to-right   both\n        >      # relational      left-to-right   both\n      scope: keyword.operator.relational.js\n    - match: |-\n        (?x)\n        ===  | # equality        left-to-right   both\n        !==  | # equality        left-to-right   both\n        ==   | # equality        left-to-right   both\n        !=     # equality        left-to-right   both\n      scope: keyword.operator.comparison.js\n    - match: |-\n        (?x)\n        --   | # decrement       n/a             right-or-left\n        \\+\\+ | # increment       n/a             right-or-left\n        /    | # division        left-to-right   both\n        %    | # modulus         left-to-right   both\n        \\*   | # multiplication  left-to-right   both\n        \\+   | # addition        left-to-right   both\n        -      # subtraction     left-to-right   both\n      scope: keyword.operator.arithmetic.js\n    - match: \"[?:]\"\n      scope: keyword.operator.ternary.js\n    - match: (?<!\\.)\\.\\.\\.\n      scope: keyword.operator.spread.js\n    - match: \\.\n      scope: keyword.operator.accessor.js\n  literal-prototype:\n    - match: '([_$a-zA-Z][$\\w]*)(\\.)(prototype)\\s*(=)\\s*'\n      scope: meta.prototype.declaration.js\n      captures:\n        1: entity.name.class.js\n        2: keyword.operator.accessor.js\n        3: variable.language.prototype.js\n        4: keyword.operator.assignment.js\n    - match: '([_$a-zA-Z][$\\w]*)(\\.)(prototype)\\b'\n      scope: meta.prototype.access.js\n      captures:\n        1: entity.name.class.js\n        2: keyword.operator.accessor.js\n        3: variable.language.prototype.js\n  literal-punctuation:\n    - match: ;\n      scope: punctuation.terminator.statement.js\n    - match: \",\"\n      scope: meta.delimiter.comma.js\n  literal-regexp:\n    - match: |-\n        (?x)\n        (?<=\n          \\.|\\(|,|{|}|\\[|;|<|>|<=|>=|==|!=|===|!==|\\+|-|\\*|%|\\+\\+|--|<<|>>|>>>|&|\\||\\^|!|~|&&|\\|\\||\\?|:|=|\\+=|-=|\\*=|%=|<<=|>>=|>>>=|&=|\\|=|\\^=|/|/=|\n          \\Wnew|\\Wdelete|\\Wvoid|\\Wtypeof|\\Winstanceof|\\Win|\\Wdo|\\Wreturn|\\Wcase|\\Wthrow|\\Wyield|\n          ^new|^delete|^void|^typeof|^instanceof|^in|^do|^return|^case|^throw|^yield|^\n        )\\s*\n        (/)\n        (?!/|\\*|$)\n      captures:\n        1: punctuation.definition.string.begin.js\n      push:\n        - meta_scope: string.regexp.js\n        - match: \"(/)([gimy]*)\"\n          captures:\n            1: punctuation.definition.string.end.js\n            2: keyword.other.js\n          pop: true\n        - include: scope:source.regexp.js\n  literal-string:\n    - match: '([\"''])'\n      captures:\n        0: punctuation.definition.string.begin.js\n      push:\n        - meta_scope: string.quoted.js\n        - match: (\\1)|(\\n)\n          captures:\n            1: punctuation.definition.string.end.js\n            2: invalid.illegal.newline.js\n          pop: true\n        - include: string-content\n  literal-switch:\n    - match: (?<!\\.)\\b(switch)\\b\n      captures:\n        1: keyword.control.switch.js\n      push:\n        - meta_scope: meta.switch.js\n        - match: '\\}'\n          captures:\n            0: meta.brace.curly.end.js\n          pop: true\n        - include: comments\n        - include: round-brackets\n        - match: '\\{'\n          captures:\n            0: meta.brace.curly.begin.js\n          push:\n            - match: \"(?=})\"\n              pop: true\n            - match: (?<!\\.)\\b(case|default)\\b\n              captures:\n                1: keyword.control.switch.js\n              push:\n                - match: (?=:)\n                  pop: true\n                - include: expression\n            - include: main\n  literal-template-string:\n    - match: \"`\"\n      captures:\n        0: string.interpolated.js keyword.other.template.begin.js\n      push:\n        - match: \"`\"\n          captures:\n            0: string.interpolated.js keyword.other.template.end.js\n          pop: true\n        - include: string-content\n        - match: \\\\`\n          scope: constant.character.escape.js\n        - match: '\\${'\n          captures:\n            0: keyword.other.substitution.begin.js\n          push:\n            - match: \"}\"\n              captures:\n                0: keyword.other.substitution.end.js\n              pop: true\n            - include: expression\n        - match: .\n          scope: string.interpolated.js\n  literal-variable:\n    - match: '_*?[A-Z][_$\\dA-Z]*\\b'\n      scope: variable.other.constant.js\n    - match: '\\b([A-Z][$\\w]*)\\s*(\\.)([_$a-zA-Z][$\\w]*)'\n      scope: meta.property.class.js\n      captures:\n        1: variable.other.class.js\n        2: keyword.operator.accessor.js\n        3: variable.other.property.static.js\n    - match: '(?<!\\.)([_$a-zA-Z][$\\w]*)\\s*(?=[\\[\\.])'\n      scope: variable.other.object.js\n      captures:\n        1: variable.other.object.js\n    - match: '(?<=\\.)\\s*([_$a-zA-Z][$\\w]*)'\n      scope: meta.property.object.js\n      captures:\n        1: variable.other.property.js\n    - match: '[_$a-zA-Z][$\\w]*'\n      scope: variable.other.readwrite.js\n  merge-conflits:\n    - match: '^([<]{7})\\s(.+)$'\n      captures:\n        1: invalid.illegal.conflict-marker.merge-into.js\n        2: invalid.illegal.string.js\n    - match: \"^([=|]{7})$\"\n      captures:\n        1: invalid.illegal.conflict-marker.separator.js\n    - match: '^([>]{7})\\s(.+)$'\n      captures:\n        1: invalid.illegal.conflict-marker.other-commit.js\n        2: invalid.illegal.string.js\n  round-brackets:\n    - match: \\(\n      captures:\n        0: meta.brace.round.begin.js\n      push:\n        - meta_scope: meta.group.braces.round.js\n        - match: \\)\n          captures:\n            0: meta.brace.round.end.js\n          pop: true\n        - include: expression\n  square-brackets:\n    - match: '\\['\n      captures:\n        0: meta.brace.square.begin.js\n      push:\n        - meta_scope: meta.group.braces.square.js\n        - match: '\\]'\n          captures:\n            0: meta.brace.square.end.js\n          pop: true\n        - include: expression\n  string-content:\n    - match: \\\\\\s*\\n\n      scope: constant.character.escape.newline.js\n    - match: '\\\\([1-7][0-7]{0,2}|[0-7]{2,3}|[bfnrtv0''\"\\\\]|x\\h{2}|u\\{\\h+\\}|u\\h{4})'\n      scope: constant.character.escape.js\n  styled-components:\n    - match: (?<!\\.)\\b(injectGlobal|keyframes)\\s*(`)\n      captures:\n        1: variable.function.tagged-template.js\n        2: punctuation.definition.string.template.begin.js\n      push:\n        - meta_scope: meta.styled-components.js\n        - meta_content_scope: source.css.embedded.js\n        - match: \"`\"\n          captures:\n            0: punctuation.definition.string.template.end.js\n          pop: true\n        - include: scope:source.js.css\n    - match: '(?<!\\.)\\b(styled)(\\.)([_$a-zA-Z][$\\w]*)\\s*(`)'\n      captures:\n        1: variable.other.object.js\n        2: punctuation.accessor.js\n        3: variable.function.tagged-template.js\n        4: punctuation.definition.string.template.begin.js\n      push:\n        - meta_scope: meta.styled-components.js\n        - meta_content_scope: source.css.embedded.js\n        - match: \"`\"\n          captures:\n            0: punctuation.definition.string.template.end.js\n          pop: true\n        - include: scope:source.js.css\n    - match: '(?<!\\.)\\b(styled)\\s*(?=(\\((?>(?>[^()]+)|\\g<-1>)*\\))\\s*`)'\n      captures:\n        1: meta.function-call.with-arguments.js variable.function.js\n      push:\n        - meta_scope: meta.styled-components.js\n        - match: (?<=`)\n          captures:\n            1: meta.function-call.with-arguments.js variable.function.js\n          pop: true\n        - match: \\(\n          captures:\n            0: punctuation.definition.group.begin.js\n          push:\n            - meta_scope: meta.function-call.with-arguments.js meta.group.js\n            - match: \\)\n              captures:\n                0: punctuation.definition.group.end.js\n              pop: true\n            - include: expression\n        - match: \"`\"\n          captures:\n            0: punctuation.definition.string.template.begin.js\n          push:\n            - meta_content_scope: source.css.embedded.js\n            - match: \"`\"\n              captures:\n                0: punctuation.definition.string.template.end.js\n              pop: true\n            - include: scope:source.js.css\n  support-class:\n    - match: (?<!\\.)\\b(Array|ArrayBuffer|Boolean|DataView|Date|Float32Array|Float64Array|Function|Infinity|Int16Array|Int32Array|Int8Array|JSON|Map|Math|NaN|Number|Object|Promise|Proxy|Reflect|RegExp|Set|String|Symbol|System|TypeError|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|WeakMap|WeakSet)\\b\n      scope: support.class.builtin.js\n    - match: (?<!\\.)\\b((?>Eval|Range|Reference|Syntax|Type|URI)?Error)\\b\n      scope: support.class.error.js\n    - match: \\b(?>Buffer)\\b\n      scope: support.class.node.js\n  support-other:\n    - match: (?<!\\.)\\b(constructor|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|eval|hasOwnProperty|isFinite|isNaN|isPrototypeOf|parseFloat|parseInt|propertyIsEnumerable|toLocaleString|toString|unescape|valueOf)\\b\n      scope: support.function.builtin.js\n    - match: (?<!\\.)\\b(clearImmediate|clearInterval|clearTimeout|require|setImmediate|setInterval|setTimeout)\\b\n      scope: support.function.node.js\n    - match: (?<!\\.)\\b(?>document|window)\\b\n      scope: support.type.object.dom.js\n    - match: (?<!\\.)\\b(?>global|GLOBAL|root|__dirname|__filename)\\b\n      scope: support.type.object.node.js\n    - match: (?<!\\.)\\b(console)(?:(\\.)(assert|count|dir|error|group|groupCollapsed|groupEnd|info|log|profile|profileEnd|table|time|timeEnd|trace|warn))?\\b\n      captures:\n        1: support.type.object.console.js\n        2: keyword.operator.accessor.js\n        3: support.function.console.js\n    - match: (?<!\\.)\\b(process)(?:(\\.)(?:(arch|argv|config|env|execArgv|execPath|exitCode|mainModule|pid|platform|stderr|stdin|stdout|title|version|versions)|(abort|chdir|cwd|exit|getgid|getgroups|getuid|hrtime|initgroups|kill|memoryUsage|nextTick|setgid|setgroups|setuid|umask|uptime)))?\\b\n      captures:\n        1: support.type.object.process.js\n        2: keyword.operator.accessor.js\n        3: support.type.object.process.js\n        4: support.function.process.js\n    - match: (?<!\\.)\\b(exports|module)(?:(\\.)(children|exports|filename|id|loaded|parent))?\\b\n      captures:\n        1: support.type.object.module.js\n        2: keyword.operator.accessor.js\n        3: support.type.object.module.js\n    - match: \"{{\"\n      push:\n        - meta_scope: meta.tag.mustache.js\n        - match: \"}}\"\n          pop: true\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/Kotlin.sublime-syntax",
    "content": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: Kotlin\nfile_extensions:\n  - kt\n  - kts\nscope: source.Kotlin\ncontexts:\n  main:\n    - include: comments\n    - match: '^\\s*(package)\\b(?:\\s*([^ ;$]+)\\s*)?'\n      captures:\n        1: keyword.other.kotlin\n        2: entity.name.package.kotlin\n    - include: imports\n    - include: statements\n  classes:\n    - match: (?<!::)(?=\\b(?:companion|class|object|interface)\\b)\n      push:\n        - match: '(?=$|\\})'\n          pop: true\n        - include: comments\n        - match: \\b(companion\\s*)?(class|object|interface)\\b\n          captures:\n            1: storage.modifier.kotlin\n            2: storage.modifier.kotlin\n          push:\n            - match: '(?=<|\\{|\\(|:|$)'\n              pop: true\n            - include: comments\n            - match: \\w+\n              scope: entity.name.type.class.kotlin\n        - match: <\n          push:\n            - match: \">\"\n              pop: true\n            - include: generics\n        - match: \\(\n          push:\n            - match: \\)\n              pop: true\n            - include: parameters\n        - match: (:)\n          captures:\n            1: keyword.operator.declaration.kotlin\n          push:\n            - match: \"(?={|$)\"\n              pop: true\n            - match: \\w+\n              scope: entity.other.inherited-class.kotlin\n            - match: \\(\n              push:\n                - match: \\)\n                  pop: true\n                - include: expressions\n        - match: '\\{'\n          push:\n            - match: '\\}'\n              pop: true\n            - include: statements\n  comments:\n    - match: /\\*\n      captures:\n        0: punctuation.definition.comment.kotlin\n      push:\n        - meta_scope: comment.block.kotlin\n        - match: \\*/\n          captures:\n            0: punctuation.definition.comment.kotlin\n          pop: true\n    - match: \\s*((//).*$\\n?)\n      captures:\n        1: comment.line.double-slash.kotlin\n        2: punctuation.definition.comment.kotlin\n  constants:\n    - match: \\b(true|false|null|this|super)\\b\n      scope: constant.language.kotlin\n    - match: '\\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\\.?[0-9]*)|(\\.[0-9]+))((e|E)(\\+|-)?[0-9]+)?)([LlFf])?\\b'\n      scope: constant.numeric.kotlin\n    - match: '\\b([A-Z][A-Z0-9_]+)\\b'\n      scope: constant.other.kotlin\n  expressions:\n    - match: \\(\n      push:\n        - match: \\)\n          pop: true\n        - include: expressions\n    - include: types\n    - include: strings\n    - include: constants\n    - include: comments\n    - include: keywords\n  functions:\n    - match: (?=\\s*\\b(?:fun)\\b)\n      push:\n        - match: '(?=$|\\})'\n          pop: true\n        - match: \\b(fun)\\b\n          captures:\n            1: keyword.other.kotlin\n          push:\n            - match: (?=\\()\n              pop: true\n            - match: <\n              push:\n                - match: \">\"\n                  pop: true\n                - include: generics\n            - match: '([\\.<\\?>\\w]+\\.)?(\\w+)'\n              captures:\n                2: entity.name.function.kotlin\n        - match: \\(\n          push:\n            - match: \\)\n              pop: true\n            - include: parameters\n        - match: (:)\n          captures:\n            1: keyword.operator.declaration.kotlin\n          push:\n            - match: \"(?={|=|$)\"\n              pop: true\n            - include: types\n        - match: '\\{'\n          push:\n            - match: '(?=\\})'\n              pop: true\n            - include: statements\n        - match: (=)\n          captures:\n            1: keyword.operator.assignment.kotlin\n          push:\n            - match: (?=$)\n              pop: true\n            - include: expressions\n  generics:\n    - match: (:)\n      captures:\n        1: keyword.operator.declaration.kotlin\n      push:\n        - match: (?=,|>)\n          pop: true\n        - include: types\n    - include: keywords\n    - match: \\w+\n      scope: storage.type.generic.kotlin\n  getters-and-setters:\n    - match: \\b(get)\\b\\s*\\(\\s*\\)\n      captures:\n        1: entity.name.function.kotlin\n      push:\n        - match: '\\}|(?=\\bset\\b)|$'\n          pop: true\n        - match: (=)\n          captures:\n            1: keyword.operator.assignment.kotlin\n          push:\n            - match: (?=$|\\bset\\b)\n              pop: true\n            - include: expressions\n        - match: '\\{'\n          push:\n            - match: '\\}'\n              pop: true\n            - include: expressions\n    - match: \\b(set)\\b\\s*(?=\\()\n      captures:\n        1: entity.name.function.kotlin\n      push:\n        - match: '\\}|(?=\\bget\\b)|$'\n          pop: true\n        - match: \\(\n          push:\n            - match: \\)\n              pop: true\n            - include: parameters\n        - match: (=)\n          captures:\n            1: keyword.operator.assignment.kotlin\n          push:\n            - match: (?=$|\\bset\\b)\n              pop: true\n            - include: expressions\n        - match: '\\{'\n          push:\n            - match: '\\}'\n              pop: true\n            - include: expressions\n  imports:\n    - match: '^\\s*(import)\\s+[^ $]+\\s+(as)?'\n      captures:\n        1: keyword.other.kotlin\n        2: keyword.other.kotlin\n  keywords:\n    - match: \\b(var|val|public|private|protected|abstract|final|sealed|enum|open|attribute|annotation|override|inline|vararg|in|out|internal|data|tailrec|operator|infix|const|yield|typealias|typeof|reified|suspend)\\b\n      scope: storage.modifier.kotlin\n    - match: \\b(try|catch|finally|throw)\\b\n      scope: keyword.control.catch-exception.kotlin\n    - match: \\b(if|else|while|for|do|return|when|where|break|continue)\\b\n      scope: keyword.control.kotlin\n    - match: \\b(in|is|!in|!is|as|as\\?|assert)\\b\n      scope: keyword.operator.kotlin\n    - match: (==|!=|===|!==|<=|>=|<|>)\n      scope: keyword.operator.comparison.kotlin\n    - match: (=)\n      scope: keyword.operator.assignment.kotlin\n    - match: (::)\n      scope: keyword.operator.kotlin\n    - match: (:)\n      scope: keyword.operator.declaration.kotlin\n    - match: \\b(by)\\b\n      scope: keyword.other.by.kotlin\n    - match: (\\?\\.)\n      scope: keyword.operator.safenav.kotlin\n    - match: (\\.)\n      scope: keyword.operator.dot.kotlin\n    - match: (\\?:)\n      scope: keyword.operator.elvis.kotlin\n    - match: (\\-\\-|\\+\\+)\n      scope: keyword.operator.increment-decrement.kotlin\n    - match: (\\+=|\\-=|\\*=|\\/=)\n      scope: keyword.operator.arithmetic.assign.kotlin\n    - match: (\\.\\.)\n      scope: keyword.operator.range.kotlin\n    - match: (\\-|\\+|\\*|\\/|%)\n      scope: keyword.operator.arithmetic.kotlin\n    - match: (!|&&|\\|\\|)\n      scope: keyword.operator.logical.kotlin\n    - match: (;)\n      scope: punctuation.terminator.kotlin\n  namespaces:\n    - match: \\b(namespace)\\b\n      scope: keyword.other.kotlin\n    - match: '\\{'\n      push:\n        - match: '\\}'\n          pop: true\n        - include: statements\n  parameters:\n    - match: (:)\n      captures:\n        1: keyword.operator.declaration.kotlin\n      push:\n        - match: (?=,|\\)|=)\n          pop: true\n        - include: types\n    - match: (=)\n      captures:\n        1: keyword.operator.declaration.kotlin\n      push:\n        - match: (?=,|\\))\n          pop: true\n        - include: expressions\n    - include: keywords\n    - match: \\w+\n      scope: variable.parameter.function.kotlin\n  statements:\n    - include: namespaces\n    - include: typedefs\n    - include: classes\n    - include: functions\n    - include: variables\n    - include: getters-and-setters\n    - include: expressions\n  strings:\n    - match: '\"\"\"'\n      captures:\n        0: punctuation.definition.string.begin.kotlin\n      push:\n        - meta_scope: string.quoted.third.kotlin\n        - match: '\"\"\"'\n          captures:\n            0: punctuation.definition.string.end.kotlin\n          pop: true\n        - match: '(\\$\\w+|\\$\\{[^\\}]+\\})'\n          scope: variable.parameter.template.kotlin\n        - match: \\\\.\n          scope: constant.character.escape.kotlin\n    - match: '\"'\n      captures:\n        0: punctuation.definition.string.begin.kotlin\n      push:\n        - meta_scope: string.quoted.double.kotlin\n        - match: '\"'\n          captures:\n            0: punctuation.definition.string.end.kotlin\n          pop: true\n        - match: '(\\$\\w+|\\$\\{[^\\}]+\\})'\n          scope: variable.parameter.template.kotlin\n        - match: \\\\.\n          scope: constant.character.escape.kotlin\n    - match: \"'\"\n      captures:\n        0: punctuation.definition.string.begin.kotlin\n      push:\n        - meta_scope: string.quoted.single.kotlin\n        - match: \"'\"\n          captures:\n            0: punctuation.definition.string.end.kotlin\n          pop: true\n        - match: \\\\.\n          scope: constant.character.escape.kotlin\n    - match: \"`\"\n      captures:\n        0: punctuation.definition.string.begin.kotlin\n      push:\n        - meta_scope: string.quoted.single.kotlin\n        - match: \"`\"\n          captures:\n            0: punctuation.definition.string.end.kotlin\n          pop: true\n  typedefs:\n    - match: (?=\\s*(?:type))\n      push:\n        - match: (?=$)\n          pop: true\n        - match: \\b(type)\\b\n          scope: keyword.other.kotlin\n        - match: <\n          push:\n            - match: \">\"\n              pop: true\n            - include: generics\n        - include: expressions\n  types:\n    - match: \\b(Nothing|Any|Unit|String|CharSequence|Int|Boolean|Char|Long|Double|Float|Short|Byte|dynamic)\\b\n      scope: storage.type.buildin.kotlin\n    - match: \\b(IntArray|BooleanArray|CharArray|LongArray|DoubleArray|FloatArray|ShortArray|ByteArray)\\b\n      scope: storage.type.buildin.array.kotlin\n    - match: \\b(Array|Collection|List|Map|Set|MutableList|MutableMap|MutableSet|Sequence)<\\b\n      captures:\n        1: storage.type.buildin.collection.kotlin\n      push:\n        - match: \">\"\n          pop: true\n        - include: types\n        - include: keywords\n    - match: \\w+<\n      push:\n        - match: \">\"\n          pop: true\n        - include: types\n        - include: keywords\n    - match: '\\{'\n      push:\n        - match: '\\}'\n          pop: true\n        - include: statements\n    - match: \\(\n      push:\n        - match: \\)\n          pop: true\n        - include: types\n    - match: (->)\n      scope: keyword.operator.declaration.kotlin\n  variables:\n    - match: (?=\\s*\\b(?:var|val)\\b)\n      push:\n        - match: (?=:|=|(\\b(by)\\b)|$)\n          pop: true\n        - match: \\b(var|val)\\b\n          captures:\n            1: keyword.other.kotlin\n          push:\n            - match: (?=:|=|(\\b(by)\\b)|$)\n              pop: true\n            - match: <\n              push:\n                - match: \">\"\n                  pop: true\n                - include: generics\n            - match: '([\\.<\\?>\\w]+\\.)?(\\w+)'\n              captures:\n                2: entity.name.variable.kotlin\n        - match: (:)\n          captures:\n            1: keyword.operator.declaration.kotlin\n          push:\n            - match: (?==|$)\n              pop: true\n            - include: types\n            - include: getters-and-setters\n        - match: \\b(by)\\b\n          captures:\n            1: keyword.other.kotlin\n          push:\n            - match: (?=$)\n              pop: true\n            - include: expressions\n        - match: (=)\n          captures:\n            1: keyword.operator.assignment.kotlin\n          push:\n            - match: (?=$)\n              pop: true\n            - include: expressions\n            - include: getters-and-setters\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/Lean.sublime-syntax",
    "content": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/syntax.html\nname: Lean 4\nfile_extensions:\n  - lean\nscope: source.lean4\ncontexts:\n  main:\n    - include: comments\n    - match: \\b(Prop|Type|Sort)\\b\n      scope: storage.type.lean4\n    - match: '\\battribute\\b\\s*\\[[^\\]]*\\]'\n      scope: storage.modifier.lean4\n    - match: '@\\[[^\\]]*\\]'\n      scope: storage.modifier.lean4\n    - match: \\b(?<!\\.)(global|local|scoped|partial|unsafe|private|protected|noncomputable)(?!\\.)\\b\n      scope: storage.modifier.lean4\n    - match: \\b(sorry|admit|stop)\\b\n      scope: invalid.illegal.lean4\n    - match: '#(print|eval|reduce|check|check_failure)\\b'\n      scope: keyword.other.lean4\n    - match: \\bderiving\\s+instance\\b\n      scope: keyword.other.command.lean4\n    - match: '\\b(?<!\\.)(inductive|coinductive|structure|theorem|axiom|abbrev|lemma|def|instance|class|constant)\\b\\s+(\\{[^}]*\\})?'\n      captures:\n        1: keyword.other.definitioncommand.lean4\n      push:\n        - meta_scope: meta.definitioncommand.lean4\n        - match: '(?=\\bwith\\b|\\bextends\\b|\\bwhere\\b|[:\\|\\(\\[\\{⦃<>])'\n          pop: true\n        - include: comments\n        - include: definitionName\n        - match: ','\n    - match: \\b(?<!\\.)(theorem|show|have|from|suffices|nomatch|def|class|structure|instance|set_option|initialize|builtin_initialize|example|inductive|coinductive|axiom|constant|universe|universes|variable|variables|import|open|export|theory|prelude|renaming|hiding|exposing|do|by|let|extends|mutual|mut|where|rec|syntax|macro_rules|macro|deriving|fun|section|namespace|end|infix|infixl|infixr|postfix|prefix|notation|abbrev|if|then|else|calc|match|with|for|in|unless|try|catch|finally|return|continue|break)(?!\\.)\\b\n      scope: keyword.other.lean4\n    - match: «\n      push:\n        - meta_content_scope: entity.name.lean4\n        - match: »\n          pop: true\n    - match: (s!)\"\n      captures:\n        1: keyword.other.lean4\n      push:\n        - meta_scope: string.interpolated.lean4\n        - match: '\"'\n          pop: true\n        - match: '(\\{)'\n          captures:\n            1: keyword.other.lean4\n          push:\n            - match: '(\\})'\n              captures:\n                1: keyword.other.lean4\n              pop: true\n            - include: main\n        - match: '\\\\[\\\\\"ntr'']'\n          scope: constant.character.escape.lean4\n        - match: '\\\\x[0-9A-Fa-f][0-9A-Fa-f]'\n          scope: constant.character.escape.lean4\n        - match: '\\\\u[0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]'\n          scope: constant.character.escape.lean4\n    - match: '\"'\n      push:\n        - meta_scope: string.quoted.double.lean4\n        - match: '\"'\n          pop: true\n        - match: '\\\\[\\\\\"ntr'']'\n          scope: constant.character.escape.lean4\n        - match: '\\\\x[0-9A-Fa-f][0-9A-Fa-f]'\n          scope: constant.character.escape.lean4\n        - match: '\\\\u[0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]'\n          scope: constant.character.escape.lean4\n    - match: \\b(true|false)\\b\n      scope: constant.language.lean4\n    - match: '''[^\\\\'']'''\n      scope: string.quoted.single.lean4\n    - match: '''(\\\\(x[0-9A-Fa-f][0-9A-Fa-f]|u[0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]|.))'''\n      scope: string.quoted.single.lean4\n      captures:\n        1: constant.character.escape.lean4\n    - match: '`+[^\\[(]\\S+'\n      scope: entity.name.lean4\n    - match: '\\b([0-9]+|0([xX][0-9a-fA-F]+)|[-]?(0|[1-9][0-9]*)(\\.[0-9]+)?([eE][+-]?[0-9]+)?)\\b'\n      scope: constant.numeric.lean4\n  blockComment:\n    - match: /-\n      push:\n        - meta_scope: comment.block.lean4\n        - match: '-/'\n          pop: true\n        - include: scope:source.lean4.markdown\n        - include: blockComment\n  comments:\n    - include: dashComment\n    - include: docComment\n    - include: modDocComment\n    - include: blockComment\n  dashComment:\n    - match: '--'\n      push:\n        - meta_scope: comment.line.double-dash.lean4\n        - match: $\n          pop: true\n        - include: scope:source.lean4.markdown\n  definitionName:\n    - match: '\\b[^:«»\\(\\)\\{\\}[:space:]=→λ∀?][^:«»\\(\\)\\{\\}[:space:]]*'\n      scope: entity.name.function.lean4\n    - match: «\n      push:\n        - meta_content_scope: entity.name.function.lean4\n        - match: »\n          pop: true\n  docComment:\n    - match: /--\n      push:\n        - meta_scope: comment.block.documentation.lean4\n        - match: '-/'\n          pop: true\n        - include: scope:source.lean4.markdown\n        - include: blockComment\n  modDocComment:\n    - match: /-!\n      push:\n        - meta_scope: comment.block.documentation.lean4\n        - match: '-/'\n          pop: true\n        - include: scope:source.lean4.markdown\n        - include: blockComment\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/LiveScript.sublime-syntax",
    "content": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: LiveScript\ncomment: \"LiveScript Syntax: version 1\"\nfile_extensions:\n  - ls\n  - Slakefile\n  - ls.erb\nfirst_line_match: ^#!.*\\bls\nscope: source.livescript\ncontexts:\n  main:\n    - match: |-\n        (?x)\n          !?[~-]{1,2}>\\*?\n          |<[~-]{1,2}!?\n          |\\(\\s* (?=    instanceof[\\s)]|and[\\s)]|or[\\s)]|is[\\s)]|isnt[\\s)]|in[\\s)]|import[\\s)]|import\\ all[\\s)]     |\\.|[-+/*%^&<>=|][\\b\\s)\\w$]|\\*\\*|\\%\\%)\n          |      (?<=[\\s(]instanceof|[\\s(]and|[\\s(]or|[\\s(]is|[\\s(]isnt|[\\s(]in|[\\s(]import|[\\s(]import\\ all|[\\s(]do|\\.|\\*\\*|\\%\\%|[\\b\\s(\\w$][-+/*%^&<>=|]) \\s*\\)\n      scope: storage.type.function.livescript\n    - match: \\/\\*\n      captures:\n        0: punctuation.definition.comment.livescript\n      push:\n        - meta_scope: comment.block.livescript\n        - match: \\*\\/\n          captures:\n            0: punctuation.definition.comment.livescript\n          pop: true\n        - match: '@\\w*'\n          scope: storage.type.annotation.livescriptscript\n    - match: '(#)(?!\\{).*$\\n?'\n      scope: comment.line.number-sign.livescript\n      captures:\n        1: punctuation.definition.comment.livescript\n    - match: '((?:!|~|!~|~!)?function\\*?)\\s+([$\\w\\-]*[$\\w]+)'\n      captures:\n        1: storage.type.function.livescript\n        2: entity.name.function.livescript\n    - match: (new)\\s+(\\w+(?:\\.\\w*)*)\n      captures:\n        1: keyword.operator.new.livescript\n        2: entity.name.type.instance.livescript\n    - match: \\b(package|private|protected|public|interface|enum|static)(?!-)\\b\n      scope: keyword.illegal.livescript\n    - match: \"'''\"\n      captures:\n        0: punctuation.definition.string.begin.livescript\n      push:\n        - meta_scope: string.quoted.heredoc.livescript\n        - match: \"'''\"\n          captures:\n            0: punctuation.definition.string.end.livescript\n          pop: true\n    - match: '\"\"\"'\n      captures:\n        0: punctuation.definition.string.begin.livescript\n      push:\n        - meta_scope: string.quoted.double.heredoc.livescript\n        - match: '\"\"\"'\n          captures:\n            0: punctuation.definition.string.end.livescript\n          pop: true\n        - match: \\\\.\n          scope: constant.character.escape.livescript\n        - include: interpolated_livescript\n    - match: \"``\"\n      captures:\n        0: punctuation.definition.string.begin.livescript\n      push:\n        - meta_scope: string.quoted.script.livescript\n        - match: \"``\"\n          captures:\n            0: punctuation.definition.string.end.livescript\n          pop: true\n        - match: '\\\\(x[0-9A-Fa-f]{2}|[0-2][0-7]{0,2}|3[0-6][0-7]|37[0-7]?|[4-7][0-7]?|.)'\n          scope: constant.character.escape.livescript\n    - match: '<\\['\n      push:\n        - meta_scope: string.array-literal.livescript\n        - match: '\\]>'\n          pop: true\n    - match: '/{2}(?![\\s=/*+{}?]).*?[^\\\\]/[igmy]{0,4}(?![a-zA-Z0-9])/{2}'\n      scope: string.regexp.livescript\n    - match: '/{2}\\n'\n      push:\n        - meta_scope: string.regexp.livescript\n        - match: \"/{2}[imgy]{0,4}\"\n          pop: true\n        - include: embedded_spaced_comment\n        - include: interpolated_livescript\n    - match: \"/{2}\"\n      push:\n        - meta_scope: string.regexp.livescript\n        - match: \"/{2}[imgy]{0,4}\"\n          pop: true\n        - match: '\\\\(x[0-9A-Fa-f]{2}|[0-2][0-7]{0,2}|3[0-6][0-7]|37[0-7]?|[4-7][0-7]?|.)'\n          scope: constant.character.escape.livescript\n        - include: interpolated_livescript\n    - match: '/(?![\\s=/*+{}?]).*?[^\\\\]/[igmy]{0,4}(?![a-zA-Z0-9])'\n      scope: string.regexp.livescript\n    - match: |-\n        (?x)\n          \\b(?<![\\.\\$\\-@])(\n            instanceof|new|delete|typeof|and|or|is|isnt|not\n          )(?!\\-|\\s*:)\\b\n      scope: keyword.operator.livescript\n    - match: <\\||\\|>\n      scope: keyword.operator.livescript\n    - match: \"=>\"\n      scope: keyword.control.livescript\n    - match: |-\n        (?x)\n          \\b(?<![\\.\\$\\-@])(?:\n          return|break|continue|throw\n          |try|if|while|for|for\\s+own|switch|unless|until\n          |catch|finally|else|nobreak|case|default|fallthrough|when|otherwise|then\n          |yield\n          )(?!\\-|\\s*:)\\b\n      scope: keyword.control.livescript\n    - match: |-\n        (?x)\n          and=|or=|%|&|\\^|\\*|\\/|(?<![a-zA-Z$_])(\\-)?\\-(?!\\-?>)|\\+\\+|\\+|\n          ~(?!~?>)|==|=|!=|<=|>=|<<=|>>=|\n          >>>=|<>|<(?!\\[)|(?<!\\])>|(?<!\\w)!(?!([~\\-]+)?>)|&&|\\.\\.(\\.)?|\\s\\.\\s|\\?|\\|\\||\\:|\\*=|(?<!\\()/=|%=|\\+=|\\-=|\\.=|&=\n          |\\^=\n      scope: keyword.operator.livescript\n    - match: |-\n        (?x)\n          \\b(?<![\\.\\$\\-@])(?:\n          function\n          )(?!\\-|\\s*:)\\b\n      scope: storage.type.function.livescript\n    - match: |-\n        (?x)\n          \\b(?<![\\.\\$\\-@])(?:\n          this|throw|then|try|typeof!?|til|to\n          |continue|const|case|catch|class\n          |in|instanceof|import|import\\s+all|implements|if|is\n          |default|delete|debugger|do\n          |for|for\\s+own|finally|function|from|fallthrough\n          |super|switch\n          |else|nobreak|extends|export|eval\n          |and|arguments\n          |new|not\n          |unless|until\n          |while|with|when\n          |of|or|otherwise\n          |let|var|loop\n          |match\n          |by|yield\n          )(?!\\-|\\s*:)\\b\n      scope: keyword.other.livescript\n    - match: '([a-zA-Z\\$_](?:[\\w$.-])*)\\s*(?!\\::)((:)|(=(?!>)))\\s*(?!(\\s*!?\\s*\\(.*\\))?\\s*(!?[~-]{1,2}>\\*?))'\n      captures:\n        1: variable.assignment.livescript\n        3: punctuation.separator.key-value, keyword.operator.livescript\n        4: keyword.operator.livescript\n    - match: '(?<=\\s|^)([\\[\\{])(?=.*?[\\]\\}]\\s+[:=])'\n      captures:\n        0: keyword.operator.livescript\n      push:\n        - meta_scope: meta.variable.assignment.destructured.livescript\n        - match: '([\\]\\}]\\s*[:=])'\n          captures:\n            0: keyword.operator.livescript\n          pop: true\n        - include: variable_name\n        - include: instance_variable\n        - include: single_quoted_string\n        - include: double_quoted_string\n        - include: numeric\n    - match: |-\n        (?x)\n          (\\s*)\n          (?=[a-zA-Z\\$_])\n          ([a-zA-Z\\$_]([\\w$.:-])*)\\s*\n          (?=[:=](\\s*!?\\s*\\(.*\\))?\\s*(!?[~-]{1,2}>\\*?))\n      scope: meta.function.livescript\n      captures:\n        2: entity.name.function.livescript\n        3: entity.name.function.livescript\n        4: variable.parameter.function.livescript\n        5: storage.type.function.livescript\n    - match: \\b(?<!\\.)(true|on|yes)(?!\\s*:)\\b\n      scope: constant.language.boolean.true.livescript\n    - match: \\b(?<!\\.)(false|off|no)(?!\\s*:)\\b\n      scope: constant.language.boolean.false.livescript\n    - match: \\b(?<!\\.)(null|void)(?!\\s*:)\\b\n      scope: constant.language.null.livescript\n    - match: \\b(?<!\\.)(super|this|extends)(?!\\s*:)\\b\n      scope: variable.language.livescript\n    - match: '(class\\b)\\s+(@?[a-zA-Z$_][\\w$.-]*)?(?:\\s+(extends)\\s+(@?[a-zA-Z$_][\\w$.-]*))?'\n      scope: meta.class.livescript\n      captures:\n        1: storage.type.class.livescript\n        2: entity.name.type.class.livescript\n        3: keyword.control.inheritance.livescript\n        4: entity.other.inherited-class.livescript\n    - match: \\b(debugger|\\\\)\\b\n      scope: keyword.other.livescript\n    - match: |-\n        (?x)\\b(\n          Array|ArrayBuffer|Blob|Boolean|Date|document|event|Function|\n          Int(8|16|32|64)Array|Math|Map|Number|\n          Object|Proxy|RegExp|Set|String|WeakMap|\n          window|Uint(8|16|32|64)Array|XMLHttpRequest\n        )\\b\n      scope: support.class.livescript\n    - match: \\b(console)\\b\n      scope: entity.name.type.object.livescript\n    - match: \\b(Infinity|NaN|undefined)\\b\n      scope: constant.language.livescript\n    - match: \\;\n      scope: punctuation.terminator.statement.livescript\n    - match: ',[ |\\t]*'\n      scope: meta.delimiter.object.comma.livescript\n    - match: \\.\n      scope: meta.delimiter.method.period.livescript\n    - match: '\\{|\\}'\n      scope: meta.brace.curly.livescript\n    - match: \\(|\\)\n      scope: meta.brace.round.livescript\n    - match: '\\[|\\]\\s*'\n      scope: meta.brace.square.livescript\n    - include: instance_variable\n    - include: backslash_string\n    - include: single_quoted_string\n    - include: double_quoted_string\n    - include: numeric\n    - match: '()(@|@@|[$\\w\\-]*[$\\w]+)\\s*(`)'\n      captures:\n        1: keyword.operator.livescript\n        2: meta.function-call.livescript\n        3: keyword.operator.livescript\n    - match: \"`\"\n      scope: keyword.operator.livescript\n    - match: '()(@|@@|[$\\w\\-]*[$\\w]+)(?:(\\??\\!)|[(])'\n      captures:\n        1: keyword.operator.livescript\n        2: meta.function-call.livescript\n        3: keyword.operator.livescript\n    - match: '(@|@@|[$\\w\\-]*[$\\w]+)(\\?)? (?!\\s*(((by|of|and|or|with|when|unless|if|is|isnt|else|nobreak|for|from|not in|in|catch|til|to|then|import|extends|implements|instanceof)\\b)|[=:.*\\/+\\-%\\^<>][ =)]|[`}%*)]|/(?!.*?/)|&&|[.][^.]|=>|\\/ +|\\||\\|\\||\\-\\-|\\+\\+|\\|>|<|\\||$|\\n|\\#|/\\*))'\n      captures:\n        1: meta.function-call.livescript\n        2: keyword.operator.livescript\n    - match: \\| _\n      scope: keyword.control.livescript\n    - match: '\\|(?![.])'\n      scope: keyword.control.livescript\n    - match: \\|\n      scope: keyword.operator.livescript\n    - match: ((?<=console\\.)(debug|warn|info|log|error|time(End|-end)|assert))\\b\n      scope: support.function.console.livescript\n    - match: |-\n        (?x)\\b(\n          decodeURI(Component)?|encodeURI(Component)?|eval|parse(Float|Int)|require\n        )\\b\n      scope: support.function.livescript\n    - match: |-\n        (?x)(?<![.-])\\b(\n          map|filter|reject|partition|find|each|head|tail|last|initial|empty|\n          values|keys|length|cons|append|join|reverse|fold(l|r)?1?|unfoldr|\n          and(List|-list)|or(List|-list)|any|all|unique|sum|product|mean|compact|\n          concat(Map|-map)?|maximum|minimum|scan(l|r)?1?|replicate|slice|apply|\n          split(At|-at)?|take(While|-while)?|drop(While|-while)?|span|first|\n          break(It|-it)|list(ToObj|-to-obj)|obj(ToFunc|-to-func)|\n          pairs(ToObj|-to-obj)|obj(ToPairs|-to-pairs|ToLists|-to-lists)|\n          zip(All|-all)?(With|-with)?|compose|curry|partial|flip|fix|\n          sort(With|-with|By|-by)?|group(By|-by)|break(List|-list|Str|-str)|\n          difference|intersection|union|average|flatten|chars|unchars|repeat|\n          lines|unlines|words|unwords|max|min|negate|abs|signum|quot|rem|div|mod|\n          recip|pi|tau|exp|sqrt|ln|pow|sin|cos|tan|asin|acos|atan|atan2|truncate|\n          round|ceiling|floor|is(It|-it)NaN|even|odd|gcd|lcm|disabled__id\n        )\\b(?![.-])\n      comment: |\n        Generated by DOM query from http://gkz.github.com/prelude-ls/:\n                    [].slice\n                    .call(document.querySelectorAll(\".nav-pills li a\"))\n                    .map(function(_) {return _.innerText})\n                    .filter(function(_) {return _.trim() !== '})\n                    .slice(2)\n                    .join(\"|\")\n      scope: support.function.prelude.livescript\n    - match: '(?x)(?<![.-])\\b(that|it|e|_)\\b'\n      scope: support.function.semireserved.livescript\n    - match: |-\n        (?x)((?<=(\\.|\\]|\\)))(\n          apply|call|concat|every|filter|for(Each|-each)|\n          from|has(Own|-own)(Property|-property)|index(Of|-of)|\n          is(Prototype|-prototype)(Of|-of)|join|last(Index|-index)(Of|-of)|\n          map|of|pop|property(Is|-is)(Enumerable|-enumerable)|push|\n          reduce(Right|-right)?|reverse|shift|slice|some|sort|\n          splice|to(Locale|-locale)?(String|-string)|unshift|valueOf\n        ))\\b(?!-)\n      scope: support.function.method.array.livescript\n    - match: |-\n        (?x)((?<=Array\\.)(\n          isArray\n        ))\\b\n      scope: support.function.static.array.livescript\n    - match: |-\n        (?x)((?<=Object\\.)(\n          create|define(Propert|-propert)(ies|y)|freeze|\n          get(Own|-own)(Property|-property)(Descriptors?|Names)|\n          get(Property|-property)(Descriptor|Names)|getPrototypeOf|\n          is((Extensible|-extensible)|(Frozen|-frozen)|(Sealed|-sealed))?|\n          keys|prevent(Extensions|-extensions)|seal\n        ))\\b\n      scope: support.function.static.object.livescript\n    - match: |-\n        (?x)((?<=Math\\.)(\n          abs|acos|acosh|asin|asinh|atan|atan2|atanh|ceil|cos|cosh|exp|expm1|floor|\n          hypot|log|log10|log1p|log2|max|min|pow|random|round|sign|sin|sinh|sqrt|\n          tan|tanh|trunc\n        ))\\b\n      scope: support.function.static.math.livescript\n    - match: |-\n        (?x)((?<=Number\\.)(\n          is(Finite|Integer|NaN)|to(Integer|-integer)\n        ))\\b\n      scope: support.function.static.number.livescript\n    - match: '[\\$\\w][\\w-]*'\n      scope: variable.other.livescript\n  backslash_string:\n    - match: '\\\\([\\\\)\\s,\\};\\]])?'\n      captures:\n        0: string.quoted.single.livescript\n      push:\n        - meta_content_scope: string.quoted.single.livescript\n        - match: '([\\\\)\\s,\\};\\]])'\n          captures:\n            0: punctuation.definition.string.end.livescript\n          pop: true\n  constructor_variable:\n    - match: '([a-zA-Z$_][\\w$-]*)(@{2})([a-zA-Z$_][\\w$-]*)?'\n      scope: variable.other.readwrite.constructor.livescript\n  double_quoted_string:\n    - match: '\"'\n      captures:\n        0: punctuation.definition.string.begin.livescript\n      push:\n        - meta_scope: string.quoted.double.livescript\n        - match: '\"'\n          captures:\n            0: punctuation.definition.string.end.livescript\n          pop: true\n        - match: '\\\\(x[0-9A-Fa-f]{2}|[0-2][0-7]{0,2}|3[0-6][0-7]|37[0-7]?|[4-7][0-7]?|.)'\n          scope: constant.character.escape.livescript\n        - include: interpolated_livescript\n  embedded_comment:\n    - match: (?<!\\\\)(#).*$\\n\n      scope: comment.line.number-sign.livescript\n      captures:\n        1: punctuation.definition.comment.livescript\n  embedded_spaced_comment:\n    - match: (?<!\\\\)(#\\s).*$\\n\n      scope: comment.line.number-sign.livescript\n      captures:\n        1: punctuation.definition.comment.livescript\n  instance_variable:\n    - match: '(?<![$\\w\\-])(@)'\n      scope: variable.other.readwrite.instance.livescript\n  interpolated_livescript:\n    - match: '\\#\\{'\n      captures:\n        0: punctuation.section.embedded.livescript\n      push:\n        - meta_scope: source.livescript.embedded.source\n        - match: '\\}'\n          captures:\n            0: punctuation.section.embedded.livescript\n          pop: true\n        - include: main\n    - match: '\\#'\n      push:\n        - meta_scope: source.livescript.embedded.source.simple\n        - match: \"\"\n          pop: true\n        - include: main\n  numeric:\n    - match: '(?<![\\$@a-zA-Z_])(([0-9]+r[0-9_]+)|((16r|0[xX])[0-9a-fA-F_]+)|([0-9]+(\\.[0-9]+[0-9_]*)?(e[+\\-]?[0-9_]+)?)[_a-zA-Z0-9]*)'\n      scope: constant.numeric.livescript\n  single_quoted_string:\n    - match: \"'\"\n      captures:\n        0: punctuation.definition.string.begin.livescript\n      push:\n        - meta_scope: string.quoted.single.livescript\n        - match: \"'\"\n          captures:\n            0: punctuation.definition.string.end.livescript\n          pop: true\n        - match: '\\\\(x[0-9A-Fa-f]{2}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)'\n          scope: constant.character.escape.livescript\n  variable_name:\n    - match: '([a-zA-Z\\$_][\\w$-]*(\\.\\w+)*)(?!\\-)'\n      scope: variable.assignment.livescript\n      captures:\n        1: variable.assignment.livescript\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/Manpage.sublime-syntax",
    "content": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: Manpage\nfile_extensions:\n  - man\nscope: source.man\n\nvariables:\n  section_heading: '^(?!#)\\S.*$'\n  command_line_option: '(--?[A-Za-z0-9][_A-Za-z0-9-]*)'\n  ansi_escape_sequence: '\\e\\[[\\?=]?(?:\\d+;?)*[A-Za-z]'\n\ncontexts:\n  prototype:\n    # ignore syntax test lines\n    - match: '^#'\n      push:\n        - meta_scope: comment.syntax-test.man\n        - match: $\\n?\n          pop: true\n  main:\n    - match: ^\n      push: first_line\n\n  first_line:\n    - match: '([A-Z0-9_\\-]+)(\\()([^)]+)(\\))\\s*'\n      captures:\n        1: meta.preprocessor.man\n        2: keyword.operator.man\n        3: string.quoted.other.man\n        4: keyword.operator.man\n      push:\n        - match: (?:[\\w'-]+|\\s(?!\\s))\n          scope: markup.heading.title.man\n        - match: \\s\\s\n          pop: true\n        - match: '(?=\\S|$)'\n          pop: true\n\n    - match: '$'\n      set: body\n\n  body:\n    # English, ..., ..., ..., Russian, ...\n\n    - match: '^(?:SYNOPSIS|SYNTAX|SINTASSI|SKŁADNIA|СИНТАКСИС|書式)'\n      scope: markup.heading.synopsis.man\n      embed: synopsis\n      escape: '(?={{section_heading}})'\n\n    - match: '^(?:USAGE)'\n      scope: markup.heading.synopsis.man\n      embed: synopsis\n      escape: '(?={{section_heading}})'\n\n    - match: '^(?:COMMANDS)\\b'\n      scope: markup.heading.commands.man\n      embed: commands-start\n      escape: '(?={{section_heading}})'\n\n    - match: '^(?:ENVIRONMENT\\s+VARIABLES)'\n      scope: markup.heading.env.man\n      embed: environment-variables\n      escape: '(?={{section_heading}})'\n\n    - match: '{{section_heading}}'\n      scope: markup.heading.other.man\n      embed: options # some man pages put command line options under the description heading\n      escape: '(?={{section_heading}})'\n\n  function-call:\n    - match: '(?<!\\e\\[)(?:\\b|\\s)(?:{{ansi_escape_sequence}})?([A-Za-z0-9_\\-]+\\.)?([A-Za-z0-9_\\-]+)(?:{{ansi_escape_sequence}})?(\\()([^)]*)(\\))'\n      captures:\n        1: entity.name.function.man\n        2: entity.name.function.man\n        3: keyword.operator.man\n        4: constant.numeric.man\n        5: keyword.operator.man\n\n  env-var:\n    - match: '(\\$)(?!\\d)(\\w+)\\b'\n      captures:\n        1: punctuation.definition.variable.man\n        2: constant.other.man\n\n  options:\n    # command-line options like --option=value, --some-flag, or -x\n    - match: '^[ ]{7}(-)(?=\\s)'\n      captures:\n        1: entity.name.command-line-option.man\n    - match: '^[ ]{7}(?=-|\\+)'\n      push: expect-command-line-option\n    - match: '(?:[^a-zA-Z0-9_-]|^|\\s){{command_line_option}}'\n      captures:\n        1: entity.name.command-line-option\n      push:\n        - match: '='\n          scope: keyword.operator.man\n          set:\n            - match: '[^],.() ]+'\n              scope: variable.parameter.man\n              pop: true\n            - match: $\n              pop: true\n        - match: ''\n          pop: true\n    - include: function-call\n    - include: c-code\n    - include: env-var\n\n  expect-command-line-option:\n    - match: '[A-Za-z0-9-\\.\\?:#\\$\\+]+'\n      scope: entity.name.command-line-option.man\n    - match: '(\\[)(=)'\n      captures:\n        1: punctuation.section.brackets.begin.man\n        2: keyword.operator.man\n      push: [command-line-option-or-pipe, expect-parameter]\n    - match: '\\['\n      push:\n        - meta_scope: entity.name.command-line-option.man\n        - match: '\\]'\n          pop: true\n    - match: '='\n      scope: keyword.operator.man\n      push: expect-parameter\n    - match: (?=.*\\.)\n      pop: true\n    - match: '\\s'\n      push: expect-parameter\n    - match: '(,)\\s*'\n      captures:\n        1: punctuation.separator.man\n    - match: $|(?=\\])\n      pop: true\n\n  expect-parameter:\n    - match: '[A-Za-z0-9-_]+'\n      scope: variable.parameter.man\n    - match: (?=\\s+\\|)\n      pop: true\n    - match: \\|\n      scope: keyword.operator.logical.man\n    - match: '\\['\n      scope: punctuation.section.brackets.begin.man\n      push:\n        - match: '\\]'\n          scope: punctuation.section.brackets.end.man\n          pop: true\n        - include: expect-parameter\n    - match: '<'\n      scope: punctuation.definition.generic.begin.man\n    - match: '>'\n      scope: punctuation.definition.generic.end.man\n    - match: '$|(?=[],]|{{command_line_option}})'\n      pop: true\n\n  c-code:\n    - match: '^(?=\\s+(?:#include\\b|#define\\b|/\\*|struct\\s+(\\w+\\s*)?\\{))'\n      embed: scope:source.c\n      #embed_scope: source.c.embedded.man\n      #escape: ^(?!#|\\1|\\s*(?:$|/\\*|#include\\b|#define\\b))\n      escape: ^(?=\\s*(?:\\(.*\\.\\)\\s*$|[A-Z](?![A-Z])))\n\n  synopsis:\n    - include: c-code\n    - match: \\[\n      scope: punctuation.section.brackets.begin.man\n      push: command-line-option-or-pipe\n    - include: options\n\n  command-line-option-or-pipe:\n    - match: (\\|)\\s*\n      captures:\n        1: keyword.operator.logical.man\n    #- match: (?={{command_line_option}})\n    - match: \\w+-\\w+\n    - match: (?=-)\n      push:\n        - match: (?=\\s*\\|)\n          pop: true\n        - include: expect-command-line-option\n    - match: \\]\n      scope: punctuation.section.brackets.end.man\n      pop: true\n    - match: \\[\n      scope: punctuation.section.brackets.begin.man\n      push: command-line-option-or-pipe\n\n  commands-start:\n    - match: (?=^[ ]{7}.*(?:[ ]<|[|]))\n      push: commands\n\n  commands:\n    - match: '^[ ]{7}([a-z_\\-]+)(?=[ ]|$)'\n      captures:\n        1: entity.name.command.man\n      push: expect-parameter\n    - match: '^[ ]{7}(?=[\\[<]|\\w+[|\\]])'\n      push: expect-parameter\n\n  environment-variables:\n    - match: '^[ ]{7}([A-Z_]+)\\b'\n      captures:\n        1: support.constant.environment-variable.man\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/MemInfo.sublime-syntax",
    "content": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: MemInfo\nfile_extensions:\n  - meminfo\nscope: source.meminfo\n\ncontexts:\n  main:\n    - match: '^([^:]+)\\w*:\\w*(.*)$'\n      captures:\n        1: keyword.other.meminfo-key\n        2: string.other.meminfo-value\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/Nim.sublime-syntax",
    "content": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: Nim\nfile_extensions:\n  - nim\n  - nims\n  - nimble\nscope: source.nim\ncontexts:\n  main:\n    - match: '(\\#\\[\\s*(TODO|todo)?)'\n      comment: A multiline comment.\n      captures:\n        1: punctuation.definition.multi-comment.nim\n        2: invalid.illegal.TODO.nim\n      push:\n        - meta_scope: comment.line.number-sign.multi-comment.nim\n        - match: '(.*]\\#)'\n          captures:\n            1: punctuation.definition.multi-comment.nim\n            2: invalid.illegal.TODO.nim\n          pop: true\n    - match: (##\\s*(TODO|todo)?).+$\\n?\n      comment: A documentation comment.\n      scope: comment.line.number-sign.doc-comment.nim\n      captures:\n        1: punctuation.definition.doc-comment.nim\n        2: invalid.illegal.TODO.nim\n    - match: (##\\s*)$\\n?\n      comment: An empty documentation comment.\n      scope: comment.line.number-sign.doc-comment.empty.nim\n      captures:\n        1: punctuation.definition.doc-comment.empty.nim\n    - match: (#\\s*(TODO|todo)?).*$\\n?\n      comment: A regular comment\n      scope: comment.line.number-sign.comment.nim\n      captures:\n        1: punctuation.definition.comment.nim\n        2: invalid.illegal.TODO.nim\n    - match: '\\{\\.'\n      comment: Pragmas\n      push:\n        - meta_scope: pragma\n        - match: '\\.?\\}'\n          pop: true\n        - match: \\\"\n          push:\n            - meta_scope: string.something.nim\n            - match: \\\"\n              pop: true\n        - match: '([\\w\\x{80}-\\x{10FFFF}]+)'\n          scope: entity.other.attribute-name.pragma.nim\n    - match: discard \\\"\\\"\\\"\n      comment: A discarded triple string literal comment\n      push:\n        - meta_scope: comment.line.discarded.nim\n        - match: \\\"\\\"\\\"\n          pop: true\n    - match: '(?<![\\w\\x{80}-\\x{10FFFF}])(\\d[_\\d]*((\\.[_\\d]+([eE][\\+\\-]?\\d[_\\d]*)?)|([eE][\\+\\-]?\\d[_\\d]*)))(''?([fF](32|64|128))|[fFdD])?'\n      comment: A float literal\n      scope: constant.numeric.float.decimal.nim\n    - match: '(?<![\\w\\x{80}-\\x{10FFFF}])(0[xX][0-9A-Fa-f][_0-9A-Fa-f]*)(''?(([iIuUfF](8|16|32|64))|[uUfFdD]))?'\n      comment: A hexadecimal literal\n      scope: constant.numeric.integer.hexadecimal.nim\n    - match: '(?<![\\w\\x{80}-\\x{10FFFF}])(0[ocC][0-7][_0-7]*)(''?(([iIuUfF](8|16|32|64))|[uUfFdD]))?'\n      comment: A base-8 integer literal\n      scope: constant.numeric.integer.octal.nim\n    - match: '(?<![\\w\\x{80}-\\x{10FFFF}])(0(b|B)[01][_01]*)(''?(([iIuUfF](8|16|32|64))|[uUfFdD]))?'\n      comment: A base-2 integer literal\n      scope: constant.numeric.integer.binary.nim\n    - match: '(?<![\\w\\x{80}-\\x{10FFFF}])(\\d[_\\d]*)(''?(([iIuUfF](8|16|32|64))|[uUfFdD]))?'\n      comment: A base-10 integer literal\n      scope: constant.numeric.integer.decimal.nim\n    - match: '(?<![\\w\\x{80}-\\x{10FFFF}])(true|false|inf|nil)(?![\\w\\x{80}-\\x{10FFFF}])'\n      comment: Language Constants.\n      scope: constant.language.nim\n    - match: (?:^|\\s+|=)(when|if)\\b\n      comment: Primary branching keywords\n      captures:\n        1: keyword.control.primary.nim\n      push:\n        - match: (?=:)\n          captures:\n            1: control.variable.parameter.nim\n          pop: true\n        - include: scope:source.nim\n    - match: (?:^|\\s+|=)(case)\\b\n      comment: Primary branching keyword 'case'\n      captures:\n        1: keyword.control.primary.nim\n      push:\n        - match: (?=\\bof\\b)\n          captures:\n            1: control.variable.parameter.nim\n          pop: true\n        - include: scope:source.nim\n    - match: (?:^|\\s+)(of|else|elif)\\b\n      comment: Secondary branching keywords and their conditions\n      captures:\n        1: keyword.control.secondary.nim\n      push:\n        - match: (?=:)\n          captures:\n            1: control.variable.parameter.nim\n          pop: true\n        - include: scope:source.nim\n    - match: '(?<![\\w\\x{80}-\\x{10FFFF}])(await|block|break|continue|do|end|except|finally|raise|return|try|while|yield)(?![\\w\\x{80}-\\x{10FFFF}])'\n      comment: Keywords that affect program control flow or scope.\n      scope: keyword.control.nim\n    - match: '((?<![\\w\\x{80}-\\x{10FFFF}])(and|in|is|isnot|not|notin|or|xor)(?![\\w\\x{80}-\\x{10FFFF}]))'\n      comment: Keyword boolean operators for expressions.\n      scope: keyword.operator.boolean.nim\n    - match: '((?<![\\w\\x{80}-\\x{10FFFF}])(addr|as|atomic|bind|cast|const|converter|defer|discard|distinct|div|enum|export|include|let|mixin|object|of|ptr|ref|shl|shr|static|type|var)(?![\\w\\x{80}-\\x{10FFFF}]))'\n      comment: Other keywords.\n      scope: keyword.other.nim\n    - match: (\\b()\\b|(=|\\+|-|\\*|/|<|>|@|\\$|~|&|%|!|\\?|\\^|\\.|:|\\\\)+)\n      comment: Generic operators for expressions.\n      scope: keyword.operator.nim\n    - match: (for)\\s+\n      comment: in keyword in a 'for' loop\n      captures:\n        1: keyword.control.nim\n      push:\n        - meta_scope: meta.forloop.nim\n        - match: (?=:)\n          captures:\n            1: keyword.control.nim\n          pop: true\n        - match: '\\ [\\w\\x{80}-\\x{10FFFF},]+\\s+(in)\\s+'\n          captures:\n            1: keyword.control.nim\n        - include: scope:source.nim\n    - match: '((import)\\s+[\\.|\\w|\\/]+,?)'\n      comment: Import syntax\n      captures:\n        2: keyword.control.nim\n    - match: '(from)\\s+[\\/\\w]+\\s+(?=import)'\n      captures:\n        1: keyword.control.nim\n    - match: (var|let)\\s*\\(\n      comment: Destructure syntax\n      captures:\n        1: keyword.other.nim\n      push:\n        - match: \\)\n          captures:\n            1: keyword.other.nim\n          pop: true\n    - match: '((?<![\\w\\x{80}-\\x{10FFFF}])(generic|interface|lambda|out|shared|with|without)(?![\\w\\x{80}-\\x{10FFFF}]))'\n      comment: Invalid and unused keywords.\n      scope: keyword.invalid.nim\n    - match: '(?<![\\w\\x{80}-\\x{10FFFF}])(new|GC_ref|GC_unref|assert|echo|defined|declared|newException|countup|countdown|len|high|low)(?![\\w\\x{80}-\\x{10FFFF}])'\n      comment: Common functions\n      scope: keyword.other.common.function.nim\n    - match: '(?<![\\w\\x{80}-\\x{10FFFF}])(((uint|int|float)(8|16|32|64)?)|clong|culong|cchar|cschar|cshort|cint|csize|clonglong|cfloat|cdouble|clongdouble|cuchar|cushort|cuint|culonglong|cstringArray|bool|string|auto|cstring|char|byte|tobject|typedesc|stmt|expr|any|untyped|typed)(?![\\w\\x{80}-\\x{10FFFF}])'\n      comment: Built-in, concrete types.\n      scope: storage.type.concrete.nim\n    - match: '(?<![\\w\\x{80}-\\x{10FFFF}])(range|array|seq|tuple|natural|set|ref|ptr|pointer)(?![\\w\\x{80}-\\x{10FFFF}])'\n      comment: Built-in, generic types.\n      scope: storage.type.generic.nim\n    - match: '(?<![\\w\\x{80}-\\x{10FFFF}])(proc|iterator|method|template|macro)(?![\\w\\x{80}-\\x{10FFFF}])'\n      comment: Function types\n      scope: storage.type.function.nim\n    - match: '(?<![\\w\\x{80}-\\x{10FFFF}])(openarray|varargs|void)(?![\\w\\x{80}-\\x{10FFFF}])'\n      comment: Special types.\n      scope: storage.type.generic.nim\n    - match: '(?<![\\w\\x{80}-\\x{10FFFF}])([A-Z][A-Z0-9_]+)(?![\\w\\x{80}-\\x{10FFFF}])'\n      comment: Other constants.\n      scope: support.constant.nim\n    - match: '(?<![\\w\\x{80}-\\x{10FFFF}])([A-Z]\\w+)(?![\\w\\x{80}-\\x{10FFFF}])'\n      comment: Other types.\n      scope: support.type.nim\n    - match: '(?<![\\w\\x{80}-\\x{10FFFF}])(\\w+)(?![\\w\\x{80}-\\x{10FFFF}])(?=\\()'\n      comment: Function call.\n      scope: support.function.any-method.nim\n    - match: r?\\\"\\\"\\\"\n      comment: (Raw) Triple Quoted String\n      push:\n        - meta_scope: string.quoted.triple.nim\n        - match: '\\\"\\\"\\\"[^\\\"]'\n          pop: true\n    - match: r\\\"\n      comment: Raw Double Quoted String\n      push:\n        - meta_scope: string.quoted.double.raw.nim\n        - match: \\\"\n          pop: true\n        - match: \\\"\\\"\n    - match: \\\"\n      comment: Double Quoted String\n      push:\n        - meta_scope: string.quoted.double.nim\n        - match: \\\"\n          pop: true\n        - include: escaped_char\n    - match: \\'\n      comment: Single quoted character literal\n      push:\n        - meta_scope: string.quoted.single.nim\n        - match: \\'\n          pop: true\n        - match: \\\\n\n          scope: invalid.illegal.character.nim\n        - include: escaped_char\n        - match: '([^\\''][^\\'']+?)'\n          scope: invalid.illegal.character.nim\n    - match: '([\\w\\x{80}-\\x{10FFFF}\\`]+)\\s*(?=\\(|\\[.+?\\]\\s*\\()'\n      comment: Call syntax\n      captures:\n        1: support.function.any-method.nim\n      push:\n        - match: \\)\n          captures:\n            1: support.function.any-method.nim\n          pop: true\n        - include: scope:source.nim\n    - match: '([\\w\\x{80}-\\x{10FFFF}]+)(?=\\s+[\\w](?![\\w\\x{80}-\\x{10FFFF}]+((?!\\n)\\s)+))'\n      comment: Command syntax\n      captures:\n        1: support.function.any-method.nim\n    - match: '([\\w\\x{80}-\\x{10FFFF}]+)(?=\\s+[\\\"\\''\\`])'\n      captures:\n        1: support.function.any-method.nim\n    - match: (tmpl(i)?)(?=( (nim|html|xml|js|css|glsl|md))?\\\"\\\"\\\")\n      comment: tmpl specifier\n      captures:\n        1: storage.type.function.nim\n        2: keyword.operator.nim\n  escaped_char:\n    - match: '\\\\[nN]'\n      scope: constant.character.escape.newline.nim\n    - match: '\\\\[cC]|\\\\[rR]'\n      scope: constant.character.escape.carriagereturn.nim\n    - match: '\\\\[lL]'\n      scope: constant.character.escape.linefeed.nim\n    - match: '\\\\[fF]'\n      scope: constant.character.escape.formfeed.nim\n    - match: '\\\\[tT]'\n      scope: constant.character.escape.tabulator.nim\n    - match: '\\\\[vV]'\n      scope: constant.character.escape.verticaltabulator.nim\n    - match: \\\\\\\"\n      scope: constant.character.escape.double-quote.nim\n    - match: \\\\'\n      scope: constant.character.escape.single-quote.nim\n    - match: '\\\\[0-9]+'\n      scope: constant.character.escape.chardecimalvalue.nim\n    - match: '\\\\[aA]'\n      scope: constant.character.escape.alert.nim\n    - match: '\\\\[bB]'\n      scope: constant.character.escape.backspace.nim\n    - match: '\\\\[eE]'\n      scope: constant.character.escape.escape.nim\n    - match: '\\\\[xX][0-9A-Fa-f]{2}'\n      scope: constant.character.escape.hex.nim\n    - match: \\\\\\\\\n      scope: constant.character.escape.backslash.nim\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/Ninja.sublime-syntax",
    "content": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: Ninja\nfile_extensions:\n  - ninja\nscope: source.ninja\ncontexts:\n  main:\n    - match: (#).*$\\n?\n      comment: Comment line.\n      scope: comment.line.number-sign.ninja\n      captures:\n        1: punctuation.definition.comment.ninja\n    - match: ^(rule)\\b\n      comment: Rule keyword and keywords for a rule.\n      captures:\n        1: keyword.other.ninja\n      push:\n        - match: ^(?=\\S)\n          pop: true\n        - include: main\n        - match: \\b(?:command|deps|depfile|description|generator|pool|restat|rspfile|rspfile_content)\\b\n          scope: keyword.other.ninja\n    - match: ^(pool)\\b\n      comment: Pool keyword and keywords for a pool.\n      captures:\n        1: keyword.other.ninja\n      push:\n        - match: ^(?=\\S)\n          pop: true\n        - include: main\n        - match: \\b(?:depth)\\b\n          scope: keyword.other.ninja\n    - match: ^(?:build|rule|default|include|subninja)\\b\n      comment: Other Keywords.\n      scope: keyword.other.ninja\n    - match: '(?:[=:]|\\|{1,2})(?=\\s)'\n      comment: Operators for variable assignment (=), rule definition (:), implicit (|) and order only (||) dependencies.\n      scope: keyword.operator.ninja\n    - match: \\$$\n      comment: Line wrap.\n      scope: keyword.operator.ninja\n    - match: \\$\\$\n      comment: Dollar literal.\n      scope: keyword.operator.ninja\n    - match: '\\$[[:alnum:]_-]+'\n      comment: Simple variables, e.g. $var.\n      scope: variable.other.ninja\n    - match: '\\${[[:alnum:]_.-]+}'\n      comment: \"Variables, e.g. ${some.var.name}.\"\n      scope: variable.other.ninja\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/Nix.sublime-syntax",
    "content": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: Nix\nfile_extensions:\n  - nix\nscope: source.nix\ncontexts:\n  main:\n    - include: expression\n  comment:\n    - match: '/\\*([^*]|\\*[^\\/])*'\n      push:\n        - meta_scope: comment.block.nix\n        - match: \\*\\/\n          pop: true\n        - include: comment-remark\n    - match: '\\#'\n      push:\n        - meta_scope: comment.line.number-sign.nix\n        - match: $\n          pop: true\n        - include: comment-remark\n  attribute-bind:\n    - include: attribute-name\n    - include: attribute-bind-from-equals\n  attribute-bind-from-equals:\n    - match: \\=\n      captures:\n        0: keyword.operator.bind.nix\n      push:\n        - match: \\;\n          captures:\n            0: punctuation.terminator.bind.nix\n          pop: true\n        - include: expression\n  attribute-inherit:\n    - match: \\binherit\\b\n      captures:\n        0: keyword.other.inherit.nix\n      push:\n        - match: \\;\n          captures:\n            0: punctuation.terminator.inherit.nix\n          pop: true\n        - match: \\(\n          captures:\n            0: punctuation.section.function.arguments.nix\n          push:\n            - match: (?=\\;)\n              pop: true\n            - match: \\)\n              captures:\n                0: punctuation.section.function.arguments.nix\n              push:\n                - match: (?=\\;)\n                  pop: true\n                - include: bad-reserved\n                - include: attribute-name-single\n                - include: others\n            - include: expression\n        - match: '(?=[a-zA-Z\\_])'\n          push:\n            - match: (?=\\;)\n              pop: true\n            - include: bad-reserved\n            - include: attribute-name-single\n            - include: others\n        - include: others\n  attribute-name:\n    - match: '\\b[a-zA-Z\\_][a-zA-Z0-9\\_\\''\\-]*'\n      scope: entity.other.attribute-name.multipart.nix\n    - match: \\.\n    - include: string-quoted\n    - include: interpolation\n  attribute-name-single:\n    - match: '\\b[a-zA-Z\\_][a-zA-Z0-9\\_\\''\\-]*'\n      scope: entity.other.attribute-name.single.nix\n  attrset-contents:\n    - include: attribute-inherit\n    - include: bad-reserved\n    - include: attribute-bind\n    - include: others\n  attrset-definition:\n    - match: '(?=\\{)'\n      push:\n        - match: '(?=([\\])};,]|\\b(else|then)\\b))'\n          pop: true\n        - match: '(\\{)'\n          captures:\n            0: punctuation.definition.attrset.nix\n          push:\n            - match: '(\\})'\n              captures:\n                0: punctuation.definition.attrset.nix\n              pop: true\n            - include: attrset-contents\n        - match: '(?<=\\})'\n          push:\n            - match: '(?=([\\])};,]|\\b(else|then)\\b))'\n              pop: true\n            - include: expression-cont\n  attrset-definition-brace-opened:\n    - match: '(?<=\\})'\n      push:\n        - match: '(?=([\\])};,]|\\b(else|then)\\b))'\n          pop: true\n        - include: expression-cont\n    - match: (?=.?)\n      push:\n        - match: '\\}'\n          captures:\n            0: punctuation.definition.attrset.nix\n          pop: true\n        - include: attrset-contents\n  attrset-for-sure:\n    - match: (?=\\brec\\b)\n      push:\n        - match: '(?=([\\])};,]|\\b(else|then)\\b))'\n          pop: true\n        - match: \\brec\\b\n          captures:\n            0: keyword.other.nix\n          push:\n            - match: '(?=\\{)'\n              pop: true\n            - include: others\n        - include: attrset-definition\n        - include: others\n    - match: '(?=\\{\\s*(\\}|[^,?]*(=|;)))'\n      push:\n        - match: '(?=([\\])};,]|\\b(else|then)\\b))'\n          pop: true\n        - include: attrset-definition\n        - include: others\n  attrset-or-function:\n    - match: '\\{'\n      captures:\n        0: punctuation.definition.attrset-or-function.nix\n      push:\n        - match: '(?=([\\])};]|\\b(else|then)\\b))'\n          pop: true\n        - match: '(?=(\\s*\\}|\\\"|\\binherit\\b|\\b[a-zA-Z\\_][a-zA-Z0-9\\_\\''\\-]*(\\s*\\.|\\s*=[^=])|\\$\\{[a-zA-z0-9\\_\\''\\-]+\\}(\\s*\\.|\\s*=[^=])))'\n          push:\n            - match: '(?=([\\])};,]|\\b(else|then)\\b))'\n              pop: true\n            - include: attrset-definition-brace-opened\n        - match: '(?=(\\.\\.\\.|\\b[a-zA-Z\\_][a-zA-Z0-9\\_\\''\\-]*\\s*[,?]))'\n          push:\n            - match: '(?=([\\])};,]|\\b(else|then)\\b))'\n              pop: true\n            - include: function-definition-brace-opened\n        - include: bad-reserved\n        - match: '\\b[a-zA-Z\\_][a-zA-Z0-9\\_\\''\\-]*'\n          captures:\n            0: variable.parameter.function.maybe.nix\n          push:\n            - match: '(?=([\\])};]|\\b(else|then)\\b))'\n              pop: true\n            - match: (?=\\.)\n              push:\n                - match: '(?=([\\])};,]|\\b(else|then)\\b))'\n                  pop: true\n                - include: attrset-definition-brace-opened\n            - match: \\s*(\\,)\n              captures:\n                1: keyword.operator.nix\n              push:\n                - match: '(?=([\\])};,]|\\b(else|then)\\b))'\n                  pop: true\n                - include: function-definition-brace-opened\n            - match: (?=\\=)\n              push:\n                - match: '(?=([\\])};,]|\\b(else|then)\\b))'\n                  pop: true\n                - include: attribute-bind-from-equals\n                - include: attrset-definition-brace-opened\n            - match: (?=\\?)\n              push:\n                - match: '(?=([\\])};,]|\\b(else|then)\\b))'\n                  pop: true\n                - include: function-parameter-default\n                - match: \\,\n                  captures:\n                    0: keyword.operator.nix\n                  push:\n                    - match: '(?=([\\])};,]|\\b(else|then)\\b))'\n                      pop: true\n                    - include: function-definition-brace-opened\n            - include: others\n        - include: others\n  bad-reserved:\n    - match: '(?<![\\w''-])(if|then|else|assert|with|let|in|rec|inherit)(?![\\w''-])'\n      scope: invalid.illegal.reserved.nix\n  comment-remark:\n    - match: (TODO|FIXME|BUG|\\!\\!\\!):?\n      captures:\n        1: markup.bold.comment.nix\n  constants:\n    - match: \\b(builtins|true|false|null)\\b\n      captures:\n        0: constant.language.nix\n      push:\n        - match: '(?=([\\])};,]|\\b(else|then)\\b))'\n          pop: true\n        - include: expression-cont\n    - match: \\b(scopedImport|import|isNull|abort|throw|baseNameOf|dirOf|removeAttrs|map|toString|derivationStrict|derivation)\\b\n      captures:\n        0: support.function.nix\n      push:\n        - match: '(?=([\\])};,]|\\b(else|then)\\b))'\n          pop: true\n        - include: expression-cont\n    - match: '\\b[0-9]+\\b'\n      captures:\n        0: constant.numeric.nix\n      push:\n        - match: '(?=([\\])};,]|\\b(else|then)\\b))'\n          pop: true\n        - include: expression-cont\n  expression:\n    - include: parens-and-cont\n    - include: list-and-cont\n    - include: string\n    - include: interpolation\n    - include: with-assert\n    - include: function-for-sure\n    - include: attrset-for-sure\n    - include: attrset-or-function\n    - include: let\n    - include: if\n    - include: operator-unary\n    - include: constants\n    - include: bad-reserved\n    - include: parameter-name-and-cont\n    - include: others\n  expression-cont:\n    - match: (?=.?)\n      push:\n        - match: '(?=([\\])};,]|\\b(else|then)\\b))'\n          pop: true\n        - include: parens\n        - include: list\n        - include: string\n        - include: interpolation\n        - include: function-for-sure\n        - include: attrset-for-sure\n        - include: attrset-or-function\n        - match: '(\\bor\\b|\\.|==|!=|!|\\<\\=|\\<|\\>\\=|\\>|&&|\\|\\||-\\>|//|\\?|\\+\\+|-|\\*|/(?=([^*]|$))|\\+)'\n          scope: keyword.operator.nix\n        - include: constants\n        - include: bad-reserved\n        - include: parameter-name\n        - include: others\n  function-body:\n    - match: '(@\\s*([a-zA-Z\\_][a-zA-Z0-9\\_\\''\\-]*)\\s*)?(\\:)'\n      push:\n        - match: '(?=([\\])};,]|\\b(else|then)\\b))'\n          pop: true\n        - include: expression\n  function-body-from-colon:\n    - match: (\\:)\n      captures:\n        0: punctuation.definition.function.nix\n      push:\n        - match: '(?=([\\])};,]|\\b(else|then)\\b))'\n          pop: true\n        - include: expression\n  function-contents:\n    - include: bad-reserved\n    - include: function-parameter\n    - include: others\n  function-definition:\n    - match: (?=.?)\n      push:\n        - match: '(?=([\\])};,]|\\b(else|then)\\b))'\n          pop: true\n        - include: function-body-from-colon\n        - match: (?=.?)\n          push:\n            - match: (?=\\:)\n              pop: true\n            - match: '(\\b[a-zA-Z\\_][a-zA-Z0-9\\_\\''\\-]*)'\n              captures:\n                0: variable.parameter.function.4.nix\n              push:\n                - match: (?=\\:)\n                  pop: true\n                - match: \\@\n                  push:\n                    - match: (?=\\:)\n                      pop: true\n                    - include: function-header-until-colon-no-arg\n                    - include: others\n                - include: others\n            - match: '(?=\\{)'\n              push:\n                - match: (?=\\:)\n                  pop: true\n                - include: function-header-until-colon-with-arg\n        - include: others\n  function-definition-brace-opened:\n    - match: (?=.?)\n      push:\n        - match: '(?=([\\])};,]|\\b(else|then)\\b))'\n          pop: true\n        - include: function-body-from-colon\n        - match: (?=.?)\n          push:\n            - match: (?=\\:)\n              pop: true\n            - include: function-header-close-brace-with-arg\n            - match: (?=.?)\n              push:\n                - match: '(?=\\})'\n                  pop: true\n                - include: function-contents\n        - include: others\n  function-for-sure:\n    - match: '(?=(\\b[a-zA-Z\\_][a-zA-Z0-9\\_\\''\\-]*\\s*[:@]|\\{[^}]*\\}\\s*:|\\{[^#}\"''/=]*[,\\?]))'\n      push:\n        - match: '(?=([\\])};,]|\\b(else|then)\\b))'\n          pop: true\n        - include: function-definition\n  function-header-close-brace-no-arg:\n    - match: '\\}'\n      captures:\n        0: punctuation.definition.entity.function.nix\n      push:\n        - match: (?=\\:)\n          pop: true\n        - include: others\n  function-header-close-brace-with-arg:\n    - match: '\\}'\n      captures:\n        0: punctuation.definition.entity.function.nix\n      push:\n        - match: (?=\\:)\n          pop: true\n        - include: function-header-terminal-arg\n        - include: others\n  function-header-open-brace:\n    - match: '\\{'\n      captures:\n        0: punctuation.definition.entity.function.2.nix\n      push:\n        - match: '(?=\\})'\n          pop: true\n        - include: function-contents\n  function-header-terminal-arg:\n    - match: (?=@)\n      push:\n        - match: (?=\\:)\n          pop: true\n        - match: \\@\n          push:\n            - match: (?=\\:)\n              pop: true\n            - match: '(\\b[a-zA-Z\\_][a-zA-Z0-9\\_\\''\\-]*)'\n              push:\n                - meta_scope: variable.parameter.function.3.nix\n                - match: (?=\\:)\n                  pop: true\n            - include: others\n        - include: others\n  function-header-until-colon-no-arg:\n    - match: '(?=\\{)'\n      push:\n        - match: (?=\\:)\n          pop: true\n        - include: function-header-open-brace\n        - include: function-header-close-brace-no-arg\n  function-header-until-colon-with-arg:\n    - match: '(?=\\{)'\n      push:\n        - match: (?=\\:)\n          pop: true\n        - include: function-header-open-brace\n        - include: function-header-close-brace-with-arg\n  function-parameter:\n    - match: (\\.\\.\\.)\n      push:\n        - meta_scope: keyword.operator.nix\n        - match: '(,|(?=\\}))'\n          pop: true\n        - include: others\n    - match: '\\b[a-zA-Z\\_][a-zA-Z0-9\\_\\''\\-]*'\n      captures:\n        0: variable.parameter.function.1.nix\n      push:\n        - match: '(,|(?=\\}))'\n          captures:\n            0: keyword.operator.nix\n          pop: true\n        - include: whitespace\n        - include: comment\n        - include: function-parameter-default\n        - include: expression\n    - include: others\n  function-parameter-default:\n    - match: \\?\n      captures:\n        0: keyword.operator.nix\n      push:\n        - match: \"(?=[,}])\"\n          pop: true\n        - include: expression\n  if:\n    - match: (?=\\bif\\b)\n      push:\n        - match: '(?=([\\])};,]|\\b(else|then)\\b))'\n          pop: true\n        - match: \\bif\\b\n          captures:\n            0: keyword.other.nix\n          push:\n            - match: \\bth(?=en\\b)\n              captures:\n                0: keyword.other.nix\n              pop: true\n            - include: expression\n        - match: (?<=th)en\\b\n          captures:\n            0: keyword.other.nix\n          push:\n            - match: \\bel(?=se\\b)\n              captures:\n                0: keyword.other.nix\n              pop: true\n            - include: expression\n        - match: (?<=el)se\\b\n          captures:\n            0: keyword.other.nix\n          push:\n            - match: '(?=([\\])};,]|\\b(else|then)\\b))'\n              captures:\n                0: keyword.other.nix\n              pop: true\n            - include: expression\n  illegal:\n    - match: .\n      scope: invalid.illegal\n  interpolation:\n    - match: '\\$\\{'\n      captures:\n        0: punctuation.section.embedded.begin.nix\n      push:\n        - meta_scope: markup.italic\n        - match: '\\}'\n          captures:\n            0: punctuation.section.embedded.end.nix\n          pop: true\n        - include: expression\n  let:\n    - match: (?=\\blet\\b)\n      push:\n        - match: '(?=([\\])};,]|\\b(else|then)\\b))'\n          pop: true\n        - match: \\blet\\b\n          captures:\n            0: keyword.other.nix\n          push:\n            - match: '(?=([\\])};,]|\\b(in|else|then)\\b))'\n              pop: true\n            - match: '(?=\\{)'\n              push:\n                - match: '(?=([\\])};,]|\\b(else|then)\\b))'\n                  pop: true\n                - match: '\\{'\n                  push:\n                    - match: '\\}'\n                      pop: true\n                    - include: attrset-contents\n                - match: '(^|(?<=\\}))'\n                  push:\n                    - match: '(?=([\\])};,]|\\b(else|then)\\b))'\n                      pop: true\n                    - include: expression-cont\n                - include: others\n            - include: attrset-contents\n            - include: others\n        - match: \\bin\\b\n          captures:\n            0: keyword.other.nix\n          push:\n            - match: '(?=([\\])};,]|\\b(else|then)\\b))'\n              pop: true\n            - include: expression\n  list:\n    - match: '\\['\n      captures:\n        0: punctuation.definition.list.nix\n      push:\n        - match: '\\]'\n          captures:\n            0: punctuation.definition.list.nix\n          pop: true\n        - include: expression\n  list-and-cont:\n    - match: '(?=\\[)'\n      push:\n        - match: '(?=([\\])};,]|\\b(else|then)\\b))'\n          pop: true\n        - include: list\n        - include: expression-cont\n  operator-unary:\n    - match: (!|-)\n      scope: keyword.operator.unary.nix\n  others:\n    - include: whitespace\n    - include: comment\n    - include: illegal\n  parameter-name:\n    - match: '\\b[a-zA-Z\\_][a-zA-Z0-9\\_\\''\\-]*'\n      captures:\n        0: variable.parameter.name.nix\n  parameter-name-and-cont:\n    - match: '\\b[a-zA-Z\\_][a-zA-Z0-9\\_\\''\\-]*'\n      captures:\n        0: variable.parameter.name.nix\n      push:\n        - match: '(?=([\\])};,]|\\b(else|then)\\b))'\n          pop: true\n        - include: expression-cont\n  parens:\n    - match: \\(\n      captures:\n        0: punctuation.definition.expression.nix\n      push:\n        - match: \\)\n          captures:\n            0: punctuation.definition.expression.nix\n          pop: true\n        - include: expression\n  parens-and-cont:\n    - match: (?=\\()\n      push:\n        - match: '(?=([\\])};,]|\\b(else|then)\\b))'\n          pop: true\n        - include: parens\n        - include: expression-cont\n  string:\n    - match: (?=\\'\\')\n      push:\n        - match: '(?=([\\])};,]|\\b(else|then)\\b))'\n          pop: true\n        - match: \\'\\'\n          captures:\n            0: punctuation.definition.string.other.start.nix\n          push:\n            - meta_scope: string.quoted.other.nix\n            - match: \\'\\'(?!\\$|\\'|\\\\.)\n              captures:\n                0: punctuation.definition.string.other.end.nix\n              pop: true\n            - match: \\'\\'(\\$|\\'|\\\\.)\n              scope: constant.character.escape.nix\n            - include: interpolation\n        - include: expression-cont\n    - match: (?=\\\")\n      push:\n        - match: '(?=([\\])};,]|\\b(else|then)\\b))'\n          pop: true\n        - include: string-quoted\n        - include: expression-cont\n    - match: '(~?[a-zA-Z0-9\\.\\_\\-\\+]*(\\/[a-zA-Z0-9\\.\\_\\-\\+]+)+)'\n      captures:\n        0: string.unquoted.path.nix\n      push:\n        - match: '(?=([\\])};,]|\\b(else|then)\\b))'\n          pop: true\n        - include: expression-cont\n    - match: '(\\<[a-zA-Z0-9\\.\\_\\-\\+]+(\\/[a-zA-Z0-9\\.\\_\\-\\+]+)*\\>)'\n      captures:\n        0: string.unquoted.spath.nix\n      push:\n        - match: '(?=([\\])};,]|\\b(else|then)\\b))'\n          pop: true\n        - include: expression-cont\n    - match: '([a-zA-Z][a-zA-Z0-9\\+\\-\\.]*\\:[a-zA-Z0-9\\%\\/\\?\\:\\@\\&\\=\\+\\$\\,\\-\\_\\.\\!\\~\\*\\'']+)'\n      captures:\n        0: string.unquoted.url.nix\n      push:\n        - match: '(?=([\\])};,]|\\b(else|then)\\b))'\n          pop: true\n        - include: expression-cont\n  string-quoted:\n    - match: \\\"\n      captures:\n        0: punctuation.definition.string.double.start.nix\n      push:\n        - meta_scope: string.quoted.double.nix\n        - match: \\\"\n          captures:\n            0: punctuation.definition.string.double.end.nix\n          pop: true\n        - match: \\\\.\n          scope: constant.character.escape.nix\n        - include: interpolation\n  whitespace:\n    - match: \\s+\n  with-assert:\n    - match: '(?<![\\w''-])(with|assert)(?![\\w''-])'\n      captures:\n        0: keyword.other.nix\n      push:\n        - match: \\;\n          pop: true\n        - include: expression\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/Org mode.sublime-syntax",
    "content": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: orgmode\nfile_extensions:\n  - org\nscope: text.orgmode\ncontexts:\n  main:\n    - match: |-\n        (?x)\n        ^(\\*+)               # leading stars\n        \\s*([A-Z_]{2,})?     # todo keywords\n        \\s*(\\[\\#[A-Ca-c]\\])? # priority\n        \\s*(?=\\s+[A-Za-z0-9]+)  # expected heading text\n      comment: Outline headings\n      captures:\n        1: punctuation.definition.heading.orgmode\n        2: keyword.other.todo.orgmode\n        3: constant.other.priority.orgmode\n      push:\n        - meta_scope: markup.heading.orgmode\n        - meta_content_scope: entity.name.section.orgmode\n        - match: (?=\\s*$\\n?)\n          pop: true\n        - include: heading-inline\n    - match: \"^-{5,}$\"\n      scope: meta.separator.orgmode\n    - match: '^\\s*([-+]|\\s+\\*)\\s+(.*?)\\s+::'\n      captures:\n        1: keyword.operator.list.orgmode\n        2: markup.bold.definition.orgmode\n      push:\n        - meta_scope: meta.list.definition.orgmode\n        - match: $\n          pop: true\n        - include: inline\n    - match: '^\\s*?([-+]|\\s+\\*|\\d+[).])'\n      captures:\n        1: keyword.operator.list.orgmode\n      push:\n        - meta_scope: meta.list.plain.orgmode\n        - match: $\n          pop: true\n        - include: list-inline\n    - match: (?i)^#\\+(BEGIN_(QUOTE|VERSE|CENTER))$\n      captures:\n        1: keyword.control.block.orgmode\n      push:\n        - meta_scope: markup.quote.orgmode\n        - match: (?i)^#\\+(END_\\2)$\n          captures:\n            1: keyword.control.block.orgmode\n          pop: true\n    - match: \"^#[^+].*$\"\n      scope: comment.line.number-sign.orgmode\n    - match: ^:(PROPERTIES):$\n      captures:\n        1: keyword.control.drawer.orgmode\n      push:\n        - meta_scope: meta.drawer.properties.orgmode\n        - match: ^:(END):$\n          captures:\n            1: keyword.control.drawer.orgmode\n          pop: true\n        - include: properties\n    - match: ^:(.+):$\n      captures:\n        1: keyword.control.drawer.orgmode\n      push:\n        - meta_scope: meta.drawer.other.orgmode\n        - match: ^:(END):$\n          captures:\n            1: keyword.control.drawer.orgmode\n          pop: true\n    - match: (?i)#\\+(BEGIN_LaTeX)$\n      captures:\n        1: keyword.control.block.orgmode\n      push:\n        - meta_scope: meta.block.latex.orgmode\n        - match: (?i)#\\+(END_LaTeX)$\n          captures:\n            1: keyword.control.block.orgmode\n          pop: true\n        - include: scope:text.tex.latex\n    - match: (?i)#\\+(BEGIN_HTML)$\n      captures:\n        1: keyword.control.block.orgmode\n      push:\n        - meta_scope: meta.block.html.orgmode\n        - match: (?i)#\\+(END_HTML)$\n          captures:\n            1: keyword.control.block.orgmode\n          pop: true\n        - include: scope:text.html.basic\n    - match: (?i)#\\+(BEGIN_SRC)\\s+(python)\\s*(.*)$\n      captures:\n        1: keyword.control.block.orgmode\n        2: constant.other.language.orgmode\n        3: string.other.header-args.orgmode\n      push:\n        - meta_scope: meta.block.source.python.orgmode\n        - match: (?i)#\\+(END_SRC)$\n          captures:\n            1: keyword.control.block.orgmode\n          pop: true\n        - include: scope:source.python\n    - match: (?i)#\\+(BEGIN_SRC)\\s+(ruby)\\s*(.*)$\n      captures:\n        1: keyword.control.block.orgmode\n        2: constant.other.language.orgmode\n        3: string.other.header-args.orgmode\n      push:\n        - meta_scope: meta.block.source.ruby.orgmode\n        - match: (?i)#\\+(END_SRC)$\n          captures:\n            1: keyword.control.block.orgmode\n          pop: true\n        - include: scope:source.ruby\n    - match: (?i)#\\+(BEGIN_SRC)\\s+((?:emacs-)?lisp)\\s*(.*)$\n      captures:\n        1: keyword.control.block.orgmode\n        2: constant.other.language.orgmode\n        3: string.other.header-args.orgmode\n      push:\n        - meta_scope: meta.block.source.lisp.orgmode\n        - match: (?i)#\\+(END_SRC)$\n          captures:\n            1: keyword.control.block.orgmode\n          pop: true\n        - include: scope:source.lisp\n    - match: (?i)#\\+(BEGIN_SRC)\\s+(sh)\\s*(.*)$\n      captures:\n        1: keyword.control.block.orgmode\n        2: constant.other.language.orgmode\n        3: string.other.header-args.orgmode\n      push:\n        - meta_scope: meta.block.source.shell.orgmode\n        - match: (?i)#\\+(END_SRC)$\n          captures:\n            1: keyword.control.block.orgmode\n          pop: true\n        - include: scope:source.shell\n    - match: '(?i)#\\+(BEGIN_(SRC|EXAMPLE))(?:\\s+([\\w-]+)?\\s*(.*))?$'\n      captures:\n        1: keyword.control.block.orgmode\n        3: constant.other.language.orgmode\n        4: string.other.header-args.orgmode\n      push:\n        - meta_scope: meta.block.source.other.orgmode\n        - meta_content_scope: markup.raw.block.orgmode\n        - match: (?i)#\\+(END_\\2)$\n          captures:\n            1: keyword.control.block.orgmode\n          pop: true\n    - match: '#\\+(OPTIONS):'\n      captures:\n        1: keyword.control.pragma.orgmode\n      push:\n        - meta_scope: meta.pragma.options.orgmode\n        - match: $\n          pop: true\n        - match: '([^\\s]+):([^\\s]+)'\n          scope: meta.option.orgmode\n          captures:\n            1: variable.parameter.option.orgmode\n            2: string.other.option.orgmode\n    - match: '#\\+(CALL):\\s+[A-Za-z-]+(?:\\[([^\\]]*)\\])?\\(?'\n      captures:\n        1: keyword.control.pragma.orgmode\n        2: string.other.header-args.orgmode\n      push:\n        - meta_scope: meta.pragma.call.orgmode\n        - match: '\\)?([^)]*)$'\n          captures:\n            1: string.other.header-args.orgmode\n          pop: true\n        - match: (\\w+)=\n          scope: meta.assignment.orgmode\n          captures:\n            1: variable.parameter.header-args.orgmode\n    - match: '^#\\+([a-zA-Z_-]+): ?(.*)$'\n      scope: meta.pragma.orgmode\n      captures:\n        1: keyword.control.pragma.orgmode\n        2: string.unquoted.pragma.orgmode\n    - include: inline\n  heading-inline:\n    - match: ':([^:^\\s]*)(?=:)'\n      scope: meta.keyword.orgmode\n      captures:\n        1: string.quoted.keyword.orgmode\n    - include: inline\n  inline:\n    - match: '(?<=^|[.,:;\\s])/[^/]+/(?=$|[.,:;\\s])'\n      scope: markup.italic.orgmode\n    - match: '(?<=^|[.,:;\\s])\\*[^*]+\\*(?=$|[.,:;\\s])'\n      scope: markup.bold.orgmode\n    - match: '(?<=^|[.,:;\\s])_[^_]+_(?=$|[.,:;\\s])'\n      scope: markup.underline.orgmode\n    - match: '(?<=^|[.,:;\\s])([~=]).+?\\1(?=$|[.,:;\\s])'\n      scope: markup.raw.inline.orgmode\n    - match: '\\[(?:\\[([^\\]]*)\\])?\\[([^\\]]*)\\]\\]'\n      scope: meta.link.orgmode\n      captures:\n        1: markup.underline.link.orgmode\n        2: string.other.link.orgmode\n    - match: (?:http|ftp)s?:\\/\\/\\S+\n      scope: markup.underline.url.orgmode\n  list-inline:\n    - match: '\\[[ -X]\\]'\n      scope: keyword.operator.checkbox.orgmode\n    - include: inline\n  properties:\n    - match: '^:([A-Za-z_]+):\\s(.*)$'\n      scope: meta.property.orgmode\n      captures:\n        1: keyword.control.property.orgmode\n        2: string.unquoted.propval.orgmode\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/Passwd.sublime-syntax",
    "content": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: passwd\nfile_extensions:\n  - passwd\nscope: source.passwd\n\ncontexts:\n  main:\n    - comment: name\n      match: ^[^:]+\n      scope: keyword\n\n    - comment: password\n      match: \":\"\n      push: password\n\n  password:\n    - comment: uid\n      match: \":\"\n      set: uid\n\n    - comment: shadowpassword\n      match: \"[^:]+\"\n      scope: invalid\n\n  uid:\n    - comment: gid\n      match: \":\"\n      set: gid\n\n    - comment: number\n      match: \"[0-9]+\"\n      scope: constant.numeric\n\n  gid:\n    - comment: comment\n      match: \":\"\n      set: comment\n\n    - comment: number\n      match: \"[0-9]+\"\n      scope: constant.language\n\n  comment:\n    - comment: directory\n      match: \":\"\n      set: directory\n\n    - comment: comment\n      match: \"[^:]+\"\n      scope: entity.name\n\n  directory:\n    - comment: shell\n      match: \":\"\n      set: shell\n\n    - comment: directory\n      match: \"[^:]+\"\n      scope: string.unquoted\n\n  shell:\n    - comment: newline\n      match: \"\\n\"\n      pop: true\n\n    - comment: directory\n      match: \"[^:\\n]+\"\n      scope: variable.parameter\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/PowerShell.sublime-syntax",
    "content": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: PowerShell\nfile_extensions:\n  - ps1\n  - psm1\n  - psd1\nscope: source.powershell\ncontexts:\n  main:\n    - match: \"<#\"\n      captures:\n        0: punctuation.definition.comment.block.begin.powershell\n      push:\n        - meta_scope: comment.block.powershell\n        - match: \"#>\"\n          captures:\n            0: punctuation.definition.comment.block.end.powershell\n          pop: true\n        - include: commentEmbeddedDocs\n    - match: '[2-6]>&1|>>|>|<<|<|>|>\\||[1-6]>|[1-6]>>'\n      scope: keyword.operator.redirection.powershell\n    - include: commands\n    - include: commentLine\n    - include: variable\n    - include: subexpression\n    - include: function\n    - include: attribute\n    - include: UsingDirective\n    - include: type\n    - include: hashtable\n    - include: doubleQuotedString\n    - include: scriptblock\n    - include: doubleQuotedStringEscapes\n    - match: '[''\\x{2018}-\\x{201B}]'\n      captures:\n        0: punctuation.definition.string.begin.powershell\n      push:\n        - meta_scope: string.quoted.single.powershell\n        - match: '[''\\x{2018}-\\x{201B}]{2}'\n          scope: constant.character.escape.powershell\n        - match: '[''\\x{2018}-\\x{201B}]'\n          captures:\n            0: punctuation.definition.string.end.powershell\n          pop: true\n    - match: '(@[\"\\x{201C}-\\x{201E}])\\s*$'\n      captures:\n        1: punctuation.definition.string.begin.powershell\n      push:\n        - meta_scope: string.quoted.double.heredoc.powershell\n        - match: '^[\"\\x{201C}-\\x{201E}]@'\n          captures:\n            0: punctuation.definition.string.end.powershell\n          pop: true\n        - include: variableNoProperty\n        - include: doubleQuotedStringEscapes\n        - include: interpolation\n    - match: '(@[''\\x{2018}-\\x{201B}])\\s*$'\n      captures:\n        1: punctuation.definition.string.begin.powershell\n      push:\n        - meta_scope: string.quoted.single.heredoc.powershell\n        - match: '^[''\\x{2018}-\\x{201B}]@'\n          captures:\n            0: punctuation.definition.string.end.powershell\n          pop: true\n    - include: numericConstant\n    - match: (@)(\\()\n      captures:\n        1: keyword.other.array.begin.powershell\n        2: punctuation.section.group.begin.powershell\n      push:\n        - meta_scope: meta.group.array-expression.powershell\n        - match: \\)\n          captures:\n            0: punctuation.section.group.end.powershell\n          pop: true\n        - include: main\n    - match: ((\\$))(\\()\n      comment: \"TODO: move to repo; make recursive.\"\n      captures:\n        1: keyword.other.substatement.powershell\n        2: punctuation.definition.subexpression.powershell\n        3: punctuation.section.group.begin.powershell\n      push:\n        - meta_scope: meta.group.complex.subexpression.powershell\n        - match: \\)\n          captures:\n            0: punctuation.section.group.end.powershell\n          pop: true\n        - include: main\n    - match: '(\\b(([A-Za-z0-9\\-_\\.]+)\\.(?i:exe|com|cmd|bat))\\b)'\n      scope: support.function.powershell\n    - match: (?<!\\w|-|\\.)((?i:begin|break|catch|clean|continue|data|default|define|do|dynamicparam|else|elseif|end|exit|finally|for|from|if|in|inlinescript|parallel|param|process|return|sequence|switch|throw|trap|try|until|var|while)|%|\\?)(?!\\w)\n      scope: keyword.control.powershell\n    - match: '(?<!\\w|-|[^\\)]\\.)((?i:(foreach|where)(?!-object))|%|\\?)(?!\\w)'\n      scope: keyword.control.powershell\n    - match: (?<!\\w)(--%)(?!\\w)\n      comment: This should be moved to the repository at some point.\n      captures:\n        1: keyword.control.powershell\n      push:\n        - match: $\n          pop: true\n        - match: .+\n          scope: string.unquoted.powershell\n    - match: (?<!\\w)((?i:hidden|static))(?!\\w)\n      comment: This should only be relevant inside a class but will require a rework of how classes are matched. This is a temp fix.\n      scope: storage.modifier.powershell\n    - match: '(?<!\\w|-)((?i:class)|%|\\?)(?:\\s)+((?:\\p{L}|\\d|_|-|)+)\\b'\n      comment: capture should be entity.name.type, but it doesn't provide a good color in the default schema.\n      captures:\n        1: storage.type.powershell\n        2: entity.name.function\n    - match: (?<!\\w)-(?i:is(?:not)?|as)\\b\n      scope: keyword.operator.comparison.powershell\n    - match: '(?<!\\w)-(?i:[ic]?(?:eq|ne|[gl][te]|(?:not)?(?:like|match|contains|in)|replace))(?!\\p{L})'\n      scope: keyword.operator.comparison.powershell\n    - match: '(?<!\\w)-(?i:join|split)(?!\\p{L})|!'\n      scope: keyword.operator.unary.powershell\n    - match: '(?<!\\w)-(?i:and|or|not|xor)(?!\\p{L})|!'\n      scope: keyword.operator.logical.powershell\n    - match: '(?<!\\w)-(?i:band|bor|bnot|bxor|shl|shr)(?!\\p{L})'\n      scope: keyword.operator.bitwise.powershell\n    - match: '(?<!\\w)-(?i:f)(?!\\p{L})'\n      scope: keyword.operator.string-format.powershell\n    - match: \"[+%*/-]?=|[+/*%-]\"\n      scope: keyword.operator.assignment.powershell\n    - match: '\\|{2}|&{2}|;'\n      scope: punctuation.terminator.statement.powershell\n    - match: '&|(?<!\\w)\\.(?= )|`|,|\\|'\n      scope: keyword.operator.other.powershell\n    - match: (?<!\\s|^)\\.\\.(?=\\-?\\d|\\(|\\$)\n      comment: This is very imprecise, is there a syntax for 'must come after...'\n      scope: keyword.operator.range.powershell\n  RequiresDirective:\n    - match: (?<=#)(?i:(requires))\\s\n      captures:\n        0: keyword.control.requires.powershell\n      push:\n        - meta_scope: meta.requires.powershell\n        - match: $\n          pop: true\n        - match: \\-(?i:Modules|PSSnapin|RunAsAdministrator|ShellId|Version|Assembly|PSEdition)\n          scope: keyword.other.powershell\n        - match: '(?<!-)\\b\\p{L}+|\\d+(?:\\.\\d+)*'\n          scope: variable.parameter.powershell\n        - include: hashtable\n  UsingDirective:\n    - match: (?<!\\w)(?i:(using))\\s+(?i:(namespace|module))\\s+(?i:((?:\\w+(?:\\.)?)+))\n      captures:\n        1: keyword.control.using.powershell\n        2: keyword.other.powershell\n        3: variable.parameter.powershell\n  attribute:\n    - match: '(\\[)\\s*\\b(?i)(cmdletbinding|alias|outputtype|parameter|validatenotnull|validatenotnullorempty|validatecount|validateset|allownull|allowemptycollection|allowemptystring|validatescript|validaterange|validatepattern|validatelength|supportswildcards)\\b'\n      captures:\n        1: punctuation.section.bracket.begin.powershell\n        2: support.function.attribute.powershell\n      push:\n        - meta_scope: meta.attribute.powershell\n        - match: '(\\])'\n          captures:\n            1: punctuation.section.bracket.end.powershell\n          pop: true\n        - match: \\(\n          captures:\n            0: punctuation.section.group.begin.powershell\n          push:\n            - match: \\)\n              captures:\n                0: punctuation.section.group.end.powershell\n              pop: true\n            - include: main\n            - match: (?i)\\b(mandatory|valuefrompipeline|valuefrompipelinebypropertyname|valuefromremainingarguments|position|parametersetname|defaultparametersetname|supportsshouldprocess|supportspaging|positionalbinding|helpuri|confirmimpact|helpmessage)\\b(?:\\s+)?(=)?\n              captures:\n                1: variable.parameter.attribute.powershell\n                2: keyword.operator.assignment.powershell\n  commands:\n    - match: '(?:(\\p{L}|\\d|_|-|\\\\|\\:)*\\\\)?\\b(?i:Add|Approve|Assert|Backup|Block|Build|Checkpoint|Clear|Close|Compare|Complete|Compress|Confirm|Connect|Convert|ConvertFrom|ConvertTo|Copy|Debug|Deny|Deploy|Disable|Disconnect|Dismount|Edit|Enable|Enter|Exit|Expand|Export|Find|Format|Get|Grant|Group|Hide|Import|Initialize|Install|Invoke|Join|Limit|Lock|Measure|Merge|Mount|Move|New|Open|Optimize|Out|Ping|Pop|Protect|Publish|Push|Read|Receive|Redo|Register|Remove|Rename|Repair|Request|Reset|Resize|Resolve|Restart|Restore|Resume|Revoke|Save|Search|Select|Send|Set|Show|Skip|Split|Start|Step|Stop|Submit|Suspend|Switch|Sync|Test|Trace|Unblock|Undo|Uninstall|Unlock|Unprotect|Unpublish|Unregister|Update|Use|Wait|Watch|Write)\\-.+?(?:\\.(?i:exe|cmd|bat|ps1))?\\b'\n      comment: \"Verb-Noun pattern:\"\n      scope: support.function.powershell\n    - match: (?<!\\w)(?i:foreach-object)(?!\\w)\n      comment: Builtin cmdlets with reserved verbs\n      scope: support.function.powershell\n    - match: (?<!\\w)(?i:where-object)(?!\\w)\n      comment: Builtin cmdlets with reserved verbs\n      scope: support.function.powershell\n    - match: (?<!\\w)(?i:sort-object)(?!\\w)\n      comment: Builtin cmdlets with reserved verbs\n      scope: support.function.powershell\n    - match: (?<!\\w)(?i:tee-object)(?!\\w)\n      comment: Builtin cmdlets with reserved verbs\n      scope: support.function.powershell\n  commentEmbeddedDocs:\n    - match: (?:^|\\G)(?i:\\s*(\\.)(COMPONENT|DESCRIPTION|EXAMPLE|FUNCTIONALITY|INPUTS|LINK|NOTES|OUTPUTS|ROLE|SYNOPSIS))\\s*$\n      comment: these embedded doc keywords do not support arguments, must be the only thing on the line\n      scope: comment.documentation.embedded.powershell\n      captures:\n        1: constant.string.documentation.powershell\n        2: keyword.operator.documentation.powershell\n    - match: (?:^|\\G)(?i:\\s*(\\.)(EXTERNALHELP|FORWARDHELP(?:CATEGORY|TARGETNAME)|PARAMETER|REMOTEHELPRUNSPACE))\\s+(.+?)\\s*$\n      comment: these embedded doc keywords require arguments though the type required may be inconsistent, they may not all be able to use the same argument match\n      scope: comment.documentation.embedded.powershell\n      captures:\n        1: constant.string.documentation.powershell\n        2: keyword.operator.documentation.powershell\n        3: keyword.operator.documentation.powershell\n  commentLine:\n    - match: '(?<![`\\\\-])(#)#*'\n      captures:\n        1: punctuation.definition.comment.powershell\n      push:\n        - meta_scope: comment.line.powershell\n        - match: $\\n?\n          captures:\n            1: punctuation.definition.comment.powershell\n          pop: true\n        - include: commentEmbeddedDocs\n        - include: RequiresDirective\n  doubleQuotedString:\n    - match: '[\"\\x{201C}-\\x{201E}]'\n      captures:\n        0: punctuation.definition.string.begin.powershell\n      push:\n        - meta_scope: string.quoted.double.powershell\n        - match: '(?i)\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,64}\\b'\n        - include: variableNoProperty\n        - include: doubleQuotedStringEscapes\n        - match: '[\"\\x{201C}-\\x{201E}]{2}'\n          scope: constant.character.escape.powershell\n        - include: interpolation\n        - match: '`\\s*$'\n          scope: keyword.other.powershell\n        - match: '[\"\\x{201C}-\\x{201E}]'\n          captures:\n            0: punctuation.definition.string.end.powershell\n          pop: true\n  doubleQuotedStringEscapes:\n    - match: '`[`0abefnrtv''\"\\x{2018}-\\x{201E}$]'\n      scope: constant.character.escape.powershell\n    - include: unicodeEscape\n  function:\n    - match: '^(?:\\s*+)(?i)(function|filter|configuration|workflow)\\s+(?:(global|local|script|private):)?((?:\\p{L}|\\d|_|-|\\.)+)'\n      captures:\n        0: meta.function.powershell\n        1: storage.type.powershell\n        2: storage.modifier.scope.powershell\n        3: entity.name.function.powershell\n      push:\n        - match: '(?=\\{|\\()'\n          pop: true\n        - include: commentLine\n  hashtable:\n    - match: '(@)(\\{)'\n      captures:\n        1: keyword.other.hashtable.begin.powershell\n        2: punctuation.section.braces.begin.powershell\n      push:\n        - meta_scope: meta.hashtable.powershell\n        - match: '(\\})'\n          captures:\n            1: punctuation.section.braces.end.powershell\n          pop: true\n        - match: \\b((?:\\'|\\\")?)(\\w+)((?:\\'|\\\")?)(?:\\s+)?(=)(?:\\s+)?\n          scope: meta.hashtable.assignment.powershell\n          captures:\n            1: punctuation.definition.string.begin.powershell\n            2: variable.other.readwrite.powershell\n            3: punctuation.definition.string.end.powershell\n            4: keyword.operator.assignment.powershell\n        - include: scriptblock\n        - include: main\n  interpolation:\n    - match: (((\\$)))((\\())\n      captures:\n        1: keyword.other.substatement.powershell\n        2: punctuation.definition.substatement.powershell\n        3: punctuation.section.embedded.substatement.begin.powershell\n        4: punctuation.section.group.begin.powershell\n        5: punctuation.section.embedded.substatement.begin.powershell\n      push:\n        - meta_scope: meta.embedded.substatement.powershell\n        - meta_content_scope: interpolated.complex.source.powershell\n        - match: (\\))\n          captures:\n            0: punctuation.section.group.end.powershell\n            1: punctuation.section.embedded.substatement.end.powershell\n          pop: true\n        - include: main\n  numericConstant:\n    - match: '(?<!\\w)([-+]?0(?:x|X)[0-9a-fA-F_]+(?:U|u|L|l|UL|Ul|uL|ul|LU|Lu|lU|lu)?)((?i:[kmgtp]b)?)\\b'\n      captures:\n        1: constant.numeric.hex.powershell\n        2: keyword.other.powershell\n    - match: '(?<!\\w)([-+]?(?:[0-9_]+)?\\.[0-9_]+(?:(?:e|E)[0-9]+)?(?:F|f|D|d|M|m)?)((?i:[kmgtp]b)?)\\b'\n      captures:\n        1: constant.numeric.integer.powershell\n        2: keyword.other.powershell\n    - match: '(?<!\\w)([-+]?0(?:b|B)[01_]+(?:U|u|L|l|UL|Ul|uL|ul|LU|Lu|lU|lu)?)((?i:[kmgtp]b)?)\\b'\n      captures:\n        1: constant.numeric.octal.powershell\n        2: keyword.other.powershell\n    - match: '(?<!\\w)([-+]?[0-9_]+(?:e|E)(?:[0-9_])?+(?:F|f|D|d|M|m)?)((?i:[kmgtp]b)?)\\b'\n      captures:\n        1: constant.numeric.integer.powershell\n        2: keyword.other.powershell\n    - match: '(?<!\\w)([-+]?[0-9_]+\\.(?:e|E)(?:[0-9_])?+(?:F|f|D|d|M|m)?)((?i:[kmgtp]b)?)\\b'\n      captures:\n        1: constant.numeric.integer.powershell\n        2: keyword.other.powershell\n    - match: '(?<!\\w)([-+]?[0-9_]+[\\.]?(?:F|f|D|d|M|m))((?i:[kmgtp]b)?)\\b'\n      captures:\n        1: constant.numeric.integer.powershell\n        2: keyword.other.powershell\n    - match: '(?<!\\w)([-+]?[0-9_]+[\\.]?(?:U|u|L|l|UL|Ul|uL|ul|LU|Lu|lU|lu)?)((?i:[kmgtp]b)?)\\b'\n      captures:\n        1: constant.numeric.integer.powershell\n        2: keyword.other.powershell\n  scriptblock:\n    - match: '\\{'\n      captures:\n        0: punctuation.section.braces.begin.powershell\n      push:\n        - meta_scope: meta.scriptblock.powershell\n        - match: '\\}'\n          captures:\n            0: punctuation.section.braces.end.powershell\n          pop: true\n        - include: main\n  subexpression:\n    - match: \\(\n      captures:\n        0: punctuation.section.group.begin.powershell\n      push:\n        - meta_scope: meta.group.simple.subexpression.powershell\n        - match: \\)\n          captures:\n            0: punctuation.section.group.end.powershell\n          pop: true\n        - include: main\n  type:\n    - match: '\\['\n      captures:\n        0: punctuation.section.bracket.begin.powershell\n      push:\n        - match: '\\]'\n          captures:\n            0: punctuation.section.bracket.end.powershell\n          pop: true\n        - match: '(?!\\d+|\\.)(?:\\p{L}|\\p{N}|\\.)+'\n          scope: storage.type.powershell\n        - include: main\n  unicodeEscape:\n    - match: '`u\\{(?:(?:10)?([0-9a-fA-F]){1,4}|0?\\g<1>{1,5})}'\n      scope: constant.character.escape.powershell\n    - match: '`u(?:\\{[0-9a-fA-F]{,6}.)?'\n      scope: invalid.character.escape.powershell\n  variable:\n    - match: (\\$)(?i:(False|Null|True))\\b\n      comment: These are special constants.\n      captures:\n        0: constant.language.powershell\n        1: punctuation.definition.variable.powershell\n    - match: '(\\$)(?i:(Error|ExecutionContext|Host|Home|PID|PsHome|PsVersionTable|ShellID))((?:\\.(?:\\p{L}|\\d|_)+)*\\b)?\\b'\n      comment: These are the other built-in constants.\n      captures:\n        0: support.constant.variable.powershell\n        1: punctuation.definition.variable.powershell\n        3: variable.other.member.powershell\n    - match: '(\\$)((?:[$^?])|(?i:_|Args|ConsoleFileName|Event|EventArgs|EventSubscriber|ForEach|Input|LastExitCode|Matches|MyInvocation|NestedPromptLevel|Profile|PSBoundParameters|PsCmdlet|PsCulture|PSDebugContext|PSItem|PSCommandPath|PSScriptRoot|PsUICulture|Pwd|Sender|SourceArgs|SourceEventArgs|StackTrace|Switch|This)\\b)((?:\\.(?:\\p{L}|\\d|_)+)*\\b)?'\n      comment: Automatic variables are not constants, but they are read-only. In monokai (default) color schema support.variable doesn't have color, so we use constant.\n      captures:\n        0: support.variable.automatic.powershell\n        1: punctuation.definition.variable.powershell\n        3: variable.other.member.powershell\n    - match: '(\\$)(?i:(ConfirmPreference|DebugPreference|ErrorActionPreference|ErrorView|FormatEnumerationLimit|InformationPreference|LogCommandHealthEvent|LogCommandLifecycleEvent|LogEngineHealthEvent|LogEngineLifecycleEvent|LogProviderHealthEvent|LogProviderLifecycleEvent|MaximumAliasCount|MaximumDriveCount|MaximumErrorCount|MaximumFunctionCount|MaximumHistoryCount|MaximumVariableCount|OFS|OutputEncoding|PSCulture|PSDebugContext|PSDefaultParameterValues|PSEmailServer|PSItem|PSModuleAutoLoadingPreference|PSModuleAutoloadingPreference|PSSenderInfo|PSSessionApplicationName|PSSessionConfigurationName|PSSessionOption|ProgressPreference|VerbosePreference|WarningPreference|WhatIfPreference))((?:\\.(?:\\p{L}|\\d|_)+)*\\b)?\\b'\n      comment: Style preference variables as language variables so that they stand out.\n      captures:\n        0: variable.language.powershell\n        1: punctuation.definition.variable.powershell\n        3: variable.other.member.powershell\n    - match: '(?i:(\\$|@)(global|local|private|script|using|workflow):((?:\\p{L}|\\d|_)+))((?:\\.(?:\\p{L}|\\d|_)+)*\\b)?'\n      captures:\n        0: variable.other.readwrite.powershell\n        1: punctuation.definition.variable.powershell\n        2: storage.modifier.scope.powershell\n        4: variable.other.member.powershell\n    - match: '(?i:(\\$)(\\{)(global|local|private|script|using|workflow):([^}]*[^}`])(\\}))((?:\\.(?:\\p{L}|\\d|_)+)*\\b)?'\n      captures:\n        0: variable.other.readwrite.powershell\n        1: punctuation.definition.variable.powershell\n        2: punctuation.section.braces.begin.powershell\n        3: storage.modifier.scope.powershell\n        5: punctuation.section.braces.end.powershell\n        6: variable.other.member.powershell\n    - match: '(?i:(\\$|@)((?:\\p{L}|\\d|_)+:)?((?:\\p{L}|\\d|_)+))((?:\\.(?:\\p{L}|\\d|_)+)*\\b)?'\n      captures:\n        0: variable.other.readwrite.powershell\n        1: punctuation.definition.variable.powershell\n        2: support.variable.drive.powershell\n        4: variable.other.member.powershell\n    - match: '(?i:(\\$)(\\{)((?:\\p{L}|\\d|_)+:)?([^}]*[^}`])(\\}))((?:\\.(?:\\p{L}|\\d|_)+)*\\b)?'\n      captures:\n        0: variable.other.readwrite.powershell\n        1: punctuation.definition.variable.powershell\n        2: punctuation.section.braces.begin.powershell\n        3: support.variable.drive.powershell\n        5: punctuation.section.braces.end.powershell\n        6: variable.other.member.powershell\n  variableNoProperty:\n    - match: (\\$)(?i:(False|Null|True))\\b\n      comment: These are special constants.\n      captures:\n        0: constant.language.powershell\n        1: punctuation.definition.variable.powershell\n    - match: (\\$)(?i:(Error|ExecutionContext|Host|Home|PID|PsHome|PsVersionTable|ShellID))\\b\n      comment: These are the other built-in constants.\n      captures:\n        0: support.constant.variable.powershell\n        1: punctuation.definition.variable.powershell\n        3: variable.other.member.powershell\n    - match: '(\\$)((?:[$^?])|(?i:_|Args|ConsoleFileName|Event|EventArgs|EventSubscriber|ForEach|Input|LastExitCode|Matches|MyInvocation|NestedPromptLevel|Profile|PSBoundParameters|PsCmdlet|PsCulture|PSDebugContext|PSItem|PSCommandPath|PSScriptRoot|PsUICulture|Pwd|Sender|SourceArgs|SourceEventArgs|StackTrace|Switch|This)\\b)'\n      comment: Automatic variables are not constants, but they are read-only...\n      captures:\n        0: support.variable.automatic.powershell\n        1: punctuation.definition.variable.powershell\n        3: variable.other.member.powershell\n    - match: (\\$)(?i:(ConfirmPreference|DebugPreference|ErrorActionPreference|ErrorView|FormatEnumerationLimit|InformationPreference|LogCommandHealthEvent|LogCommandLifecycleEvent|LogEngineHealthEvent|LogEngineLifecycleEvent|LogProviderHealthEvent|LogProviderLifecycleEvent|MaximumAliasCount|MaximumDriveCount|MaximumErrorCount|MaximumFunctionCount|MaximumHistoryCount|MaximumVariableCount|OFS|OutputEncoding|PSCulture|PSDebugContext|PSDefaultParameterValues|PSEmailServer|PSItem|PSModuleAutoLoadingPreference|PSModuleAutoloadingPreference|PSSenderInfo|PSSessionApplicationName|PSSessionConfigurationName|PSSessionOption|ProgressPreference|VerbosePreference|WarningPreference|WhatIfPreference))\\b\n      comment: Style preference variables as language variables so that they stand out.\n      captures:\n        0: variable.language.powershell\n        1: punctuation.definition.variable.powershell\n        3: variable.other.member.powershell\n    - match: '(?i:(\\$)(global|local|private|script|using|workflow):((?:\\p{L}|\\d|_)+))'\n      captures:\n        0: variable.other.readwrite.powershell\n        1: punctuation.definition.variable.powershell\n        2: storage.modifier.scope.powershell\n        4: variable.other.member.powershell\n    - match: '(?i:(\\$)(\\{)(global|local|private|script|using|workflow):([^}]*[^}`])(\\}))'\n      captures:\n        0: variable.other.readwrite.powershell\n        1: punctuation.definition.variable.powershell\n        2: storage.modifier.scope.powershell\n        4: keyword.other.powershell\n        5: variable.other.member.powershell\n    - match: '(?i:(\\$)((?:\\p{L}|\\d|_)+:)?((?:\\p{L}|\\d|_)+))'\n      captures:\n        0: variable.other.readwrite.powershell\n        1: punctuation.definition.variable.powershell\n        2: support.variable.drive.powershell\n        4: variable.other.member.powershell\n    - match: '(?i:(\\$)(\\{)((?:\\p{L}|\\d|_)+:)?([^}]*[^}`])(\\}))'\n      captures:\n        0: variable.other.readwrite.powershell\n        1: punctuation.definition.variable.powershell\n        2: punctuation.section.braces.begin\n        3: support.variable.drive.powershell\n        5: punctuation.section.braces.end\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/QML.sublime-syntax",
    "content": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: QML\nfile_extensions:\n  - qml\n  - qmlproject\nscope: source.qml\ncontexts:\n  main:\n    - match: /\\*(?!/)\n      comment: Block comment.\n      push:\n        - meta_scope: comment.block.documentation.qml\n        - match: \\*/\n          pop: true\n    - match: //.*$\n      comment: Line comment.\n      scope: comment.line.double-slash.qml\n    - match: \\b(import)\\s+\n      comment: import statement.\n      captures:\n        1: keyword.other.import.qml\n      push:\n        - meta_scope: meta.import.qml\n        - match: $\n          pop: true\n        - match: '([\\w\\d\\.]+)\\s+(\\d+\\.\\d+)(?:\\s+(as)\\s+([A-Z][\\w\\d]*))?'\n          comment: \"import Namespace VersionMajor.VersionMinor [as SingletonTypeIdentifier]\"\n          scope: meta.import.namespace.qml\n          captures:\n            1: entity.name.class.qml\n            2: constant.numeric.qml\n            3: keyword.other.import.qml\n            4: entity.name.class.qml\n        - match: '(\\\"[^\\\"]+\\\")(?:\\s+(as)\\s+([A-Z][\\w\\d]*))?'\n          comment: \"import <string> [as Script]\"\n          scope: meta.import.dirjs.qml\n          captures:\n            1: string.quoted.double.qml\n            2: keyword.other.import.qml\n            3: entity.name.class.qml\n    - match: '\\b[A-Z]\\w*\\b'\n      comment: Capitalized word (class or enum).\n      scope: support.class.qml\n    - match: '(((^|\\{)\\s*)|\\b)on[A-Z]\\w*\\b'\n      comment: onSomething - handler.\n      scope: support.class.qml\n    - match: '(?:^|\\{)\\s*(id)\\s*\\:\\s*([^;\\s]+)\\b'\n      comment: \"id: <something>\"\n      scope: meta.id.qml\n      captures:\n        1: keyword.other.qml\n        2: storage.modifier.qml\n    - match: '^\\s*(?:(default|readonly)\\s+)?(property)\\s+(?:(alias)|([\\w\\<\\>]+))\\s+(\\w+)'\n      comment: property definition.\n      scope: meta.propertydef.qml\n      captures:\n        1: keyword.other.qml\n        2: keyword.other.qml\n        3: keyword.other.qml\n        4: storage.type.qml\n        5: entity.other.attribute-name.qml\n    - match: \\b(signal)\\s+(\\w+)\\s*\n      comment: \"signal <signalName>[([<type> <parameter>[, ...]])]\"\n      captures:\n        1: keyword.other.qml\n        2: support.function.qml\n      push:\n        - meta_scope: meta.signal.qml\n        - match: ;|(?=/)|$\n          pop: true\n        - match: (\\w+)\\s+(\\w+)\n          scope: meta.signal.parameters.qml\n          captures:\n            1: storage.type.qml\n            2: variable.parameter.qml\n    - match: (?:\\b|\\s+)(?:(true|false|null|undefined)|(var|void)|(on|as|enum|connect|break|case|catch|continue|debugger|default|delete|do|else|finally|for|if|in|instanceof|new|return|switch|this|throw|try|typeof|while|with))\\b\n      comment: js keywords.\n      scope: meta.keyword.qml\n      captures:\n        1: constant.language.qml\n        2: storage.type.qml\n        3: keyword.control.qml\n    - match: '\\b(function)\\s+([\\w_]+)\\s*(?=\\()'\n      comment: function definition.\n      scope: meta.function.qml\n      captures:\n        1: storage.type.qml\n        2: entity.name.function.untitled\n    - match: '\\b[\\w_]+\\s*(?=\\()'\n      comment: function call.\n      scope: support.function.qml\n    - match: '(?:^|\\{|;)\\s*[a-z][\\w\\.]*\\s*(?=\\:)'\n      comment: \"property  (property: <something>).\"\n      scope: entity.other.attribute-name.qml\n    - match: (?<=\\.)\\b\\w*\n      comment: property of the variable (name.property).\n      scope: entity.other.attribute-name.qml\n    - match: '\\b([a-z_]\\w*)\\b'\n      comment: All non colored words are assumed to be variables.\n      scope: variable.parameter\n    - include: scope:source.js\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/Racket.sublime-syntax",
    "content": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: Racket\nfile_extensions:\n  - rkt\nscope: source.racket\ncontexts:\n  main:\n    - match: '[^\\\\](\\\"[^\\\"]*\\\")'\n      captures:\n        1: string.quoted.double.source.racket\n    - match: '\\((define)\\s+([a-zA-Z0-9_\\-?\\+^]+)\\s*'\n      scope: meta.variable.source.racket\n      captures:\n        1: keyword.source.racket\n        2: entity.name.variable.source.racket\n    - match: '\\((define)\\s+\\(([a-zA-Z0-9_\\-?\\+^]+)\\s*'\n      scope: meta.function.source.racket\n      captures:\n        1: keyword.source.racket\n        2: entity.name.function\n    - match: '\\((struct)\\s+([a-zA-Z0-9_\\-?\\+^]+)\\s+'\n      scope: meta.struct.source.racket\n      captures:\n        1: keyword.source.racket\n        2: entity.name.type\n    - match: '[\\s\\(](if|lambda|cond|define|type-case|let|letrec|let!|\\#lang|require|test|else|first|rest|define-type|define-type-alias|define-struct|not|local|error|lang)[\\s\\)]'\n      scope: meta.keywords.source.racket\n      captures:\n        1: keyword.source.racket\n    - match: '[\\s\\(](true|false|empty|null)[\\s\\)]'\n      captures:\n        1: constant.language.source.racket\n    - match: '[\\s\\(\\[\\{](#t|#true|#f|#false)[\\s\\)\\]\\}]'\n      captures:\n        1: constant.language.source.racket\n    - match: '(#\\\\[a-zA-Z0-9_\\-?\\+\\.\\!\\\"]+)'\n      captures:\n        1: constant.language.source.racket\n    - match: '\\b(0|([1-9][0-9_]*))\\b'\n      scope: constant.numeric.integer.source.racket\n    - match: ;\n      push:\n        - meta_scope: comment.line.documentation.source.racket\n        - match: $\\n\n          pop: true\n    - match: '#\\|'\n      push:\n        - meta_scope: comment.block.source.racket\n        - match: '\\|#'\n          pop: true\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/Rego.sublime-syntax",
    "content": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: Rego\nfile_extensions:\n  - rego\nscope: source.rego\ncontexts:\n  main:\n    - include: comment\n    - include: keyword\n    - include: operator\n    - include: head\n    - include: term\n  comment:\n    - match: (#).*$\\n?\n      scope: comment.line.number-sign.rego\n      captures:\n        1: punctuation.definition.comment.rego\n  call:\n    - match: '([a-zA-Z_][a-zA-Z0-9_]*)\\('\n      scope: meta.function-call.rego\n      captures:\n        1: support.function.any-method.rego\n  constant:\n    - match: \\b(?:true|false|null)\\b\n      scope: constant.language.rego\n  head:\n    - match: \"^([[:alpha:]_][[:alnum:]_]*)\"\n      captures:\n        1: entity.name.function.declaration\n      push:\n        - meta_scope: meta.function.rego\n        - match: '(=|{|\\n)'\n          pop: true\n        - include: term\n  keyword:\n    - match: (^|\\s+)(?:(default|not|package|import|as|with|else|some))\\s+\n      scope: keyword.other.rego\n  number:\n    - match: |-\n        (?x:         # turn on extended mode\n          -?         # an optional minus\n          (?:\n            0        # a zero\n            |        # ...or...\n            [1-9]    # a 1-9 character\n            \\d*      # followed by zero or more digits\n          )\n          (?:\n            (?:\n              \\.     # a period\n              \\d+    # followed by one or more digits\n            )?\n            (?:\n              [eE]   # an e character\n              [+-]?  # followed by an option +/-\n              \\d+    # followed by one or more digits\n            )?       # make exponent optional\n          )?         # make decimal portion optional\n        )\n      scope: constant.numeric.rego\n  operator:\n    - match: \\=|\\!\\=|>|<|<\\=|>\\=|\\+|-|\\*|%|/|\\||&|:\\=\n      scope: keyword.operator.comparison.rego\n  string:\n    - match: '\"'\n      captures:\n        0: punctuation.definition.string.begin.rego\n      push:\n        - meta_scope: string.quoted.double.rego\n        - match: '\"'\n          captures:\n            0: punctuation.definition.string.end.rego\n          pop: true\n        - match: |-\n            (?x:                # turn on extended mode\n              \\\\                # a literal backslash\n              (?:               # ...followed by...\n                [\"\\\\/bfnrt]     # one of these characters\n                |               # ...or...\n                u               # a u\n                [0-9a-fA-F]{4}  # and four hex digits\n              )\n            )\n          scope: constant.character.escape.rego\n        - match: \\\\.\n          scope: invalid.illegal.unrecognized-string-escape.rego\n  term:\n    - include: constant\n    - include: string\n    - include: number\n    - include: call\n    - include: variable\n  variable:\n    - match: '\\b[[:alpha:]_][[:alnum:]_]*\\b'\n      scope: meta.identifier.rego\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/Requirementstxt.sublime-syntax",
    "content": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/syntax.html\nname: Requirements.txt\nscope: source.requirements-txt\n# https://pip.pypa.io/en/stable/reference/requirements-file-format/\n# https://github.com/raimon49/requirements.txt.vim/blob/f246bd10155fbc3b1a9e2fff6c95b21521b09116/ftdetect/requirements.vim\nfile_extensions:\n  - requirements.txt\n  - requirements.in\n  - pip\n# https://github.com/sublimehq/Packages/pull/2760/files\nfirst_line_match: |-\n  (?xi:\n    ^ \\#! .* \\bpip                                        # shebang\n  | ^ \\s* \\# .*? -\\*- .*? \\bpip-requirements\\b .*? -\\*-   # editorconfig\n  | ^ \\s* \\# (vim?|ex): .*? \\brequirements\\b              # modeline\n  )\n# pip install -r\n# pip-compile\n\nvariables:\n  operator: '===?|<=?|>=?|~=|!='\n\ncontexts:\n  main:\n    - match: '(?i)\\d+[\\da-z\\-_\\.\\*]*'\n      scope: constant.other.version-control.requirements-txt\n    - match: '(?i)^\\[?--?[\\da-z\\-]*\\]?'\n      scope: entity.name.function.option.requirements-txt\n    - match: '{{operator}}'\n      scope: keyword.operator.logical.requirements-txt\n    - match: '(\\[)'\n      captures:\n        1: punctuation.section.braces.begin.requirements-txt\n      push:\n        - meta_scope: variable.function.extra.requirements-txt\n        - match: ','\n          scope: punctuation.separator.requirements-txt\n        - match: '(\\])'\n          captures:\n            1: punctuation.section.braces.end.requirements-txt\n          pop: true\n    - match: '(git\\+?|hg\\+|svn\\+|bzr\\+).*://.\\S+'\n      scope: markup.underline.link.versioncontrols.requirements-txt\n    - match: '(@\\s)?(https?|ftp|gopher)://?[^\\s/$.?#].\\S*'\n      scope: markup.underline.link.url.requirements-txt\n      captures:\n        1: punctuation.definition.keyword.requirements-txt\n    - match: '(?i)^[a-z\\d_\\-\\.]*[a-z\\d]'\n      scope: variable.parameter.package-name.requirements-txt\n    - match: '(;)'\n      captures:\n        1: punctuation.definition.annotation.requirements-txt\n      push:\n        - meta_scope: meta.annotation.requirements-txt\n        # https://pip.pypa.io/en/stable/reference/inspect-report/#example\n        - match: |-\n            (?x:\n              implementation_name\n            | implementation_version\n            | os_name\n            | platform_machine\n            | platform_release\n            | platform_system\n            | platform_version\n            | python_full_version\n            | platform_python_implementation\n            | python_version\n            | sys_platform\n            )\n          scope: variable.language.requirements-txt\n        - match: '{{operator}}'\n          scope: keyword.operator.logical.requirements-txt\n          # https://pip.pypa.io/en/stable/reference/requirement-specifiers/#examples\n        - match: '(\")'\n          captures:\n            1: punctuation.definition.string.begin.double.requirements-txt\n          push:\n            - meta_scope: string.quoted.double.requirements-txt\n            - match: '\\\\\"'\n              scope: constant.character.escape.double.requirements-txt\n            - match: '(\")'\n              captures:\n                1: punctuation.definition.string.end.double.requirements-txt\n              pop: true\n        - match: \"(')\"\n          captures:\n            1: punctuation.definition.string.begin.single.requirements-txt\n          push:\n            - meta_scope: string.quoted.single.requirements-txt\n            - match: '\\\\'''\n              scope: constant.character.escape.single.requirements-txt\n            - match: \"(')\"\n              captures:\n                1: punctuation.definition.string.end.single.requirements-txt\n              pop: true\n        - match: '(.(?=#)|$)'\n          pop: true\n    - match: '(\\$)(\\{)'\n      captures:\n        1: punctuation.definition.keyword.requirements-txt\n        2: punctuation.definition.begin.parameter.requirements-txt\n      push:\n        - meta_scope: variable.parameter.requirements-txt\n        - match: '(\\})'\n          captures:\n            1: punctuation.definition.end.parameter.requirements-txt\n          pop: true\n    - match: '(#)'\n      captures:\n        1: punctuation.definition.comment.requirements-txt\n      push:\n        - meta_scope: comment.line.requirements-txt\n        - match: '(-*-) coding: .* (-*-)'\n          captures:\n            1: punctuation.definition.begin.pep263.requirements-txt\n            2: punctuation.definition.end.pep263.requirements-txt\n        - match: '$'\n          pop: true\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/Resolv.sublime-syntax",
    "content": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: resolv\nfile_extensions:\n  - resolv.conf\nscope: source.resolv\n\ncontexts:\n  main:\n    - scope: comment.line.number-sign\n      match: \\#.*\n      comment: comment\n\n    - comment: configuration\n      match: \"(nameserver|domain|search|sortlist|options)\"\n      scope: keyword.control\n\n    - comment: options\n      match: \"(debug|ndots|timeout|attempts|rotate|no-check-names|inet6|ip6-bytestring|ip6-dotint|no-ip6-dotint|edns0|single-request|single-request-reopen|no-tld-query|use-vc|no-reload)\"\n      scope: entity.name\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/Robot.sublime-syntax",
    "content": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: Robot Framework\nfile_extensions:\n  - robot\n  - resource\nscope: source.robot\ncontexts:\n  main:\n    - match: '\\$\\{(\\d+|\\d+\\.\\d*|0[bB][01]+|0[oO][0-7]+|0[xX][0-9a-fA-F]+)\\}'\n      comment: \"Robot Framework numbers, like ${1} or ${12.3}\"\n      scope: constant.numeric.robot\n    - match: '(?i)(%\\{[\\w|\\s]+\\})'\n      comment: \"Robot Framework environment variable, like %{USER}\"\n      scope: variable.parameter.robot\n    - match: '((?<!\\\\)|(?<=\\\\\\\\))[$&]{'\n      comment: Robot Framework scalar and dictionary variables\n      push:\n        - meta_scope: entity.name.class\n        - match: '\\}'\n          pop: true\n    - match: '((?<!\\\\)(@{)|(?<=\\\\\\\\)(@{))'\n      comment: Robot Framework list variables\n      push:\n        - meta_scope: entity.name.class\n        - match: '(}\\[.+])|(})'\n          pop: true\n    - match: '(?i)^(\\|\\s*)?(\\*{1,3} ?)(settings?|variables?|keywords?|test cases?)( ?\\*{1,3})?(\\s*\\|)?'\n      comment: Robot Framework data tables\n      scope: string.robot.header\n    - match: '(?i)(^\\|\\s*)?\\[?Documentation\\]?\\s+'\n      comment: Test case, keyword and settings table documentation\n      push:\n        - meta_scope: comment\n        - match: ^(?!\\s*+\\.\\.\\.)\n          pop: true\n    - match: '(^| {2,}|\\t|\\\\| {1,})(?<!\\\\\\\\)#'\n      comment: Comment character\n      push:\n        - meta_scope: comment\n        - match: $\n          pop: true\n    - match: '(?i)\\s+\\[(Tags|Setup|Teardown|Template|Timeout|Arguments|Return)\\]'\n      comment: Tests case and keyword settings\n      scope: storage.type\n    - match: (?i)^(\\|\\s*)?(Library|Resource|Test Timeout|Test Template|Test Teardown|Test Setup|Default Tags|Force Tags|Metadata|Variables|Suite Setup|Suite Teardown)(?:(  )|( \\| ))\n      comment: Settings table settings, like Library\n      scope: constant.language\n    - match: '^(\\|\\s+)?(?!^\\.{3})(?![\\|$&])\\S+'\n      comment: Keywords and test cases\n      push:\n        - meta_scope: keyword.control.robot\n        - match: '($|\\||\\s{2,})'\n          pop: true\n    - match: (?i)^\\s+(Given|When|and|but|Then)\n      comment: BDD keywords\n      scope: string.robot.bdd\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/SML.sublime-syntax",
    "content": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: SML\nfile_extensions:\n  - sml\n  - cm\n  - sig\nscope: source.sml\ncontexts:\n  main:\n    - match: \\b(EQUAL|GREATER|LESS|NONE|SOME|abstraction|abstype|and|andalso|array|as|before|bool|case|char|datatype|do|else|end|eqtype|exception|exn|false|fn|fun|functor|handle|if|in|include|infix|infixr|int|let|list|local|nil|nonfix|not|o|of|op|open|option|orelse|overload|print|raise|real|rec|ref|sharing|sig|signature|string|struct|structure|substring|then|true|type|unit|val|vector|where|while|with|withtype|word)\\b\n      comment: SML keywords\n      scope: keyword.source.sml\n    - match: '\\b[0-9]+\\b'\n      comment: Numeric constants\n      scope: constant.numeric.sml\n    - match: '\\b[A-Z]([A-z0-9]*)\\b'\n      comment: Built in types\n      scope: support.type.sml\n    - match: '\"(\\\\\"|[^\"])*\"'\n      comment: String constant\n      scope: string.sml\n    - match: \\(\\*\n      comment: Comment\n      push:\n        - meta_scope: comment.sml\n        - match: \\*\\)\n          pop: true\n    - match: '(\\(\\)|=>|::|\\[\\]|->|:>)'\n      comment: Character\n      scope: constant.character.sml\n\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/Slim.sublime-syntax",
    "content": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/syntax.html\nname: Ruby Slim\nfile_extensions:\n  - slim\n  - skim\nscope: text.slim\ncontexts:\n  main:\n    - match: ^(\\s*)(ruby):$\n      captures:\n        2: constant.language.name.ruby.filter.slim\n      push:\n        - meta_scope: text.ruby.filter.slim\n        - match: ^(?!(\\1\\s)|\\s*$)\n          pop: true\n        - include: scope:source.ruby\n    - match: ^(\\s*)(javascript):$\n      captures:\n        2: constant.language.name.javascript.filter.slim\n      push:\n        - meta_scope: source.js.filter.slim\n        - match: ^(?!(\\1\\s)|\\s*$)\n          pop: true\n        - include: scope:source.js\n    - match: ^(---)\\s*\\n\n      captures:\n        1: storage.frontmatter.slim\n      push:\n        - meta_scope: source.yaml.meta.slim\n        - match: ^(---)\\s*\\n\n          captures:\n            1: storage.frontmatter.slim\n          pop: true\n        - include: scope:source.yaml\n    - match: ^(\\s*)(coffee):$\n      captures:\n        2: constant.language.name.coffeescript.filter.slim\n      push:\n        - meta_scope: text.coffeescript.filter.slim\n        - match: ^(?!(\\1\\s)|\\s*$)\n          pop: true\n        - include: scope:source.coffee\n    - match: ^(\\s*)(markdown):$\n      captures:\n        2: constant.language.name.markdown.filter.slim\n      push:\n        - meta_scope: text.markdown.filter.slim\n        - match: ^(?!(\\1\\s)|\\s*$)\n          pop: true\n        - include: scope:text.html.markdown\n    - match: ^(\\s*)(css):$\n      captures:\n        2: constant.language.name.css.filter.slim\n      push:\n        - meta_scope: text.css.filter.slim\n        - match: ^(?!(\\1\\s)|\\s*$)\n          pop: true\n        - include: scope:source.css\n    - match: ^(\\s*)(sass):$\n      captures:\n        2: constant.language.name.sass.filter.slim\n      push:\n        - meta_scope: text.sass.filter.slim\n        - match: ^(?!(\\1\\s)|\\s*$)\n          pop: true\n        - include: scope:source.sass\n    - match: ^(\\s*)(scss):$\n      captures:\n        2: constant.language.name.scss.filter.slim\n      push:\n        - meta_scope: text.scss.filter.slim\n        - match: ^(?!(\\1\\s)|\\s*$)\n          pop: true\n        - include: scope:source.scss\n    - match: ^(\\s*)(less):$\n      captures:\n        2: constant.language.name.less.filter.slim\n      push:\n        - meta_scope: text.less.filter.slim\n        - match: ^(?!(\\1\\s)|\\s*$)\n          pop: true\n        - include: scope:source.less\n    - match: ^(\\s*)(erb):$\n      captures:\n        2: constant.language.name.erb.filter.slim\n      push:\n        - meta_scope: text.erb.filter.slim\n        - match: ^(?!(\\1\\s)|\\s*$)\n          pop: true\n        - include: scope:source.erb\n    - match: ^(! )($|\\s.*)\n      scope: meta.prolog.slim\n      captures:\n        1: punctuation.definition.prolog.slim\n    - match: ^(\\s*)(/)\\s*.*$\n      captures:\n        2: comment.line.slash.slim\n      push:\n        - meta_scope: comment.block.slim\n        - match: ^(?!(\\1\\s)|\\s*$)\n          pop: true\n    - match: ^\\s*(?=-)\n      push:\n        - match: $\n          pop: true\n        - include: rubyline\n    - match: (?==+|~)\n      push:\n        - match: $\n          pop: true\n        - include: rubyline\n    - include: tag-attribute\n    - include: embedded-ruby\n    - match: ^(\\s*)(\\||')\\s*\n      comment: Verbatim text (can include HTML tags and copied lines)\n      push:\n        - match: ^(?!(\\1\\s)|\\s*$)\n          pop: true\n        - include: scope:text.html.basic\n        - include: embedded-ruby\n    - match: '^\\s*(\\.|#|[-a-zA-Z0-9]+)([\\w-]+)?'\n      comment: '1 - dot OR hash OR any combination of word, number; 2 - OPTIONAL any combination of word, number, dash or underscore (following a . or'\n      captures:\n        1: entity.name.tag.slim\n        2: entity.other.attribute-name.event.slim\n      push:\n        - meta_scope: meta.tag\n        - match: '$|(?!\\.|#|:|-|~|/|\\}|\\]|\\*|\\s?[\\*\\{])'\n          captures:\n            1: entity.name.tag.slim\n            2: entity.other.attribute-name.event.slim\n          pop: true\n        - match: '(:[\\w\\d]+)+'\n          comment: XML\n          push:\n            - meta_scope: entity.name.tag.slim\n            - match: $|\\s\n              pop: true\n        - match: '(:\\s)(\\.|#|[a-zA-Z0-9]+)([\\w-]+)?'\n          comment: Inline HTML / 1 - colon; 2 - dot OR hash OR any combination of word, number; 3 - OPTIONAL any combination of word, number, dash or underscore (following a . or\n          captures:\n            1: punctuation.definition.tag.end.slim\n            2: entity.name.tag.slim\n            3: entity.other.attribute-name.event.slim\n          push:\n            - match: '$|(?!\\.|#|=|-|~|/|\\}|\\]|\\*|\\s?[\\*\\{])'\n              captures:\n                1: punctuation.definition.tag.end.slim\n                2: entity.name.tag.slim\n                3: entity.other.attribute-name.event.slim\n              pop: true\n            - include: root-class-id-tag\n            - include: tag-attribute\n        - match: '(\\*\\{)(?=.*\\}|.*\\|\\s*$)'\n          comment: Splat attributes\n          captures:\n            1: punctuation.section.embedded.ruby\n          push:\n            - meta_scope: source.ruby.embedded.slim\n            - match: '(\\})|$|^(?!.*\\|\\s*$)'\n              captures:\n                1: punctuation.section.embedded.ruby\n              pop: true\n            - include: embedded-ruby\n        - include: root-class-id-tag\n        - include: rubyline\n        - match: /\n          scope: punctuation.terminator.tag.slim\n    - match: ^\\s*(\\\\.)\n      captures:\n        1: meta.escape.slim\n    - match: ^\\s*(?=\\||')\n      push:\n        - match: $\n          pop: true\n        - include: embedded-ruby\n        - include: scope:text.html.basic\n    - match: '(?=<[\\w\\d\\:]+)'\n      comment: Inline and root-level HTML tags\n      push:\n        - match: $|\\/\\>\n          pop: true\n        - include: scope:text.html.basic\n  continuation:\n    - match: '([\\\\,])\\s*\\n'\n      captures:\n        1: punctuation.separator.continuation.slim\n  delimited-ruby-a:\n    - match: '=\\('\n      push:\n        - meta_scope: source.ruby.embedded.slim\n        - match: \\)(?=( \\w|$))\n          pop: true\n        - include: scope:source.ruby.rails\n  delimited-ruby-b:\n    - match: '=\\['\n      push:\n        - meta_scope: source.ruby.embedded.slim\n        - match: '\\](?=( \\w|$))'\n          pop: true\n        - include: scope:source.ruby.rails\n  delimited-ruby-c:\n    - match: '=\\{'\n      push:\n        - meta_scope: source.ruby.embedded.slim\n        - match: '\\}(?=( \\w|$))'\n          pop: true\n        - include: scope:source.ruby.rails\n  embedded-ruby:\n    - match: '(?<!\\\\)#\\{{1,2}'\n      captures:\n        0: punctuation.section.embedded.ruby\n      push:\n        - meta_scope: source.ruby.embedded.html\n        - match: '\\}{1,2}'\n          captures:\n            0: punctuation.section.embedded.ruby\n          pop: true\n        - include: scope:source.ruby.rails\n  entities:\n    - match: '(&)([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+)(;)'\n      scope: constant.character.entity.html\n      captures:\n        1: punctuation.definition.entity.html\n        3: punctuation.definition.entity.html\n    - match: '&'\n      scope: invalid.illegal.bad-ampersand.html\n  interpolated-ruby:\n    - match: '=(?=\\b)'\n      push:\n        - meta_scope: source.ruby.embedded.html\n        - match: \\s|\\w$\n          pop: true\n  root-class-id-tag:\n    - match: '(\\.|#)([\\w\\d\\-]+)'\n      captures:\n        1: punctuation.separator.key-value.html\n        2: entity.other.attribute-name.html\n  rubyline:\n    - match: (==|=)(<>|><|<'|'<|<|>)?|-\n      comment: Hack to thwart Sublime's Ruby highlighter. It thinks do without a variable continues the next line (this can be muted with a / at the end of the line). For things like yields, do is unnecessary without an argument, so this hack will suffice\n      push:\n        - meta_scope: meta.line.ruby.slim\n        - meta_content_scope: source.ruby.embedded.slim\n        - match: (do\\s*\\n$)|(?<!\\\\|,|,\\n|\\\\\\n)$\n          captures:\n            1: keyword.control.start-block.ruby\n          pop: true\n        - match: '#.*$'\n          comment: Hack to let ruby comments work in this context properly\n          scope: comment.line.number-sign.ruby\n        - include: continuation\n        - include: scope:source.ruby.rails\n  string-double-quoted:\n    - match: (\")(?=.*\")\n      captures:\n        0: punctuation.definition.string.begin.html\n      push:\n        - meta_scope: string.quoted.double.html\n        - meta_content_scope: meta.toc-list.id.html\n        - match: '\"'\n          captures:\n            0: punctuation.definition.string.end.html\n          pop: true\n        - include: embedded-ruby\n        - include: entities\n  string-single-quoted:\n    - match: (')(?=.*')\n      captures:\n        0: punctuation.definition.string.begin.html\n      push:\n        - meta_scope: string.quoted.single.html\n        - meta_content_scope: meta.toc-list.id.html\n        - match: \"'\"\n          captures:\n            0: punctuation.definition.string.end.html\n          pop: true\n        - include: embedded-ruby\n        - include: entities\n  tag-attribute:\n    - match: '([\\w.#_-]+)(=)(?!\\s)(true|false|nil)?(\\s*\\(|\\{)?'\n      captures:\n        1: entity.other.attribute-name.event.slim\n        2: punctuation.separator.key-value.html\n        3: constant.language.slim\n      push:\n        - meta_scope: meta.attribute-with-value.slim\n        - match: '\\}|\\)|$'\n          captures:\n            1: entity.other.attribute-name.event.slim\n            2: punctuation.separator.key-value.html\n            3: constant.language.slim\n          pop: true\n        - include: tag-stuff\n        - include: string-double-quoted\n        - include: string-single-quoted\n  tag-stuff:\n    - include: tag-attribute\n    - include: interpolated-ruby\n    - include: delimited-ruby-a\n    - include: delimited-ruby-b\n    - include: delimited-ruby-c\n    - include: rubyline\n    - include: embedded-ruby\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/Stylus.sublime-syntax",
    "content": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: Stylus\nfile_extensions:\n  - styl\n  - stylus\nscope: source.stylus\ncontexts:\n  main:\n    - include: comments\n    - match: '^\\s*(@(?:import|charset|css|font-face|(?:-webkit-)?keyframes)(?:\\s+([\\w-]+))?)\\b'\n      captures:\n        1: keyword.control.at-rule.other.stylus\n        2: variable.other.animation-name.stylus\n      push:\n        - match: '$|;|(?=\\{)'\n          pop: true\n        - include: string-quoted\n    - match: ^\\s*(@media)\\s*\n      captures:\n        1: keyword.control.at-rule.media.stylus\n      push:\n        - match: '$|(?=\\{)'\n          pop: true\n        - include: media-query\n    - match: |-\n        (?x)\n        (?<=^|;|})\n        \\s*\n        (?=\n            [\\[\\]'\".\\w$-]+\n            \\s*\n            ([?:]?=)\n            (?![^\\[]*\\])\n        )\n      push:\n        - match: $|;\n          pop: true\n        - include: expression\n    - include: iteration\n    - include: conditionals\n    - include: return\n    - match: |-\n        (?x)            # multi-line regex definition mode\n\n        ^(\\s*)          # starts at the beginning of line\n        ([\\w$-]+)       # identifier (name)\n        (\\()            # start of argument list\n        (?=\n            .*?\n            \\)\\s*\\{     # we see a curly brace afterwards\n        )               # which means this is a function definition\n      captures:\n        2: entity.name.function.stylus\n        3: punctuation.definition.parameters.start.stylus\n      push:\n        - meta_scope: meta.function-call.stylus\n        - match: (\\))\n          captures:\n            1: punctuation.definition.parameters.end.stylus\n          pop: true\n        - include: expression\n    - match: |-\n        (?x)                # multi-line regex definition mode\n        (\n\n            (^|;)           # starts at the beginning of line or at a ;\n            \\s*\n            (\\+?\\s*         # for block mixins\n             [\\w$-]+)       # identifier (name)\n            (\\()            # start of argument list\n            (?=\n                .*?\n                \\)\\s*;?\\s*  # if there are only spaces and semicolons\n                $|;         # then this a\n            )\n        )\n      captures:\n        3: entity.other.attribute-name.mixin.stylus\n        4: punctuation.definition.parameters.start.stylus\n      push:\n        - meta_scope: meta.function-call.stylus\n        - match: (\\))\n          captures:\n            1: punctuation.definition.parameters.end.stylus\n          pop: true\n        - include: expression\n    - match: |-\n        (?x) # multi-line regex definition mode\n        (^|(?<=\\*/|\\}))\\s*\n        (?=\n            font(?!\n                \\s*:\\s\n                |\n                -\n                |\n                .*?\n                (?:\n                    \\/|normal|bold|light(er?)|serif|sans|monospace|\n                    \\b\\d+(?:\\b|px|r?em|%)|\n                    var\\s*\\(|\n                    ['\"][^\\]]*$\n                )\n            ) | # we need to distinguish between tag and property `cursor`\n            cursor(?!\n                \\s*[:;]\\s\n                |\n                -\n                |\n                .*?\n                (?:\n                    (?:url\\s*\\()|\n                    (?:-moz-|-webkit-|-ms-)?\n                    (?:auto|default|none|context-menu|help|pointer|progress|\n                    wait|cell|crosshair|text|vertical-text|alias|copy|\n                    move|no-drop|not-allowed|e-resize|n-resize|ne-resize|\n                    nw-resize|s-resize|se-resize|sw-resize|w-resize|\n                    ew-resize|ns-resize|nesw-resize|nwse-resize|col-resize|\n                    row-resize|all-scroll|zoom-in|zoom-out|grab|grabbing\n                    normal|bold|light(er?)|serif|sans|monospace)\n                )\n            ) | (\n                (\n                altGlyph|altGlyphDef|altGlyphItem|animate|animateColor|\n                animateMotion|animateTransform|circle|clipPath|color-profile|\n                defs|desc|ellipse|feBlend|feColorMatrix|\n                feComponentTransfer|feComposite|feConvolveMatrix|\n                feDiffuseLighting|feDisplacementMap|feDistantLight|feFlood|\n                feFuncA|feFuncB|feFuncG|feFuncR|feGaussianBlur|feImage|feMerge|\n                feMergeNode|feMorphology|feOffset|fePointLight|\n                feSpecularLighting|feSpotLight|feTile|feTurbulence|filter|\n                font-face|font-face-format|font-face-name|font-face-src|\n                font-face-uri|foreignObject|g|glyph|glyphRef|hkern|image|line|\n                linearGradient|marker|mask|metadata|missing-glyph|mpath|path|\n                pattern|polygon|polyline|radialGradient|rect|set|stop|svg|\n                switch|symbol|text|textPath|tref|tspan|use|view|vkern|\n                a|abbr|acronym|address|applet|area|article|aside|audio|b|base|\n                basefont|bdi|bdo|bgsound|big|blink|blockquote|body|br|button|\n                canvas|caption|center|cite|code|col|colgroup|data|\n                datalist|dd|decorator|del|details|dfn|dir|div|dl|dt|element|\n                em|embed|fieldset|figcaption|figure|footer|form|frame|\n                frameset|h1|h2|h3|h4|h5|h6|head|header|hgroup|hr|html|i|iframe|\n                img|input|ins|isindex|kbd|keygen|label|legend|li|link|listing|\n                main|map|mark|marquee|menu|menuitem|meta|meter|nav|nobr|\n                noframes|noscript|object|ol|optgroup|option|output|p|param|\n                plaintext|pre|progress|q|rp|rt|ruby|s|samp|script|section|\n                select|shadow|small|source|spacer|span|strike|strong|style|\n                sub|summary|sup|table|tbody|td|template|textarea|tfoot|th|\n                thead|time|title|tr|track|tt|u|ul|var|video|wbr|xmp)\n\n                \\s*([\\s,.#\\[]|:[^\\s]|(?=\\{|$))\n\n            ) | (\n                [:~>\\[*\\/]       # symbols but they are valid for selector\n\n            ) | (\n\n                \\+\\s*[\\w$-]+\\b\\s*      # are an identifier starting with $\n                (?!\\()              # and they can't have anything besides\n\n            ) | (                    # for animtions\n\n                \\d+(\\.\\d+)?%|(from|to)\\b\n\n            ) | (                   # Placeholder selectors\n\n                \\$[\\w$-]+\\b\\s*      # are an identifier starting with $\n                (?=$|\\{)            # and they can't have anything besides\n\n            ) | (                   # CSS class\n\n                \\.[a-zA-Z0-9_-]+\n\n            ) | (                   # CSS id\n\n                \\#[a-zA-Z0-9_-]+\n\n            ) | (                   # Reference to parent\n\n                ([\\w\\d_-]+)?        # matching any word right before &\n                (&)             # & itself, escaped because of plist\n                ([\\w\\d_-]+)?        # matching any word right after &\n            )\n        )\n      push:\n        - meta_scope: meta.selector.stylus\n        - match: |-\n\n            |$|(?=\\{\\s*\\}.*$)|(?=\\{.*?[:;])|(?=\\{)(?!.+\\}.*$)\n          pop: true\n        - include: comma\n        - match: \\d+(\\.\\d+)?%|from|to\n          scope: entity.other.animation-keyframe.stylus\n        - include: selector-components\n        - match: .\n          scope: entity.other.attribute-name.stylus\n    - match: |-\n        (?x)                # multi-line regex definition mode\n        (?<=^|;|{)\\s*    # starts after beginning of line, '{' or ';''\n        (?=                 # lookahead for\n            (\n             [a-zA-Z0-9_-]  # then a letter\n             |              # or\n             (\\{(.*?)\\})    # interpolation\n             |              # or\n             (/\\*.*?\\*/)    # comment\n            )+\n\n            \\s*[:\\s]\\s*     # value is separated by colon or space\n\n            (?!(\\s*\\{))     # if there are only spaces afterwards\n\n            (?!\n                [^}]*?      # checking for an unclosed curly braces on this\n                \\{          # line because if one exists it means that\n                [^}]*       # this is a selector and not a property\n                ($|\\})\n            )\n        )\n      push:\n        - match: '(?=\\}|;)|(?<!,)\\s*\\n'\n          pop: true\n        - include: comments\n        - include: interpolation\n        - match: '(?<!^|;|{)\\s*(?:(:)|\\s)'\n          captures:\n            1: punctuation.separator.key-value.stylus\n          push:\n            - match: '(;)|(?=\\})|(?=(?<!\\,)\\s*\\n)'\n              captures:\n                1: punctuation.terminator.rule.stylus\n              pop: true\n            - include: comments\n            - include: expression\n        - match: \"-(moz|o|ms|webkit|khtml)-\"\n          scope: support.type.vendor-prefix.stylus\n        - match: .\n          scope: meta.property-name.stylus support.type.property-name.stylus\n    - match: '@extends?\\s'\n      captures:\n        0: keyword.language.stylus\n      push:\n        - match: (?=$|;)\n          pop: true\n        - include: selector-components\n    - include: string-quoted\n    - include: escape\n    - include: language-constants\n    - include: language-operators\n    - include: language-keywords\n    - include: property-reference\n    - include: function-call\n    - match: '\\{'\n      scope: punctuation.section.start.stylus\n    - match: '\\}'\n      scope: punctuation.section.end.stylus\n  attribute-selector:\n    - match: '\\[(?=[^\\]]*\\])'\n      captures:\n        0: punctuation.definition.entity.start.stylus\n      push:\n        - meta_scope: meta.attribute-selector.stylus\n        - match: '\\]'\n          captures:\n            0: punctuation.definition.entity.end.stylus\n          pop: true\n        - match: '(?<=\\[)|(?<=\\{)'\n          push:\n            - match: '(?=[|~=\\]\\s])'\n              pop: true\n            - include: interpolation\n            - match: .\n              captures:\n                0: entity.other.attribute-name.stylus\n        - include: interpolation\n        - match: \"([|~]?=)\"\n          captures:\n            1: keyword.operator.stylus\n        - include: string-quoted\n        - match: .\n          captures:\n            0: string.unquoted.stylus\n  color-values:\n    - match: \\b(aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow)\\b\n      scope: constant.color.w3c-standard-color-name.stylus\n    - match: (hsla?|rgba?)\\s*(\\()\n      captures:\n        1: keyword.language.function.misc.stylus\n        2: punctuation.definition.parameters.start.stylus\n      push:\n        - match: \\)\n          captures:\n            0: punctuation.definition.parameters.end.stylus\n          pop: true\n        - match: |-\n            (?x) # multi-line regex definition mode\n            \\b\n            (?:0*((?:1?[0-9]{1,2})|(?:2(?:[0-4][0-9]|5[0-5])))\\s*(,)\\s*)\n            (?:0*((?:1?[0-9]{1,2})|(?:2(?:[0-4][0-9]|5[0-5])))\\s*(,)\\s*)\n            (?:0*((?:1?[0-9]{1,2})|(?:2(?:[0-4][0-9]|5[0-5])))\\b)\n          captures:\n            1: constant.other.color.rgb-value.stylus constant.other.color.rgb-value.red.stylus\n            2: punctuation.delimiter.comma.stylus\n            3: constant.other.color.rgb-value.stylus constant.other.color.rgb-value.green.stylus\n            4: punctuation.delimiter.comma.stylus\n            5: constant.other.color.rgb-value.stylus constant.other.color.rgb-value.blue.stylus\n        - match: |-\n            (?x) # multi-line regex definition mode\n            \\b\n            ((?:[0-9]{1,2}|100)%)(,) # red\n            \\s*\n            ((?:[0-9]{1,2}|100)%)(,) # green\n            \\s*\n            ((?:[0-9]{1,2}|100)%)    # blue\n          captures:\n            1: constant.other.color.rgb-value.stylus constant.other.color.rgb-value.red.stylus\n            2: punctuation.delimiter.comma.stylus\n            3: constant.other.color.rgb-value.stylus constant.other.color.rgb-value.green.stylus\n            4: punctuation.delimiter.comma.stylus\n            5: constant.other.color.rgb-value.stylus constant.other.color.rgb-value.blue.stylus\n        - match: |-\n            (?x) # multi-line regex definition mode\n            (?:\\s*(,)\\s*((0?\\.[0-9]+)|[0-1]))?\n          captures:\n            1: punctuation.delimiter.comma.stylus\n            2: constant.other.color.rgb-value.stylus constant.other.color.rgb-value.alpha.stylus\n        - include: numeric-values\n    - include: numeric-values\n  comma:\n    - match: \\s*,\\s*\n      scope: punctuation.delimiter.comma.stylus\n  comments:\n    - include: single-line-comment\n    - match: \\/\\*\n      captures:\n        0: punctuation.definition.comment.stylus\n      push:\n        - meta_scope: comment.block.stylus\n        - match: \\*\\/\n          captures:\n            0: punctuation.definition.comment.stylus\n          pop: true\n  conditionals:\n    - match: '(^\\s*|\\s+)(if|unless|else)(?=[\\s({]|$)\\s*'\n      captures:\n        2: keyword.control.stylus\n      push:\n        - match: '(?=$|\\{)'\n          pop: true\n        - include: expression\n  escape:\n    - match: \\\\.\n      scope: constant.character.escape.stylus\n  expression:\n    - include: single-line-comment\n    - include: comma\n    - include: iteration\n    - include: conditionals\n    - include: language-operators\n    - include: language-keywords\n    - include: hash-definition\n    - include: color-values\n    - include: url\n    - include: function-call\n    - include: string-quoted\n    - include: escape\n    - include: hash-access\n    - include: language-constants\n    - include: language-property-value-constants\n    - include: property-reference\n    - include: variable\n  function-call:\n    - match: '([\\w$-]+)(\\()'\n      captures:\n        1: entity.function-name.stylus\n        2: punctuation.definition.parameters.start.stylus\n      push:\n        - meta_scope: meta.function-call.stylus\n        - match: (\\))\n          captures:\n            1: punctuation.definition.parameters.end.stylus\n          pop: true\n        - include: expression\n  hash-access:\n    - match: '(?=[\\w$-]+(?:\\.|\\[[^\\]=]*\\]))'\n      push:\n        - meta_scope: meta.hash-access.stylus\n        - match: '(?=[^''''\"\"\\[\\]\\w.$-]|\\s|$)'\n          pop: true\n        - match: \\.\n          scope: punctuation.delimiter.hash.stylus\n        - match: '\\['\n          scope: punctuation.definition.entity.start.stylus\n        - match: '\\]'\n          scope: punctuation.definition.entity.end.stylus\n        - include: string-quoted\n        - include: variable\n  hash-definition:\n    - match: '\\{'\n      captures:\n        0: punctuation.section.embedded.start.stylus\n      push:\n        - meta_scope: meta.hash.stylus\n        - match: '\\}'\n          captures:\n            0: punctuation.section.embedded.end.stylus\n          pop: true\n        - include: single-line-comment\n        - match: |-\n            (?x)\n            (?:\n                ([\\w$-]+)\n                |\n                ('[^']*')\n                |\n                (\"[^\"]*\")\n            )\n            \\s*\n            (:)\n            \\s*\n          captures:\n            1: support.type.property-name.stylus\n            2: string.quoted.single.stylus\n            3: string.quoted.double.stylus\n            4: punctuation.separator.key-value.stylus\n          push:\n            - match: '(;)|(?=\\}|$)'\n              captures:\n                1: punctuation.terminator.statement.stylus\n              pop: true\n            - include: expression\n  interpolation:\n    - match: '\\{'\n      captures:\n        0: punctuation.section.embedded.start.stylus\n      push:\n        - meta_scope: stylus.embedded.source\n        - match: '\\}'\n          captures:\n            0: punctuation.section.embedded.end.stylus\n          pop: true\n        - include: expression\n  iteration:\n    - match: (^\\s*|\\s+)(for)\\s+(?=.*?\\s+in\\s+)\n      captures:\n        2: keyword.control.stylus\n      push:\n        - match: '$|\\{'\n          pop: true\n        - include: expression\n  language-constants:\n    - match: \\b(true|false|null)\\b\n      scope: constant.language.stylus\n  language-keywords:\n    - match: (\\b|\\s)(return|else)\\b\n      scope: keyword.control.stylus\n    - match: (\\b|\\s)(!important|in|is defined|is a)\\b\n      scope: keyword.other.stylus\n    - match: \\barguments\\b\n      scope: variable.language.stylus\n  language-operators:\n    - match: ((?:\\?|:|!|~|\\+|-|(?:\\*)?\\*|\\/|%|(\\.)?\\.\\.|<|>|(?:=|:|\\?|\\+|-|\\*|\\/|%|<|>)?=|!=)|\\b(?:in|is(?:nt)?|(?<!:)not)\\b)\n      scope: keyword.operator.stylus\n  language-property-value-constants:\n    - match: \\b(absolute|all(-scroll)?|always|armenian|auto|avoid|baseline|below|bidi-override|block|bold(er)?|(border|content|padding)-box|both|bottom|break-all|break-word|capitalize|center|char|circle|cjk-ideographic|col-resize|collapse|crosshair|cursive|dashed|decimal-leading-zero|decimal|default|disabled|disc|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ellipsis|fantasy|fixed|geometricPrecision|georgian|groove|hand|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|inactive|inherit|inline-block|inline|inset|inside|inter-ideograph|inter-word|italic|justify|katakana-iroha|katakana|keep-all|left|lighter|line-edge|line-through|line|list-item|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|medium|middle|move|monospace|n-resize|ne-resize|newspaper|no-drop|no-repeat|nw-resize|none|normal|not-allowed|nowrap|oblique|optimize(Legibility|Quality|Speed)|outset|outside|overline|pointer|pre(-(wrap|line))?|progress|relative|repeat-x|repeat-y|repeat|right|ridge|row-resize|rtl|(sans-)?serif|s-resize|scroll|se-resize|separate|small-caps|solid|square|static|strict|sub|super|sw-resize|table(-(row|cell|footer-group|header-group))?|tb-rl|text-bottom|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|vertical(-(ideographic|text))?|visible(Painted|Fill|Stroke)?|w-resize|wait|whitespace|zero|smaller|larger|((xx?-)?(small(er)?|large(r)?))|painted|fill|stroke)\\b\n      scope: constant.property-value.stylus\n  media-query:\n    - match: '\\s*(?![{;]|$)'\n      push:\n        - meta_scope: meta.at-rule.media.stylus\n        - match: '\\s*(?=[{;]|$)'\n          pop: true\n        - match: '(?i)\\s*(only|not)?\\s*(all|aural|braille|embossed|handheld|print|projection|screen|tty|tv)?(?![\\w\\d$-]+)'\n          captures:\n            1: keyword.operator.logic.media.stylus\n            2: support.constant.media.stylus\n          push:\n            - match: '\\s*(?:(,)|(?=[{;]|$))'\n              pop: true\n            - include: media-query-list\n        - include: variable\n  media-query-list:\n    - match: \\s*(and)?\\s*(\\()\\s*\n      captures:\n        1: keyword.operator.logic.media.stylus\n        2: punctuation.definition.parameters.start.stylus\n      push:\n        - match: \\)\n          captures:\n            0: punctuation.definition.parameters.end.stylus\n          pop: true\n        - include: media-query-properties\n        - include: numeric-values\n  media-query-properties:\n    - match: \\s*:\\s*\n      captures:\n        0: punctuation.separator.key-value.stylus\n    - match: |-\n        (?x)\n        (\n            ((min|max)-)?\n            (\n                ((device-)?(height|width|aspect-ratio))|\n                (color(-index)?)|monochrome|resolution\n            )\n        )|grid|scan|orientation\n      captures:\n        0: support.type.property-name.media.stylus\n    - match: \\b(portrait|landscape|progressive|interlace)\\b\n      captures:\n        1: support.constant.property-value.stylus\n  numeric-values:\n    - match: |-\n        (?x) # multi-line regex definition mode\n        (\\#)(?:\n                ([0-9a-fA-F])\n                ([0-9a-fA-F])\n                ([0-9a-fA-F])\n                ([0-9a-fA-F])?\n        |       ([0-9a-fA-F]{2})\n                ([0-9a-fA-F]{2})\n                ([0-9a-fA-F]{2})\n                ([0-9a-fA-F]{2})?\n        )\\b\n      scope: constant.other.color.rgb-value.stylus\n      captures:\n        1: punctuation.definition.constant.stylus\n        2: constant.other.color.rgb-value.red.stylus\n        3: constant.other.color.rgb-value.green.stylus\n        4: constant.other.color.rgb-value.blue.stylus\n        5: constant.other.color.rgb-value.alpha.stylus\n        6: constant.other.color.rgb-value.red.stylus\n        7: constant.other.color.rgb-value.green.stylus\n        8: constant.other.color.rgb-value.blue.stylus\n        9: constant.other.color.rgb-value.alpha.stylus\n    - match: |-\n        (?x)                    # multi-line regex definition mode\n        (?:-|\\+)?               # negative / positive\n        (?:\n            (?:\n                [0-9]+          # integer part\n                (?:\\.[0-9]+)?   # fraction\n            ) |\n            (?:\\.[0-9]+)        # fraction without leading zero\n        )\n        ((?:                    # units\n            px|pt|ch|cm|mm|in|\n            r?em|ex|pc|vw|vh|vmin|vmax|deg|\n            g?rad|turn|dpi|dpcm|dppx|m?s|k?Hz\n        )\\b|%)?\n      scope: constant.numeric.stylus\n      captures:\n        1: keyword.other.unit.stylus\n  property-reference:\n    - match: \"@[a-z-]+\"\n      scope: variable.other.property.stylus\n  pseudo:\n    - match: (:)(active|checked|default|disabled|empty|enabled|first-child|first-of-type|first|fullscreen|focus|hover|indeterminate|in-range|invalid|last-child|last-of-type|left|link|only-child|only-of-type|optional|out-of-range|read-only|read-write|required|right|root|scope|target|valid|visited)\\b\n      scope: entity.other.attribute-name.pseudo-class.stylus\n      captures:\n        1: puncutation.definition.entity.stylus\n    - match: (:?:)(before|after)\\b\n      scope: entity.other.attribute-name.pseudo-element.stylus\n      captures:\n        1: puncutation.definition.entity.stylus\n    - match: (::)(first-letter|first-number|selection)\\b\n      scope: entity.other.attribute-name.pseudo-element.stylus\n      captures:\n        1: puncutation.definition.entity.stylus\n    - match: ((:)dir)\\s*(?:(\\()(ltr|rtl)?(\\)))?\n      captures:\n        1: entity.other.attribute-name.pseudo-element.stylus\n        2: puncutation.definition.entity.stylus\n        3: puncutation.definition.parameters.start.stylus\n        4: constant.language.stylus\n        5: puncutation.definition.parameters.end.stylus\n    - match: ((:)lang)\\s*(?:(\\()(\\w+(-\\w+)?)?(\\)))?\n      captures:\n        1: entity.other.attribute-name.pseudo-element.stylus\n        2: puncutation.definition.entity.stylus\n        3: puncutation.definition.parameters.start.stylus\n        4: constant.language.stylus\n        5: puncutation.definition.parameters.end.stylus\n    - include: pseudo-nth\n    - include: pseudo-not\n  pseudo-not:\n    - match: ((:)not)\\s*(\\()\n      captures:\n        1: entity.other.attribute-name.pseudo-element.stylus\n        2: puncutation.definition.entity.stylus\n        3: puncutation.definition.parameters.start.stylus\n      push:\n        - match: \\)\n          captures:\n            0: puncutation.definition.parameters.end.stylus\n          pop: true\n        - include: selector-components\n  pseudo-nth:\n    - match: ((:)(?:nth-child|nth-last-child|nth-of-type|nth-last-of-type|nth-match|nth-last-match|nth-column|nth-last-column))\\s*(\\()\n      captures:\n        1: entity.other.attribute-name.pseudo-class.stylus\n        2: puncutation.definition.entity.stylus\n        3: puncutation.definition.parameters.start.stylus\n      push:\n        - match: \\)\n          captures:\n            0: puncutation.definition.parameters.end.stylus\n          pop: true\n        - include: language-operators\n        - include: interpolation\n        - match: \\b(odd|even)\\b\n          scope: constant.language.stylus\n        - match: \\b(\\d+)?n\\b\n          scope: variable.language.stylus\n          captures:\n            1: constant.numeric.stylus\n        - match: \\d+\n          scope: constant.numeric.stylus\n  return:\n    - match: ^\\s*(return)\n      captures:\n        1: keyword.control.stylus\n      push:\n        - match: (;)|(?=$)\n          captures:\n            1: punctuation.terminator.statement.stylus\n          pop: true\n        - include: expression\n  selector-components:\n    - include: comments\n    - include: interpolation\n    - include: attribute-selector\n    - include: pseudo\n    - match: '\\$[\\w$-]+\\b'\n      scope: entity.other.placeholder.stylus\n    - match: \"[:~>]\"\n      scope: keyword.operator.selector.stylus\n    - match: |-\n        (?x) # multi-line regex definition mode\n        \\b(\n            altGlyph|altGlyphDef|altGlyphItem|animate|animateColor|\n            animateMotion|animateTransform|circle|clipPath|color-profile|\n            defs|desc|ellipse|feBlend|feColorMatrix|\n            feComponentTransfer|feComposite|feConvolveMatrix|\n            feDiffuseLighting|feDisplacementMap|feDistantLight|feFlood|\n            feFuncA|feFuncB|feFuncG|feFuncR|feGaussianBlur|feImage|feMerge|\n            feMergeNode|feMorphology|feOffset|fePointLight|\n            feSpecularLighting|feSpotLight|feTile|feTurbulence|filter|\n            font-face|font-face-format|font-face-name|font-face-src|\n            font-face-uri|foreignObject|g|glyph|glyphRef|hkern|image|line|\n            linearGradient|marker|mask|metadata|missing-glyph|mpath|path|\n            pattern|polygon|polyline|radialGradient|rect|set|stop|svg|\n            switch|symbol|text|textPath|tref|tspan|use|view|vkern|\n            a|abbr|acronym|address|applet|area|article|aside|audio|b|base|\n            basefont|bdi|bdo|bgsound|big|blink|blockquote|body|br|button|\n            canvas|caption|center|cite|code|col|colgroup|content|data|\n            datalist|dd|decorator|del|details|dfn|dir|div|dl|dt|element|\n            em|embed|fieldset|figcaption|figure|font|footer|form|frame|\n            frameset|h1|h2|h3|h4|h5|h6|head|header|hgroup|hr|html|i|iframe|\n            img|input|ins|isindex|kbd|keygen|label|legend|li|link|listing|\n            main|map|mark|marquee|menu|menuitem|meta|meter|nav|nobr|\n            noframes|noscript|object|ol|optgroup|option|output|p|param|\n            plaintext|pre|progress|q|rp|rt|ruby|s|samp|script|section|\n            select|shadow|small|source|spacer|span|strike|strong|style|\n            sub|summary|sup|table|tbody|td|template|textarea|tfoot|th|\n            thead|time|title|tr|track|tt|u|ul|var|video|wbr|xmp\n        )\\b\n      scope: entity.name.tag.stylus\n    - match: '\\.[a-zA-Z0-9_-]+'\n      scope: entity.other.attribute-name.class.stylus\n    - match: \"#[a-zA-Z0-9_-]+\"\n      scope: entity.other.attribute-name.id.stylus\n    - match: |-\n        (?x)            # multi-line regex definition mode\n        ([\\w\\d_-]+)?    # matching any word right before &\n        (&)         # & itself, escaped because of plist\n        ([\\w\\d_-]+)?    # matching any word right after &\n      captures:\n        1: entity.other.attribute-name.stylus\n        2: variable.language.stylus\n        3: entity.other.attribute-name.stylus\n  single-line-comment:\n    - match: (\\/\\/).*$\n      scope: comment.line.stylus\n      captures:\n        1: punctuation.definition.comment.stylus\n  string-quoted:\n    - match: \"'[^']*'\"\n      scope: string.quoted.single.stylus\n    - match: '\"[^\"]*\"'\n      scope: string.quoted.double.stylus\n  url:\n    - match: (url)\\s*(\\()\n      captures:\n        1: entity.function-name.stylus\n        2: punctuation.definition.parameters.start.stylus\n      push:\n        - meta_scope: meta.function-call.stylus\n        - match: (\\))\n          captures:\n            1: punctuation.definition.parameters.end.stylus\n          pop: true\n        - include: string-quoted\n        - include: language-constants\n        - include: language-property-value-constants\n        - include: property-reference\n        - include: variable\n  variable:\n    - match: '([\\w$-]+\\b)'\n      scope: variable.other.stylus\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/Swift.sublime-syntax",
    "content": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: Swift\nfile_extensions:\n  - swift\nfirst_line_match: ^#!/.*\\bswift\nscope: source.swift\ncontexts:\n  main:\n    - include: shebang-line\n    - include: comment\n    - include: attribute\n    - include: literal\n    - include: operator\n    - include: declaration\n    - include: storage-type\n    - include: keyword\n    - include: type\n    - include: boolean\n  comment:\n    - include: documentation-comment\n    - include: block-comment\n    - include: in-line-comment\n  access-level-modifier:\n    - match: \\b(open|public|internal|fileprivate|private)\\b(?:\\(set\\))?\n      comment: access-level-modifier\n      scope: keyword.other.access-level-modifier.swift\n  arithmetic-operator:\n    - match: '(?<![/=\\-+!*%<>&|\\^~.])(\\+|\\-|\\*|\\/)(?![/=\\-+!*%<>&|\\^~.])'\n      scope: keyword.operator.arithmetic.swift\n  array-type:\n    - match: \\b(Array)(<)\n      captures:\n        1: support.type.array.swift\n        2: punctuation.array.begin.swift\n      push:\n        - meta_scope: meta.array.swift\n        - match: (>)\n          captures:\n            1: punctuation.array.end.swift\n          pop: true\n        - include: main\n  assignment-operator:\n    - match: '(?<![/=\\-+!*%<>&|\\^~.])(\\+|\\-|\\*|\\/|%|<<|>>|&|\\^|\\||&&|\\|\\|)?=(?![/=\\-+!*%<>&|\\^~.])'\n      scope: keyword.operator.assignment.swift\n  attribute:\n    - match: '((@)(\\B\\$[0-9]+|\\b[\\w^\\d][\\w\\d]*\\b|\\B`[\\w^\\d][\\w\\d]*`\\B))(\\()'\n      captures:\n        1: storage.modifier.attribute.swift\n        2: punctuation.definition.attribute.swift\n        3: punctuation.definition.attribute-arguments.begin.swift\n      push:\n        - meta_content_scope: meta.attribute.arguments.swift\n        - match: \\)\n          captures:\n            0: punctuation.definition.attribute-arguments.end.swift\n          pop: true\n        - include: main\n    - match: '((@)(\\B\\$[0-9]+|\\b[\\w^\\d][\\w\\d]*\\b|\\B`[\\w^\\d][\\w\\d]*`\\B))'\n      captures:\n        1: storage.modifier.attribute.swift\n        2: punctuation.definition.attribute.swift\n  bitwise-operator:\n    - match: '(?<![/=\\-+!*%<>&|\\^~.])(&|\\||\\^|<<|>>)(?![/=\\-+!*%<>&|\\^~.])'\n      scope: keyword.operator.bitwise.swift\n  block-comment:\n    - match: /\\*\n      comment: Block comment\n      captures:\n        0: punctuation.definition.comment.block.begin.swift\n      push:\n        - meta_scope: comment.block.swift\n        - match: \\*/\n          captures:\n            0: punctuation.definition.comment.block.end.swift\n          pop: true\n  boolean:\n    - match: \\b(true|false)\\b\n      scope: keyword.constant.boolean.swift\n  branch-statement-keyword:\n    - include: if-statement-keyword\n    - include: switch-statement-keyword\n  catch-statement-keyword:\n    - match: \\b(catch|do)\\b\n      comment: catch-statement\n      scope: kewyord.control.catch.swift\n  code-block:\n    - match: '(\\{)'\n      comment: code-block\n      captures:\n        1: punctuation.definition.code-block.begin.swift\n      push:\n        - match: '(\\})'\n          captures:\n            1: punctuation.definition.code-block.end.swift\n          pop: true\n        - include: main\n  collection-type:\n    - include: array-type\n    - include: dictionary-type\n    - match: \\b(Array|Dictionary)\\b\n      scope: support.type.swift\n  comparative-operator:\n    - match: '(?<![/=\\-+!*%<>&|\\^~.])((=|!)==?|(<|>)=?|~=)(?![/=\\-+!*%<>&|\\^~.])'\n      scope: keyword.operator.comparative.swift\n  control-transfer-statement-keyword:\n    - match: \\b(continue|break|fallthrough|return)\\b\n      comment: control-transfer-statement\n      scope: keyword.control.transfer.swift\n  custom-operator:\n    - match: '(?<=[\\s(\\[{,;:])([/=\\-+!*%<>&|\\^~.]++)(?![\\s)\\]},;:])'\n      scope: keyword.operator.custom.prefix.unary.swift\n    - match: '(?<![\\s(\\[{,;:])([/=\\-+!*%<>&|\\^~.]++)(?![\\s)\\]},;:\\.])'\n      scope: keyword.operator.custom.postfix.unary.swift\n    - match: '(?<=[\\s(\\[{,;:])([/=\\-+!*%<>&|\\^~.]++)(?=[\\s)\\]},;:])'\n      scope: keyword.operator.custom.binary.swift\n  declaration:\n    - include: import-declaration\n    - include: function-declaration\n  declaration-modifier:\n    - match: \\b(class|convenience|dynamic|final|lazy|(non)?mutating|optional|override|required|static|unowned((un)?safe)?|weak)\\b\n      comment: declaration-modifier\n      scope: keyword.other.declaration-modifier.swift\n  dictionary-type:\n    - match: \\b(Dictionary)(<)\n      captures:\n        1: support.type.dictionary.swift\n        2: punctuation.dictionary.begin.swift\n      push:\n        - meta_scope: meta.dictionary.swift\n        - match: (>)\n          captures:\n            1: punctuation.dictionary.end.swift\n          pop: true\n        - include: main\n  documentation-comment:\n    - match: /\\*\\*\n      comment: Documentation comment\n      captures:\n        0: punctuation.definition.comment.block.documentation.begin.swift\n      push:\n        - meta_scope: comment.block.documentation.swift\n        - match: \\*/\n          captures:\n            0: punctuation.definition.comment.block.documentation.end.swift\n          pop: true\n  floating-point-literal:\n    - match: '\\b([0-9][0-9_]*)(\\.([0-9][0-9_]*))?([eE][+\\-]?([0-9][0-9_]*))?\\b'\n      comment: floating-point-literal -> (decimal-literal)(decimal-fraction)?(decimal-exponent)?\n    - match: '\\b(0x\\h[\\h_]*)(\\.(0x\\h[\\h_]*))?([pP][+\\-]?(0x\\h[\\h_]*))\\b'\n      comment: floating-point-literal -> (hexadecimal-literal)(hexadecimal-fraction)?(hexadecimal-exponent)\n  function-body:\n    - include: code-block\n  function-declaration:\n    - match: '\\b(func)\\s+(\\B\\$[0-9]+|\\b[\\w^\\d][\\w\\d]*\\b|\\B`[\\w^\\d][\\w\\d]*`\\B|[/=\\-+!*%<>&|\\^~.]+)\\s*(?=\\(|<)'\n      comment: function-declaration\n      captures:\n        1: storage.type.function.swift\n        2: entity.type.function.swift\n      push:\n        - meta_scope: meta.function-declaration.swift\n        - match: '(?<=\\})'\n          pop: true\n        - include: generic-parameter-clause\n        - include: parameter-clause\n        - include: function-result\n        - include: function-body\n  function-result:\n    - match: '(?<![/=\\-+!*%<>&|\\^~.])(\\->)(?![/=\\-+!*%<>&|\\^~.])\\s*'\n      comment: function-result\n      captures:\n        1: keyword.operator.function-result.swift\n      push:\n        - meta_scope: meta.function-result.swift\n        - match: '\\s*(?=\\{)'\n          pop: true\n        - include: type\n  generic-parameter-clause:\n    - match: (<)\n      comment: generic-parameter-clause\n      captures:\n        1: punctuation.definition.generic-parameter-clause.begin.swift\n      push:\n        - meta_scope: meta.generic-parameter-clause.swift\n        - match: (>)\n          captures:\n            1: punctuation.definition.generic-parameter-clause.end.swift\n          pop: true\n        - include: main\n  identifier:\n    - match: '(\\B\\$[0-9]+|\\b[\\w^\\d][\\w\\d]*\\b|\\B`[\\w^\\d][\\w\\d]*`\\B)'\n      comment: identifier\n      scope: meta.identifier.swift\n  if-statement-keyword:\n    - match: \\b(if|else)\\b\n      comment: if-statement\n      scope: keyword.control.if.swift\n  import-declaration:\n    - match: '\\b(import)\\s+(?:(typealias|struct|class|enum|protocol|var|func)\\s+)?((?:\\B\\$[0-9]+|\\b[\\w^\\d][\\w\\d]*\\b|\\B`[\\w^\\d][\\w\\d]*`\\B|[/=\\-+!*%<>&|\\^~.]+)(?:\\.(?:\\B\\$[0-9]+|\\b[\\w^\\d][\\w\\d]*\\b|\\B`[\\w^\\d][\\w\\d]*`\\B|[/=\\-+!*%<>&|\\^~.]+))*)'\n      comment: import-declaration\n      scope: meta.import.swift\n      captures:\n        1: keyword.other.import.swift\n        2: storage.modifier.swift\n        3: support.type.module.import.swift\n  in-line-comment:\n    - match: (//).*\n      comment: In-line comment\n      scope: comment.line.double-slash.swift\n      captures:\n        1: punctuation.definition.comment.line.double-slash.swift\n  increment-decrement-operator:\n    - match: '(?<![/=\\-+!*%<>&|\\^~.])(\\+\\+|\\-\\-)(?![/=\\-+!*%<>&|\\^~.])'\n      scope: keyword.operator.increment-or-decrement.swift\n  integer-literal:\n    - match: '(\\B\\-|\\b)(0b[01][01_]*)\\b'\n      comment: binary-literal\n      scope: constant.numeric.integer.binary.swift\n    - match: '(\\B\\-|\\b)(0o[0-7][0-7_]*)\\b'\n      comment: octal-literal\n      scope: constant.numeric.integer.octal.swift\n    - match: '(\\B\\-|\\b)([0-9][0-9_]*)\\b'\n      comment: decimal-literal\n      scope: constant.numeric.integer.decimal.swift\n    - match: '(\\B\\-|\\b)(0x\\h[\\h_]*)\\b'\n      comment: hexadecimal-literal\n      scope: constant.numeric.integer.hexadecimal.swift\n  integer-type:\n    - match: \\bU?Int(8|16|32|64)?\\b\n      comment: Int types\n      scope: support.type.swift\n  keyword:\n    - include: branch-statement-keyword\n    - include: control-transfer-statement-keyword\n    - include: loop-statement-keyword\n    - include: catch-statement-keyword\n    - include: operator-declaration-modifier\n    - include: declaration-modifier\n    - include: access-level-modifier\n    - match: \\b(class|deinit|enum|extension|func|import|init|let|protocol|static|struct|subscript|typealias|var|throws|rethrows)\\b\n      comment: declaration keyword\n      scope: keyword.declaration.swift\n    - match: \\b(break|case|continue|default|do|else|fallthrough|if|in|for|return|switch|where|while|repeat|catch|guard|defer|try|throw)\\b\n      comment: statement keyword\n      scope: keyword.statement.swift\n    - match: \\b(as|dynamicType|is|new|super|self|Self|Type)\\b\n      comment: expression and type keyword\n      scope: keyword.other.statement.swift\n    - match: \\b(associativity|didSet|get|infix|inout|left|mutating|none|nonmutating|operator|override|postfix|precedence|prefix|right|set|unowned((un)?safe)?|weak|willSet)\\b\n      comment: other keyword\n      scope: keyword.other.swift\n  literal:\n    - include: integer-literal\n    - include: floating-point-literal\n    - include: nil-literal\n    - include: string-literal\n    - include: special-literal\n  logical-operator:\n    - match: '(?<![/=\\-+!*%<>&|\\^~.])(!|&&|\\|\\|)(?![/=\\-+!*%<>&|\\^~.])'\n      scope: keyword.operator.logical.swift\n  loop-statement-keyword:\n    - match: \\b(while|repeat|for|in)\\b\n      comment: loop-statement\n      scope: keyword.control.loop.swift\n  nil-literal:\n    - match: \\bnil\\b\n      comment: nil-literal\n      scope: constant.nil.swift\n  operator:\n    - include: comparative-operator\n    - include: assignment-operator\n    - include: logical-operator\n    - include: remainder-operator\n    - include: increment-decrement-operator\n    - include: overflow-operator\n    - include: range-operator\n    - include: bitwise-operator\n    - include: arithmetic-operator\n    - include: ternary-operator\n    - include: type-casting-operator\n    - include: custom-operator\n  operator-declaration-modifier:\n    - match: \\b(operator|prefix|infix|postfix)\\b\n      comment: operator-declaration\n      scope: keyword.other.operator.swift\n  optional-type:\n    - match: \\b(Optional)(<)\n      scope: meta.optional.swift\n  overflow-operator:\n    - match: '(?<![/=\\-+!*%<>&|\\^~.])\\&(\\+|\\-|\\*|\\/|%)(?![/=\\-+!*%<>&|\\^~.])'\n      scope: keyword.operator.overflow.swift\n  parameter-clause:\n    - match: (\\()\n      comment: parameter-clause\n      captures:\n        1: punctuation.definition.function-arguments.begin.swift\n      push:\n        - meta_scope: meta.parameter-clause.swift\n        - match: (\\))\n          captures:\n            1: punctuation.definition.function-arguments.end.swift\n          pop: true\n        - include: main\n  primitive-type:\n    - match: \\b(Int|Float|Double|String|Bool|Character|Void)\\b\n      comment: Primitive types\n      scope: support.type.swift\n  protocol-composition-type:\n    - match: \\b(protocol)(<)\n      scope: meta.protocol.swift\n  range-operator:\n    - match: '(?<![/=\\-+!*%<>&|\\^~.])\\.\\.(?:\\.)?(?![/=\\-+!*%<>&|\\^~.])'\n      scope: keyword.operator.range.swift\n  remainder-operator:\n    - match: '(?<![/=\\-+!*%<>&|\\^~.])\\%(?![/=\\-+!*%<>&|\\^~.])'\n      scope: keyword.operator.remainder.swift\n  shebang-line:\n    - match: ^(#!).*$\n      comment: Shebang line\n      scope: comment.line.shebang.swift\n      captures:\n        1: punctuation.definition.comment.line.shebang.swift\n  special-literal:\n    - match: \\b__(FILE|LINE|COLUMN|FUNCTION)__\\b\n      scope: keyword.other.literal.swift\n  storage-type:\n    - match: \\b(var|func|let|class|enum|struct|protocol|extension|typealias)\\b\n      scope: storage.type.swift\n  string-literal:\n    - match: \\\"\n      captures:\n        0: string.quoted.double.swift\n      push:\n        - meta_scope: meta.literal.string.swift\n        - match: \\\"\n          captures:\n            0: string.quoted.double.swift\n          pop: true\n        - match: '\\\\([0tnr\\\"\\''\\\\]|x\\h{2}|u\\h{4}|U\\h{8})'\n          scope: constant.character.escape.swift\n        - match: (\\\\\\()\n          captures:\n            1: support.punctuation.expression.begin.swift\n          push:\n            - meta_content_scope: meta.expression.swift\n            - match: (\\))\n              captures:\n                1: support.punctuation.expression.end.swift\n              pop: true\n            - include: scope:source.swift\n        - match: (\\\"|\\\\)\n          scope: invalid.illegal.swift\n        - match: (.)\n          scope: string.quoted.double.swift\n  switch-statement-keyword:\n    - match: \\b(switch|case|default|where)\\b\n      comment: switch-statement\n      scope: keyword.control.switch.swift\n  ternary-operator:\n    - match: '(?<=[\\s(\\[{,;:])(\\?|:)(?=[\\s)\\]},;:])'\n      scope: keyword.operator.ternary.swift\n  type:\n    - include: primitive-type\n    - include: integer-type\n    - include: collection-type\n    - include: optional-type\n    - include: protocol-composition-type\n  type-casting-operator:\n    - match: \\b(is\\b|as(\\?\\B|\\b))\n      scope: keyword.operator.type-casting.swift\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/TypeScript.sublime-syntax",
    "content": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: TypeScript\nfile_extensions:\n  - ts\n  - mts\n  - cts\nscope: source.ts\ncontexts:\n  main:\n    - include: directives\n    - include: statements\n    - include: shebang\n  comment:\n    - match: /\\*\\*(?!/)\n      captures:\n        0: punctuation.definition.comment.ts\n      push:\n        - meta_scope: comment.block.documentation.ts\n        - match: \\*/\n          captures:\n            0: punctuation.definition.comment.ts\n          pop: true\n        - include: docblock\n    - match: (/\\*)(?:\\s*((@)internal)(?=\\s|(\\*/)))?\n      captures:\n        1: punctuation.definition.comment.ts\n        2: storage.type.internaldeclaration.ts\n        3: punctuation.decorator.internaldeclaration.ts\n      push:\n        - meta_scope: comment.block.ts\n        - match: \\*/\n          captures:\n            0: punctuation.definition.comment.ts\n          pop: true\n    - match: '(^[ \\t]+)?((//)(?:\\s*((@)internal)(?=\\s|$))?)'\n      captures:\n        1: punctuation.whitespace.comment.leading.ts\n        2: comment.line.double-slash.ts\n        3: punctuation.definition.comment.ts\n        4: storage.type.internaldeclaration.ts\n        5: punctuation.decorator.internaldeclaration.ts\n      push:\n        - meta_content_scope: comment.line.double-slash.ts\n        - match: (?=$)\n          pop: true\n  access-modifier:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(abstract|declare|override|public|protected|private|readonly|static)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: storage.modifier.ts\n  after-operator-block-as-object-literal:\n    - match: '(?<!\\+\\+|--)(?<=[:=(,\\[?+!>]|^await|[^\\._$[:alnum:]]await|^return|[^\\._$[:alnum:]]return|^yield|[^\\._$[:alnum:]]yield|^throw|[^\\._$[:alnum:]]throw|^in|[^\\._$[:alnum:]]in|^of|[^\\._$[:alnum:]]of|^typeof|[^\\._$[:alnum:]]typeof|&&|\\|\\||\\*)\\s*(\\{)'\n      captures:\n        1: punctuation.definition.block.ts\n      push:\n        - meta_scope: meta.objectliteral.ts\n        - match: '\\}'\n          captures:\n            0: punctuation.definition.block.ts\n          pop: true\n        - include: object-member\n  array-binding-pattern:\n    - match: '(?:(\\.\\.\\.)\\s*)?(\\[)'\n      captures:\n        1: keyword.operator.rest.ts\n        2: punctuation.definition.binding-pattern.array.ts\n      push:\n        - match: '\\]'\n          captures:\n            0: punctuation.definition.binding-pattern.array.ts\n          pop: true\n        - include: binding-element\n        - include: punctuation-comma\n  array-binding-pattern-const:\n    - match: '(?:(\\.\\.\\.)\\s*)?(\\[)'\n      captures:\n        1: keyword.operator.rest.ts\n        2: punctuation.definition.binding-pattern.array.ts\n      push:\n        - match: '\\]'\n          captures:\n            0: punctuation.definition.binding-pattern.array.ts\n          pop: true\n        - include: binding-element-const\n        - include: punctuation-comma\n  array-literal:\n    - match: '\\s*(\\[)'\n      captures:\n        1: meta.brace.square.ts\n      push:\n        - meta_scope: meta.array.literal.ts\n        - match: '\\]'\n          captures:\n            0: meta.brace.square.ts\n          pop: true\n        - include: expression\n        - include: punctuation-comma\n  arrow-function:\n    - match: '(?:(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(\\basync)\\s+)?([_$[:alpha:]][_$[:alnum:]]*)\\s*(?==>)'\n      scope: meta.arrow.ts\n      captures:\n        1: storage.modifier.async.ts\n        2: variable.parameter.ts\n    - match: |-\n        (?x) (?:\n          (?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(\\basync)\n        )? ((?<![})!\\]])\\s*\n          (?=\n            # sure shot arrow functions even if => is on new line\n        (\n          (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n          [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n          (\n            ([)]\\s*:) |                                                                                       # ():\n            ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:)                                                                  # [(]param: | [(]...param:\n          )\n        ) |\n\n        # arrow function possible to detect only with => on same line\n        (\n          (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?                                                                                 # typeparameters\n          \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\)   # parameters\n          (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)?                                                                        # return type\n          \\s*=>                                                                                               # arrow operator\n        )\n          )\n        )\n      captures:\n        1: storage.modifier.async.ts\n      push:\n        - meta_scope: meta.arrow.ts\n        - match: '(?==>|\\{|(^\\s*(export|function|class|interface|let|var|const|import|enum|namespace|module|type|abstract|declare)\\s+))'\n          pop: true\n        - include: comment\n        - include: type-parameters\n        - include: function-parameters\n        - include: arrow-return-type\n        - include: possibly-arrow-return-type\n    - match: \"=>\"\n      captures:\n        0: storage.type.function.arrow.ts\n      push:\n        - meta_scope: meta.arrow.ts\n        - match: '((?<=\\}|\\S)(?<!=>)|((?!\\{)(?=\\S)))(?!\\/[\\/\\*])'\n          pop: true\n        - include: single-line-comment-consuming-line-ending\n        - include: decl-block\n        - include: expression\n  arrow-return-type:\n    - match: (?<=\\))\\s*(:)\n      captures:\n        1: keyword.operator.type.annotation.ts\n      push:\n        - meta_scope: meta.return.type.arrow.ts\n        - match: '(?==>|\\{|(^\\s*(export|function|class|interface|let|var|const|import|enum|namespace|module|type|abstract|declare)\\s+))'\n          pop: true\n        - include: arrow-return-type-body\n  arrow-return-type-body:\n    - match: '(?<=[:])(?=\\s*\\{)'\n      push:\n        - match: '(?<=\\})'\n          pop: true\n        - include: type-object\n    - include: type-predicate-operator\n    - include: type\n  async-modifier:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(async)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: storage.modifier.async.ts\n  binding-element:\n    - include: comment\n    - include: string\n    - include: numeric-literal\n    - include: regex\n    - include: object-binding-pattern\n    - include: array-binding-pattern\n    - include: destructuring-variable-rest\n    - include: variable-initializer\n  binding-element-const:\n    - include: comment\n    - include: string\n    - include: numeric-literal\n    - include: regex\n    - include: object-binding-pattern-const\n    - include: array-binding-pattern-const\n    - include: destructuring-variable-rest-const\n    - include: variable-initializer\n  boolean-literal:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))true(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: constant.language.boolean.true.ts\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))false(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: constant.language.boolean.false.ts\n  brackets:\n    - match: \"{\"\n      push:\n        - match: '}|(?=\\*/)'\n          pop: true\n        - include: brackets\n    - match: '\\['\n      push:\n        - match: '\\]|(?=\\*/)'\n          pop: true\n        - include: brackets\n  cast:\n    - match: \\s*(<)\\s*(const)\\s*(>)\n      scope: cast.expr.ts\n      captures:\n        1: meta.brace.angle.ts\n        2: storage.modifier.ts\n        3: meta.brace.angle.ts\n    - match: '(?:(?<!\\+\\+|--)(?<=^return|[^\\._$[:alnum:]]return|^throw|[^\\._$[:alnum:]]throw|^yield|[^\\._$[:alnum:]]yield|^await|[^\\._$[:alnum:]]await|^default|[^\\._$[:alnum:]]default|[=(,:>*?\\&\\|\\^]|[^_$[:alnum:]](?:\\+\\+|\\-\\-)|[^\\+]\\+|[^\\-]\\-))\\s*(<)(?!<?\\=)(?!\\s*$)'\n      captures:\n        1: meta.brace.angle.ts\n      push:\n        - meta_scope: cast.expr.ts\n        - match: (\\>)\n          captures:\n            1: meta.brace.angle.ts\n          pop: true\n        - include: type\n    - match: '(?:(?<=^))\\s*(<)(?=[_$[:alpha:]][_$[:alnum:]]*\\s*>)'\n      captures:\n        1: meta.brace.angle.ts\n      push:\n        - meta_scope: cast.expr.ts\n        - match: (\\>)\n          captures:\n            1: meta.brace.angle.ts\n          pop: true\n        - include: type\n  class-declaration:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?\\b(?:(abstract)\\s+)?\\b(class)\\b(?=\\s+|/[/*])'\n      captures:\n        1: keyword.control.export.ts\n        2: storage.modifier.ts\n        3: storage.modifier.ts\n        4: storage.type.class.ts\n      push:\n        - meta_scope: meta.class.ts\n        - match: '(?<=\\})'\n          pop: true\n        - include: class-declaration-or-expression-patterns\n  class-declaration-or-expression-patterns:\n    - include: comment\n    - include: class-or-interface-heritage\n    - match: \"[_$[:alpha:]][_$[:alnum:]]*\"\n      captures:\n        0: entity.name.type.class.ts\n    - include: type-parameters\n    - include: class-or-interface-body\n  class-expression:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(abstract)\\s+)?(class)\\b(?=\\s+|[<{]|\\/[\\/*])'\n      captures:\n        1: storage.modifier.ts\n        2: storage.type.class.ts\n      push:\n        - meta_scope: meta.class.ts\n        - match: '(?<=\\})'\n          pop: true\n        - include: class-declaration-or-expression-patterns\n  class-or-interface-body:\n    - match: '\\{'\n      captures:\n        0: punctuation.definition.block.ts\n      push:\n        - match: '\\}'\n          captures:\n            0: punctuation.definition.block.ts\n          pop: true\n        - include: comment\n        - include: decorator\n        - match: (?<=:)\\s*\n          push:\n            - match: '(?=\\s|[;),}\\]:\\-\\+]|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))'\n              pop: true\n            - include: expression\n        - include: method-declaration\n        - include: indexer-declaration\n        - include: field-declaration\n        - include: string\n        - include: type-annotation\n        - include: variable-initializer\n        - include: access-modifier\n        - include: property-accessor\n        - include: async-modifier\n        - include: after-operator-block-as-object-literal\n        - include: decl-block\n        - include: expression\n        - include: punctuation-comma\n        - include: punctuation-semicolon\n  class-or-interface-heritage:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:\\b(extends|implements)\\b)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      captures:\n        1: storage.modifier.ts\n      push:\n        - match: '(?=\\{)'\n          pop: true\n        - include: comment\n        - include: class-or-interface-heritage\n        - include: type-parameters\n        - include: expressionWithoutIdentifiers\n        - match: '([_$[:alpha:]][_$[:alnum:]]*)\\s*(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))(?=\\s*[_$[:alpha:]][_$[:alnum:]]*(\\s*\\??\\.\\s*[_$[:alpha:]][_$[:alnum:]]*)*\\s*)'\n          captures:\n            1: entity.name.type.module.ts\n            2: punctuation.accessor.ts\n            3: punctuation.accessor.optional.ts\n        - match: \"([_$[:alpha:]][_$[:alnum:]]*)\"\n          captures:\n            1: entity.other.inherited-class.ts\n        - include: expressionPunctuations\n  control-statement:\n    - include: switch-statement\n    - include: for-loop\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(catch|finally|throw|try)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: keyword.control.trycatch.ts\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(break|continue|goto)\\s+([_$[:alpha:]][_$[:alnum:]]*)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      captures:\n        1: keyword.control.loop.ts\n        2: entity.name.label.ts\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(break|continue|do|goto|while)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: keyword.control.loop.ts\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(return)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      captures:\n        0: keyword.control.flow.ts\n      push:\n        - match: '(?=[;}]|$|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))'\n          pop: true\n        - include: expression\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(case|default|switch)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: keyword.control.switch.ts\n    - include: if-statement\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(else|if)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: keyword.control.conditional.ts\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(with)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: keyword.control.with.ts\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(package)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: keyword.control.ts\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(debugger)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: keyword.other.debugger.ts\n  decl-block:\n    - match: '\\{'\n      captures:\n        0: punctuation.definition.block.ts\n      push:\n        - meta_scope: meta.block.ts\n        - match: '\\}'\n          captures:\n            0: punctuation.definition.block.ts\n          pop: true\n        - include: statements\n  declaration:\n    - include: decorator\n    - include: var-expr\n    - include: function-declaration\n    - include: class-declaration\n    - include: interface-declaration\n    - include: enum-declaration\n    - include: namespace-declaration\n    - include: type-alias-declaration\n    - include: import-equals-declaration\n    - include: import-declaration\n    - include: export-declaration\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(declare|export)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: storage.modifier.ts\n  decorator:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))\\@'\n      captures:\n        0: punctuation.decorator.ts\n      push:\n        - meta_scope: meta.decorator.ts\n        - match: (?=\\s)\n          pop: true\n        - include: expression\n  destructuring-const:\n    - match: '(?<!=|:|^of|[^\\._$[:alnum:]]of|^in|[^\\._$[:alnum:]]in)\\s*(?=\\{)'\n      push:\n        - meta_scope: meta.object-binding-pattern-variable.ts\n        - match: '(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+))'\n          pop: true\n        - include: object-binding-pattern-const\n        - include: type-annotation\n        - include: comment\n    - match: '(?<!=|:|^of|[^\\._$[:alnum:]]of|^in|[^\\._$[:alnum:]]in)\\s*(?=\\[)'\n      push:\n        - meta_scope: meta.array-binding-pattern-variable.ts\n        - match: '(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+))'\n          pop: true\n        - include: array-binding-pattern-const\n        - include: type-annotation\n        - include: comment\n  destructuring-parameter:\n    - match: '(?<!=|:)\\s*(?:(\\.\\.\\.)\\s*)?(\\{)'\n      captures:\n        1: keyword.operator.rest.ts\n        2: punctuation.definition.binding-pattern.object.ts\n      push:\n        - meta_scope: meta.parameter.object-binding-pattern.ts\n        - match: '\\}'\n          captures:\n            0: punctuation.definition.binding-pattern.object.ts\n          pop: true\n        - include: parameter-object-binding-element\n    - match: '(?<!=|:)\\s*(?:(\\.\\.\\.)\\s*)?(\\[)'\n      captures:\n        1: keyword.operator.rest.ts\n        2: punctuation.definition.binding-pattern.array.ts\n      push:\n        - meta_scope: meta.paramter.array-binding-pattern.ts\n        - match: '\\]'\n          captures:\n            0: punctuation.definition.binding-pattern.array.ts\n          pop: true\n        - include: parameter-binding-element\n        - include: punctuation-comma\n  destructuring-parameter-rest:\n    - match: '(?:(\\.\\.\\.)\\s*)?([_$[:alpha:]][_$[:alnum:]]*)'\n      captures:\n        1: keyword.operator.rest.ts\n        2: variable.parameter.ts\n  destructuring-variable:\n    - match: '(?<!=|:|^of|[^\\._$[:alnum:]]of|^in|[^\\._$[:alnum:]]in)\\s*(?=\\{)'\n      push:\n        - meta_scope: meta.object-binding-pattern-variable.ts\n        - match: '(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+))'\n          pop: true\n        - include: object-binding-pattern\n        - include: type-annotation\n        - include: comment\n    - match: '(?<!=|:|^of|[^\\._$[:alnum:]]of|^in|[^\\._$[:alnum:]]in)\\s*(?=\\[)'\n      push:\n        - meta_scope: meta.array-binding-pattern-variable.ts\n        - match: '(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+))'\n          pop: true\n        - include: array-binding-pattern\n        - include: type-annotation\n        - include: comment\n  destructuring-variable-rest:\n    - match: '(?:(\\.\\.\\.)\\s*)?([_$[:alpha:]][_$[:alnum:]]*)'\n      captures:\n        1: keyword.operator.rest.ts\n        2: meta.definition.variable.ts variable.other.readwrite.ts\n  destructuring-variable-rest-const:\n    - match: '(?:(\\.\\.\\.)\\s*)?([_$[:alpha:]][_$[:alnum:]]*)'\n      captures:\n        1: keyword.operator.rest.ts\n        2: meta.definition.variable.ts variable.other.constant.ts\n  directives:\n    - match: '^(///)\\s*(?=<(reference|amd-dependency|amd-module)(\\s+(path|types|no-default-lib|lib|name)\\s*=\\s*((\\''([^\\''\\\\]|\\\\.)*\\'')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`)))+\\s*/>\\s*$)'\n      captures:\n        1: punctuation.definition.comment.ts\n      push:\n        - meta_scope: comment.line.triple-slash.directive.ts\n        - match: (?=$)\n          pop: true\n        - match: (<)(reference|amd-dependency|amd-module)\n          captures:\n            1: punctuation.definition.tag.directive.ts\n            2: entity.name.tag.directive.ts\n          push:\n            - meta_scope: meta.tag.ts\n            - match: />\n              captures:\n                0: punctuation.definition.tag.directive.ts\n              pop: true\n            - match: path|types|no-default-lib|lib|name\n              scope: entity.other.attribute-name.directive.ts\n            - match: \"=\"\n              scope: keyword.operator.assignment.ts\n            - include: string\n  docblock:\n    - match: |-\n        (?x)\n        ((@)(?:access|api))\n        \\s+\n        (private|protected|public)\n        \\b\n      captures:\n        1: storage.type.class.jsdoc\n        2: punctuation.definition.block.tag.jsdoc\n        3: constant.language.access-type.jsdoc\n    - match: |-\n        (?x)\n        ((@)author)\n        \\s+\n        (\n          [^@\\s<>*/]\n          (?:[^@<>*/]|\\*[^/])*\n        )\n        (?:\n          \\s*\n          (<)\n          ([^>\\s]+)\n          (>)\n        )?\n      captures:\n        1: storage.type.class.jsdoc\n        2: punctuation.definition.block.tag.jsdoc\n        3: entity.name.type.instance.jsdoc\n        4: punctuation.definition.bracket.angle.begin.jsdoc\n        5: constant.other.email.link.underline.jsdoc\n        6: punctuation.definition.bracket.angle.end.jsdoc\n    - match: |-\n        (?x)\n        ((@)borrows) \\s+\n        ((?:[^@\\s*/]|\\*[^/])+)    # <that namepath>\n        \\s+ (as) \\s+              # as\n        ((?:[^@\\s*/]|\\*[^/])+)    # <this namepath>\n      captures:\n        1: storage.type.class.jsdoc\n        2: punctuation.definition.block.tag.jsdoc\n        3: entity.name.type.instance.jsdoc\n        4: keyword.operator.control.jsdoc\n        5: entity.name.type.instance.jsdoc\n    - match: ((@)example)\\s+\n      captures:\n        1: storage.type.class.jsdoc\n        2: punctuation.definition.block.tag.jsdoc\n      push:\n        - meta_scope: meta.example.jsdoc\n        - match: (?=@|\\*/)\n          pop: true\n        - match: ^\\s\\*\\s+\n        - match: \\G(<)caption(>)\n          captures:\n            0: entity.name.tag.inline.jsdoc\n            1: punctuation.definition.bracket.angle.begin.jsdoc\n            2: punctuation.definition.bracket.angle.end.jsdoc\n          push:\n            - meta_content_scope: constant.other.description.jsdoc\n            - match: (</)caption(>)|(?=\\*/)\n              captures:\n                0: entity.name.tag.inline.jsdoc\n                1: punctuation.definition.bracket.angle.begin.jsdoc\n                2: punctuation.definition.bracket.angle.end.jsdoc\n              pop: true\n        - match: '[^\\s@*](?:[^*]|\\*[^/])*'\n          captures:\n            0: source.embedded.ts\n    - match: (?x) ((@)kind) \\s+ (class|constant|event|external|file|function|member|mixin|module|namespace|typedef) \\b\n      captures:\n        1: storage.type.class.jsdoc\n        2: punctuation.definition.block.tag.jsdoc\n        3: constant.language.symbol-type.jsdoc\n    - match: |-\n        (?x)\n        ((@)see)\n        \\s+\n        (?:\n          # URL\n          (\n            (?=https?://)\n            (?:[^\\s*]|\\*[^/])+\n          )\n          |\n          # JSDoc namepath\n          (\n            (?!\n              # Avoid matching bare URIs (also acceptable as links)\n              https?://\n              |\n              # Avoid matching {@inline tags}; we match those below\n              (?:\\[[^\\[\\]]*\\])? # Possible description [preceding]{@tag}\n              {@(?:link|linkcode|linkplain|tutorial)\\b\n            )\n            # Matched namepath\n            (?:[^@\\s*/]|\\*[^/])+\n          )\n        )\n      captures:\n        1: storage.type.class.jsdoc\n        2: punctuation.definition.block.tag.jsdoc\n        3: variable.other.link.underline.jsdoc\n        4: entity.name.type.instance.jsdoc\n    - match: |-\n        (?x)\n        ((@)template)\n        \\s+\n        # One or more valid identifiers\n        (\n          [A-Za-z_$]         # First character: non-numeric word character\n          [\\w$.\\[\\]]*        # Rest of identifier\n          (?:                # Possible list of additional identifiers\n            \\s* , \\s*\n            [A-Za-z_$]\n            [\\w$.\\[\\]]*\n          )*\n        )\n      captures:\n        1: storage.type.class.jsdoc\n        2: punctuation.definition.block.tag.jsdoc\n        3: variable.other.jsdoc\n    - match: |-\n        (?x)\n        (\n          (@)\n          (?:arg|argument|const|constant|member|namespace|param|var)\n        )\n        \\s+\n        (\n          [A-Za-z_$]\n          [\\w$.\\[\\]]*\n        )\n      captures:\n        1: storage.type.class.jsdoc\n        2: punctuation.definition.block.tag.jsdoc\n        3: variable.other.jsdoc\n    - match: '((@)typedef)\\s+(?={)'\n      captures:\n        1: storage.type.class.jsdoc\n        2: punctuation.definition.block.tag.jsdoc\n      push:\n        - match: '(?=\\s|\\*/|[^{}\\[\\]A-Za-z_$])'\n          pop: true\n        - include: jsdoctype\n        - match: '(?:[^@\\s*/]|\\*[^/])+'\n          scope: entity.name.type.instance.jsdoc\n    - match: '((@)(?:arg|argument|const|constant|member|namespace|param|prop|property|var))\\s+(?={)'\n      captures:\n        1: storage.type.class.jsdoc\n        2: punctuation.definition.block.tag.jsdoc\n      push:\n        - match: '(?=\\s|\\*/|[^{}\\[\\]A-Za-z_$])'\n          pop: true\n        - include: jsdoctype\n        - match: '([A-Za-z_$][\\w$.\\[\\]]*)'\n          scope: variable.other.jsdoc\n        - match: |-\n            (?x)\n            (\\[)\\s*\n            [\\w$]+\n            (?:\n              (?:\\[\\])?                                        # Foo[ ].bar properties within an array\n              \\.                                                # Foo.Bar namespaced parameter\n              [\\w$]+\n            )*\n            (?:\n              \\s*\n              (=)                                                # [foo=bar] Default parameter value\n              \\s*\n              (\n                # The inner regexes are to stop the match early at */ and to not stop at escaped quotes\n                (?>\n                  \"(?:(?:\\*(?!/))|(?:\\\\(?!\"))|[^*\\\\])*?\" |                      # [foo=\"bar\"] Double-quoted\n                  '(?:(?:\\*(?!/))|(?:\\\\(?!'))|[^*\\\\])*?' |                      # [foo='bar'] Single-quoted\n                  \\[ (?:(?:\\*(?!/))|[^*])*? \\] |                                # [foo=[1,2]] Array literal\n                  (?:(?:\\*(?!/))|\\s(?!\\s*\\])|\\[.*?(?:\\]|(?=\\*/))|[^*\\s\\[\\]])*   # Everything else\n                )*\n              )\n            )?\n            \\s*(?:(\\])((?:[^*\\s]|\\*[^\\s/])+)?|(?=\\*/))\n          scope: variable.other.jsdoc\n          captures:\n            1: punctuation.definition.optional-value.begin.bracket.square.jsdoc\n            2: keyword.operator.assignment.jsdoc\n            3: source.embedded.ts\n            4: punctuation.definition.optional-value.end.bracket.square.jsdoc\n            5: invalid.illegal.syntax.jsdoc\n    - match: |-\n        (?x)\n        (\n          (@)\n          (?:define|enum|exception|export|extends|lends|implements|modifies\n          |namespace|private|protected|returns?|suppress|this|throws|type\n          |yields?)\n        )\n        \\s+(?={)\n      captures:\n        1: storage.type.class.jsdoc\n        2: punctuation.definition.block.tag.jsdoc\n      push:\n        - match: '(?=\\s|\\*/|[^{}\\[\\]A-Za-z_$])'\n          pop: true\n        - include: jsdoctype\n    - match: |-\n        (?x)\n        (\n          (@)\n          (?:alias|augments|callback|constructs|emits|event|fires|exports?\n          |extends|external|function|func|host|lends|listens|interface|memberof!?\n          |method|module|mixes|mixin|name|requires|see|this|typedef|uses)\n        )\n        \\s+\n        (\n          (?:\n            [^{}@\\s*] | \\*[^/]\n          )+\n        )\n      captures:\n        1: storage.type.class.jsdoc\n        2: punctuation.definition.block.tag.jsdoc\n        3: entity.name.type.instance.jsdoc\n    - match: '((@)(?:default(?:value)?|license|version))\\s+(([''''\"]))'\n      captures:\n        1: storage.type.class.jsdoc\n        2: punctuation.definition.block.tag.jsdoc\n        3: variable.other.jsdoc\n        4: punctuation.definition.string.begin.jsdoc\n      push:\n        - meta_content_scope: variable.other.jsdoc\n        - match: (\\3)|(?=$|\\*/)\n          captures:\n            0: variable.other.jsdoc\n            1: punctuation.definition.string.end.jsdoc\n          pop: true\n    - match: '((@)(?:default(?:value)?|license|tutorial|variation|version))\\s+([^\\s*]+)'\n      captures:\n        1: storage.type.class.jsdoc\n        2: punctuation.definition.block.tag.jsdoc\n        3: variable.other.jsdoc\n    - match: '(?x) (@) (?:abstract|access|alias|api|arg|argument|async|attribute|augments|author|beta|borrows|bubbles |callback|chainable|class|classdesc|code|config|const|constant|constructor|constructs|copyright |default|defaultvalue|define|deprecated|desc|description|dict|emits|enum|event|example|exception |exports?|extends|extension(?:_?for)?|external|externs|file|fileoverview|final|fires|for|func |function|generator|global|hideconstructor|host|ignore|implements|implicitCast|inherit[Dd]oc |inner|instance|interface|internal|kind|lends|license|listens|main|member|memberof!?|method |mixes|mixins?|modifies|module|name|namespace|noalias|nocollapse|nocompile|nosideeffects |override|overview|package|param|polymer(?:Behavior)?|preserve|private|prop|property|protected |public|read[Oo]nly|record|require[ds]|returns?|see|since|static|struct|submodule|summary |suppress|template|this|throws|todo|tutorial|type|typedef|unrestricted|uses|var|variation |version|virtual|writeOnce|yields?) \\b'\n      scope: storage.type.class.jsdoc\n      captures:\n        1: punctuation.definition.block.tag.jsdoc\n    - include: inline-tags\n    - match: '((@)(?:[_$[:alpha:]][_$[:alnum:]]*))(?=\\s+)'\n      captures:\n        1: storage.type.class.jsdoc\n        2: punctuation.definition.block.tag.jsdoc\n  enum-declaration:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?(?:\\b(const)\\s+)?\\b(enum)\\s+([_$[:alpha:]][_$[:alnum:]]*)'\n      captures:\n        1: keyword.control.export.ts\n        2: storage.modifier.ts\n        3: storage.modifier.ts\n        4: storage.type.enum.ts\n        5: entity.name.type.enum.ts\n      push:\n        - meta_scope: meta.enum.declaration.ts\n        - match: '(?<=\\})'\n          pop: true\n        - include: comment\n        - match: '\\{'\n          captures:\n            0: punctuation.definition.block.ts\n          push:\n            - match: '\\}'\n              captures:\n                0: punctuation.definition.block.ts\n              pop: true\n            - include: comment\n            - match: \"([_$[:alpha:]][_$[:alnum:]]*)\"\n              captures:\n                0: variable.other.enummember.ts\n              push:\n                - match: '(?=,|\\}|$)'\n                  pop: true\n                - include: comment\n                - include: variable-initializer\n            - match: '(?=((\\''([^\\''\\\\]|\\\\.)*\\'')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`)|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])+\\])))'\n              push:\n                - match: '(?=,|\\}|$)'\n                  pop: true\n                - include: string\n                - include: array-literal\n                - include: comment\n                - include: variable-initializer\n            - include: punctuation-comma\n  export-declaration:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(export)\\s+(as)\\s+(namespace)\\s+([_$[:alpha:]][_$[:alnum:]]*)'\n      captures:\n        1: keyword.control.export.ts\n        2: keyword.control.as.ts\n        3: storage.type.namespace.ts\n        4: entity.name.type.module.ts\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(export)(?:\\s+(type))?(?:(?:\\s*(=))|(?:\\s+(default)(?=\\s+)))'\n      captures:\n        1: keyword.control.export.ts\n        2: keyword.control.type.ts\n        3: keyword.operator.assignment.ts\n        4: keyword.control.default.ts\n      push:\n        - meta_scope: meta.export.default.ts\n        - match: (?=$|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))\n          pop: true\n        - include: interface-declaration\n        - include: expression\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(export)(?:\\s+(type))?\\b(?!(\\$)|(\\s*:))((?=\\s*[\\{*])|((?=\\s*[_$[:alpha:]][_$[:alnum:]]*(\\s|,))(?!\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b)))'\n      captures:\n        1: keyword.control.export.ts\n        2: keyword.control.type.ts\n      push:\n        - meta_scope: meta.export.ts\n        - match: (?=$|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))\n          pop: true\n        - include: import-export-declaration\n  expression:\n    - include: expressionWithoutIdentifiers\n    - include: identifiers\n    - include: expressionPunctuations\n  expression-inside-possibly-arrow-parens:\n    - include: expressionWithoutIdentifiers\n    - include: comment\n    - include: string\n    - include: decorator\n    - include: destructuring-parameter\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(override|public|protected|private|readonly)\\s+(?=(override|public|protected|private|readonly)\\s+)'\n      captures:\n        1: storage.modifier.ts\n    - match: |-\n        (?x)(?:(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(override|public|private|protected|readonly)\\s+)?(?:(\\.\\.\\.)\\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))\\s*(\\??)(?=\\s*\n        # function assignment |\n        (=\\s*(\n          ((async\\s+)?(\n            (function\\s*[(<*]) |\n            (function\\s+) |\n            ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n          )) |\n          ((async\\s*)?(\n            ((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?[\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n            # sure shot arrow functions even if => is on new line\n        (\n          (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n          [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n          (\n            ([)]\\s*:) |                                                                                       # ():\n            ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:)                                                                  # [(]param: | [(]...param:\n          )\n        ) |\n\n        # arrow function possible to detect only with => on same line\n        (\n          (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?                                                                                 # typeparameters\n          \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\)   # parameters\n          (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)?                                                                        # return type\n          \\s*=>                                                                                               # arrow operator\n        )\n          ))\n        )) |\n        # typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n        (:\\s*(\n          (<) |\n          ([(]\\s*(\n            ([)]) |\n            (\\.\\.\\.) |\n            ([_$[:alnum:]]+\\s*(\n              ([:,?=])|\n              ([)]\\s*=>)\n            ))\n          ))\n        )) |\n        (:\\s*(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))Function(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))) |\n        (:\\s*((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?[\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*))))))) |\n        (:\\s*(=>|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n          ((async\\s+)?(\n            (function\\s*[(<*]) |\n            (function\\s+) |\n            ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n          )) |\n          ((async\\s*)?(\n            ((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?[\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n            # sure shot arrow functions even if => is on new line\n        (\n          (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n          [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n          (\n            ([)]\\s*:) |                                                                                       # ():\n            ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:)                                                                  # [(]param: | [(]...param:\n          )\n        ) |\n\n        # arrow function possible to detect only with => on same line\n        (\n          (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?                                                                                 # typeparameters\n          \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\)   # parameters\n          (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)?                                                                        # return type\n          \\s*=>                                                                                               # arrow operator\n        )\n          ))\n        )))\n      captures:\n        1: storage.modifier.ts\n        2: keyword.operator.rest.ts\n        3: entity.name.function.ts variable.language.this.ts\n        4: entity.name.function.ts\n        5: keyword.operator.optional.ts\n    - match: '(?x)(?:(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(override|public|private|protected|readonly)\\s+)?(?:(\\.\\.\\.)\\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))\\s*(\\??)(?=\\s*[:,]|$)'\n      captures:\n        1: storage.modifier.ts\n        2: keyword.operator.rest.ts\n        3: variable.parameter.ts variable.language.this.ts\n        4: variable.parameter.ts\n        5: keyword.operator.optional.ts\n    - include: type-annotation\n    - include: variable-initializer\n    - match: \",\"\n      scope: punctuation.separator.parameter.ts\n    - include: identifiers\n    - include: expressionPunctuations\n  expression-operators:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(await)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: keyword.control.flow.ts\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(yield)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))(?=\\s*\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*\\*)'\n      captures:\n        1: keyword.control.flow.ts\n      push:\n        - match: \\*\n          captures:\n            0: keyword.generator.asterisk.ts\n          pop: true\n        - include: comment\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(yield)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))(?:\\s*(\\*))?'\n      captures:\n        1: keyword.control.flow.ts\n        2: keyword.generator.asterisk.ts\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))delete(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: keyword.operator.expression.delete.ts\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))in(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))(?!\\()'\n      scope: keyword.operator.expression.in.ts\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))of(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))(?!\\()'\n      scope: keyword.operator.expression.of.ts\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))instanceof(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: keyword.operator.expression.instanceof.ts\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))new(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: keyword.operator.new.ts\n    - include: typeof-operator\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))void(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: keyword.operator.expression.void.ts\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(as)\\s+(const)(?=\\s*($|[;,:})\\]]))'\n      captures:\n        1: keyword.control.as.ts\n        2: storage.modifier.ts\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(as)\\s+'\n      captures:\n        1: keyword.control.as.ts\n      push:\n        - match: '(?=^|[;),}\\]:?\\-\\+\\>]|\\|\\||\\&\\&|\\!\\=\\=|$|((?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(as)\\s+)|(\\s+\\<))'\n          pop: true\n        - include: type\n    - match: \\.\\.\\.\n      scope: keyword.operator.spread.ts\n    - match: \\*=|(?<!\\()/=|%=|\\+=|\\-=\n      scope: keyword.operator.assignment.compound.ts\n    - match: \\&=|\\^=|<<=|>>=|>>>=|\\|=\n      scope: keyword.operator.assignment.compound.bitwise.ts\n    - match: \"<<|>>>|>>\"\n      scope: keyword.operator.bitwise.shift.ts\n    - match: \"===|!==|==|!=\"\n      scope: keyword.operator.comparison.ts\n    - match: <=|>=|<>|<|>\n      scope: keyword.operator.relational.ts\n    - match: '(?<=[_$[:alnum:]])(\\!)\\s*(?:(/=)|(?:(/)(?![/*])))'\n      captures:\n        1: keyword.operator.logical.ts\n        2: keyword.operator.assignment.compound.ts\n        3: keyword.operator.arithmetic.ts\n    - match: \\!|&&|\\|\\||\\?\\?\n      scope: keyword.operator.logical.ts\n    - match: \\&|~|\\^|\\|\n      scope: keyword.operator.bitwise.ts\n    - match: \\=\n      scope: keyword.operator.assignment.ts\n    - match: \"--\"\n      scope: keyword.operator.decrement.ts\n    - match: \\+\\+\n      scope: keyword.operator.increment.ts\n    - match: '%|\\*|/|-|\\+'\n      scope: keyword.operator.arithmetic.ts\n    - match: '(?<=[_$[:alnum:])\\]])\\s*(?=(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)+(?:(/=)|(?:(/)(?![/*]))))'\n      push:\n        - match: '(?:(/=)|(?:(/)(?!\\*([^\\*]|(\\*[^\\/]))*\\*\\/)))'\n          captures:\n            1: keyword.operator.assignment.compound.ts\n            2: keyword.operator.arithmetic.ts\n          pop: true\n        - include: comment\n    - match: '(?<=[_$[:alnum:])\\]])\\s*(?:(/=)|(?:(/)(?![/*])))'\n      captures:\n        1: keyword.operator.assignment.compound.ts\n        2: keyword.operator.arithmetic.ts\n  expressionPunctuations:\n    - include: punctuation-comma\n    - include: punctuation-accessor\n  expressionWithoutIdentifiers:\n    - include: string\n    - include: regex\n    - include: comment\n    - include: function-expression\n    - include: class-expression\n    - include: arrow-function\n    - include: paren-expression-possibly-arrow\n    - include: cast\n    - include: ternary-expression\n    - include: new-expr\n    - include: instanceof-expr\n    - include: object-literal\n    - include: expression-operators\n    - include: function-call\n    - include: literal\n    - include: support-objects\n    - include: paren-expression\n  field-declaration:\n    - match: |-\n        (?x)(?<!\\()(?:(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(readonly)\\s+)?(?=\\s*((\\b(?<!\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\b(?!\\$))|(\\b(?<!\\$)0(?:b|B)[01][01_]*(n)?\\b(?!\\$))|(\\b(?<!\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\b(?!\\$))|((?<!\\$)(?:\n          (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)| # 1.1E+3\n          (?:\\b[0-9][0-9_]*(\\.)[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # 1.E+3\n          (?:\\B(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # .1E+3\n          (?:\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|                 # 1E+3\n          (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b)|                      # 1.1\n          (?:\\b[0-9][0-9_]*(\\.)(n)?\\B)|                                  # 1.\n          (?:\\B(\\.)[0-9][0-9_]*(n)?\\b)|                                  # .1\n          (?:\\b[0-9][0-9_]*(n)?\\b(?!\\.))                                 # 1\n        )(?!\\$))|(\\#?[_$[:alpha:]][_$[:alnum:]]*)|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`)|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])+\\]))\\s*(?:(?:(\\?)|(\\!))\\s*)?(=|:|;|,|\\}|$))\n      captures:\n        1: storage.modifier.ts\n      push:\n        - meta_scope: meta.field.declaration.ts\n        - match: |-\n            (?x)(?=\\}|;|,|$|(^(?!\\s*((\\b(?<!\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\b(?!\\$))|(\\b(?<!\\$)0(?:b|B)[01][01_]*(n)?\\b(?!\\$))|(\\b(?<!\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\b(?!\\$))|((?<!\\$)(?:\n              (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)| # 1.1E+3\n              (?:\\b[0-9][0-9_]*(\\.)[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # 1.E+3\n              (?:\\B(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # .1E+3\n              (?:\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|                 # 1E+3\n              (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b)|                      # 1.1\n              (?:\\b[0-9][0-9_]*(\\.)(n)?\\B)|                                  # 1.\n              (?:\\B(\\.)[0-9][0-9_]*(n)?\\b)|                                  # .1\n              (?:\\b[0-9][0-9_]*(n)?\\b(?!\\.))                                 # 1\n            )(?!\\$))|(\\#?[_$[:alpha:]][_$[:alnum:]]*)|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`)|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])+\\]))\\s*(?:(?:(\\?)|(\\!))\\s*)?(=|:|;|,|$))))|(?<=\\})\n          pop: true\n        - include: variable-initializer\n        - include: type-annotation\n        - include: string\n        - include: array-literal\n        - include: numeric-literal\n        - include: comment\n        - match: |-\n            (?x)(\\#?[_$[:alpha:]][_$[:alnum:]]*)(?:(\\?)|(\\!))?(?=\\s*\\s*\n            # function assignment |\n            (=\\s*(\n              ((async\\s+)?(\n                (function\\s*[(<*]) |\n                (function\\s+) |\n                ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n              )) |\n              ((async\\s*)?(\n                ((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?[\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n                # sure shot arrow functions even if => is on new line\n            (\n              (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n              [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n              (\n                ([)]\\s*:) |                                                                                       # ():\n                ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:)                                                                  # [(]param: | [(]...param:\n              )\n            ) |\n\n            # arrow function possible to detect only with => on same line\n            (\n              (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?                                                                                 # typeparameters\n              \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\)   # parameters\n              (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)?                                                                        # return type\n              \\s*=>                                                                                               # arrow operator\n            )\n              ))\n            )) |\n            # typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n            (:\\s*(\n              (<) |\n              ([(]\\s*(\n                ([)]) |\n                (\\.\\.\\.) |\n                ([_$[:alnum:]]+\\s*(\n                  ([:,?=])|\n                  ([)]\\s*=>)\n                ))\n              ))\n            )) |\n            (:\\s*(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))Function(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))) |\n            (:\\s*((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?[\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*))))))) |\n            (:\\s*(=>|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n              ((async\\s+)?(\n                (function\\s*[(<*]) |\n                (function\\s+) |\n                ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n              )) |\n              ((async\\s*)?(\n                ((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?[\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n                # sure shot arrow functions even if => is on new line\n            (\n              (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n              [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n              (\n                ([)]\\s*:) |                                                                                       # ():\n                ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:)                                                                  # [(]param: | [(]...param:\n              )\n            ) |\n\n            # arrow function possible to detect only with => on same line\n            (\n              (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?                                                                                 # typeparameters\n              \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\)   # parameters\n              (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)?                                                                        # return type\n              \\s*=>                                                                                               # arrow operator\n            )\n              ))\n            )))\n          captures:\n            1: meta.definition.property.ts entity.name.function.ts\n            2: keyword.operator.optional.ts\n            3: keyword.operator.definiteassignment.ts\n        - match: '\\#?[_$[:alpha:]][_$[:alnum:]]*'\n          scope: meta.definition.property.ts variable.object.property.ts\n        - match: \\?\n          scope: keyword.operator.optional.ts\n        - match: \\!\n          scope: keyword.operator.definiteassignment.ts\n  for-loop:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))for(?=((\\s+|(\\s*\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*))await)?\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)?(\\())'\n      captures:\n        0: keyword.control.loop.ts\n      push:\n        - match: (?<=\\))\n          pop: true\n        - include: comment\n        - match: await\n          scope: keyword.control.loop.ts\n        - match: \\(\n          captures:\n            0: meta.brace.round.ts\n          push:\n            - match: \\)\n              captures:\n                0: meta.brace.round.ts\n              pop: true\n            - include: var-expr\n            - include: expression\n            - include: punctuation-semicolon\n  function-body:\n    - include: comment\n    - include: type-parameters\n    - include: function-parameters\n    - include: return-type\n    - include: type-function-return-type\n    - include: decl-block\n    - match: \\*\n      scope: keyword.generator.asterisk.ts\n  function-call:\n    - match: '(?=(((([_$[:alpha:]][_$[:alnum:]]*)(\\s*\\??\\.\\s*(\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\??\\.\\s*\\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\\)]))\\s*(?:(\\?\\.\\s*)|(\\!))?((<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\''([^\\''\\\\]|\\\\.)*\\'')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\''([^\\''\\\\]|\\\\.)*\\'')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))(([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\''([^\\''\\\\]|\\\\.)*\\'')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>)*(?<!=)\\>))*(?<!=)\\>)*(?<!=)>\\s*)?\\())'\n      push:\n        - match: '(?<=\\))(?!(((([_$[:alpha:]][_$[:alnum:]]*)(\\s*\\??\\.\\s*(\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\??\\.\\s*\\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\\)]))\\s*(?:(\\?\\.\\s*)|(\\!))?((<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\''([^\\''\\\\]|\\\\.)*\\'')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\''([^\\''\\\\]|\\\\.)*\\'')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))(([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\''([^\\''\\\\]|\\\\.)*\\'')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>)*(?<!=)\\>))*(?<!=)\\>)*(?<!=)>\\s*)?\\())'\n          pop: true\n        - match: '(?=(([_$[:alpha:]][_$[:alnum:]]*)(\\s*\\??\\.\\s*(\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\??\\.\\s*\\#?[_$[:alpha:]][_$[:alnum:]]*))'\n          push:\n            - meta_scope: meta.function-call.ts\n            - match: '(?=\\s*(?:(\\?\\.\\s*)|(\\!))?((<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\''([^\\''\\\\]|\\\\.)*\\'')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\''([^\\''\\\\]|\\\\.)*\\'')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))(([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\''([^\\''\\\\]|\\\\.)*\\'')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>)*(?<!=)\\>))*(?<!=)\\>)*(?<!=)>\\s*)?\\())'\n              pop: true\n            - include: function-call-target\n        - include: comment\n        - include: function-call-optionals\n        - include: type-arguments\n        - include: paren-expression\n    - match: '(?=(((([_$[:alpha:]][_$[:alnum:]]*)(\\s*\\??\\.\\s*(\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\??\\.\\s*\\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\\)]))(<\\s*[\\{\\[\\(]\\s*$))'\n      push:\n        - match: '(?<=\\>)(?!(((([_$[:alpha:]][_$[:alnum:]]*)(\\s*\\??\\.\\s*(\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\??\\.\\s*\\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\\)]))(<\\s*[\\{\\[\\(]\\s*$))'\n          pop: true\n        - match: '(?=(([_$[:alpha:]][_$[:alnum:]]*)(\\s*\\??\\.\\s*(\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\??\\.\\s*\\#?[_$[:alpha:]][_$[:alnum:]]*))'\n          push:\n            - meta_scope: meta.function-call.ts\n            - match: '(?=(<\\s*[\\{\\[\\(]\\s*$))'\n              pop: true\n            - include: function-call-target\n        - include: comment\n        - include: function-call-optionals\n        - include: type-arguments\n  function-call-optionals:\n    - match: \\?\\.\n      scope: meta.function-call.ts punctuation.accessor.optional.ts\n    - match: \\!\n      scope: meta.function-call.ts keyword.operator.definiteassignment.ts\n  function-call-target:\n    - include: support-function-call-identifiers\n    - match: '(\\#?[_$[:alpha:]][_$[:alnum:]]*)'\n      scope: entity.name.function.ts\n  function-declaration:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?(?:(async)\\s+)?(function\\b)(?:\\s*(\\*))?(?:(?:\\s+|(?<=\\*))([_$[:alpha:]][_$[:alnum:]]*))?\\s*'\n      captures:\n        1: keyword.control.export.ts\n        2: storage.modifier.ts\n        3: storage.modifier.async.ts\n        4: storage.type.function.ts\n        5: keyword.generator.asterisk.ts\n        6: meta.definition.function.ts entity.name.function.ts\n      push:\n        - meta_scope: meta.function.ts\n        - match: '(?=;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))|(?<=\\})'\n          pop: true\n        - include: function-name\n        - include: function-body\n  function-expression:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(async)\\s+)?(function\\b)(?:\\s*(\\*))?(?:(?:\\s+|(?<=\\*))([_$[:alpha:]][_$[:alnum:]]*))?\\s*'\n      captures:\n        1: storage.modifier.async.ts\n        2: storage.type.function.ts\n        3: keyword.generator.asterisk.ts\n        4: meta.definition.function.ts entity.name.function.ts\n      push:\n        - meta_scope: meta.function.expression.ts\n        - match: '(?=;)|(?<=\\})'\n          pop: true\n        - include: function-name\n        - include: single-line-comment-consuming-line-ending\n        - include: function-body\n  function-name:\n    - match: \"[_$[:alpha:]][_$[:alnum:]]*\"\n      scope: meta.definition.function.ts entity.name.function.ts\n  function-parameters:\n    - match: \\(\n      captures:\n        0: punctuation.definition.parameters.begin.ts\n      push:\n        - meta_scope: meta.parameters.ts\n        - match: \\)\n          captures:\n            0: punctuation.definition.parameters.end.ts\n          pop: true\n        - include: function-parameters-body\n  function-parameters-body:\n    - include: comment\n    - include: string\n    - include: decorator\n    - include: destructuring-parameter\n    - include: parameter-name\n    - include: parameter-type-annotation\n    - include: variable-initializer\n    - match: \",\"\n      scope: punctuation.separator.parameter.ts\n  identifiers:\n    - include: object-identifiers\n    - match: |-\n        (?x)(?:(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*)?([_$[:alpha:]][_$[:alnum:]]*)(?=\\s*=\\s*(\n          ((async\\s+)?(\n            (function\\s*[(<*]) |\n            (function\\s+) |\n            ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n          )) |\n          ((async\\s*)?(\n            ((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?[\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n            # sure shot arrow functions even if => is on new line\n        (\n          (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n          [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n          (\n            ([)]\\s*:) |                                                                                       # ():\n            ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:)                                                                  # [(]param: | [(]...param:\n          )\n        ) |\n\n        # arrow function possible to detect only with => on same line\n        (\n          (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?                                                                                 # typeparameters\n          \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\)   # parameters\n          (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)?                                                                        # return type\n          \\s*=>                                                                                               # arrow operator\n        )\n          ))\n        ))\n      captures:\n        1: punctuation.accessor.ts\n        2: punctuation.accessor.optional.ts\n        3: entity.name.function.ts\n    - match: '(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*(\\#?[[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])'\n      captures:\n        1: punctuation.accessor.ts\n        2: punctuation.accessor.optional.ts\n        3: variable.other.constant.property.ts\n    - match: '(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*(\\#?[_$[:alpha:]][_$[:alnum:]]*)'\n      captures:\n        1: punctuation.accessor.ts\n        2: punctuation.accessor.optional.ts\n        3: variable.other.property.ts\n    - match: \"([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])\"\n      scope: variable.other.constant.ts\n    - match: \"[_$[:alpha:]][_$[:alnum:]]*\"\n      scope: variable.other.readwrite.ts\n  if-statement:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?=\\bif\\s*(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))\\s*(?!\\{))'\n      push:\n        - match: '(?=;|$|\\})'\n          pop: true\n        - include: comment\n        - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(if)\\s*(\\()'\n          captures:\n            1: keyword.control.conditional.ts\n            2: meta.brace.round.ts\n          push:\n            - match: \\)\n              captures:\n                0: meta.brace.round.ts\n              pop: true\n            - include: expression\n        - match: '(?<=\\))\\s*\\/(?![\\/*])(?=(?:[^\\/\\\\\\[]|\\\\.|\\[([^\\]\\\\]|\\\\.)*\\])+\\/([dgimsuy]+|(?![\\/\\*])|(?=\\/\\*))(?!\\s*[a-zA-Z0-9_$]))'\n          captures:\n            0: punctuation.definition.string.begin.ts\n          push:\n            - meta_scope: string.regexp.ts\n            - match: \"(/)([dgimsuy]*)\"\n              captures:\n                1: punctuation.definition.string.end.ts\n                2: keyword.other.ts\n              pop: true\n            - include: regexp\n        - include: statements\n  import-declaration:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?\\b(import)(?:\\s+(type)(?!\\s+from))?(?!\\s*[:\\(])(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      captures:\n        1: keyword.control.export.ts\n        2: storage.modifier.ts\n        3: keyword.control.import.ts\n        4: keyword.control.type.ts\n      push:\n        - meta_scope: meta.import.ts\n        - match: '(?<!^import|[^\\._$[:alnum:]]import)(?=;|$|^)'\n          pop: true\n        - include: single-line-comment-consuming-line-ending\n        - include: comment\n        - include: string\n        - match: '(?<=^import|[^\\._$[:alnum:]]import)(?!\\s*[\"''])'\n          push:\n            - match: \\bfrom\\b\n              captures:\n                0: keyword.control.from.ts\n              pop: true\n            - include: import-export-declaration\n        - include: import-export-declaration\n  import-equals-declaration:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?\\b(import)(?:\\s+(type))?\\s+([_$[:alpha:]][_$[:alnum:]]*)\\s*(=)\\s*(require)\\s*(\\()'\n      captures:\n        1: keyword.control.export.ts\n        2: storage.modifier.ts\n        3: keyword.control.import.ts\n        4: keyword.control.type.ts\n        5: variable.other.readwrite.alias.ts\n        6: keyword.operator.assignment.ts\n        7: keyword.control.require.ts\n        8: meta.brace.round.ts\n      push:\n        - meta_scope: meta.import-equals.external.ts\n        - match: \\)\n          captures:\n            0: meta.brace.round.ts\n          pop: true\n        - include: comment\n        - include: string\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?\\b(import)(?:\\s+(type))?\\s+([_$[:alpha:]][_$[:alnum:]]*)\\s*(=)\\s*(?!require\\b)'\n      captures:\n        1: keyword.control.export.ts\n        2: storage.modifier.ts\n        3: keyword.control.import.ts\n        4: keyword.control.type.ts\n        5: variable.other.readwrite.alias.ts\n        6: keyword.operator.assignment.ts\n      push:\n        - meta_scope: meta.import-equals.internal.ts\n        - match: (?=;|$|^)\n          pop: true\n        - include: single-line-comment-consuming-line-ending\n        - include: comment\n        - match: '([_$[:alpha:]][_$[:alnum:]]*)\\s*(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))'\n          captures:\n            1: entity.name.type.module.ts\n            2: punctuation.accessor.ts\n            3: punctuation.accessor.optional.ts\n        - match: \"([_$[:alpha:]][_$[:alnum:]]*)\"\n          scope: variable.other.readwrite.ts\n  import-export-block:\n    - match: '\\{'\n      captures:\n        0: punctuation.definition.block.ts\n      push:\n        - meta_scope: meta.block.ts\n        - match: '\\}'\n          captures:\n            0: punctuation.definition.block.ts\n          pop: true\n        - include: import-export-clause\n  import-export-clause:\n    - include: comment\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(\\bdefault)|(\\*)|(\\b[_$[:alpha:]][_$[:alnum:]]*))\\s+(as)\\s+(?:(default(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.)))|([_$[:alpha:]][_$[:alnum:]]*))'\n      captures:\n        1: keyword.control.default.ts\n        2: constant.language.import-export-all.ts\n        3: variable.other.readwrite.ts\n        4: keyword.control.as.ts\n        5: keyword.control.default.ts\n        6: variable.other.readwrite.alias.ts\n    - include: punctuation-comma\n    - match: \\*\n      scope: constant.language.import-export-all.ts\n    - match: \\b(default)\\b\n      scope: keyword.control.default.ts\n    - match: \"([_$[:alpha:]][_$[:alnum:]]*)\"\n      scope: variable.other.readwrite.alias.ts\n  import-export-declaration:\n    - include: comment\n    - include: string\n    - include: import-export-block\n    - match: \\bfrom\\b\n      scope: keyword.control.from.ts\n    - include: import-export-clause\n  indexer-declaration:\n    - match: '(?:(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(readonly)\\s*)?\\s*(\\[)\\s*([_$[:alpha:]][_$[:alnum:]]*)\\s*(?=:)'\n      captures:\n        1: storage.modifier.ts\n        2: meta.brace.square.ts\n        3: variable.parameter.ts\n      push:\n        - meta_scope: meta.indexer.declaration.ts\n        - match: '(\\])\\s*(\\?\\s*)?|$'\n          captures:\n            1: meta.brace.square.ts\n            2: keyword.operator.optional.ts\n          pop: true\n        - include: type-annotation\n  indexer-mapped-type-declaration:\n    - match: '(?:(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))([+-])?(readonly)\\s*)?\\s*(\\[)\\s*([_$[:alpha:]][_$[:alnum:]]*)\\s+(in)\\s+'\n      captures:\n        1: keyword.operator.type.modifier.ts\n        2: storage.modifier.ts\n        3: meta.brace.square.ts\n        4: entity.name.type.ts\n        5: keyword.operator.expression.in.ts\n      push:\n        - meta_scope: meta.indexer.mappedtype.declaration.ts\n        - match: '(\\])([+-])?\\s*(\\?\\s*)?|$'\n          captures:\n            1: meta.brace.square.ts\n            2: keyword.operator.type.modifier.ts\n            3: keyword.operator.optional.ts\n          pop: true\n        - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(as)\\s+'\n          captures:\n            1: keyword.control.as.ts\n        - include: type\n  inline-tags:\n    - match: '(\\[)[^\\]]+(\\])(?={@(?:link|linkcode|linkplain|tutorial))'\n      scope: constant.other.description.jsdoc\n      captures:\n        1: punctuation.definition.bracket.square.begin.jsdoc\n        2: punctuation.definition.bracket.square.end.jsdoc\n    - match: '({)((@)(?:link(?:code|plain)?|tutorial))\\s*'\n      captures:\n        1: punctuation.definition.bracket.curly.begin.jsdoc\n        2: storage.type.class.jsdoc\n        3: punctuation.definition.inline.tag.jsdoc\n      push:\n        - meta_scope: entity.name.type.instance.jsdoc\n        - match: '}|(?=\\*/)'\n          captures:\n            0: punctuation.definition.bracket.curly.end.jsdoc\n          pop: true\n        - match: '\\G((?=https?://)(?:[^|}\\s*]|\\*[/])+)(\\|)?'\n          captures:\n            1: variable.other.link.underline.jsdoc\n            2: punctuation.separator.pipe.jsdoc\n        - match: '\\G((?:[^{}@\\s|*]|\\*[^/])+)(\\|)?'\n          captures:\n            1: variable.other.description.jsdoc\n            2: punctuation.separator.pipe.jsdoc\n  instanceof-expr:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(instanceof)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      captures:\n        1: keyword.operator.expression.instanceof.ts\n      push:\n        - match: '(?<=\\))|(?=[;),}\\]:?\\-\\+\\>]|\\|\\||\\&\\&|\\!\\=\\=|$|(([\\&\\~\\^\\|]\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s+instanceof(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.)))|((?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))function((\\s+[_$[:alpha:]][_$[:alnum:]]*)|(\\s*[\\(]))))'\n          pop: true\n        - include: type\n  interface-declaration:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?\\b(?:(abstract)\\s+)?\\b(interface)\\b(?=\\s+|/[/*])'\n      captures:\n        1: keyword.control.export.ts\n        2: storage.modifier.ts\n        3: storage.modifier.ts\n        4: storage.type.interface.ts\n      push:\n        - meta_scope: meta.interface.ts\n        - match: '(?<=\\})'\n          pop: true\n        - include: comment\n        - include: class-or-interface-heritage\n        - match: \"[_$[:alpha:]][_$[:alnum:]]*\"\n          captures:\n            0: entity.name.type.interface.ts\n        - include: type-parameters\n        - include: class-or-interface-body\n  jsdoctype:\n    - match: '\\G{(?:[^}*]|\\*[^/}])+$'\n      scope: invalid.illegal.type.jsdoc\n    - match: '\\G({)'\n      captures:\n        0: entity.name.type.instance.jsdoc\n        1: punctuation.definition.bracket.curly.begin.jsdoc\n      push:\n        - meta_content_scope: entity.name.type.instance.jsdoc\n        - match: '((}))\\s*|(?=\\*/)'\n          captures:\n            1: entity.name.type.instance.jsdoc\n            2: punctuation.definition.bracket.curly.end.jsdoc\n          pop: true\n        - include: brackets\n  label:\n    - match: '([_$[:alpha:]][_$[:alnum:]]*)\\s*(:)(?=\\s*\\{)'\n      captures:\n        1: entity.name.label.ts\n        2: punctuation.separator.label.ts\n      push:\n        - match: '(?<=\\})'\n          pop: true\n        - include: decl-block\n    - match: '([_$[:alpha:]][_$[:alnum:]]*)\\s*(:)'\n      captures:\n        1: entity.name.label.ts\n        2: punctuation.separator.label.ts\n  literal:\n    - include: numeric-literal\n    - include: boolean-literal\n    - include: null-literal\n    - include: undefined-literal\n    - include: numericConstant-literal\n    - include: array-literal\n    - include: this-literal\n    - include: super-literal\n  method-declaration:\n    - match: '(?x)(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:\\b(override)\\s+)?(?:\\b(public|private|protected)\\s+)?(?:\\b(abstract)\\s+)?(?:\\b(async)\\s+)?\\s*\\b(constructor)\\b(?!:)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      captures:\n        1: storage.modifier.ts\n        2: storage.modifier.ts\n        3: storage.modifier.ts\n        4: storage.modifier.async.ts\n        5: storage.type.ts\n      push:\n        - meta_scope: meta.method.declaration.ts\n        - match: '(?=\\}|;|,|$)|(?<=\\})'\n          pop: true\n        - include: method-declaration-name\n        - include: function-body\n    - match: '(?x)(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:\\b(override)\\s+)?(?:\\b(public|private|protected)\\s+)?(?:\\b(abstract)\\s+)?(?:\\b(async)\\s+)?(?:(?:\\s*\\b(new)\\b(?!:)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.)))|(?:(\\*)\\s*)?)(?=\\s*((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*))?[\\(])'\n      captures:\n        1: storage.modifier.ts\n        2: storage.modifier.ts\n        3: storage.modifier.ts\n        4: storage.modifier.async.ts\n        5: keyword.operator.new.ts\n        6: keyword.generator.asterisk.ts\n      push:\n        - meta_scope: meta.method.declaration.ts\n        - match: '(?=\\}|;|,|$)|(?<=\\})'\n          pop: true\n        - include: method-declaration-name\n        - include: function-body\n    - match: |-\n        (?x)(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:\\b(override)\\s+)?(?:\\b(public|private|protected)\\s+)?(?:\\b(abstract)\\s+)?(?:\\b(async)\\s+)?(?:\\b(get|set)\\s+)?(?:(\\*)\\s*)?(?=\\s*(((\\b(?<!\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\b(?!\\$))|(\\b(?<!\\$)0(?:b|B)[01][01_]*(n)?\\b(?!\\$))|(\\b(?<!\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\b(?!\\$))|((?<!\\$)(?:\n          (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)| # 1.1E+3\n          (?:\\b[0-9][0-9_]*(\\.)[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # 1.E+3\n          (?:\\B(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # .1E+3\n          (?:\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|                 # 1E+3\n          (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b)|                      # 1.1\n          (?:\\b[0-9][0-9_]*(\\.)(n)?\\B)|                                  # 1.\n          (?:\\B(\\.)[0-9][0-9_]*(n)?\\b)|                                  # .1\n          (?:\\b[0-9][0-9_]*(n)?\\b(?!\\.))                                 # 1\n        )(?!\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`)|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])+\\]))\\s*(\\??))\\s*((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*))?[\\(])\n      captures:\n        1: storage.modifier.ts\n        2: storage.modifier.ts\n        3: storage.modifier.ts\n        4: storage.modifier.async.ts\n        5: storage.type.property.ts\n        6: keyword.generator.asterisk.ts\n      push:\n        - meta_scope: meta.method.declaration.ts\n        - match: '(?=\\}|;|,|$)|(?<=\\})'\n          pop: true\n        - include: method-declaration-name\n        - include: function-body\n  method-declaration-name:\n    - match: |-\n        (?x)(?=((\\b(?<!\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\b(?!\\$))|(\\b(?<!\\$)0(?:b|B)[01][01_]*(n)?\\b(?!\\$))|(\\b(?<!\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\b(?!\\$))|((?<!\\$)(?:\n          (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)| # 1.1E+3\n          (?:\\b[0-9][0-9_]*(\\.)[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # 1.E+3\n          (?:\\B(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # .1E+3\n          (?:\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|                 # 1E+3\n          (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b)|                      # 1.1\n          (?:\\b[0-9][0-9_]*(\\.)(n)?\\B)|                                  # 1.\n          (?:\\B(\\.)[0-9][0-9_]*(n)?\\b)|                                  # .1\n          (?:\\b[0-9][0-9_]*(n)?\\b(?!\\.))                                 # 1\n        )(?!\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`)|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])+\\]))\\s*(\\??)\\s*[\\(\\<])\n      push:\n        - match: (?=\\(|\\<)\n          pop: true\n        - include: string\n        - include: array-literal\n        - include: numeric-literal\n        - match: \"[_$[:alpha:]][_$[:alnum:]]*\"\n          scope: meta.definition.method.ts entity.name.function.ts\n        - match: \\?\n          scope: keyword.operator.optional.ts\n  namespace-declaration:\n    - match: '(?:(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?\\b(namespace|module)\\s+(?=[_$[:alpha:]\"''`]))'\n      captures:\n        1: keyword.control.export.ts\n        2: storage.modifier.ts\n        3: storage.type.namespace.ts\n      push:\n        - meta_scope: meta.namespace.declaration.ts\n        - match: '(?<=\\})|(?=;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))'\n          pop: true\n        - include: comment\n        - include: string\n        - match: \"([_$[:alpha:]][_$[:alnum:]]*)\"\n          scope: entity.name.type.module.ts\n        - include: punctuation-accessor\n        - include: decl-block\n  new-expr:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(new)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      captures:\n        1: keyword.operator.new.ts\n      push:\n        - meta_scope: new.expr.ts\n        - match: '(?<=\\))|(?=[;),}\\]:?\\-\\+\\>]|\\|\\||\\&\\&|\\!\\=\\=|$|((?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))new(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.)))|((?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))function((\\s+[_$[:alpha:]][_$[:alnum:]]*)|(\\s*[\\(]))))'\n          pop: true\n        - include: expression\n  null-literal:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))null(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: constant.language.null.ts\n  numeric-literal:\n    - match: '\\b(?<!\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\b(?!\\$)'\n      scope: constant.numeric.hex.ts\n      captures:\n        1: storage.type.numeric.bigint.ts\n    - match: '\\b(?<!\\$)0(?:b|B)[01][01_]*(n)?\\b(?!\\$)'\n      scope: constant.numeric.binary.ts\n      captures:\n        1: storage.type.numeric.bigint.ts\n    - match: '\\b(?<!\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\b(?!\\$)'\n      scope: constant.numeric.octal.ts\n      captures:\n        1: storage.type.numeric.bigint.ts\n    - match: |-\n        (?x)\n        (?<!\\$)(?:\n          (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)| # 1.1E+3\n          (?:\\b[0-9][0-9_]*(\\.)[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # 1.E+3\n          (?:\\B(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # .1E+3\n          (?:\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|                 # 1E+3\n          (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b)|                      # 1.1\n          (?:\\b[0-9][0-9_]*(\\.)(n)?\\B)|                                  # 1.\n          (?:\\B(\\.)[0-9][0-9_]*(n)?\\b)|                                  # .1\n          (?:\\b[0-9][0-9_]*(n)?\\b(?!\\.))                                 # 1\n        )(?!\\$)\n      captures:\n        0: constant.numeric.decimal.ts\n        1: meta.delimiter.decimal.period.ts\n        2: storage.type.numeric.bigint.ts\n        3: meta.delimiter.decimal.period.ts\n        4: storage.type.numeric.bigint.ts\n        5: meta.delimiter.decimal.period.ts\n        6: storage.type.numeric.bigint.ts\n        7: storage.type.numeric.bigint.ts\n        8: meta.delimiter.decimal.period.ts\n        9: storage.type.numeric.bigint.ts\n        10: meta.delimiter.decimal.period.ts\n        11: storage.type.numeric.bigint.ts\n        12: meta.delimiter.decimal.period.ts\n        13: storage.type.numeric.bigint.ts\n        14: storage.type.numeric.bigint.ts\n  numericConstant-literal:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))NaN(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: constant.language.nan.ts\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))Infinity(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: constant.language.infinity.ts\n  object-binding-element:\n    - include: comment\n    - match: |-\n        (?x)(?=((\\b(?<!\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\b(?!\\$))|(\\b(?<!\\$)0(?:b|B)[01][01_]*(n)?\\b(?!\\$))|(\\b(?<!\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\b(?!\\$))|((?<!\\$)(?:\n          (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)| # 1.1E+3\n          (?:\\b[0-9][0-9_]*(\\.)[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # 1.E+3\n          (?:\\B(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # .1E+3\n          (?:\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|                 # 1E+3\n          (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b)|                      # 1.1\n          (?:\\b[0-9][0-9_]*(\\.)(n)?\\B)|                                  # 1.\n          (?:\\B(\\.)[0-9][0-9_]*(n)?\\b)|                                  # .1\n          (?:\\b[0-9][0-9_]*(n)?\\b(?!\\.))                                 # 1\n        )(?!\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`)|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])+\\]))\\s*(:))\n      push:\n        - match: '(?=,|\\})'\n          pop: true\n        - include: object-binding-element-propertyName\n        - include: binding-element\n    - include: object-binding-pattern\n    - include: destructuring-variable-rest\n    - include: variable-initializer\n    - include: punctuation-comma\n  object-binding-element-const:\n    - include: comment\n    - match: |-\n        (?x)(?=((\\b(?<!\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\b(?!\\$))|(\\b(?<!\\$)0(?:b|B)[01][01_]*(n)?\\b(?!\\$))|(\\b(?<!\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\b(?!\\$))|((?<!\\$)(?:\n          (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)| # 1.1E+3\n          (?:\\b[0-9][0-9_]*(\\.)[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # 1.E+3\n          (?:\\B(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # .1E+3\n          (?:\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|                 # 1E+3\n          (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b)|                      # 1.1\n          (?:\\b[0-9][0-9_]*(\\.)(n)?\\B)|                                  # 1.\n          (?:\\B(\\.)[0-9][0-9_]*(n)?\\b)|                                  # .1\n          (?:\\b[0-9][0-9_]*(n)?\\b(?!\\.))                                 # 1\n        )(?!\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`)|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])+\\]))\\s*(:))\n      push:\n        - match: '(?=,|\\})'\n          pop: true\n        - include: object-binding-element-propertyName\n        - include: binding-element-const\n    - include: object-binding-pattern-const\n    - include: destructuring-variable-rest-const\n    - include: variable-initializer\n    - include: punctuation-comma\n  object-binding-element-propertyName:\n    - match: |-\n        (?x)(?=((\\b(?<!\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\b(?!\\$))|(\\b(?<!\\$)0(?:b|B)[01][01_]*(n)?\\b(?!\\$))|(\\b(?<!\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\b(?!\\$))|((?<!\\$)(?:\n          (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)| # 1.1E+3\n          (?:\\b[0-9][0-9_]*(\\.)[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # 1.E+3\n          (?:\\B(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # .1E+3\n          (?:\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|                 # 1E+3\n          (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b)|                      # 1.1\n          (?:\\b[0-9][0-9_]*(\\.)(n)?\\B)|                                  # 1.\n          (?:\\B(\\.)[0-9][0-9_]*(n)?\\b)|                                  # .1\n          (?:\\b[0-9][0-9_]*(n)?\\b(?!\\.))                                 # 1\n        )(?!\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`)|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])+\\]))\\s*(:))\n      push:\n        - match: (:)\n          captures:\n            0: punctuation.destructuring.ts\n          pop: true\n        - include: string\n        - include: array-literal\n        - include: numeric-literal\n        - match: \"([_$[:alpha:]][_$[:alnum:]]*)\"\n          scope: variable.object.property.ts\n  object-binding-pattern:\n    - match: '(?:(\\.\\.\\.)\\s*)?(\\{)'\n      captures:\n        1: keyword.operator.rest.ts\n        2: punctuation.definition.binding-pattern.object.ts\n      push:\n        - match: '\\}'\n          captures:\n            0: punctuation.definition.binding-pattern.object.ts\n          pop: true\n        - include: object-binding-element\n  object-binding-pattern-const:\n    - match: '(?:(\\.\\.\\.)\\s*)?(\\{)'\n      captures:\n        1: keyword.operator.rest.ts\n        2: punctuation.definition.binding-pattern.object.ts\n      push:\n        - match: '\\}'\n          captures:\n            0: punctuation.definition.binding-pattern.object.ts\n          pop: true\n        - include: object-binding-element-const\n  object-identifiers:\n    - match: '([_$[:alpha:]][_$[:alnum:]]*)(?=\\s*\\??\\.\\s*prototype\\b(?!\\$))'\n      scope: support.class.ts\n    - match: |-\n        (?x)(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*(?:\n          (\\#?[[:upper:]][_$[:digit:][:upper:]]*) |\n          (\\#?[_$[:alpha:]][_$[:alnum:]]*)\n        )(?=\\s*\\??\\.\\s*\\#?[_$[:alpha:]][_$[:alnum:]]*)\n      captures:\n        1: punctuation.accessor.ts\n        2: punctuation.accessor.optional.ts\n        3: variable.other.constant.object.property.ts\n        4: variable.other.object.property.ts\n    - match: |-\n        (?x)(?:\n          ([[:upper:]][_$[:digit:][:upper:]]*) |\n          ([_$[:alpha:]][_$[:alnum:]]*)\n        )(?=\\s*\\??\\.\\s*\\#?[_$[:alpha:]][_$[:alnum:]]*)\n      captures:\n        1: variable.other.constant.object.ts\n        2: variable.other.object.ts\n  object-literal:\n    - match: '\\{'\n      captures:\n        0: punctuation.definition.block.ts\n      push:\n        - meta_scope: meta.objectliteral.ts\n        - match: '\\}'\n          captures:\n            0: punctuation.definition.block.ts\n          pop: true\n        - include: object-member\n  object-literal-method-declaration:\n    - match: |-\n        (?x)(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:\\b(async)\\s+)?(?:\\b(get|set)\\s+)?(?:(\\*)\\s*)?(?=\\s*(((\\b(?<!\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\b(?!\\$))|(\\b(?<!\\$)0(?:b|B)[01][01_]*(n)?\\b(?!\\$))|(\\b(?<!\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\b(?!\\$))|((?<!\\$)(?:\n          (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)| # 1.1E+3\n          (?:\\b[0-9][0-9_]*(\\.)[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # 1.E+3\n          (?:\\B(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # .1E+3\n          (?:\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|                 # 1E+3\n          (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b)|                      # 1.1\n          (?:\\b[0-9][0-9_]*(\\.)(n)?\\B)|                                  # 1.\n          (?:\\B(\\.)[0-9][0-9_]*(n)?\\b)|                                  # .1\n          (?:\\b[0-9][0-9_]*(n)?\\b(?!\\.))                                 # 1\n        )(?!\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`)|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])+\\]))\\s*(\\??))\\s*((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*))?[\\(])\n      captures:\n        1: storage.modifier.async.ts\n        2: storage.type.property.ts\n        3: keyword.generator.asterisk.ts\n      push:\n        - meta_scope: meta.method.declaration.ts\n        - match: '(?=\\}|;|,)|(?<=\\})'\n          pop: true\n        - include: method-declaration-name\n        - include: function-body\n        - match: |-\n            (?x)(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:\\b(async)\\s+)?(?:\\b(get|set)\\s+)?(?:(\\*)\\s*)?(?=\\s*(((\\b(?<!\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\b(?!\\$))|(\\b(?<!\\$)0(?:b|B)[01][01_]*(n)?\\b(?!\\$))|(\\b(?<!\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\b(?!\\$))|((?<!\\$)(?:\n              (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)| # 1.1E+3\n              (?:\\b[0-9][0-9_]*(\\.)[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # 1.E+3\n              (?:\\B(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # .1E+3\n              (?:\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|                 # 1E+3\n              (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b)|                      # 1.1\n              (?:\\b[0-9][0-9_]*(\\.)(n)?\\B)|                                  # 1.\n              (?:\\B(\\.)[0-9][0-9_]*(n)?\\b)|                                  # .1\n              (?:\\b[0-9][0-9_]*(n)?\\b(?!\\.))                                 # 1\n            )(?!\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`)|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])+\\]))\\s*(\\??))\\s*((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*))?[\\(])\n          captures:\n            1: storage.modifier.async.ts\n            2: storage.type.property.ts\n            3: keyword.generator.asterisk.ts\n          push:\n            - match: (?=\\(|\\<)\n              pop: true\n            - include: method-declaration-name\n  object-member:\n    - include: comment\n    - include: object-literal-method-declaration\n    - match: '(?=\\[)'\n      push:\n        - meta_scope: meta.object.member.ts meta.object-literal.key.ts\n        - match: '(?=:)|((?<=[\\]])(?=\\s*[\\(\\<]))'\n          pop: true\n        - include: comment\n        - include: array-literal\n    - match: '(?=[\\''\\\"\\`])'\n      push:\n        - meta_scope: meta.object.member.ts meta.object-literal.key.ts\n        - match: '(?=:)|((?<=[\\''\\\"\\`])(?=((\\s*[\\(\\<,}])|(\\s+(as)\\s+))))'\n          pop: true\n        - include: comment\n        - include: string\n    - match: |-\n        (?x)(?=(\\b(?<!\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\b(?!\\$))|(\\b(?<!\\$)0(?:b|B)[01][01_]*(n)?\\b(?!\\$))|(\\b(?<!\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\b(?!\\$))|((?<!\\$)(?:\n          (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)| # 1.1E+3\n          (?:\\b[0-9][0-9_]*(\\.)[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # 1.E+3\n          (?:\\B(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # .1E+3\n          (?:\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|                 # 1E+3\n          (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b)|                      # 1.1\n          (?:\\b[0-9][0-9_]*(\\.)(n)?\\B)|                                  # 1.\n          (?:\\B(\\.)[0-9][0-9_]*(n)?\\b)|                                  # .1\n          (?:\\b[0-9][0-9_]*(n)?\\b(?!\\.))                                 # 1\n        )(?!\\$)))\n      push:\n        - meta_scope: meta.object.member.ts meta.object-literal.key.ts\n        - match: '(?=:)|(?=\\s*([\\(\\<,}])|(\\s+as\\s+))'\n          pop: true\n        - include: comment\n        - include: numeric-literal\n    - match: '(?<=[\\]\\''\\\"\\`])(?=\\s*[\\(\\<])'\n      push:\n        - meta_scope: meta.method.declaration.ts\n        - match: '(?=\\}|;|,)|(?<=\\})'\n          pop: true\n        - include: function-body\n    - match: '(?![_$[:alpha:]])([[:digit:]]+)\\s*(?=(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*:)'\n      scope: meta.object.member.ts\n      captures:\n        0: meta.object-literal.key.ts\n        1: constant.numeric.decimal.ts\n    - match: |-\n        (?x)(?:([_$[:alpha:]][_$[:alnum:]]*)\\s*(?=(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*:(\\s*\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/)*\\s*(\n          ((async\\s+)?(\n            (function\\s*[(<*]) |\n            (function\\s+) |\n            ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n          )) |\n          ((async\\s*)?(\n            ((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?[\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n            # sure shot arrow functions even if => is on new line\n        (\n          (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n          [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n          (\n            ([)]\\s*:) |                                                                                       # ():\n            ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:)                                                                  # [(]param: | [(]...param:\n          )\n        ) |\n\n        # arrow function possible to detect only with => on same line\n        (\n          (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?                                                                                 # typeparameters\n          \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\)   # parameters\n          (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)?                                                                        # return type\n          \\s*=>                                                                                               # arrow operator\n        )\n          ))\n        )))\n      scope: meta.object.member.ts\n      captures:\n        0: meta.object-literal.key.ts\n        1: entity.name.function.ts\n    - match: '(?:[_$[:alpha:]][_$[:alnum:]]*)\\s*(?=(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*:)'\n      scope: meta.object.member.ts\n      captures:\n        0: meta.object-literal.key.ts\n    - match: \\.\\.\\.\n      captures:\n        0: keyword.operator.spread.ts\n      push:\n        - meta_scope: meta.object.member.ts\n        - match: '(?=,|\\})'\n          pop: true\n        - include: expression\n    - match: '([_$[:alpha:]][_$[:alnum:]]*)\\s*(?=,|\\}|$|\\/\\/|\\/\\*)'\n      scope: meta.object.member.ts\n      captures:\n        1: variable.other.readwrite.ts\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(as)\\s+(const)(?=\\s*([,}]|$))'\n      scope: meta.object.member.ts\n      captures:\n        1: keyword.control.as.ts\n        2: storage.modifier.ts\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(as)\\s+'\n      captures:\n        1: keyword.control.as.ts\n      push:\n        - meta_scope: meta.object.member.ts\n        - match: '(?=[;),}\\]:?\\-\\+\\>]|\\|\\||\\&\\&|\\!\\=\\=|$|^|((?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(as)\\s+))'\n          pop: true\n        - include: type\n    - match: '(?=[_$[:alpha:]][_$[:alnum:]]*\\s*=)'\n      push:\n        - meta_scope: meta.object.member.ts\n        - match: '(?=,|\\}|$|\\/\\/|\\/\\*)'\n          pop: true\n        - include: expression\n    - match: \":\"\n      captures:\n        0: meta.object-literal.key.ts punctuation.separator.key-value.ts\n      push:\n        - meta_scope: meta.object.member.ts\n        - match: '(?=,|\\})'\n          pop: true\n        - match: '(?<=:)\\s*(async)?(?=\\s*(<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)\\(\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))'\n          captures:\n            1: storage.modifier.async.ts\n          push:\n            - match: (?<=\\))\n              pop: true\n            - include: type-parameters\n            - match: \\(\n              captures:\n                0: meta.brace.round.ts\n              push:\n                - match: \\)\n                  captures:\n                    0: meta.brace.round.ts\n                  pop: true\n                - include: expression-inside-possibly-arrow-parens\n        - match: '(?<=:)\\s*(async)?\\s*(\\()(?=\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))'\n          captures:\n            1: storage.modifier.async.ts\n            2: meta.brace.round.ts\n          push:\n            - match: \\)\n              captures:\n                0: meta.brace.round.ts\n              pop: true\n            - include: expression-inside-possibly-arrow-parens\n        - match: (?<=:)\\s*(async)?\\s*(?=\\<\\s*$)\n          captures:\n            1: storage.modifier.async.ts\n          push:\n            - match: (?<=\\>)\n              pop: true\n            - include: type-parameters\n        - match: '(?<=\\>)\\s*(\\()(?=\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))'\n          captures:\n            1: meta.brace.round.ts\n          push:\n            - match: \\)\n              captures:\n                0: meta.brace.round.ts\n              pop: true\n            - include: expression-inside-possibly-arrow-parens\n        - include: possibly-arrow-return-type\n        - include: expression\n    - include: punctuation-comma\n  parameter-array-binding-pattern:\n    - match: '(?:(\\.\\.\\.)\\s*)?(\\[)'\n      captures:\n        1: keyword.operator.rest.ts\n        2: punctuation.definition.binding-pattern.array.ts\n      push:\n        - match: '\\]'\n          captures:\n            0: punctuation.definition.binding-pattern.array.ts\n          pop: true\n        - include: parameter-binding-element\n        - include: punctuation-comma\n  parameter-binding-element:\n    - include: comment\n    - include: string\n    - include: numeric-literal\n    - include: regex\n    - include: parameter-object-binding-pattern\n    - include: parameter-array-binding-pattern\n    - include: destructuring-parameter-rest\n    - include: variable-initializer\n  parameter-name:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(override|public|protected|private|readonly)\\s+(?=(override|public|protected|private|readonly)\\s+)'\n      captures:\n        1: storage.modifier.ts\n    - match: |-\n        (?x)(?:(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(override|public|private|protected|readonly)\\s+)?(?:(\\.\\.\\.)\\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))\\s*(\\??)(?=\\s*\n        # function assignment |\n        (=\\s*(\n          ((async\\s+)?(\n            (function\\s*[(<*]) |\n            (function\\s+) |\n            ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n          )) |\n          ((async\\s*)?(\n            ((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?[\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n            # sure shot arrow functions even if => is on new line\n        (\n          (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n          [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n          (\n            ([)]\\s*:) |                                                                                       # ():\n            ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:)                                                                  # [(]param: | [(]...param:\n          )\n        ) |\n\n        # arrow function possible to detect only with => on same line\n        (\n          (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?                                                                                 # typeparameters\n          \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\)   # parameters\n          (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)?                                                                        # return type\n          \\s*=>                                                                                               # arrow operator\n        )\n          ))\n        )) |\n        # typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n        (:\\s*(\n          (<) |\n          ([(]\\s*(\n            ([)]) |\n            (\\.\\.\\.) |\n            ([_$[:alnum:]]+\\s*(\n              ([:,?=])|\n              ([)]\\s*=>)\n            ))\n          ))\n        )) |\n        (:\\s*(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))Function(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))) |\n        (:\\s*((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?[\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*))))))) |\n        (:\\s*(=>|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n          ((async\\s+)?(\n            (function\\s*[(<*]) |\n            (function\\s+) |\n            ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n          )) |\n          ((async\\s*)?(\n            ((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?[\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n            # sure shot arrow functions even if => is on new line\n        (\n          (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n          [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n          (\n            ([)]\\s*:) |                                                                                       # ():\n            ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:)                                                                  # [(]param: | [(]...param:\n          )\n        ) |\n\n        # arrow function possible to detect only with => on same line\n        (\n          (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?                                                                                 # typeparameters\n          \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\)   # parameters\n          (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)?                                                                        # return type\n          \\s*=>                                                                                               # arrow operator\n        )\n          ))\n        )))\n      captures:\n        1: storage.modifier.ts\n        2: keyword.operator.rest.ts\n        3: entity.name.function.ts variable.language.this.ts\n        4: entity.name.function.ts\n        5: keyword.operator.optional.ts\n    - match: '(?x)(?:(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(override|public|private|protected|readonly)\\s+)?(?:(\\.\\.\\.)\\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))\\s*(\\??)'\n      captures:\n        1: storage.modifier.ts\n        2: keyword.operator.rest.ts\n        3: variable.parameter.ts variable.language.this.ts\n        4: variable.parameter.ts\n        5: keyword.operator.optional.ts\n  parameter-object-binding-element:\n    - include: comment\n    - match: |-\n        (?x)(?=((\\b(?<!\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\b(?!\\$))|(\\b(?<!\\$)0(?:b|B)[01][01_]*(n)?\\b(?!\\$))|(\\b(?<!\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\b(?!\\$))|((?<!\\$)(?:\n          (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)| # 1.1E+3\n          (?:\\b[0-9][0-9_]*(\\.)[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # 1.E+3\n          (?:\\B(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # .1E+3\n          (?:\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|                 # 1E+3\n          (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b)|                      # 1.1\n          (?:\\b[0-9][0-9_]*(\\.)(n)?\\B)|                                  # 1.\n          (?:\\B(\\.)[0-9][0-9_]*(n)?\\b)|                                  # .1\n          (?:\\b[0-9][0-9_]*(n)?\\b(?!\\.))                                 # 1\n        )(?!\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`)|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])+\\]))\\s*(:))\n      push:\n        - match: '(?=,|\\})'\n          pop: true\n        - include: object-binding-element-propertyName\n        - include: parameter-binding-element\n    - include: parameter-object-binding-pattern\n    - include: destructuring-parameter-rest\n    - include: variable-initializer\n    - include: punctuation-comma\n  parameter-object-binding-pattern:\n    - match: '(?:(\\.\\.\\.)\\s*)?(\\{)'\n      captures:\n        1: keyword.operator.rest.ts\n        2: punctuation.definition.binding-pattern.object.ts\n      push:\n        - match: '\\}'\n          captures:\n            0: punctuation.definition.binding-pattern.object.ts\n          pop: true\n        - include: parameter-object-binding-element\n  parameter-type-annotation:\n    - match: (:)\n      captures:\n        1: keyword.operator.type.annotation.ts\n      push:\n        - meta_scope: meta.type.annotation.ts\n        - match: \"(?=[,)])|(?==[^>])\"\n          pop: true\n        - include: type\n  paren-expression:\n    - match: \\(\n      captures:\n        0: meta.brace.round.ts\n      push:\n        - match: \\)\n          captures:\n            0: meta.brace.round.ts\n          pop: true\n        - include: expression\n  paren-expression-possibly-arrow:\n    - match: '(?<=[(=,])\\s*(async)?(?=\\s*((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*))?\\(\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))'\n      captures:\n        1: storage.modifier.async.ts\n      push:\n        - match: (?<=\\))\n          pop: true\n        - include: paren-expression-possibly-arrow-with-typeparameters\n    - match: '(?<=[(=,]|=>|^return|[^\\._$[:alnum:]]return)\\s*(async)?(?=\\s*((((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*))?\\()|(<))\\s*$)'\n      captures:\n        1: storage.modifier.async.ts\n      push:\n        - match: (?<=\\))\n          pop: true\n        - include: paren-expression-possibly-arrow-with-typeparameters\n    - include: possibly-arrow-return-type\n  paren-expression-possibly-arrow-with-typeparameters:\n    - include: type-parameters\n    - match: \\(\n      captures:\n        0: meta.brace.round.ts\n      push:\n        - match: \\)\n          captures:\n            0: meta.brace.round.ts\n          pop: true\n        - include: expression-inside-possibly-arrow-parens\n  possibly-arrow-return-type:\n    - match: '(?<=\\)|^)\\s*(:)(?=\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*=>)'\n      captures:\n        1: meta.arrow.ts meta.return.type.arrow.ts keyword.operator.type.annotation.ts\n      push:\n        - meta_content_scope: meta.arrow.ts meta.return.type.arrow.ts\n        - match: '(?==>|\\{|(^\\s*(export|function|class|interface|let|var|const|import|enum|namespace|module|type|abstract|declare)\\s+))'\n          pop: true\n        - include: arrow-return-type-body\n  property-accessor:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(get|set)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: storage.type.property.ts\n  punctuation-accessor:\n    - match: '(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))'\n      captures:\n        1: punctuation.accessor.ts\n        2: punctuation.accessor.optional.ts\n  punctuation-comma:\n    - match: \",\"\n      scope: punctuation.separator.comma.ts\n  punctuation-semicolon:\n    - match: ;\n      scope: punctuation.terminator.statement.ts\n  qstring-double:\n    - match: '\"'\n      captures:\n        0: punctuation.definition.string.begin.ts\n      push:\n        - meta_scope: string.quoted.double.ts\n        - match: '(\")|((?:[^\\\\\\n])$)'\n          captures:\n            1: punctuation.definition.string.end.ts\n            2: invalid.illegal.newline.ts\n          pop: true\n        - include: string-character-escape\n  qstring-single:\n    - match: \"'\"\n      captures:\n        0: punctuation.definition.string.begin.ts\n      push:\n        - meta_scope: string.quoted.single.ts\n        - match: '(\\'')|((?:[^\\\\\\n])$)'\n          captures:\n            1: punctuation.definition.string.end.ts\n            2: invalid.illegal.newline.ts\n          pop: true\n        - include: string-character-escape\n  regex:\n    - match: '(?<!\\+\\+|--|})(?<=[=(:,\\[?+!]|^return|[^\\._$[:alnum:]]return|^case|[^\\._$[:alnum:]]case|=>|&&|\\|\\||\\*\\/)\\s*(\\/)(?![\\/*])(?=(?:[^\\/\\\\\\[\\()]|\\\\.|\\[([^\\]\\\\]|\\\\.)+\\]|\\(([^\\)\\\\]|\\\\.)+\\))+\\/([dgimsuy]+|(?![\\/\\*])|(?=\\/\\*))(?!\\s*[a-zA-Z0-9_$]))'\n      captures:\n        1: punctuation.definition.string.begin.ts\n      push:\n        - meta_scope: string.regexp.ts\n        - match: \"(/)([dgimsuy]*)\"\n          captures:\n            1: punctuation.definition.string.end.ts\n            2: keyword.other.ts\n          pop: true\n        - include: regexp\n    - match: '((?<![_$[:alnum:])\\]]|\\+\\+|--|}|\\*\\/)|((?<=^return|[^\\._$[:alnum:]]return|^case|[^\\._$[:alnum:]]case))\\s*)\\/(?![\\/*])(?=(?:[^\\/\\\\\\[]|\\\\.|\\[([^\\]\\\\]|\\\\.)*\\])+\\/([dgimsuy]+|(?![\\/\\*])|(?=\\/\\*))(?!\\s*[a-zA-Z0-9_$]))'\n      captures:\n        0: punctuation.definition.string.begin.ts\n      push:\n        - meta_scope: string.regexp.ts\n        - match: \"(/)([dgimsuy]*)\"\n          captures:\n            1: punctuation.definition.string.end.ts\n            2: keyword.other.ts\n          pop: true\n        - include: regexp\n  regex-character-class:\n    - match: '\\\\[wWsSdDtrnvf]|\\.'\n      scope: constant.other.character-class.regexp\n    - match: '\\\\([0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4})'\n      scope: constant.character.numeric.regexp\n    - match: '\\\\c[A-Z]'\n      scope: constant.character.control.regexp\n    - match: \\\\.\n      scope: constant.character.escape.backslash.regexp\n  regexp:\n    - match: '\\\\[bB]|\\^|\\$'\n      scope: keyword.control.anchor.regexp\n    - match: '\\\\[1-9]\\d*|\\\\k<([a-zA-Z_$][\\w$]*)>'\n      captures:\n        0: keyword.other.back-reference.regexp\n        1: variable.other.regexp\n    - match: '[?+*]|\\{(\\d+,\\d+|\\d+,|,\\d+|\\d+)\\}\\??'\n      scope: keyword.operator.quantifier.regexp\n    - match: \\|\n      scope: keyword.operator.or.regexp\n    - match: (\\()((\\?=)|(\\?!)|(\\?<=)|(\\?<!))\n      captures:\n        1: punctuation.definition.group.regexp\n        2: punctuation.definition.group.assertion.regexp\n        3: meta.assertion.look-ahead.regexp\n        4: meta.assertion.negative-look-ahead.regexp\n        5: meta.assertion.look-behind.regexp\n        6: meta.assertion.negative-look-behind.regexp\n      push:\n        - meta_scope: meta.group.assertion.regexp\n        - match: (\\))\n          captures:\n            1: punctuation.definition.group.regexp\n          pop: true\n        - include: regexp\n    - match: '\\((?:(\\?:)|(?:\\?<([a-zA-Z_$][\\w$]*)>))?'\n      captures:\n        0: punctuation.definition.group.regexp\n        1: punctuation.definition.group.no-capture.regexp\n        2: variable.other.regexp\n      push:\n        - meta_scope: meta.group.regexp\n        - match: \\)\n          captures:\n            0: punctuation.definition.group.regexp\n          pop: true\n        - include: regexp\n    - match: '(\\[)(\\^)?'\n      captures:\n        1: punctuation.definition.character-class.regexp\n        2: keyword.operator.negation.regexp\n      push:\n        - meta_scope: constant.other.character-class.set.regexp\n        - match: '(\\])'\n          captures:\n            1: punctuation.definition.character-class.regexp\n          pop: true\n        - match: '(?:.|(\\\\(?:[0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}))|(\\\\c[A-Z])|(\\\\.))\\-(?:[^\\]\\\\]|(\\\\(?:[0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}))|(\\\\c[A-Z])|(\\\\.))'\n          scope: constant.other.character-class.range.regexp\n          captures:\n            1: constant.character.numeric.regexp\n            2: constant.character.control.regexp\n            3: constant.character.escape.backslash.regexp\n            4: constant.character.numeric.regexp\n            5: constant.character.control.regexp\n            6: constant.character.escape.backslash.regexp\n        - include: regex-character-class\n    - include: regex-character-class\n  return-type:\n    - match: (?<=\\))\\s*(:)(?=\\s*\\S)\n      captures:\n        1: keyword.operator.type.annotation.ts\n      push:\n        - meta_scope: meta.return.type.ts\n        - match: \"(?<![:|&])(?=$|^|[{};,]|//)\"\n          pop: true\n        - include: return-type-core\n    - match: (?<=\\))\\s*(:)\n      captures:\n        1: keyword.operator.type.annotation.ts\n      push:\n        - meta_scope: meta.return.type.ts\n        - match: '(?<![:|&])((?=[{};,]|//|^\\s*$)|((?<=\\S)(?=\\s*$)))'\n          pop: true\n        - include: return-type-core\n  return-type-core:\n    - include: comment\n    - match: '(?<=[:|&])(?=\\s*\\{)'\n      push:\n        - match: '(?<=\\})'\n          pop: true\n        - include: type-object\n    - include: type-predicate-operator\n    - include: type\n  shebang:\n    - match: \\A(#!).*(?=$)\n      scope: comment.line.shebang.ts\n      captures:\n        1: punctuation.definition.comment.ts\n  single-line-comment-consuming-line-ending:\n    - match: '(^[ \\t]+)?((//)(?:\\s*((@)internal)(?=\\s|$))?)'\n      captures:\n        1: punctuation.whitespace.comment.leading.ts\n        2: comment.line.double-slash.ts\n        3: punctuation.definition.comment.ts\n        4: storage.type.internaldeclaration.ts\n        5: punctuation.decorator.internaldeclaration.ts\n      push:\n        - meta_content_scope: comment.line.double-slash.ts\n        - match: (?=^)\n          pop: true\n  statements:\n    - include: declaration\n    - include: control-statement\n    - include: after-operator-block-as-object-literal\n    - include: decl-block\n    - include: label\n    - include: expression\n    - include: punctuation-semicolon\n    - include: string\n    - include: comment\n  string:\n    - include: qstring-single\n    - include: qstring-double\n    - include: template\n  string-character-escape:\n    - match: '\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|u\\{[0-9A-Fa-f]+\\}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.|$)'\n      scope: constant.character.escape.ts\n  super-literal:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))super\\b(?!\\$)'\n      scope: variable.language.super.ts\n  support-function-call-identifiers:\n    - include: literal\n    - include: support-objects\n    - include: object-identifiers\n    - include: punctuation-accessor\n    - match: '(?:(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))import(?=\\s*[\\(]\\s*[\\\"\\''\\`]))'\n      scope: keyword.operator.expression.import.ts\n  support-objects:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(arguments)\\b(?!\\$)'\n      scope: variable.language.arguments.ts\n    - match: |-\n        (?x)(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(Array|ArrayBuffer|Atomics|BigInt|BigInt64Array|BigUint64Array|Boolean|DataView|Date|Float32Array\n        |Float64Array|Function|Generator|GeneratorFunction|Int8Array|Int16Array|Int32Array|Intl|Map|Number|Object|Proxy\n        |Reflect|RegExp|Set|SharedArrayBuffer|SIMD|String|Symbol|TypedArray\n        |Uint8Array|Uint16Array|Uint32Array|Uint8ClampedArray|WeakMap|WeakSet)\\b(?!\\$)\n      scope: support.class.builtin.ts\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))((Eval|Internal|Range|Reference|Syntax|Type|URI)?Error)\\b(?!\\$)'\n      scope: support.class.error.ts\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(Promise)\\b(?!\\$)'\n      scope: support.class.promise.ts\n    - match: |-\n        (?x)(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(clear(Interval|Timeout)|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|eval|\n        isFinite|isNaN|parseFloat|parseInt|require|set(Interval|Timeout)|super|unescape|uneval)(?=\\s*\\()\n      scope: support.function.ts\n    - match: |-\n        (?x)(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(Math)(?:\\s*(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*(?:\n        (abs|acos|acosh|asin|asinh|atan|atan2|atanh|cbrt|ceil|clz32|cos|cosh|exp|\n        expm1|floor|fround|hypot|imul|log|log10|log1p|log2|max|min|pow|random|\n        round|sign|sin|sinh|sqrt|tan|tanh|trunc)\n        |\n        (E|LN10|LN2|LOG10E|LOG2E|PI|SQRT1_2|SQRT2)))?\\b(?!\\$)\n      captures:\n        1: support.constant.math.ts\n        2: punctuation.accessor.ts\n        3: punctuation.accessor.optional.ts\n        4: support.function.math.ts\n        5: support.constant.property.math.ts\n    - match: |-\n        (?x)(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(console)(?:\\s*(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*(\n        assert|clear|count|debug|dir|error|group|groupCollapsed|groupEnd|info|log\n        |profile|profileEnd|table|time|timeEnd|timeStamp|trace|warn))?\\b(?!\\$)\n      captures:\n        1: support.class.console.ts\n        2: punctuation.accessor.ts\n        3: punctuation.accessor.optional.ts\n        4: support.function.console.ts\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(JSON)(?:\\s*(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*(parse|stringify))?\\b(?!\\$)'\n      captures:\n        1: support.constant.json.ts\n        2: punctuation.accessor.ts\n        3: punctuation.accessor.optional.ts\n        4: support.function.json.ts\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(import)\\s*(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*(meta)\\b(?!\\$)'\n      captures:\n        1: keyword.control.import.ts\n        2: punctuation.accessor.ts\n        3: punctuation.accessor.optional.ts\n        4: support.variable.property.importmeta.ts\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(new)\\s*(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*(target)\\b(?!\\$)'\n      captures:\n        1: keyword.operator.new.ts\n        2: punctuation.accessor.ts\n        3: punctuation.accessor.optional.ts\n        4: support.variable.property.target.ts\n    - match: |-\n        (?x) (?:(\\.)|(\\?\\.(?!\\s*[[:digit:]]))) \\s* (?:\n        (?:(constructor|length|prototype|__proto__)\\b(?!\\$|\\s*(<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\\())\n        |\n        (?:(EPSILON|MAX_SAFE_INTEGER|MAX_VALUE|MIN_SAFE_INTEGER|MIN_VALUE|NEGATIVE_INFINITY|POSITIVE_INFINITY)\\b(?!\\$)))\n      captures:\n        1: punctuation.accessor.ts\n        2: punctuation.accessor.optional.ts\n        3: support.variable.property.ts\n        4: support.constant.ts\n    - match: |-\n        (?x) (?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.)) \\b (?:\n        (document|event|navigator|performance|screen|window)\n        |\n        (AnalyserNode|ArrayBufferView|Attr|AudioBuffer|AudioBufferSourceNode|AudioContext|AudioDestinationNode|AudioListener\n        |AudioNode|AudioParam|BatteryManager|BeforeUnloadEvent|BiquadFilterNode|Blob|BufferSource|ByteString|CSS|CSSConditionRule\n        |CSSCounterStyleRule|CSSGroupingRule|CSSMatrix|CSSMediaRule|CSSPageRule|CSSPrimitiveValue|CSSRule|CSSRuleList|CSSStyleDeclaration\n        |CSSStyleRule|CSSStyleSheet|CSSSupportsRule|CSSValue|CSSValueList|CanvasGradient|CanvasImageSource|CanvasPattern\n        |CanvasRenderingContext2D|ChannelMergerNode|ChannelSplitterNode|CharacterData|ChromeWorker|CloseEvent|Comment|CompositionEvent\n        |Console|ConvolverNode|Coordinates|Credential|CredentialsContainer|Crypto|CryptoKey|CustomEvent|DOMError|DOMException\n        |DOMHighResTimeStamp|DOMImplementation|DOMString|DOMStringList|DOMStringMap|DOMTimeStamp|DOMTokenList|DataTransfer\n        |DataTransferItem|DataTransferItemList|DedicatedWorkerGlobalScope|DelayNode|DeviceProximityEvent|DirectoryEntry\n        |DirectoryEntrySync|DirectoryReader|DirectoryReaderSync|Document|DocumentFragment|DocumentTouch|DocumentType|DragEvent\n        |DynamicsCompressorNode|Element|Entry|EntrySync|ErrorEvent|Event|EventListener|EventSource|EventTarget|FederatedCredential\n        |FetchEvent|File|FileEntry|FileEntrySync|FileException|FileList|FileReader|FileReaderSync|FileSystem|FileSystemSync\n        |FontFace|FormData|GainNode|Gamepad|GamepadButton|GamepadEvent|Geolocation|GlobalEventHandlers|HTMLAnchorElement\n        |HTMLAreaElement|HTMLAudioElement|HTMLBRElement|HTMLBaseElement|HTMLBodyElement|HTMLButtonElement|HTMLCanvasElement\n        |HTMLCollection|HTMLContentElement|HTMLDListElement|HTMLDataElement|HTMLDataListElement|HTMLDialogElement|HTMLDivElement\n        |HTMLDocument|HTMLElement|HTMLEmbedElement|HTMLFieldSetElement|HTMLFontElement|HTMLFormControlsCollection|HTMLFormElement\n        |HTMLHRElement|HTMLHeadElement|HTMLHeadingElement|HTMLHtmlElement|HTMLIFrameElement|HTMLImageElement|HTMLInputElement\n        |HTMLKeygenElement|HTMLLIElement|HTMLLabelElement|HTMLLegendElement|HTMLLinkElement|HTMLMapElement|HTMLMediaElement\n        |HTMLMetaElement|HTMLMeterElement|HTMLModElement|HTMLOListElement|HTMLObjectElement|HTMLOptGroupElement|HTMLOptionElement\n        |HTMLOptionsCollection|HTMLOutputElement|HTMLParagraphElement|HTMLParamElement|HTMLPreElement|HTMLProgressElement\n        |HTMLQuoteElement|HTMLScriptElement|HTMLSelectElement|HTMLShadowElement|HTMLSourceElement|HTMLSpanElement|HTMLStyleElement\n        |HTMLTableCaptionElement|HTMLTableCellElement|HTMLTableColElement|HTMLTableDataCellElement|HTMLTableElement|HTMLTableHeaderCellElement\n        |HTMLTableRowElement|HTMLTableSectionElement|HTMLTextAreaElement|HTMLTimeElement|HTMLTitleElement|HTMLTrackElement\n        |HTMLUListElement|HTMLUnknownElement|HTMLVideoElement|HashChangeEvent|History|IDBCursor|IDBCursorWithValue|IDBDatabase\n        |IDBEnvironment|IDBFactory|IDBIndex|IDBKeyRange|IDBMutableFile|IDBObjectStore|IDBOpenDBRequest|IDBRequest|IDBTransaction\n        |IDBVersionChangeEvent|IIRFilterNode|IdentityManager|ImageBitmap|ImageBitmapFactories|ImageData|Index|InputDeviceCapabilities\n        |InputEvent|InstallEvent|InstallTrigger|KeyboardEvent|LinkStyle|LocalFileSystem|LocalFileSystemSync|Location|MIDIAccess\n        |MIDIConnectionEvent|MIDIInput|MIDIInputMap|MIDIOutputMap|MediaElementAudioSourceNode|MediaError|MediaKeyMessageEvent\n        |MediaKeySession|MediaKeyStatusMap|MediaKeySystemAccess|MediaKeySystemConfiguration|MediaKeys|MediaRecorder|MediaStream\n        |MediaStreamAudioDestinationNode|MediaStreamAudioSourceNode|MessageChannel|MessageEvent|MessagePort|MouseEvent\n        |MutationObserver|MutationRecord|NamedNodeMap|Navigator|NavigatorConcurrentHardware|NavigatorGeolocation|NavigatorID\n        |NavigatorLanguage|NavigatorOnLine|Node|NodeFilter|NodeIterator|NodeList|NonDocumentTypeChildNode|Notification\n        |OfflineAudioCompletionEvent|OfflineAudioContext|OscillatorNode|PageTransitionEvent|PannerNode|ParentNode|PasswordCredential\n        |Path2D|PaymentAddress|PaymentRequest|PaymentResponse|Performance|PerformanceEntry|PerformanceFrameTiming|PerformanceMark\n        |PerformanceMeasure|PerformanceNavigation|PerformanceNavigationTiming|PerformanceObserver|PerformanceObserverEntryList\n        |PerformanceResourceTiming|PerformanceTiming|PeriodicSyncEvent|PeriodicWave|Plugin|Point|PointerEvent|PopStateEvent\n        |PortCollection|Position|PositionError|PositionOptions|PresentationConnectionClosedEvent|PresentationConnectionList\n        |PresentationReceiver|ProcessingInstruction|ProgressEvent|PromiseRejectionEvent|PushEvent|PushRegistrationManager\n        |RTCCertificate|RTCConfiguration|RTCPeerConnection|RTCSessionDescriptionCallback|RTCStatsReport|RadioNodeList|RandomSource\n        |Range|ReadableByteStream|RenderingContext|SVGAElement|SVGAngle|SVGAnimateColorElement|SVGAnimateElement|SVGAnimateMotionElement\n        |SVGAnimateTransformElement|SVGAnimatedAngle|SVGAnimatedBoolean|SVGAnimatedEnumeration|SVGAnimatedInteger|SVGAnimatedLength\n        |SVGAnimatedLengthList|SVGAnimatedNumber|SVGAnimatedNumberList|SVGAnimatedPoints|SVGAnimatedPreserveAspectRatio\n        |SVGAnimatedRect|SVGAnimatedString|SVGAnimatedTransformList|SVGAnimationElement|SVGCircleElement|SVGClipPathElement\n        |SVGCursorElement|SVGDefsElement|SVGDescElement|SVGElement|SVGEllipseElement|SVGEvent|SVGFilterElement|SVGFontElement\n        |SVGFontFaceElement|SVGFontFaceFormatElement|SVGFontFaceNameElement|SVGFontFaceSrcElement|SVGFontFaceUriElement\n        |SVGForeignObjectElement|SVGGElement|SVGGlyphElement|SVGGradientElement|SVGHKernElement|SVGImageElement|SVGLength\n        |SVGLengthList|SVGLineElement|SVGLinearGradientElement|SVGMPathElement|SVGMaskElement|SVGMatrix|SVGMissingGlyphElement\n        |SVGNumber|SVGNumberList|SVGPathElement|SVGPatternElement|SVGPoint|SVGPolygonElement|SVGPolylineElement|SVGPreserveAspectRatio\n        |SVGRadialGradientElement|SVGRect|SVGRectElement|SVGSVGElement|SVGScriptElement|SVGSetElement|SVGStopElement|SVGStringList\n        |SVGStylable|SVGStyleElement|SVGSwitchElement|SVGSymbolElement|SVGTRefElement|SVGTSpanElement|SVGTests|SVGTextElement\n        |SVGTextPositioningElement|SVGTitleElement|SVGTransform|SVGTransformList|SVGTransformable|SVGUseElement|SVGVKernElement\n        |SVGViewElement|ServiceWorker|ServiceWorkerContainer|ServiceWorkerGlobalScope|ServiceWorkerRegistration|ServiceWorkerState\n        |ShadowRoot|SharedWorker|SharedWorkerGlobalScope|SourceBufferList|StereoPannerNode|Storage|StorageEvent|StyleSheet\n        |StyleSheetList|SubtleCrypto|SyncEvent|Text|TextMetrics|TimeEvent|TimeRanges|Touch|TouchEvent|TouchList|Transferable\n        |TreeWalker|UIEvent|USVString|VRDisplayCapabilities|ValidityState|WaveShaperNode|WebGL|WebGLActiveInfo|WebGLBuffer\n        |WebGLContextEvent|WebGLFramebuffer|WebGLProgram|WebGLRenderbuffer|WebGLRenderingContext|WebGLShader|WebGLShaderPrecisionFormat\n        |WebGLTexture|WebGLTimerQueryEXT|WebGLTransformFeedback|WebGLUniformLocation|WebGLVertexArrayObject|WebGLVertexArrayObjectOES\n        |WebSocket|WebSockets|WebVTT|WheelEvent|Window|WindowBase64|WindowEventHandlers|WindowTimers|Worker|WorkerGlobalScope\n        |WorkerLocation|WorkerNavigator|XMLHttpRequest|XMLHttpRequestEventTarget|XMLSerializer|XPathExpression|XPathResult\n        |XSLTProcessor))\\b(?!\\$)\n      captures:\n        1: support.variable.dom.ts\n        2: support.class.dom.ts\n    - match: |-\n        (?x) (?:(\\.)|(\\?\\.(?!\\s*[[:digit:]]))) \\s* (?:\n        (ATTRIBUTE_NODE|CDATA_SECTION_NODE|COMMENT_NODE|DOCUMENT_FRAGMENT_NODE|DOCUMENT_NODE|DOCUMENT_TYPE_NODE\n        |DOMSTRING_SIZE_ERR|ELEMENT_NODE|ENTITY_NODE|ENTITY_REFERENCE_NODE|HIERARCHY_REQUEST_ERR|INDEX_SIZE_ERR\n        |INUSE_ATTRIBUTE_ERR|INVALID_CHARACTER_ERR|NO_DATA_ALLOWED_ERR|NO_MODIFICATION_ALLOWED_ERR|NOT_FOUND_ERR\n        |NOT_SUPPORTED_ERR|NOTATION_NODE|PROCESSING_INSTRUCTION_NODE|TEXT_NODE|WRONG_DOCUMENT_ERR)\n        |\n        (_content|[xyz]|abbr|above|accept|acceptCharset|accessKey|action|align|[av]Link(?:color)?|all|alt|anchors|appCodeName\n        |appCore|applets|appMinorVersion|appName|appVersion|archive|areas|arguments|attributes|availHeight|availLeft|availTop\n        |availWidth|axis|background|backgroundColor|backgroundImage|below|bgColor|body|border|borderBottomWidth|borderColor\n        |borderLeftWidth|borderRightWidth|borderStyle|borderTopWidth|borderWidth|bottom|bufferDepth|callee|caller|caption\n        |cellPadding|cells|cellSpacing|ch|characterSet|charset|checked|childNodes|chOff|cite|classes|className|clear\n        |clientInformation|clip|clipBoardData|closed|code|codeBase|codeType|color|colorDepth|cols|colSpan|compact|complete\n        |components|content|controllers|cookie|cookieEnabled|cords|cpuClass|crypto|current|data|dateTime|declare|defaultCharset\n        |defaultChecked|defaultSelected|defaultStatus|defaultValue|defaultView|defer|description|dialogArguments|dialogHeight\n        |dialogLeft|dialogTop|dialogWidth|dir|directories|disabled|display|docmain|doctype|documentElement|elements|embeds\n        |enabledPlugin|encoding|enctype|entities|event|expando|external|face|fgColor|filename|firstChild|fontFamily|fontSize\n        |fontWeight|form|formName|forms|frame|frameBorder|frameElement|frames|hasFocus|hash|headers|height|history|host\n        |hostname|href|hreflang|hspace|htmlFor|httpEquiv|id|ids|ignoreCase|images|implementation|index|innerHeight|innerWidth\n        |input|isMap|label|lang|language|lastChild|lastIndex|lastMatch|lastModified|lastParen|layer[sXY]|left|leftContext\n        |lineHeight|link|linkColor|links|listStyleType|localName|location|locationbar|longDesc|lowsrc|lowSrc|marginBottom\n        |marginHeight|marginLeft|marginRight|marginTop|marginWidth|maxLength|media|menubar|method|mimeTypes|multiline|multiple\n        |name|nameProp|namespaces|namespaceURI|next|nextSibling|nodeName|nodeType|nodeValue|noHref|noResize|noShade|notationName\n        |notations|noWrap|object|offscreenBuffering|onLine|onreadystatechange|opener|opsProfile|options|oscpu|outerHeight\n        |outerWidth|ownerDocument|paddingBottom|paddingLeft|paddingRight|paddingTop|page[XY]|page[XY]Offset|parent|parentLayer\n        |parentNode|parentWindow|pathname|personalbar|pixelDepth|pkcs11|platform|plugins|port|prefix|previous|previousDibling\n        |product|productSub|profile|profileend|prompt|prompter|protocol|publicId|readOnly|readyState|referrer|rel|responseText\n        |responseXML|rev|right|rightContext|rowIndex|rows|rowSpan|rules|scheme|scope|screen[XY]|screenLeft|screenTop|scripts\n        |scrollbars|scrolling|sectionRowIndex|security|securityPolicy|selected|selectedIndex|selection|self|shape|siblingAbove\n        |siblingBelow|size|source|specified|standby|start|status|statusbar|statusText|style|styleSheets|suffixes|summary\n        |systemId|systemLanguage|tagName|tags|target|tBodies|text|textAlign|textDecoration|textIndent|textTransform|tFoot|tHead\n        |title|toolbar|top|type|undefined|uniqueID|updateInterval|URL|URLUnencoded|useMap|userAgent|userLanguage|userProfile\n        |vAlign|value|valueType|vendor|vendorSub|version|visibility|vspace|whiteSpace|width|X[MS]LDocument|zIndex))\\b(?!\\$|\\s*(<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\\()\n      captures:\n        1: punctuation.accessor.ts\n        2: punctuation.accessor.optional.ts\n        3: support.constant.dom.ts\n        4: support.variable.property.dom.ts\n    - match: |-\n        (?x)(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(Buffer|EventEmitter|Server|Pipe|Socket|REPLServer|ReadStream|WriteStream|Stream\n        |Inflate|Deflate|InflateRaw|DeflateRaw|GZip|GUnzip|Unzip|Zip)\\b(?!\\$)\n      scope: support.class.node.ts\n    - match: |-\n        (?x)(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(process)(?:(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))(?:\n          (arch|argv|config|connected|env|execArgv|execPath|exitCode|mainModule|pid|platform|release|stderr|stdin|stdout|title|version|versions)\n          |\n          (abort|chdir|cwd|disconnect|exit|[sg]ete?[gu]id|send|[sg]etgroups|initgroups|kill|memoryUsage|nextTick|umask|uptime|hrtime)\n        ))?\\b(?!\\$)\n      captures:\n        1: support.variable.object.process.ts\n        2: punctuation.accessor.ts\n        3: punctuation.accessor.optional.ts\n        4: support.variable.property.process.ts\n        5: support.function.process.ts\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(exports)|(module)(?:(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))(exports|id|filename|loaded|parent|children))?)\\b(?!\\$)'\n      captures:\n        1: support.type.object.module.ts\n        2: support.type.object.module.ts\n        3: punctuation.accessor.ts\n        4: punctuation.accessor.optional.ts\n        5: support.type.object.module.ts\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(global|GLOBAL|root|__dirname|__filename)\\b(?!\\$)'\n      scope: support.variable.object.node.ts\n    - match: |-\n        (?x) (?:(\\.)|(\\?\\.(?!\\s*[[:digit:]]))) \\s*\n        (?:\n         (on(?:Rowsinserted|Rowsdelete|Rowenter|Rowexit|Resize|Resizestart|Resizeend|Reset|\n           Readystatechange|Mouseout|Mouseover|Mousedown|Mouseup|Mousemove|\n           Before(?:cut|deactivate|unload|update|paste|print|editfocus|activate)|\n           Blur|Scrolltop|Submit|Select|Selectstart|Selectionchange|Hover|Help|\n           Change|Contextmenu|Controlselect|Cut|Cellchange|Clock|Close|Deactivate|\n           Datasetchanged|Datasetcomplete|Dataavailable|Drop|Drag|Dragstart|Dragover|\n           Dragdrop|Dragenter|Dragend|Dragleave|Dblclick|Unload|Paste|Propertychange|Error|\n           Errorupdate|Keydown|Keyup|Keypress|Focus|Load|Activate|Afterupdate|Afterprint|Abort)\n         ) |\n         (shift|showModelessDialog|showModalDialog|showHelp|scroll|scrollX|scrollByPages|\n           scrollByLines|scrollY|scrollTo|stop|strike|sizeToContent|sidebar|signText|sort|\n           sup|sub|substr|substring|splice|split|send|set(?:Milliseconds|Seconds|Minutes|Hours|\n           Month|Year|FullYear|Date|UTC(?:Milliseconds|Seconds|Minutes|Hours|Month|FullYear|Date)|\n           Time|Hotkeys|Cursor|ZOptions|Active|Resizable|RequestHeader)|search|slice|\n           savePreferences|small|home|handleEvent|navigate|char|charCodeAt|charAt|concat|\n           contextual|confirm|compile|clear|captureEvents|call|createStyleSheet|createPopup|\n           createEventObject|to(?:GMTString|UTCString|String|Source|UpperCase|LowerCase|LocaleString)|\n           test|taint|taintEnabled|indexOf|italics|disableExternalCapture|dump|detachEvent|unshift|\n           untaint|unwatch|updateCommands|join|javaEnabled|pop|push|plugins.refresh|paddings|parse|\n           print|prompt|preference|enableExternalCapture|exec|execScript|valueOf|UTC|find|file|\n           fileModifiedDate|fileSize|fileCreatedDate|fileUpdatedDate|fixed|fontsize|fontcolor|\n           forward|fromCharCode|watch|link|load|lastIndexOf|anchor|attachEvent|atob|apply|alert|\n           abort|routeEvents|resize|resizeBy|resizeTo|recalc|returnValue|replace|reverse|reload|\n           releaseCapture|releaseEvents|go|get(?:Milliseconds|Seconds|Minutes|Hours|Month|Day|Year|FullYear|\n           Time|Date|TimezoneOffset|UTC(?:Milliseconds|Seconds|Minutes|Hours|Day|Month|FullYear|Date)|\n           Attention|Selection|ResponseHeader|AllResponseHeaders)|moveBy|moveBelow|moveTo|\n           moveToAbsolute|moveAbove|mergeAttributes|match|margins|btoa|big|bold|borderWidths|blink|back\n         ) |\n         (acceptNode|add|addEventListener|addTextTrack|adoptNode|after|animate|append|\n           appendChild|appendData|before|blur|canPlayType|captureStream|\n           caretPositionFromPoint|caretRangeFromPoint|checkValidity|clear|click|\n           cloneContents|cloneNode|cloneRange|close|closest|collapse|\n           compareBoundaryPoints|compareDocumentPosition|comparePoint|contains|\n           convertPointFromNode|convertQuadFromNode|convertRectFromNode|createAttribute|\n           createAttributeNS|createCaption|createCDATASection|createComment|\n           createContextualFragment|createDocument|createDocumentFragment|\n           createDocumentType|createElement|createElementNS|createEntityReference|\n           createEvent|createExpression|createHTMLDocument|createNodeIterator|\n           createNSResolver|createProcessingInstruction|createRange|createShadowRoot|\n           createTBody|createTextNode|createTFoot|createTHead|createTreeWalker|delete|\n           deleteCaption|deleteCell|deleteContents|deleteData|deleteRow|deleteTFoot|\n           deleteTHead|detach|disconnect|dispatchEvent|elementFromPoint|elementsFromPoint|\n           enableStyleSheetsForSet|entries|evaluate|execCommand|exitFullscreen|\n           exitPointerLock|expand|extractContents|fastSeek|firstChild|focus|forEach|get|\n           getAll|getAnimations|getAttribute|getAttributeNames|getAttributeNode|\n           getAttributeNodeNS|getAttributeNS|getBoundingClientRect|getBoxQuads|\n           getClientRects|getContext|getDestinationInsertionPoints|getElementById|\n           getElementsByClassName|getElementsByName|getElementsByTagName|\n           getElementsByTagNameNS|getItem|getNamedItem|getSelection|getStartDate|\n           getVideoPlaybackQuality|has|hasAttribute|hasAttributeNS|hasAttributes|\n           hasChildNodes|hasFeature|hasFocus|importNode|initEvent|insertAdjacentElement|\n           insertAdjacentHTML|insertAdjacentText|insertBefore|insertCell|insertData|\n           insertNode|insertRow|intersectsNode|isDefaultNamespace|isEqualNode|\n           isPointInRange|isSameNode|item|key|keys|lastChild|load|lookupNamespaceURI|\n           lookupPrefix|matches|move|moveAttribute|moveAttributeNode|moveChild|\n           moveNamedItem|namedItem|nextNode|nextSibling|normalize|observe|open|\n           parentNode|pause|play|postMessage|prepend|preventDefault|previousNode|\n           previousSibling|probablySupportsContext|queryCommandEnabled|\n           queryCommandIndeterm|queryCommandState|queryCommandSupported|queryCommandValue|\n           querySelector|querySelectorAll|registerContentHandler|registerElement|\n           registerProtocolHandler|releaseCapture|releaseEvents|remove|removeAttribute|\n           removeAttributeNode|removeAttributeNS|removeChild|removeEventListener|\n           removeItem|replace|replaceChild|replaceData|replaceWith|reportValidity|\n           requestFullscreen|requestPointerLock|reset|scroll|scrollBy|scrollIntoView|\n           scrollTo|seekToNextFrame|select|selectNode|selectNodeContents|set|setAttribute|\n           setAttributeNode|setAttributeNodeNS|setAttributeNS|setCapture|\n           setCustomValidity|setEnd|setEndAfter|setEndBefore|setItem|setNamedItem|\n           setRangeText|setSelectionRange|setSinkId|setStart|setStartAfter|setStartBefore|\n           slice|splitText|stepDown|stepUp|stopImmediatePropagation|stopPropagation|\n           submit|substringData|supports|surroundContents|takeRecords|terminate|toBlob|\n           toDataURL|toggle|toString|values|write|writeln\n         ) |\n         (all|catch|finally|race|reject|resolve|then\n         )\n        )(?=\\s*\\()\n      captures:\n        1: punctuation.accessor.ts\n        2: punctuation.accessor.optional.ts\n        3: support.function.event-handler.ts\n        4: support.function.ts\n        5: support.function.dom.ts\n        6: support.function.promise.ts\n  switch-statement:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?=\\bswitch\\s*\\()'\n      push:\n        - meta_scope: switch-statement.expr.ts\n        - match: '\\}'\n          captures:\n            0: punctuation.definition.block.ts\n          pop: true\n        - include: comment\n        - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(switch)\\s*(\\()'\n          captures:\n            1: keyword.control.switch.ts\n            2: meta.brace.round.ts\n          push:\n            - meta_scope: switch-expression.expr.ts\n            - match: \\)\n              captures:\n                0: meta.brace.round.ts\n              pop: true\n            - include: expression\n        - match: '\\{'\n          captures:\n            0: punctuation.definition.block.ts\n          push:\n            - meta_scope: switch-block.expr.ts\n            - match: '(?=\\})'\n              pop: true\n            - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(case|default(?=:))(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n              captures:\n                1: keyword.control.switch.ts\n              push:\n                - meta_scope: case-clause.expr.ts\n                - match: (?=:)\n                  pop: true\n                - include: expression\n            - match: '(:)\\s*(\\{)'\n              captures:\n                1: case-clause.expr.ts punctuation.definition.section.case-statement.ts\n                2: meta.block.ts punctuation.definition.block.ts\n              push:\n                - meta_content_scope: meta.block.ts\n                - match: '\\}'\n                  captures:\n                    0: meta.block.ts punctuation.definition.block.ts\n                  pop: true\n                - include: statements\n            - match: (:)\n              captures:\n                0: case-clause.expr.ts punctuation.definition.section.case-statement.ts\n            - include: statements\n  template:\n    - include: template-call\n    - match: \"([_$[:alpha:]][_$[:alnum:]]*)?(`)\"\n      captures:\n        1: entity.name.function.tagged-template.ts\n        2: punctuation.definition.string.template.begin.ts\n      push:\n        - meta_scope: string.template.ts\n        - match: \"`\"\n          captures:\n            0: punctuation.definition.string.template.end.ts\n          pop: true\n        - include: template-substitution-element\n        - include: string-character-escape\n  template-call:\n    - match: '(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)(<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\''([^\\''\\\\]|\\\\.)*\\'')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\''([^\\''\\\\]|\\\\.)*\\'')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))(([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\''([^\\''\\\\]|\\\\.)*\\'')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>)*(?<!=)\\>))*(?<!=)\\>)*(?<!=)>\\s*)?`)'\n      push:\n        - meta_scope: string.template.ts\n        - match: (?=`)\n          pop: true\n        - match: '(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*))'\n          push:\n            - match: '(?=(<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\''([^\\''\\\\]|\\\\.)*\\'')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\''([^\\''\\\\]|\\\\.)*\\'')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))(([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\''([^\\''\\\\]|\\\\.)*\\'')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>)*(?<!=)\\>))*(?<!=)\\>)*(?<!=)>\\s*)?`)'\n              pop: true\n            - include: support-function-call-identifiers\n            - match: \"([_$[:alpha:]][_$[:alnum:]]*)\"\n              scope: entity.name.function.tagged-template.ts\n        - include: type-arguments\n    - match: '([_$[:alpha:]][_$[:alnum:]]*)?\\s*(?=(<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\''([^\\''\\\\]|\\\\.)*\\'')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\''([^\\''\\\\]|\\\\.)*\\'')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))(([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\''([^\\''\\\\]|\\\\.)*\\'')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>)*(?<!=)\\>))*(?<!=)\\>)*(?<!=)>\\s*)`)'\n      captures:\n        1: entity.name.function.tagged-template.ts\n      push:\n        - meta_scope: string.template.ts\n        - match: (?=`)\n          pop: true\n        - include: type-arguments\n  template-substitution-element:\n    - match: '\\$\\{'\n      captures:\n        0: punctuation.definition.template-expression.begin.ts\n      push:\n        - meta_scope: meta.template.expression.ts\n        - meta_content_scope: meta.embedded.line.ts\n        - match: '\\}'\n          captures:\n            0: punctuation.definition.template-expression.end.ts\n          pop: true\n        - include: expression\n  template-type:\n    - include: template-call\n    - match: \"([_$[:alpha:]][_$[:alnum:]]*)?(`)\"\n      captures:\n        1: entity.name.function.tagged-template.ts\n        2: punctuation.definition.string.template.begin.ts\n      push:\n        - meta_scope: string.template.ts\n        - match: \"`\"\n          captures:\n            0: punctuation.definition.string.template.end.ts\n          pop: true\n        - include: template-type-substitution-element\n        - include: string-character-escape\n  template-type-substitution-element:\n    - match: '\\$\\{'\n      captures:\n        0: punctuation.definition.template-expression.begin.ts\n      push:\n        - meta_scope: meta.template.expression.ts\n        - meta_content_scope: meta.embedded.line.ts\n        - match: '\\}'\n          captures:\n            0: punctuation.definition.template-expression.end.ts\n          pop: true\n        - include: type\n  ternary-expression:\n    - match: '(?!\\?\\.\\s*[^[:digit:]])(\\?)(?!\\?)'\n      captures:\n        1: keyword.operator.ternary.ts\n      push:\n        - match: \\s*(:)\n          captures:\n            1: keyword.operator.ternary.ts\n          pop: true\n        - include: expression\n  this-literal:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))this\\b(?!\\$)'\n      scope: variable.language.this.ts\n  type:\n    - include: comment\n    - include: type-string\n    - include: numeric-literal\n    - include: type-primitive\n    - include: type-builtin-literals\n    - include: type-parameters\n    - include: type-tuple\n    - include: type-object\n    - include: type-conditional\n    - include: type-operators\n    - include: type-fn-type-parameters\n    - include: type-paren-or-function-parameters\n    - include: type-function-return-type\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(readonly)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))\\s*'\n      captures:\n        1: storage.modifier.ts\n    - include: type-name\n  type-alias-declaration:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?\\b(type)\\b\\s+([_$[:alpha:]][_$[:alnum:]]*)\\s*'\n      captures:\n        1: keyword.control.export.ts\n        2: storage.modifier.ts\n        3: storage.type.type.ts\n        4: entity.name.type.alias.ts\n      push:\n        - meta_scope: meta.type.declaration.ts\n        - match: '(?=\\}|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))'\n          pop: true\n        - include: comment\n        - include: type-parameters\n        - match: '(=)\\s*(intrinsic)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n          captures:\n            1: keyword.operator.assignment.ts\n            2: keyword.control.intrinsic.ts\n          push:\n            - match: '(?=\\}|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))'\n              pop: true\n            - include: type\n        - match: (=)\\s*\n          captures:\n            1: keyword.operator.assignment.ts\n          push:\n            - match: '(?=\\}|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))'\n              pop: true\n            - include: type\n  type-annotation:\n    - match: (:)(?=\\s*\\S)\n      captures:\n        1: keyword.operator.type.annotation.ts\n      push:\n        - meta_scope: meta.type.annotation.ts\n        - match: '(?<![:|&])((?=$|^|[,);\\}\\]]|//)|(?==[^>])|((?<=[\\}>\\]\\)]|[_$[:alpha:]])\\s*(?=\\{)))'\n          pop: true\n        - include: type\n    - match: (:)\n      captures:\n        1: keyword.operator.type.annotation.ts\n      push:\n        - meta_scope: meta.type.annotation.ts\n        - match: '(?<![:|&])((?=[,);\\}\\]]|//)|(?==[^>])|(?=^\\s*$)|((?<=\\S)(?=\\s*$))|((?<=[\\}>\\]\\)]|[_$[:alpha:]])\\s*(?=\\{)))'\n          pop: true\n        - include: type\n  type-arguments:\n    - match: \\<\n      captures:\n        0: punctuation.definition.typeparameters.begin.ts\n      push:\n        - meta_scope: meta.type.parameters.ts\n        - match: \\>\n          captures:\n            0: punctuation.definition.typeparameters.end.ts\n          pop: true\n        - include: type-arguments-body\n  type-arguments-body:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(_)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      captures:\n        0: keyword.operator.type.ts\n    - include: type\n    - include: punctuation-comma\n  type-builtin-literals:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(this|true|false|undefined|null|object)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: support.type.builtin.ts\n  type-conditional:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(extends)\\s+'\n      captures:\n        1: storage.modifier.ts\n      push:\n        - match: (?<=:)\n          pop: true\n        - match: \\?\n          captures:\n            0: keyword.operator.ternary.ts\n          push:\n            - match: \":\"\n              captures:\n                0: keyword.operator.ternary.ts\n              pop: true\n            - include: type\n        - include: type\n  type-fn-type-parameters:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(abstract)\\s+)?(new)\\b(?=\\s*\\<)'\n      captures:\n        1: meta.type.constructor.ts storage.modifier.ts\n        2: meta.type.constructor.ts keyword.control.new.ts\n      push:\n        - match: (?<=>)\n          pop: true\n        - include: comment\n        - include: type-parameters\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(abstract)\\s+)?(new)\\b\\s*(?=\\()'\n      captures:\n        1: storage.modifier.ts\n        2: keyword.control.new.ts\n      push:\n        - meta_scope: meta.type.constructor.ts\n        - match: (?<=\\))\n          pop: true\n        - include: function-parameters\n    - match: |-\n        (?x)(\n          (?=\n            [(]\\s*(\n              ([)]) |\n              (\\.\\.\\.) |\n              ([_$[:alnum:]]+\\s*(\n                ([:,?=])|\n                ([)]\\s*=>)\n              ))\n            )\n          )\n        )\n      push:\n        - meta_scope: meta.type.function.ts\n        - match: (?<=\\))\n          pop: true\n        - include: function-parameters\n  type-function-return-type:\n    - match: (=>)(?=\\s*\\S)\n      captures:\n        1: storage.type.function.arrow.ts\n      push:\n        - meta_scope: meta.type.function.return.ts\n        - match: '(?<!=>)(?<![|&])(?=[,\\]\\)\\{\\}=;>:\\?]|//|$)'\n          pop: true\n        - include: type-function-return-type-core\n    - match: \"=>\"\n      captures:\n        0: storage.type.function.arrow.ts\n      push:\n        - meta_scope: meta.type.function.return.ts\n        - match: '(?<!=>)(?<![|&])((?=[,\\]\\)\\{\\}=;:\\?>]|//|^\\s*$)|((?<=\\S)(?=\\s*$)))'\n          pop: true\n        - include: type-function-return-type-core\n  type-function-return-type-core:\n    - include: comment\n    - match: '(?<==>)(?=\\s*\\{)'\n      push:\n        - match: '(?<=\\})'\n          pop: true\n        - include: type-object\n    - include: type-predicate-operator\n    - include: type\n  type-name:\n    - match: '([_$[:alpha:]][_$[:alnum:]]*)\\s*(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*(<)'\n      captures:\n        1: entity.name.type.module.ts\n        2: punctuation.accessor.ts\n        3: punctuation.accessor.optional.ts\n        4: meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts\n      push:\n        - meta_content_scope: meta.type.parameters.ts\n        - match: (>)\n          captures:\n            1: meta.type.parameters.ts punctuation.definition.typeparameters.end.ts\n          pop: true\n        - include: type-arguments-body\n    - match: '([_$[:alpha:]][_$[:alnum:]]*)\\s*(<)'\n      captures:\n        1: entity.name.type.ts\n        2: meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts\n      push:\n        - meta_content_scope: meta.type.parameters.ts\n        - match: (>)\n          captures:\n            1: meta.type.parameters.ts punctuation.definition.typeparameters.end.ts\n          pop: true\n        - include: type-arguments-body\n    - match: '([_$[:alpha:]][_$[:alnum:]]*)\\s*(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))'\n      captures:\n        1: entity.name.type.module.ts\n        2: punctuation.accessor.ts\n        3: punctuation.accessor.optional.ts\n    - match: \"[_$[:alpha:]][_$[:alnum:]]*\"\n      scope: entity.name.type.ts\n  type-object:\n    - match: '\\{'\n      captures:\n        0: punctuation.definition.block.ts\n      push:\n        - meta_scope: meta.object.type.ts\n        - match: '\\}'\n          captures:\n            0: punctuation.definition.block.ts\n          pop: true\n        - include: comment\n        - include: method-declaration\n        - include: indexer-declaration\n        - include: indexer-mapped-type-declaration\n        - include: field-declaration\n        - include: type-annotation\n        - match: \\.\\.\\.\n          captures:\n            0: keyword.operator.spread.ts\n          push:\n            - match: '(?=\\}|;|,|$)|(?<=\\})'\n              pop: true\n            - include: type\n        - include: punctuation-comma\n        - include: punctuation-semicolon\n        - include: type\n  type-operators:\n    - include: typeof-operator\n    - match: '([&|])(?=\\s*\\{)'\n      captures:\n        0: keyword.operator.type.ts\n      push:\n        - match: '(?<=\\})'\n          pop: true\n        - include: type-object\n    - match: \"[&|]\"\n      captures:\n        0: keyword.operator.type.ts\n      push:\n        - match: (?=\\S)\n          pop: true\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))keyof(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: keyword.operator.expression.keyof.ts\n    - match: (\\?|\\:)\n      scope: keyword.operator.ternary.ts\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))infer(?=\\s+[_$[:alpha:]])'\n      scope: keyword.operator.expression.infer.ts\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))import(?=\\s*\\()'\n      scope: keyword.operator.expression.import.ts\n  type-parameters:\n    - match: (<)\n      captures:\n        1: punctuation.definition.typeparameters.begin.ts\n      push:\n        - meta_scope: meta.type.parameters.ts\n        - match: (>)\n          captures:\n            1: punctuation.definition.typeparameters.end.ts\n          pop: true\n        - include: comment\n        - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(extends)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n          scope: storage.modifier.ts\n        - include: type\n        - include: punctuation-comma\n        - match: (=)(?!>)\n          scope: keyword.operator.assignment.ts\n  type-paren-or-function-parameters:\n    - match: \\(\n      captures:\n        0: meta.brace.round.ts\n      push:\n        - meta_scope: meta.type.paren.cover.ts\n        - match: \\)\n          captures:\n            0: meta.brace.round.ts\n          pop: true\n        - match: |-\n            (?x)(?:(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(public|private|protected|readonly)\\s+)?(?:(\\.\\.\\.)\\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))\\s*(\\??)(?=\\s*(:\\s*(\n              (<) |\n              ([(]\\s*(\n                ([)]) |\n                (\\.\\.\\.) |\n                ([_$[:alnum:]]+\\s*(\n                  ([:,?=])|\n                  ([)]\\s*=>)\n                ))\n              ))\n            )) |\n            (:\\s*(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))Function(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))) |\n            (:\\s*((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?[\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*))))))))\n          captures:\n            1: storage.modifier.ts\n            2: keyword.operator.rest.ts\n            3: entity.name.function.ts variable.language.this.ts\n            4: entity.name.function.ts\n            5: keyword.operator.optional.ts\n        - match: '(?x)(?:(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(public|private|protected|readonly)\\s+)?(?:(\\.\\.\\.)\\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))\\s*(\\??)(?=:)'\n          captures:\n            1: storage.modifier.ts\n            2: keyword.operator.rest.ts\n            3: variable.parameter.ts variable.language.this.ts\n            4: variable.parameter.ts\n            5: keyword.operator.optional.ts\n        - include: type-annotation\n        - match: \",\"\n          scope: punctuation.separator.parameter.ts\n        - include: type\n  type-predicate-operator:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(asserts)\\s+)?(?!asserts)(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))\\s(is)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      captures:\n        1: keyword.operator.type.asserts.ts\n        2: variable.parameter.ts variable.language.this.ts\n        3: variable.parameter.ts\n        4: keyword.operator.expression.is.ts\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(asserts)\\s+(?!is)(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      captures:\n        1: keyword.operator.type.asserts.ts\n        2: variable.parameter.ts variable.language.this.ts\n        3: variable.parameter.ts\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))asserts(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: keyword.operator.type.asserts.ts\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))is(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: keyword.operator.expression.is.ts\n  type-primitive:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(string|number|bigint|boolean|symbol|any|void|never|unknown)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: support.type.primitive.ts\n  type-string:\n    - include: qstring-single\n    - include: qstring-double\n    - include: template-type\n  type-tuple:\n    - match: '\\['\n      captures:\n        0: meta.brace.square.ts\n      push:\n        - meta_scope: meta.type.tuple.ts\n        - match: '\\]'\n          captures:\n            0: meta.brace.square.ts\n          pop: true\n        - match: \\.\\.\\.\n          scope: keyword.operator.rest.ts\n        - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))([_$[:alpha:]][_$[:alnum:]]*)\\s*(\\?)?\\s*(:)'\n          captures:\n            1: entity.name.label.ts\n            2: keyword.operator.optional.ts\n            3: punctuation.separator.label.ts\n        - include: type\n        - include: punctuation-comma\n  typeof-operator:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))typeof(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      captures:\n        0: keyword.operator.expression.typeof.ts\n      push:\n        - match: '(?=[,);}\\]=>:&|{\\?]|$|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))'\n          pop: true\n        - include: expression\n  undefined-literal:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))undefined(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: constant.language.undefined.ts\n  var-expr:\n    - match: '(?=(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?\\b(var|let)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.)))'\n      push:\n        - meta_scope: meta.var.expr.ts\n        - match: '(?!(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?\\b(var|let)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.)))((?=;|}|((?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+)|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))|((?<!^let|[^\\._$[:alnum:]]let|^var|[^\\._$[:alnum:]]var)(?=\\s*$)))'\n          pop: true\n        - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?\\b(var|let)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))\\s*'\n          captures:\n            1: keyword.control.export.ts\n            2: storage.modifier.ts\n            3: storage.type.ts\n          push:\n            - match: (?=\\S)\n              pop: true\n        - include: destructuring-variable\n        - include: var-single-variable\n        - include: variable-initializer\n        - include: comment\n        - match: (,)\\s*((?!\\S)|(?=\\/\\/))\n          captures:\n            1: punctuation.separator.comma.ts\n          push:\n            - match: '(?<!,)(((?==|;|}|((?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+)|^\\s*$))|((?<=\\S)(?=\\s*$)))'\n              pop: true\n            - include: single-line-comment-consuming-line-ending\n            - include: comment\n            - include: destructuring-variable\n            - include: var-single-variable\n            - include: punctuation-comma\n        - include: punctuation-comma\n    - match: '(?=(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?\\b(const(?!\\s+enum\\b))(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.)))'\n      captures:\n        1: keyword.control.export.ts\n        2: storage.modifier.ts\n        3: storage.type.ts\n      push:\n        - meta_scope: meta.var.expr.ts\n        - match: '(?!(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?\\b(const(?!\\s+enum\\b))(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.)))((?=;|}|((?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+)|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))|((?<!^const|[^\\._$[:alnum:]]const)(?=\\s*$)))'\n          pop: true\n        - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?\\b(const(?!\\s+enum\\b))(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))\\s*'\n          captures:\n            1: keyword.control.export.ts\n            2: storage.modifier.ts\n            3: storage.type.ts\n          push:\n            - match: (?=\\S)\n              pop: true\n        - include: destructuring-const\n        - include: var-single-const\n        - include: variable-initializer\n        - include: comment\n        - match: (,)\\s*((?!\\S)|(?=\\/\\/))\n          captures:\n            1: punctuation.separator.comma.ts\n          push:\n            - match: '(?<!,)(((?==|;|}|((?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+)|^\\s*$))|((?<=\\S)(?=\\s*$)))'\n              pop: true\n            - include: single-line-comment-consuming-line-ending\n            - include: comment\n            - include: destructuring-const\n            - include: var-single-const\n            - include: punctuation-comma\n        - include: punctuation-comma\n  var-single-const:\n    - match: |-\n        (?x)([_$[:alpha:]][_$[:alnum:]]*)(?=\\s*\n        # function assignment |\n        (=\\s*(\n          ((async\\s+)?(\n            (function\\s*[(<*]) |\n            (function\\s+) |\n            ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n          )) |\n          ((async\\s*)?(\n            ((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?[\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n            # sure shot arrow functions even if => is on new line\n        (\n          (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n          [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n          (\n            ([)]\\s*:) |                                                                                       # ():\n            ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:)                                                                  # [(]param: | [(]...param:\n          )\n        ) |\n\n        # arrow function possible to detect only with => on same line\n        (\n          (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?                                                                                 # typeparameters\n          \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\)   # parameters\n          (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)?                                                                        # return type\n          \\s*=>                                                                                               # arrow operator\n        )\n          ))\n        )) |\n        # typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n        (:\\s*(\n          (<) |\n          ([(]\\s*(\n            ([)]) |\n            (\\.\\.\\.) |\n            ([_$[:alnum:]]+\\s*(\n              ([:,?=])|\n              ([)]\\s*=>)\n            ))\n          ))\n        )) |\n        (:\\s*(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))Function(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))) |\n        (:\\s*((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?[\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*))))))) |\n        (:\\s*(=>|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n          ((async\\s+)?(\n            (function\\s*[(<*]) |\n            (function\\s+) |\n            ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n          )) |\n          ((async\\s*)?(\n            ((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?[\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n            # sure shot arrow functions even if => is on new line\n        (\n          (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n          [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n          (\n            ([)]\\s*:) |                                                                                       # ():\n            ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:)                                                                  # [(]param: | [(]...param:\n          )\n        ) |\n\n        # arrow function possible to detect only with => on same line\n        (\n          (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?                                                                                 # typeparameters\n          \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\)   # parameters\n          (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)?                                                                        # return type\n          \\s*=>                                                                                               # arrow operator\n        )\n          ))\n        )))\n      captures:\n        1: meta.definition.variable.ts variable.other.constant.ts entity.name.function.ts\n      push:\n        - meta_scope: meta.var-single-variable.expr.ts\n        - match: '(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+))'\n          pop: true\n        - include: var-single-variable-type-annotation\n    - match: \"([_$[:alpha:]][_$[:alnum:]]*)\"\n      captures:\n        1: meta.definition.variable.ts variable.other.constant.ts\n      push:\n        - meta_scope: meta.var-single-variable.expr.ts\n        - match: '(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+))'\n          pop: true\n        - include: var-single-variable-type-annotation\n  var-single-variable:\n    - match: |-\n        (?x)([_$[:alpha:]][_$[:alnum:]]*)(\\!)?(?=\\s*\n        # function assignment |\n        (=\\s*(\n          ((async\\s+)?(\n            (function\\s*[(<*]) |\n            (function\\s+) |\n            ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n          )) |\n          ((async\\s*)?(\n            ((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?[\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n            # sure shot arrow functions even if => is on new line\n        (\n          (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n          [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n          (\n            ([)]\\s*:) |                                                                                       # ():\n            ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:)                                                                  # [(]param: | [(]...param:\n          )\n        ) |\n\n        # arrow function possible to detect only with => on same line\n        (\n          (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?                                                                                 # typeparameters\n          \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\)   # parameters\n          (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)?                                                                        # return type\n          \\s*=>                                                                                               # arrow operator\n        )\n          ))\n        )) |\n        # typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n        (:\\s*(\n          (<) |\n          ([(]\\s*(\n            ([)]) |\n            (\\.\\.\\.) |\n            ([_$[:alnum:]]+\\s*(\n              ([:,?=])|\n              ([)]\\s*=>)\n            ))\n          ))\n        )) |\n        (:\\s*(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))Function(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))) |\n        (:\\s*((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?[\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*))))))) |\n        (:\\s*(=>|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n          ((async\\s+)?(\n            (function\\s*[(<*]) |\n            (function\\s+) |\n            ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n          )) |\n          ((async\\s*)?(\n            ((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?[\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n            # sure shot arrow functions even if => is on new line\n        (\n          (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n          [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n          (\n            ([)]\\s*:) |                                                                                       # ():\n            ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:)                                                                  # [(]param: | [(]...param:\n          )\n        ) |\n\n        # arrow function possible to detect only with => on same line\n        (\n          (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?                                                                                 # typeparameters\n          \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\)   # parameters\n          (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)?                                                                        # return type\n          \\s*=>                                                                                               # arrow operator\n        )\n          ))\n        )))\n      captures:\n        1: meta.definition.variable.ts entity.name.function.ts\n        2: keyword.operator.definiteassignment.ts\n      push:\n        - meta_scope: meta.var-single-variable.expr.ts\n        - match: '(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+))'\n          pop: true\n        - include: var-single-variable-type-annotation\n    - match: '([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])(\\!)?'\n      captures:\n        1: meta.definition.variable.ts variable.other.constant.ts\n        2: keyword.operator.definiteassignment.ts\n      push:\n        - meta_scope: meta.var-single-variable.expr.ts\n        - match: '(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+))'\n          pop: true\n        - include: var-single-variable-type-annotation\n    - match: '([_$[:alpha:]][_$[:alnum:]]*)(\\!)?'\n      captures:\n        1: meta.definition.variable.ts variable.other.readwrite.ts\n        2: keyword.operator.definiteassignment.ts\n      push:\n        - meta_scope: meta.var-single-variable.expr.ts\n        - match: '(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+))'\n          pop: true\n        - include: var-single-variable-type-annotation\n  var-single-variable-type-annotation:\n    - include: type-annotation\n    - include: string\n    - include: comment\n  variable-initializer:\n    - match: (?<!=|!)(=)(?!=)(?=\\s*\\S)(?!\\s*.*=>\\s*$)\n      captures:\n        1: keyword.operator.assignment.ts\n      push:\n        - match: '(?=$|^|[,);}\\]]|((?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+))'\n          pop: true\n        - include: expression\n    - match: (?<!=|!)(=)(?!=)\n      captures:\n        1: keyword.operator.assignment.ts\n      push:\n        - match: '(?=[,);}\\]]|((?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+))|(?=^\\s*$)|(?<=\\S)(?<!=)(?=\\s*$)'\n          pop: true\n        - include: expression\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/TypsecriptReact.sublime-syntax",
    "content": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: TypeScriptReact\nfile_extensions:\n  - tsx\nscope: source.tsx\ncontexts:\n  main:\n    - include: directives\n    - include: statements\n    - include: shebang\n  comment:\n    - match: /\\*\\*(?!/)\n      captures:\n        0: punctuation.definition.comment.tsx\n      push:\n        - meta_scope: comment.block.documentation.tsx\n        - match: \\*/\n          captures:\n            0: punctuation.definition.comment.tsx\n          pop: true\n        - include: docblock\n    - match: (/\\*)(?:\\s*((@)internal)(?=\\s|(\\*/)))?\n      captures:\n        1: punctuation.definition.comment.tsx\n        2: storage.type.internaldeclaration.tsx\n        3: punctuation.decorator.internaldeclaration.tsx\n      push:\n        - meta_scope: comment.block.tsx\n        - match: \\*/\n          captures:\n            0: punctuation.definition.comment.tsx\n          pop: true\n    - match: '(^[ \\t]+)?((//)(?:\\s*((@)internal)(?=\\s|$))?)'\n      captures:\n        1: punctuation.whitespace.comment.leading.tsx\n        2: comment.line.double-slash.tsx\n        3: punctuation.definition.comment.tsx\n        4: storage.type.internaldeclaration.tsx\n        5: punctuation.decorator.internaldeclaration.tsx\n      push:\n        - meta_content_scope: comment.line.double-slash.tsx\n        - match: (?=$)\n          pop: true\n  access-modifier:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(abstract|declare|override|public|protected|private|readonly|static)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: storage.modifier.tsx\n  after-operator-block-as-object-literal:\n    - match: '(?<!\\+\\+|--)(?<=[:=(,\\[?+!>]|^await|[^\\._$[:alnum:]]await|^return|[^\\._$[:alnum:]]return|^yield|[^\\._$[:alnum:]]yield|^throw|[^\\._$[:alnum:]]throw|^in|[^\\._$[:alnum:]]in|^of|[^\\._$[:alnum:]]of|^typeof|[^\\._$[:alnum:]]typeof|&&|\\|\\||\\*)\\s*(\\{)'\n      captures:\n        1: punctuation.definition.block.tsx\n      push:\n        - meta_scope: meta.objectliteral.tsx\n        - match: '\\}'\n          captures:\n            0: punctuation.definition.block.tsx\n          pop: true\n        - include: object-member\n  array-binding-pattern:\n    - match: '(?:(\\.\\.\\.)\\s*)?(\\[)'\n      captures:\n        1: keyword.operator.rest.tsx\n        2: punctuation.definition.binding-pattern.array.tsx\n      push:\n        - match: '\\]'\n          captures:\n            0: punctuation.definition.binding-pattern.array.tsx\n          pop: true\n        - include: binding-element\n        - include: punctuation-comma\n  array-binding-pattern-const:\n    - match: '(?:(\\.\\.\\.)\\s*)?(\\[)'\n      captures:\n        1: keyword.operator.rest.tsx\n        2: punctuation.definition.binding-pattern.array.tsx\n      push:\n        - match: '\\]'\n          captures:\n            0: punctuation.definition.binding-pattern.array.tsx\n          pop: true\n        - include: binding-element-const\n        - include: punctuation-comma\n  array-literal:\n    - match: '\\s*(\\[)'\n      captures:\n        1: meta.brace.square.tsx\n      push:\n        - meta_scope: meta.array.literal.tsx\n        - match: '\\]'\n          captures:\n            0: meta.brace.square.tsx\n          pop: true\n        - include: expression\n        - include: punctuation-comma\n  arrow-function:\n    - match: '(?:(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(\\basync)\\s+)?([_$[:alpha:]][_$[:alnum:]]*)\\s*(?==>)'\n      scope: meta.arrow.tsx\n      captures:\n        1: storage.modifier.async.tsx\n        2: variable.parameter.tsx\n    - match: |-\n        (?x) (?:\n          (?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(\\basync)\n        )? ((?<![})!\\]])\\s*\n          (?=\n            # sure shot arrow functions even if => is on new line\n        (\n          (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n          [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n          (\n            ([)]\\s*:) |                                                                                       # ():\n            ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:)                                                                  # [(]param: | [(]...param:\n          )\n        ) |\n        (\n          [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>]                                                              # < typeparam extends\n        ) |\n        # arrow function possible to detect only with => on same line\n        (\n          (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?                                                                                 # typeparameters\n          \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\)   # parameters\n          (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)?                                                                        # return type\n          \\s*=>                                                                                               # arrow operator\n        )\n          )\n        )\n      captures:\n        1: storage.modifier.async.tsx\n      push:\n        - meta_scope: meta.arrow.tsx\n        - match: '(?==>|\\{|(^\\s*(export|function|class|interface|let|var|const|import|enum|namespace|module|type|abstract|declare)\\s+))'\n          pop: true\n        - include: comment\n        - include: type-parameters\n        - include: function-parameters\n        - include: arrow-return-type\n        - include: possibly-arrow-return-type\n    - match: \"=>\"\n      captures:\n        0: storage.type.function.arrow.tsx\n      push:\n        - meta_scope: meta.arrow.tsx\n        - match: '((?<=\\}|\\S)(?<!=>)|((?!\\{)(?=\\S)))(?!\\/[\\/\\*])'\n          pop: true\n        - include: single-line-comment-consuming-line-ending\n        - include: decl-block\n        - include: expression\n  arrow-return-type:\n    - match: (?<=\\))\\s*(:)\n      captures:\n        1: keyword.operator.type.annotation.tsx\n      push:\n        - meta_scope: meta.return.type.arrow.tsx\n        - match: '(?==>|\\{|(^\\s*(export|function|class|interface|let|var|const|import|enum|namespace|module|type|abstract|declare)\\s+))'\n          pop: true\n        - include: arrow-return-type-body\n  arrow-return-type-body:\n    - match: '(?<=[:])(?=\\s*\\{)'\n      push:\n        - match: '(?<=\\})'\n          pop: true\n        - include: type-object\n    - include: type-predicate-operator\n    - include: type\n  async-modifier:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(async)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: storage.modifier.async.tsx\n  binding-element:\n    - include: comment\n    - include: string\n    - include: numeric-literal\n    - include: regex\n    - include: object-binding-pattern\n    - include: array-binding-pattern\n    - include: destructuring-variable-rest\n    - include: variable-initializer\n  binding-element-const:\n    - include: comment\n    - include: string\n    - include: numeric-literal\n    - include: regex\n    - include: object-binding-pattern-const\n    - include: array-binding-pattern-const\n    - include: destructuring-variable-rest-const\n    - include: variable-initializer\n  boolean-literal:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))true(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: constant.language.boolean.true.tsx\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))false(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: constant.language.boolean.false.tsx\n  brackets:\n    - match: \"{\"\n      push:\n        - match: '}|(?=\\*/)'\n          pop: true\n        - include: brackets\n    - match: '\\['\n      push:\n        - match: '\\]|(?=\\*/)'\n          pop: true\n        - include: brackets\n  cast:\n    - include: jsx\n  class-declaration:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?\\b(?:(abstract)\\s+)?\\b(class)\\b(?=\\s+|/[/*])'\n      captures:\n        1: keyword.control.export.tsx\n        2: storage.modifier.tsx\n        3: storage.modifier.tsx\n        4: storage.type.class.tsx\n      push:\n        - meta_scope: meta.class.tsx\n        - match: '(?<=\\})'\n          pop: true\n        - include: class-declaration-or-expression-patterns\n  class-declaration-or-expression-patterns:\n    - include: comment\n    - include: class-or-interface-heritage\n    - match: \"[_$[:alpha:]][_$[:alnum:]]*\"\n      captures:\n        0: entity.name.type.class.tsx\n    - include: type-parameters\n    - include: class-or-interface-body\n  class-expression:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(abstract)\\s+)?(class)\\b(?=\\s+|[<{]|\\/[\\/*])'\n      captures:\n        1: storage.modifier.tsx\n        2: storage.type.class.tsx\n      push:\n        - meta_scope: meta.class.tsx\n        - match: '(?<=\\})'\n          pop: true\n        - include: class-declaration-or-expression-patterns\n  class-or-interface-body:\n    - match: '\\{'\n      captures:\n        0: punctuation.definition.block.tsx\n      push:\n        - match: '\\}'\n          captures:\n            0: punctuation.definition.block.tsx\n          pop: true\n        - include: comment\n        - include: decorator\n        - match: (?<=:)\\s*\n          push:\n            - match: '(?=\\s|[;),}\\]:\\-\\+]|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))'\n              pop: true\n            - include: expression\n        - include: method-declaration\n        - include: indexer-declaration\n        - include: field-declaration\n        - include: string\n        - include: type-annotation\n        - include: variable-initializer\n        - include: access-modifier\n        - include: property-accessor\n        - include: async-modifier\n        - include: after-operator-block-as-object-literal\n        - include: decl-block\n        - include: expression\n        - include: punctuation-comma\n        - include: punctuation-semicolon\n  class-or-interface-heritage:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:\\b(extends|implements)\\b)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      captures:\n        1: storage.modifier.tsx\n      push:\n        - match: '(?=\\{)'\n          pop: true\n        - include: comment\n        - include: class-or-interface-heritage\n        - include: type-parameters\n        - include: expressionWithoutIdentifiers\n        - match: '([_$[:alpha:]][_$[:alnum:]]*)\\s*(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))(?=\\s*[_$[:alpha:]][_$[:alnum:]]*(\\s*\\??\\.\\s*[_$[:alpha:]][_$[:alnum:]]*)*\\s*)'\n          captures:\n            1: entity.name.type.module.tsx\n            2: punctuation.accessor.tsx\n            3: punctuation.accessor.optional.tsx\n        - match: \"([_$[:alpha:]][_$[:alnum:]]*)\"\n          captures:\n            1: entity.other.inherited-class.tsx\n        - include: expressionPunctuations\n  control-statement:\n    - include: switch-statement\n    - include: for-loop\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(catch|finally|throw|try)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: keyword.control.trycatch.tsx\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(break|continue|goto)\\s+([_$[:alpha:]][_$[:alnum:]]*)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      captures:\n        1: keyword.control.loop.tsx\n        2: entity.name.label.tsx\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(break|continue|do|goto|while)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: keyword.control.loop.tsx\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(return)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      captures:\n        0: keyword.control.flow.tsx\n      push:\n        - match: '(?=[;}]|$|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))'\n          pop: true\n        - include: expression\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(case|default|switch)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: keyword.control.switch.tsx\n    - include: if-statement\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(else|if)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: keyword.control.conditional.tsx\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(with)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: keyword.control.with.tsx\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(package)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: keyword.control.tsx\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(debugger)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: keyword.other.debugger.tsx\n  decl-block:\n    - match: '\\{'\n      captures:\n        0: punctuation.definition.block.tsx\n      push:\n        - meta_scope: meta.block.tsx\n        - match: '\\}'\n          captures:\n            0: punctuation.definition.block.tsx\n          pop: true\n        - include: statements\n  declaration:\n    - include: decorator\n    - include: var-expr\n    - include: function-declaration\n    - include: class-declaration\n    - include: interface-declaration\n    - include: enum-declaration\n    - include: namespace-declaration\n    - include: type-alias-declaration\n    - include: import-equals-declaration\n    - include: import-declaration\n    - include: export-declaration\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(declare|export)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: storage.modifier.tsx\n  decorator:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))\\@'\n      captures:\n        0: punctuation.decorator.tsx\n      push:\n        - meta_scope: meta.decorator.tsx\n        - match: (?=\\s)\n          pop: true\n        - include: expression\n  destructuring-const:\n    - match: '(?<!=|:|^of|[^\\._$[:alnum:]]of|^in|[^\\._$[:alnum:]]in)\\s*(?=\\{)'\n      push:\n        - meta_scope: meta.object-binding-pattern-variable.tsx\n        - match: '(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+))'\n          pop: true\n        - include: object-binding-pattern-const\n        - include: type-annotation\n        - include: comment\n    - match: '(?<!=|:|^of|[^\\._$[:alnum:]]of|^in|[^\\._$[:alnum:]]in)\\s*(?=\\[)'\n      push:\n        - meta_scope: meta.array-binding-pattern-variable.tsx\n        - match: '(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+))'\n          pop: true\n        - include: array-binding-pattern-const\n        - include: type-annotation\n        - include: comment\n  destructuring-parameter:\n    - match: '(?<!=|:)\\s*(?:(\\.\\.\\.)\\s*)?(\\{)'\n      captures:\n        1: keyword.operator.rest.tsx\n        2: punctuation.definition.binding-pattern.object.tsx\n      push:\n        - meta_scope: meta.parameter.object-binding-pattern.tsx\n        - match: '\\}'\n          captures:\n            0: punctuation.definition.binding-pattern.object.tsx\n          pop: true\n        - include: parameter-object-binding-element\n    - match: '(?<!=|:)\\s*(?:(\\.\\.\\.)\\s*)?(\\[)'\n      captures:\n        1: keyword.operator.rest.tsx\n        2: punctuation.definition.binding-pattern.array.tsx\n      push:\n        - meta_scope: meta.paramter.array-binding-pattern.tsx\n        - match: '\\]'\n          captures:\n            0: punctuation.definition.binding-pattern.array.tsx\n          pop: true\n        - include: parameter-binding-element\n        - include: punctuation-comma\n  destructuring-parameter-rest:\n    - match: '(?:(\\.\\.\\.)\\s*)?([_$[:alpha:]][_$[:alnum:]]*)'\n      captures:\n        1: keyword.operator.rest.tsx\n        2: variable.parameter.tsx\n  destructuring-variable:\n    - match: '(?<!=|:|^of|[^\\._$[:alnum:]]of|^in|[^\\._$[:alnum:]]in)\\s*(?=\\{)'\n      push:\n        - meta_scope: meta.object-binding-pattern-variable.tsx\n        - match: '(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+))'\n          pop: true\n        - include: object-binding-pattern\n        - include: type-annotation\n        - include: comment\n    - match: '(?<!=|:|^of|[^\\._$[:alnum:]]of|^in|[^\\._$[:alnum:]]in)\\s*(?=\\[)'\n      push:\n        - meta_scope: meta.array-binding-pattern-variable.tsx\n        - match: '(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+))'\n          pop: true\n        - include: array-binding-pattern\n        - include: type-annotation\n        - include: comment\n  destructuring-variable-rest:\n    - match: '(?:(\\.\\.\\.)\\s*)?([_$[:alpha:]][_$[:alnum:]]*)'\n      captures:\n        1: keyword.operator.rest.tsx\n        2: meta.definition.variable.tsx variable.other.readwrite.tsx\n  destructuring-variable-rest-const:\n    - match: '(?:(\\.\\.\\.)\\s*)?([_$[:alpha:]][_$[:alnum:]]*)'\n      captures:\n        1: keyword.operator.rest.tsx\n        2: meta.definition.variable.tsx variable.other.constant.tsx\n  directives:\n    - match: '^(///)\\s*(?=<(reference|amd-dependency|amd-module)(\\s+(path|types|no-default-lib|lib|name)\\s*=\\s*((\\''([^\\''\\\\]|\\\\.)*\\'')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`)))+\\s*/>\\s*$)'\n      captures:\n        1: punctuation.definition.comment.tsx\n      push:\n        - meta_scope: comment.line.triple-slash.directive.tsx\n        - match: (?=$)\n          pop: true\n        - match: (<)(reference|amd-dependency|amd-module)\n          captures:\n            1: punctuation.definition.tag.directive.tsx\n            2: entity.name.tag.directive.tsx\n          push:\n            - meta_scope: meta.tag.tsx\n            - match: />\n              captures:\n                0: punctuation.definition.tag.directive.tsx\n              pop: true\n            - match: path|types|no-default-lib|lib|name\n              scope: entity.other.attribute-name.directive.tsx\n            - match: \"=\"\n              scope: keyword.operator.assignment.tsx\n            - include: string\n  docblock:\n    - match: |-\n        (?x)\n        ((@)(?:access|api))\n        \\s+\n        (private|protected|public)\n        \\b\n      captures:\n        1: storage.type.class.jsdoc\n        2: punctuation.definition.block.tag.jsdoc\n        3: constant.language.access-type.jsdoc\n    - match: |-\n        (?x)\n        ((@)author)\n        \\s+\n        (\n          [^@\\s<>*/]\n          (?:[^@<>*/]|\\*[^/])*\n        )\n        (?:\n          \\s*\n          (<)\n          ([^>\\s]+)\n          (>)\n        )?\n      captures:\n        1: storage.type.class.jsdoc\n        2: punctuation.definition.block.tag.jsdoc\n        3: entity.name.type.instance.jsdoc\n        4: punctuation.definition.bracket.angle.begin.jsdoc\n        5: constant.other.email.link.underline.jsdoc\n        6: punctuation.definition.bracket.angle.end.jsdoc\n    - match: |-\n        (?x)\n        ((@)borrows) \\s+\n        ((?:[^@\\s*/]|\\*[^/])+)    # <that namepath>\n        \\s+ (as) \\s+              # as\n        ((?:[^@\\s*/]|\\*[^/])+)    # <this namepath>\n      captures:\n        1: storage.type.class.jsdoc\n        2: punctuation.definition.block.tag.jsdoc\n        3: entity.name.type.instance.jsdoc\n        4: keyword.operator.control.jsdoc\n        5: entity.name.type.instance.jsdoc\n    - match: ((@)example)\\s+\n      captures:\n        1: storage.type.class.jsdoc\n        2: punctuation.definition.block.tag.jsdoc\n      push:\n        - meta_scope: meta.example.jsdoc\n        - match: (?=@|\\*/)\n          pop: true\n        - match: ^\\s\\*\\s+\n        - match: \\G(<)caption(>)\n          captures:\n            0: entity.name.tag.inline.jsdoc\n            1: punctuation.definition.bracket.angle.begin.jsdoc\n            2: punctuation.definition.bracket.angle.end.jsdoc\n          push:\n            - meta_content_scope: constant.other.description.jsdoc\n            - match: (</)caption(>)|(?=\\*/)\n              captures:\n                0: entity.name.tag.inline.jsdoc\n                1: punctuation.definition.bracket.angle.begin.jsdoc\n                2: punctuation.definition.bracket.angle.end.jsdoc\n              pop: true\n        - match: '[^\\s@*](?:[^*]|\\*[^/])*'\n          captures:\n            0: source.embedded.tsx\n    - match: (?x) ((@)kind) \\s+ (class|constant|event|external|file|function|member|mixin|module|namespace|typedef) \\b\n      captures:\n        1: storage.type.class.jsdoc\n        2: punctuation.definition.block.tag.jsdoc\n        3: constant.language.symbol-type.jsdoc\n    - match: |-\n        (?x)\n        ((@)see)\n        \\s+\n        (?:\n          # URL\n          (\n            (?=https?://)\n            (?:[^\\s*]|\\*[^/])+\n          )\n          |\n          # JSDoc namepath\n          (\n            (?!\n              # Avoid matching bare URIs (also acceptable as links)\n              https?://\n              |\n              # Avoid matching {@inline tags}; we match those below\n              (?:\\[[^\\[\\]]*\\])? # Possible description [preceding]{@tag}\n              {@(?:link|linkcode|linkplain|tutorial)\\b\n            )\n            # Matched namepath\n            (?:[^@\\s*/]|\\*[^/])+\n          )\n        )\n      captures:\n        1: storage.type.class.jsdoc\n        2: punctuation.definition.block.tag.jsdoc\n        3: variable.other.link.underline.jsdoc\n        4: entity.name.type.instance.jsdoc\n    - match: |-\n        (?x)\n        ((@)template)\n        \\s+\n        # One or more valid identifiers\n        (\n          [A-Za-z_$]         # First character: non-numeric word character\n          [\\w$.\\[\\]]*        # Rest of identifier\n          (?:                # Possible list of additional identifiers\n            \\s* , \\s*\n            [A-Za-z_$]\n            [\\w$.\\[\\]]*\n          )*\n        )\n      captures:\n        1: storage.type.class.jsdoc\n        2: punctuation.definition.block.tag.jsdoc\n        3: variable.other.jsdoc\n    - match: |-\n        (?x)\n        (\n          (@)\n          (?:arg|argument|const|constant|member|namespace|param|var)\n        )\n        \\s+\n        (\n          [A-Za-z_$]\n          [\\w$.\\[\\]]*\n        )\n      captures:\n        1: storage.type.class.jsdoc\n        2: punctuation.definition.block.tag.jsdoc\n        3: variable.other.jsdoc\n    - match: '((@)typedef)\\s+(?={)'\n      captures:\n        1: storage.type.class.jsdoc\n        2: punctuation.definition.block.tag.jsdoc\n      push:\n        - match: '(?=\\s|\\*/|[^{}\\[\\]A-Za-z_$])'\n          pop: true\n        - include: jsdoctype\n        - match: '(?:[^@\\s*/]|\\*[^/])+'\n          scope: entity.name.type.instance.jsdoc\n    - match: '((@)(?:arg|argument|const|constant|member|namespace|param|prop|property|var))\\s+(?={)'\n      captures:\n        1: storage.type.class.jsdoc\n        2: punctuation.definition.block.tag.jsdoc\n      push:\n        - match: '(?=\\s|\\*/|[^{}\\[\\]A-Za-z_$])'\n          pop: true\n        - include: jsdoctype\n        - match: '([A-Za-z_$][\\w$.\\[\\]]*)'\n          scope: variable.other.jsdoc\n        - match: |-\n            (?x)\n            (\\[)\\s*\n            [\\w$]+\n            (?:\n              (?:\\[\\])?                                        # Foo[ ].bar properties within an array\n              \\.                                                # Foo.Bar namespaced parameter\n              [\\w$]+\n            )*\n            (?:\n              \\s*\n              (=)                                                # [foo=bar] Default parameter value\n              \\s*\n              (\n                # The inner regexes are to stop the match early at */ and to not stop at escaped quotes\n                (?>\n                  \"(?:(?:\\*(?!/))|(?:\\\\(?!\"))|[^*\\\\])*?\" |                      # [foo=\"bar\"] Double-quoted\n                  '(?:(?:\\*(?!/))|(?:\\\\(?!'))|[^*\\\\])*?' |                      # [foo='bar'] Single-quoted\n                  \\[ (?:(?:\\*(?!/))|[^*])*? \\] |                                # [foo=[1,2]] Array literal\n                  (?:(?:\\*(?!/))|\\s(?!\\s*\\])|\\[.*?(?:\\]|(?=\\*/))|[^*\\s\\[\\]])*   # Everything else\n                )*\n              )\n            )?\n            \\s*(?:(\\])((?:[^*\\s]|\\*[^\\s/])+)?|(?=\\*/))\n          scope: variable.other.jsdoc\n          captures:\n            1: punctuation.definition.optional-value.begin.bracket.square.jsdoc\n            2: keyword.operator.assignment.jsdoc\n            3: source.embedded.tsx\n            4: punctuation.definition.optional-value.end.bracket.square.jsdoc\n            5: invalid.illegal.syntax.jsdoc\n    - match: |-\n        (?x)\n        (\n          (@)\n          (?:define|enum|exception|export|extends|lends|implements|modifies\n          |namespace|private|protected|returns?|suppress|this|throws|type\n          |yields?)\n        )\n        \\s+(?={)\n      captures:\n        1: storage.type.class.jsdoc\n        2: punctuation.definition.block.tag.jsdoc\n      push:\n        - match: '(?=\\s|\\*/|[^{}\\[\\]A-Za-z_$])'\n          pop: true\n        - include: jsdoctype\n    - match: |-\n        (?x)\n        (\n          (@)\n          (?:alias|augments|callback|constructs|emits|event|fires|exports?\n          |extends|external|function|func|host|lends|listens|interface|memberof!?\n          |method|module|mixes|mixin|name|requires|see|this|typedef|uses)\n        )\n        \\s+\n        (\n          (?:\n            [^{}@\\s*] | \\*[^/]\n          )+\n        )\n      captures:\n        1: storage.type.class.jsdoc\n        2: punctuation.definition.block.tag.jsdoc\n        3: entity.name.type.instance.jsdoc\n    - match: '((@)(?:default(?:value)?|license|version))\\s+(([''''\"]))'\n      captures:\n        1: storage.type.class.jsdoc\n        2: punctuation.definition.block.tag.jsdoc\n        3: variable.other.jsdoc\n        4: punctuation.definition.string.begin.jsdoc\n      push:\n        - meta_content_scope: variable.other.jsdoc\n        - match: (\\3)|(?=$|\\*/)\n          captures:\n            0: variable.other.jsdoc\n            1: punctuation.definition.string.end.jsdoc\n          pop: true\n    - match: '((@)(?:default(?:value)?|license|tutorial|variation|version))\\s+([^\\s*]+)'\n      captures:\n        1: storage.type.class.jsdoc\n        2: punctuation.definition.block.tag.jsdoc\n        3: variable.other.jsdoc\n    - match: '(?x) (@) (?:abstract|access|alias|api|arg|argument|async|attribute|augments|author|beta|borrows|bubbles |callback|chainable|class|classdesc|code|config|const|constant|constructor|constructs|copyright |default|defaultvalue|define|deprecated|desc|description|dict|emits|enum|event|example|exception |exports?|extends|extension(?:_?for)?|external|externs|file|fileoverview|final|fires|for|func |function|generator|global|hideconstructor|host|ignore|implements|implicitCast|inherit[Dd]oc |inner|instance|interface|internal|kind|lends|license|listens|main|member|memberof!?|method |mixes|mixins?|modifies|module|name|namespace|noalias|nocollapse|nocompile|nosideeffects |override|overview|package|param|polymer(?:Behavior)?|preserve|private|prop|property|protected |public|read[Oo]nly|record|require[ds]|returns?|see|since|static|struct|submodule|summary |suppress|template|this|throws|todo|tutorial|type|typedef|unrestricted|uses|var|variation |version|virtual|writeOnce|yields?) \\b'\n      scope: storage.type.class.jsdoc\n      captures:\n        1: punctuation.definition.block.tag.jsdoc\n    - include: inline-tags\n    - match: '((@)(?:[_$[:alpha:]][_$[:alnum:]]*))(?=\\s+)'\n      captures:\n        1: storage.type.class.jsdoc\n        2: punctuation.definition.block.tag.jsdoc\n  enum-declaration:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?(?:\\b(const)\\s+)?\\b(enum)\\s+([_$[:alpha:]][_$[:alnum:]]*)'\n      captures:\n        1: keyword.control.export.tsx\n        2: storage.modifier.tsx\n        3: storage.modifier.tsx\n        4: storage.type.enum.tsx\n        5: entity.name.type.enum.tsx\n      push:\n        - meta_scope: meta.enum.declaration.tsx\n        - match: '(?<=\\})'\n          pop: true\n        - include: comment\n        - match: '\\{'\n          captures:\n            0: punctuation.definition.block.tsx\n          push:\n            - match: '\\}'\n              captures:\n                0: punctuation.definition.block.tsx\n              pop: true\n            - include: comment\n            - match: \"([_$[:alpha:]][_$[:alnum:]]*)\"\n              captures:\n                0: variable.other.enummember.tsx\n              push:\n                - match: '(?=,|\\}|$)'\n                  pop: true\n                - include: comment\n                - include: variable-initializer\n            - match: '(?=((\\''([^\\''\\\\]|\\\\.)*\\'')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`)|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])+\\])))'\n              push:\n                - match: '(?=,|\\}|$)'\n                  pop: true\n                - include: string\n                - include: array-literal\n                - include: comment\n                - include: variable-initializer\n            - include: punctuation-comma\n  export-declaration:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(export)\\s+(as)\\s+(namespace)\\s+([_$[:alpha:]][_$[:alnum:]]*)'\n      captures:\n        1: keyword.control.export.tsx\n        2: keyword.control.as.tsx\n        3: storage.type.namespace.tsx\n        4: entity.name.type.module.tsx\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(export)(?:\\s+(type))?(?:(?:\\s*(=))|(?:\\s+(default)(?=\\s+)))'\n      captures:\n        1: keyword.control.export.tsx\n        2: keyword.control.type.tsx\n        3: keyword.operator.assignment.tsx\n        4: keyword.control.default.tsx\n      push:\n        - meta_scope: meta.export.default.tsx\n        - match: (?=$|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))\n          pop: true\n        - include: interface-declaration\n        - include: expression\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(export)(?:\\s+(type))?\\b(?!(\\$)|(\\s*:))((?=\\s*[\\{*])|((?=\\s*[_$[:alpha:]][_$[:alnum:]]*(\\s|,))(?!\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b)))'\n      captures:\n        1: keyword.control.export.tsx\n        2: keyword.control.type.tsx\n      push:\n        - meta_scope: meta.export.tsx\n        - match: (?=$|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))\n          pop: true\n        - include: import-export-declaration\n  expression:\n    - include: expressionWithoutIdentifiers\n    - include: identifiers\n    - include: expressionPunctuations\n  expression-inside-possibly-arrow-parens:\n    - include: expressionWithoutIdentifiers\n    - include: comment\n    - include: string\n    - include: decorator\n    - include: destructuring-parameter\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(override|public|protected|private|readonly)\\s+(?=(override|public|protected|private|readonly)\\s+)'\n      captures:\n        1: storage.modifier.tsx\n    - match: |-\n        (?x)(?:(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(override|public|private|protected|readonly)\\s+)?(?:(\\.\\.\\.)\\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))\\s*(\\??)(?=\\s*\n        # function assignment |\n        (=\\s*(\n          ((async\\s+)?(\n            (function\\s*[(<*]) |\n            (function\\s+) |\n            ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n          )) |\n          ((async\\s*)?(\n            ((<\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n            # sure shot arrow functions even if => is on new line\n        (\n          (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n          [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n          (\n            ([)]\\s*:) |                                                                                       # ():\n            ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:)                                                                  # [(]param: | [(]...param:\n          )\n        ) |\n        (\n          [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>]                                                              # < typeparam extends\n        ) |\n        # arrow function possible to detect only with => on same line\n        (\n          (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?                                                                                 # typeparameters\n          \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\)   # parameters\n          (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)?                                                                        # return type\n          \\s*=>                                                                                               # arrow operator\n        )\n          ))\n        )) |\n        # typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n        (:\\s*(\n          (<) |\n          ([(]\\s*(\n            ([)]) |\n            (\\.\\.\\.) |\n            ([_$[:alnum:]]+\\s*(\n              ([:,?=])|\n              ([)]\\s*=>)\n            ))\n          ))\n        )) |\n        (:\\s*(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))Function(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))) |\n        (:\\s*((<\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*))))))) |\n        (:\\s*(=>|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n          ((async\\s+)?(\n            (function\\s*[(<*]) |\n            (function\\s+) |\n            ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n          )) |\n          ((async\\s*)?(\n            ((<\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n            # sure shot arrow functions even if => is on new line\n        (\n          (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n          [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n          (\n            ([)]\\s*:) |                                                                                       # ():\n            ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:)                                                                  # [(]param: | [(]...param:\n          )\n        ) |\n        (\n          [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>]                                                              # < typeparam extends\n        ) |\n        # arrow function possible to detect only with => on same line\n        (\n          (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?                                                                                 # typeparameters\n          \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\)   # parameters\n          (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)?                                                                        # return type\n          \\s*=>                                                                                               # arrow operator\n        )\n          ))\n        )))\n      captures:\n        1: storage.modifier.tsx\n        2: keyword.operator.rest.tsx\n        3: entity.name.function.tsx variable.language.this.tsx\n        4: entity.name.function.tsx\n        5: keyword.operator.optional.tsx\n    - match: '(?x)(?:(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(override|public|private|protected|readonly)\\s+)?(?:(\\.\\.\\.)\\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))\\s*(\\??)(?=\\s*[:,]|$)'\n      captures:\n        1: storage.modifier.tsx\n        2: keyword.operator.rest.tsx\n        3: variable.parameter.tsx variable.language.this.tsx\n        4: variable.parameter.tsx\n        5: keyword.operator.optional.tsx\n    - include: type-annotation\n    - include: variable-initializer\n    - match: \",\"\n      scope: punctuation.separator.parameter.tsx\n    - include: identifiers\n    - include: expressionPunctuations\n  expression-operators:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(await)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: keyword.control.flow.tsx\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(yield)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))(?=\\s*\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*\\*)'\n      captures:\n        1: keyword.control.flow.tsx\n      push:\n        - match: \\*\n          captures:\n            0: keyword.generator.asterisk.tsx\n          pop: true\n        - include: comment\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(yield)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))(?:\\s*(\\*))?'\n      captures:\n        1: keyword.control.flow.tsx\n        2: keyword.generator.asterisk.tsx\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))delete(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: keyword.operator.expression.delete.tsx\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))in(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))(?!\\()'\n      scope: keyword.operator.expression.in.tsx\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))of(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))(?!\\()'\n      scope: keyword.operator.expression.of.tsx\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))instanceof(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: keyword.operator.expression.instanceof.tsx\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))new(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: keyword.operator.new.tsx\n    - include: typeof-operator\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))void(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: keyword.operator.expression.void.tsx\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(as)\\s+(const)(?=\\s*($|[;,:})\\]]))'\n      captures:\n        1: keyword.control.as.tsx\n        2: storage.modifier.tsx\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(as)\\s+'\n      captures:\n        1: keyword.control.as.tsx\n      push:\n        - match: '(?=^|[;),}\\]:?\\-\\+\\>]|\\|\\||\\&\\&|\\!\\=\\=|$|((?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(as)\\s+)|(\\s+\\<))'\n          pop: true\n        - include: type\n    - match: \\.\\.\\.\n      scope: keyword.operator.spread.tsx\n    - match: \\*=|(?<!\\()/=|%=|\\+=|\\-=\n      scope: keyword.operator.assignment.compound.tsx\n    - match: \\&=|\\^=|<<=|>>=|>>>=|\\|=\n      scope: keyword.operator.assignment.compound.bitwise.tsx\n    - match: \"<<|>>>|>>\"\n      scope: keyword.operator.bitwise.shift.tsx\n    - match: \"===|!==|==|!=\"\n      scope: keyword.operator.comparison.tsx\n    - match: <=|>=|<>|<|>\n      scope: keyword.operator.relational.tsx\n    - match: '(?<=[_$[:alnum:]])(\\!)\\s*(?:(/=)|(?:(/)(?![/*])))'\n      captures:\n        1: keyword.operator.logical.tsx\n        2: keyword.operator.assignment.compound.tsx\n        3: keyword.operator.arithmetic.tsx\n    - match: \\!|&&|\\|\\||\\?\\?\n      scope: keyword.operator.logical.tsx\n    - match: \\&|~|\\^|\\|\n      scope: keyword.operator.bitwise.tsx\n    - match: \\=\n      scope: keyword.operator.assignment.tsx\n    - match: \"--\"\n      scope: keyword.operator.decrement.tsx\n    - match: \\+\\+\n      scope: keyword.operator.increment.tsx\n    - match: '%|\\*|/|-|\\+'\n      scope: keyword.operator.arithmetic.tsx\n    - match: '(?<=[_$[:alnum:])\\]])\\s*(?=(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)+(?:(/=)|(?:(/)(?![/*]))))'\n      push:\n        - match: '(?:(/=)|(?:(/)(?!\\*([^\\*]|(\\*[^\\/]))*\\*\\/)))'\n          captures:\n            1: keyword.operator.assignment.compound.tsx\n            2: keyword.operator.arithmetic.tsx\n          pop: true\n        - include: comment\n    - match: '(?<=[_$[:alnum:])\\]])\\s*(?:(/=)|(?:(/)(?![/*])))'\n      captures:\n        1: keyword.operator.assignment.compound.tsx\n        2: keyword.operator.arithmetic.tsx\n  expressionPunctuations:\n    - include: punctuation-comma\n    - include: punctuation-accessor\n  expressionWithoutIdentifiers:\n    - include: jsx\n    - include: string\n    - include: regex\n    - include: comment\n    - include: function-expression\n    - include: class-expression\n    - include: arrow-function\n    - include: paren-expression-possibly-arrow\n    - include: cast\n    - include: ternary-expression\n    - include: new-expr\n    - include: instanceof-expr\n    - include: object-literal\n    - include: expression-operators\n    - include: function-call\n    - include: literal\n    - include: support-objects\n    - include: paren-expression\n  field-declaration:\n    - match: |-\n        (?x)(?<!\\()(?:(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(readonly)\\s+)?(?=\\s*((\\b(?<!\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\b(?!\\$))|(\\b(?<!\\$)0(?:b|B)[01][01_]*(n)?\\b(?!\\$))|(\\b(?<!\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\b(?!\\$))|((?<!\\$)(?:\n          (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)| # 1.1E+3\n          (?:\\b[0-9][0-9_]*(\\.)[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # 1.E+3\n          (?:\\B(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # .1E+3\n          (?:\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|                 # 1E+3\n          (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b)|                      # 1.1\n          (?:\\b[0-9][0-9_]*(\\.)(n)?\\B)|                                  # 1.\n          (?:\\B(\\.)[0-9][0-9_]*(n)?\\b)|                                  # .1\n          (?:\\b[0-9][0-9_]*(n)?\\b(?!\\.))                                 # 1\n        )(?!\\$))|(\\#?[_$[:alpha:]][_$[:alnum:]]*)|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`)|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])+\\]))\\s*(?:(?:(\\?)|(\\!))\\s*)?(=|:|;|,|\\}|$))\n      captures:\n        1: storage.modifier.tsx\n      push:\n        - meta_scope: meta.field.declaration.tsx\n        - match: |-\n            (?x)(?=\\}|;|,|$|(^(?!\\s*((\\b(?<!\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\b(?!\\$))|(\\b(?<!\\$)0(?:b|B)[01][01_]*(n)?\\b(?!\\$))|(\\b(?<!\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\b(?!\\$))|((?<!\\$)(?:\n              (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)| # 1.1E+3\n              (?:\\b[0-9][0-9_]*(\\.)[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # 1.E+3\n              (?:\\B(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # .1E+3\n              (?:\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|                 # 1E+3\n              (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b)|                      # 1.1\n              (?:\\b[0-9][0-9_]*(\\.)(n)?\\B)|                                  # 1.\n              (?:\\B(\\.)[0-9][0-9_]*(n)?\\b)|                                  # .1\n              (?:\\b[0-9][0-9_]*(n)?\\b(?!\\.))                                 # 1\n            )(?!\\$))|(\\#?[_$[:alpha:]][_$[:alnum:]]*)|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`)|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])+\\]))\\s*(?:(?:(\\?)|(\\!))\\s*)?(=|:|;|,|$))))|(?<=\\})\n          pop: true\n        - include: variable-initializer\n        - include: type-annotation\n        - include: string\n        - include: array-literal\n        - include: numeric-literal\n        - include: comment\n        - match: |-\n            (?x)(\\#?[_$[:alpha:]][_$[:alnum:]]*)(?:(\\?)|(\\!))?(?=\\s*\\s*\n            # function assignment |\n            (=\\s*(\n              ((async\\s+)?(\n                (function\\s*[(<*]) |\n                (function\\s+) |\n                ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n              )) |\n              ((async\\s*)?(\n                ((<\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n                # sure shot arrow functions even if => is on new line\n            (\n              (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n              [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n              (\n                ([)]\\s*:) |                                                                                       # ():\n                ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:)                                                                  # [(]param: | [(]...param:\n              )\n            ) |\n            (\n              [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>]                                                              # < typeparam extends\n            ) |\n            # arrow function possible to detect only with => on same line\n            (\n              (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?                                                                                 # typeparameters\n              \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\)   # parameters\n              (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)?                                                                        # return type\n              \\s*=>                                                                                               # arrow operator\n            )\n              ))\n            )) |\n            # typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n            (:\\s*(\n              (<) |\n              ([(]\\s*(\n                ([)]) |\n                (\\.\\.\\.) |\n                ([_$[:alnum:]]+\\s*(\n                  ([:,?=])|\n                  ([)]\\s*=>)\n                ))\n              ))\n            )) |\n            (:\\s*(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))Function(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))) |\n            (:\\s*((<\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*))))))) |\n            (:\\s*(=>|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n              ((async\\s+)?(\n                (function\\s*[(<*]) |\n                (function\\s+) |\n                ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n              )) |\n              ((async\\s*)?(\n                ((<\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n                # sure shot arrow functions even if => is on new line\n            (\n              (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n              [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n              (\n                ([)]\\s*:) |                                                                                       # ():\n                ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:)                                                                  # [(]param: | [(]...param:\n              )\n            ) |\n            (\n              [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>]                                                              # < typeparam extends\n            ) |\n            # arrow function possible to detect only with => on same line\n            (\n              (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?                                                                                 # typeparameters\n              \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\)   # parameters\n              (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)?                                                                        # return type\n              \\s*=>                                                                                               # arrow operator\n            )\n              ))\n            )))\n          captures:\n            1: meta.definition.property.tsx entity.name.function.tsx\n            2: keyword.operator.optional.tsx\n            3: keyword.operator.definiteassignment.tsx\n        - match: '\\#?[_$[:alpha:]][_$[:alnum:]]*'\n          scope: meta.definition.property.tsx variable.object.property.tsx\n        - match: \\?\n          scope: keyword.operator.optional.tsx\n        - match: \\!\n          scope: keyword.operator.definiteassignment.tsx\n  for-loop:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))for(?=((\\s+|(\\s*\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*))await)?\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)?(\\())'\n      captures:\n        0: keyword.control.loop.tsx\n      push:\n        - match: (?<=\\))\n          pop: true\n        - include: comment\n        - match: await\n          scope: keyword.control.loop.tsx\n        - match: \\(\n          captures:\n            0: meta.brace.round.tsx\n          push:\n            - match: \\)\n              captures:\n                0: meta.brace.round.tsx\n              pop: true\n            - include: var-expr\n            - include: expression\n            - include: punctuation-semicolon\n  function-body:\n    - include: comment\n    - include: type-parameters\n    - include: function-parameters\n    - include: return-type\n    - include: type-function-return-type\n    - include: decl-block\n    - match: \\*\n      scope: keyword.generator.asterisk.tsx\n  function-call:\n    - match: '(?=(((([_$[:alpha:]][_$[:alnum:]]*)(\\s*\\??\\.\\s*(\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\??\\.\\s*\\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\\)]))\\s*(?:(\\?\\.\\s*)|(\\!))?((<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\''([^\\''\\\\]|\\\\.)*\\'')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\''([^\\''\\\\]|\\\\.)*\\'')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))(([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\''([^\\''\\\\]|\\\\.)*\\'')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>)*(?<!=)\\>))*(?<!=)\\>)*(?<!=)>\\s*)?\\())'\n      push:\n        - match: '(?<=\\))(?!(((([_$[:alpha:]][_$[:alnum:]]*)(\\s*\\??\\.\\s*(\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\??\\.\\s*\\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\\)]))\\s*(?:(\\?\\.\\s*)|(\\!))?((<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\''([^\\''\\\\]|\\\\.)*\\'')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\''([^\\''\\\\]|\\\\.)*\\'')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))(([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\''([^\\''\\\\]|\\\\.)*\\'')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>)*(?<!=)\\>))*(?<!=)\\>)*(?<!=)>\\s*)?\\())'\n          pop: true\n        - match: '(?=(([_$[:alpha:]][_$[:alnum:]]*)(\\s*\\??\\.\\s*(\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\??\\.\\s*\\#?[_$[:alpha:]][_$[:alnum:]]*))'\n          push:\n            - meta_scope: meta.function-call.tsx\n            - match: '(?=\\s*(?:(\\?\\.\\s*)|(\\!))?((<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\''([^\\''\\\\]|\\\\.)*\\'')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\''([^\\''\\\\]|\\\\.)*\\'')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))(([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\''([^\\''\\\\]|\\\\.)*\\'')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>)*(?<!=)\\>))*(?<!=)\\>)*(?<!=)>\\s*)?\\())'\n              pop: true\n            - include: function-call-target\n        - include: comment\n        - include: function-call-optionals\n        - include: type-arguments\n        - include: paren-expression\n    - match: '(?=(((([_$[:alpha:]][_$[:alnum:]]*)(\\s*\\??\\.\\s*(\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\??\\.\\s*\\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\\)]))(<\\s*[\\{\\[\\(]\\s*$))'\n      push:\n        - match: '(?<=\\>)(?!(((([_$[:alpha:]][_$[:alnum:]]*)(\\s*\\??\\.\\s*(\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\??\\.\\s*\\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\\)]))(<\\s*[\\{\\[\\(]\\s*$))'\n          pop: true\n        - match: '(?=(([_$[:alpha:]][_$[:alnum:]]*)(\\s*\\??\\.\\s*(\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\??\\.\\s*\\#?[_$[:alpha:]][_$[:alnum:]]*))'\n          push:\n            - meta_scope: meta.function-call.tsx\n            - match: '(?=(<\\s*[\\{\\[\\(]\\s*$))'\n              pop: true\n            - include: function-call-target\n        - include: comment\n        - include: function-call-optionals\n        - include: type-arguments\n  function-call-optionals:\n    - match: \\?\\.\n      scope: meta.function-call.tsx punctuation.accessor.optional.tsx\n    - match: \\!\n      scope: meta.function-call.tsx keyword.operator.definiteassignment.tsx\n  function-call-target:\n    - include: support-function-call-identifiers\n    - match: '(\\#?[_$[:alpha:]][_$[:alnum:]]*)'\n      scope: entity.name.function.tsx\n  function-declaration:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?(?:(async)\\s+)?(function\\b)(?:\\s*(\\*))?(?:(?:\\s+|(?<=\\*))([_$[:alpha:]][_$[:alnum:]]*))?\\s*'\n      captures:\n        1: keyword.control.export.tsx\n        2: storage.modifier.tsx\n        3: storage.modifier.async.tsx\n        4: storage.type.function.tsx\n        5: keyword.generator.asterisk.tsx\n        6: meta.definition.function.tsx entity.name.function.tsx\n      push:\n        - meta_scope: meta.function.tsx\n        - match: '(?=;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))|(?<=\\})'\n          pop: true\n        - include: function-name\n        - include: function-body\n  function-expression:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(async)\\s+)?(function\\b)(?:\\s*(\\*))?(?:(?:\\s+|(?<=\\*))([_$[:alpha:]][_$[:alnum:]]*))?\\s*'\n      captures:\n        1: storage.modifier.async.tsx\n        2: storage.type.function.tsx\n        3: keyword.generator.asterisk.tsx\n        4: meta.definition.function.tsx entity.name.function.tsx\n      push:\n        - meta_scope: meta.function.expression.tsx\n        - match: '(?=;)|(?<=\\})'\n          pop: true\n        - include: function-name\n        - include: single-line-comment-consuming-line-ending\n        - include: function-body\n  function-name:\n    - match: \"[_$[:alpha:]][_$[:alnum:]]*\"\n      scope: meta.definition.function.tsx entity.name.function.tsx\n  function-parameters:\n    - match: \\(\n      captures:\n        0: punctuation.definition.parameters.begin.tsx\n      push:\n        - meta_scope: meta.parameters.tsx\n        - match: \\)\n          captures:\n            0: punctuation.definition.parameters.end.tsx\n          pop: true\n        - include: function-parameters-body\n  function-parameters-body:\n    - include: comment\n    - include: string\n    - include: decorator\n    - include: destructuring-parameter\n    - include: parameter-name\n    - include: parameter-type-annotation\n    - include: variable-initializer\n    - match: \",\"\n      scope: punctuation.separator.parameter.tsx\n  identifiers:\n    - include: object-identifiers\n    - match: |-\n        (?x)(?:(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*)?([_$[:alpha:]][_$[:alnum:]]*)(?=\\s*=\\s*(\n          ((async\\s+)?(\n            (function\\s*[(<*]) |\n            (function\\s+) |\n            ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n          )) |\n          ((async\\s*)?(\n            ((<\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n            # sure shot arrow functions even if => is on new line\n        (\n          (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n          [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n          (\n            ([)]\\s*:) |                                                                                       # ():\n            ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:)                                                                  # [(]param: | [(]...param:\n          )\n        ) |\n        (\n          [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>]                                                              # < typeparam extends\n        ) |\n        # arrow function possible to detect only with => on same line\n        (\n          (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?                                                                                 # typeparameters\n          \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\)   # parameters\n          (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)?                                                                        # return type\n          \\s*=>                                                                                               # arrow operator\n        )\n          ))\n        ))\n      captures:\n        1: punctuation.accessor.tsx\n        2: punctuation.accessor.optional.tsx\n        3: entity.name.function.tsx\n    - match: '(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*(\\#?[[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])'\n      captures:\n        1: punctuation.accessor.tsx\n        2: punctuation.accessor.optional.tsx\n        3: variable.other.constant.property.tsx\n    - match: '(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*(\\#?[_$[:alpha:]][_$[:alnum:]]*)'\n      captures:\n        1: punctuation.accessor.tsx\n        2: punctuation.accessor.optional.tsx\n        3: variable.other.property.tsx\n    - match: \"([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])\"\n      scope: variable.other.constant.tsx\n    - match: \"[_$[:alpha:]][_$[:alnum:]]*\"\n      scope: variable.other.readwrite.tsx\n  if-statement:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?=\\bif\\s*(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))\\s*(?!\\{))'\n      push:\n        - match: '(?=;|$|\\})'\n          pop: true\n        - include: comment\n        - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(if)\\s*(\\()'\n          captures:\n            1: keyword.control.conditional.tsx\n            2: meta.brace.round.tsx\n          push:\n            - match: \\)\n              captures:\n                0: meta.brace.round.tsx\n              pop: true\n            - include: expression\n        - match: '(?<=\\))\\s*\\/(?![\\/*])(?=(?:[^\\/\\\\\\[]|\\\\.|\\[([^\\]\\\\]|\\\\.)*\\])+\\/([dgimsuy]+|(?![\\/\\*])|(?=\\/\\*))(?!\\s*[a-zA-Z0-9_$]))'\n          captures:\n            0: punctuation.definition.string.begin.tsx\n          push:\n            - meta_scope: string.regexp.tsx\n            - match: \"(/)([dgimsuy]*)\"\n              captures:\n                1: punctuation.definition.string.end.tsx\n                2: keyword.other.tsx\n              pop: true\n            - include: regexp\n        - include: statements\n  import-declaration:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?\\b(import)(?:\\s+(type)(?!\\s+from))?(?!\\s*[:\\(])(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      captures:\n        1: keyword.control.export.tsx\n        2: storage.modifier.tsx\n        3: keyword.control.import.tsx\n        4: keyword.control.type.tsx\n      push:\n        - meta_scope: meta.import.tsx\n        - match: '(?<!^import|[^\\._$[:alnum:]]import)(?=;|$|^)'\n          pop: true\n        - include: single-line-comment-consuming-line-ending\n        - include: comment\n        - include: string\n        - match: '(?<=^import|[^\\._$[:alnum:]]import)(?!\\s*[\"''])'\n          push:\n            - match: \\bfrom\\b\n              captures:\n                0: keyword.control.from.tsx\n              pop: true\n            - include: import-export-declaration\n        - include: import-export-declaration\n  import-equals-declaration:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?\\b(import)(?:\\s+(type))?\\s+([_$[:alpha:]][_$[:alnum:]]*)\\s*(=)\\s*(require)\\s*(\\()'\n      captures:\n        1: keyword.control.export.tsx\n        2: storage.modifier.tsx\n        3: keyword.control.import.tsx\n        4: keyword.control.type.tsx\n        5: variable.other.readwrite.alias.tsx\n        6: keyword.operator.assignment.tsx\n        7: keyword.control.require.tsx\n        8: meta.brace.round.tsx\n      push:\n        - meta_scope: meta.import-equals.external.tsx\n        - match: \\)\n          captures:\n            0: meta.brace.round.tsx\n          pop: true\n        - include: comment\n        - include: string\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?\\b(import)(?:\\s+(type))?\\s+([_$[:alpha:]][_$[:alnum:]]*)\\s*(=)\\s*(?!require\\b)'\n      captures:\n        1: keyword.control.export.tsx\n        2: storage.modifier.tsx\n        3: keyword.control.import.tsx\n        4: keyword.control.type.tsx\n        5: variable.other.readwrite.alias.tsx\n        6: keyword.operator.assignment.tsx\n      push:\n        - meta_scope: meta.import-equals.internal.tsx\n        - match: (?=;|$|^)\n          pop: true\n        - include: single-line-comment-consuming-line-ending\n        - include: comment\n        - match: '([_$[:alpha:]][_$[:alnum:]]*)\\s*(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))'\n          captures:\n            1: entity.name.type.module.tsx\n            2: punctuation.accessor.tsx\n            3: punctuation.accessor.optional.tsx\n        - match: \"([_$[:alpha:]][_$[:alnum:]]*)\"\n          scope: variable.other.readwrite.tsx\n  import-export-block:\n    - match: '\\{'\n      captures:\n        0: punctuation.definition.block.tsx\n      push:\n        - meta_scope: meta.block.tsx\n        - match: '\\}'\n          captures:\n            0: punctuation.definition.block.tsx\n          pop: true\n        - include: import-export-clause\n  import-export-clause:\n    - include: comment\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(\\bdefault)|(\\*)|(\\b[_$[:alpha:]][_$[:alnum:]]*))\\s+(as)\\s+(?:(default(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.)))|([_$[:alpha:]][_$[:alnum:]]*))'\n      captures:\n        1: keyword.control.default.tsx\n        2: constant.language.import-export-all.tsx\n        3: variable.other.readwrite.tsx\n        4: keyword.control.as.tsx\n        5: keyword.control.default.tsx\n        6: variable.other.readwrite.alias.tsx\n    - include: punctuation-comma\n    - match: \\*\n      scope: constant.language.import-export-all.tsx\n    - match: \\b(default)\\b\n      scope: keyword.control.default.tsx\n    - match: \"([_$[:alpha:]][_$[:alnum:]]*)\"\n      scope: variable.other.readwrite.alias.tsx\n  import-export-declaration:\n    - include: comment\n    - include: string\n    - include: import-export-block\n    - match: \\bfrom\\b\n      scope: keyword.control.from.tsx\n    - include: import-export-clause\n  indexer-declaration:\n    - match: '(?:(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(readonly)\\s*)?\\s*(\\[)\\s*([_$[:alpha:]][_$[:alnum:]]*)\\s*(?=:)'\n      captures:\n        1: storage.modifier.tsx\n        2: meta.brace.square.tsx\n        3: variable.parameter.tsx\n      push:\n        - meta_scope: meta.indexer.declaration.tsx\n        - match: '(\\])\\s*(\\?\\s*)?|$'\n          captures:\n            1: meta.brace.square.tsx\n            2: keyword.operator.optional.tsx\n          pop: true\n        - include: type-annotation\n  indexer-mapped-type-declaration:\n    - match: '(?:(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))([+-])?(readonly)\\s*)?\\s*(\\[)\\s*([_$[:alpha:]][_$[:alnum:]]*)\\s+(in)\\s+'\n      captures:\n        1: keyword.operator.type.modifier.tsx\n        2: storage.modifier.tsx\n        3: meta.brace.square.tsx\n        4: entity.name.type.tsx\n        5: keyword.operator.expression.in.tsx\n      push:\n        - meta_scope: meta.indexer.mappedtype.declaration.tsx\n        - match: '(\\])([+-])?\\s*(\\?\\s*)?|$'\n          captures:\n            1: meta.brace.square.tsx\n            2: keyword.operator.type.modifier.tsx\n            3: keyword.operator.optional.tsx\n          pop: true\n        - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(as)\\s+'\n          captures:\n            1: keyword.control.as.tsx\n        - include: type\n  inline-tags:\n    - match: '(\\[)[^\\]]+(\\])(?={@(?:link|linkcode|linkplain|tutorial))'\n      scope: constant.other.description.jsdoc\n      captures:\n        1: punctuation.definition.bracket.square.begin.jsdoc\n        2: punctuation.definition.bracket.square.end.jsdoc\n    - match: '({)((@)(?:link(?:code|plain)?|tutorial))\\s*'\n      captures:\n        1: punctuation.definition.bracket.curly.begin.jsdoc\n        2: storage.type.class.jsdoc\n        3: punctuation.definition.inline.tag.jsdoc\n      push:\n        - meta_scope: entity.name.type.instance.jsdoc\n        - match: '}|(?=\\*/)'\n          captures:\n            0: punctuation.definition.bracket.curly.end.jsdoc\n          pop: true\n        - match: '\\G((?=https?://)(?:[^|}\\s*]|\\*[/])+)(\\|)?'\n          captures:\n            1: variable.other.link.underline.jsdoc\n            2: punctuation.separator.pipe.jsdoc\n        - match: '\\G((?:[^{}@\\s|*]|\\*[^/])+)(\\|)?'\n          captures:\n            1: variable.other.description.jsdoc\n            2: punctuation.separator.pipe.jsdoc\n  instanceof-expr:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(instanceof)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      captures:\n        1: keyword.operator.expression.instanceof.tsx\n      push:\n        - match: '(?<=\\))|(?=[;),}\\]:?\\-\\+\\>]|\\|\\||\\&\\&|\\!\\=\\=|$|(([\\&\\~\\^\\|]\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s+instanceof(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.)))|((?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))function((\\s+[_$[:alpha:]][_$[:alnum:]]*)|(\\s*[\\(]))))'\n          pop: true\n        - include: type\n  interface-declaration:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?\\b(?:(abstract)\\s+)?\\b(interface)\\b(?=\\s+|/[/*])'\n      captures:\n        1: keyword.control.export.tsx\n        2: storage.modifier.tsx\n        3: storage.modifier.tsx\n        4: storage.type.interface.tsx\n      push:\n        - meta_scope: meta.interface.tsx\n        - match: '(?<=\\})'\n          pop: true\n        - include: comment\n        - include: class-or-interface-heritage\n        - match: \"[_$[:alpha:]][_$[:alnum:]]*\"\n          captures:\n            0: entity.name.type.interface.tsx\n        - include: type-parameters\n        - include: class-or-interface-body\n  jsdoctype:\n    - match: '\\G{(?:[^}*]|\\*[^/}])+$'\n      scope: invalid.illegal.type.jsdoc\n    - match: '\\G({)'\n      captures:\n        0: entity.name.type.instance.jsdoc\n        1: punctuation.definition.bracket.curly.begin.jsdoc\n      push:\n        - meta_content_scope: entity.name.type.instance.jsdoc\n        - match: '((}))\\s*|(?=\\*/)'\n          captures:\n            1: entity.name.type.instance.jsdoc\n            2: punctuation.definition.bracket.curly.end.jsdoc\n          pop: true\n        - include: brackets\n  jsx:\n    - include: jsx-tag-without-attributes-in-expression\n    - include: jsx-tag-in-expression\n  jsx-children:\n    - include: jsx-tag-without-attributes\n    - include: jsx-tag\n    - include: jsx-evaluated-code\n    - include: jsx-entities\n  jsx-entities:\n    - match: \"(&)([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+)(;)\"\n      scope: constant.character.entity.tsx\n      captures:\n        1: punctuation.definition.entity.tsx\n        3: punctuation.definition.entity.tsx\n    - match: \"&\"\n      scope: invalid.illegal.bad-ampersand.tsx\n  jsx-evaluated-code:\n    - match: '\\{'\n      captures:\n        0: punctuation.section.embedded.begin.tsx\n      push:\n        - meta_content_scope: meta.embedded.expression.tsx\n        - match: '\\}'\n          captures:\n            0: punctuation.section.embedded.end.tsx\n          pop: true\n        - include: expression\n  jsx-string-double-quoted:\n    - match: '\"'\n      captures:\n        0: punctuation.definition.string.begin.tsx\n      push:\n        - meta_scope: string.quoted.double.tsx\n        - match: '\"'\n          captures:\n            0: punctuation.definition.string.end.tsx\n          pop: true\n        - include: jsx-entities\n  jsx-string-single-quoted:\n    - match: \"'\"\n      captures:\n        0: punctuation.definition.string.begin.tsx\n      push:\n        - meta_scope: string.quoted.single.tsx\n        - match: \"'\"\n          captures:\n            0: punctuation.definition.string.end.tsx\n          pop: true\n        - include: jsx-entities\n  jsx-tag:\n    - match: '(?=(<)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\\.|-))(?=((<\\s*)|(\\s+))(?!\\?)|\\/?>))'\n      push:\n        - meta_scope: meta.tag.tsx\n        - match: '(/>)|(?:(</)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\\.|-))?\\s*(>))'\n          captures:\n            1: punctuation.definition.tag.end.tsx\n            2: punctuation.definition.tag.begin.tsx\n            3: entity.name.tag.namespace.tsx\n            4: punctuation.separator.namespace.tsx\n            5: entity.name.tag.tsx\n            6: support.class.component.tsx\n            7: punctuation.definition.tag.end.tsx\n          pop: true\n        - match: '(<)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\\.|-))(?=((<\\s*)|(\\s+))(?!\\?)|\\/?>)'\n          captures:\n            1: punctuation.definition.tag.begin.tsx\n            2: entity.name.tag.namespace.tsx\n            3: punctuation.separator.namespace.tsx\n            4: entity.name.tag.tsx\n            5: support.class.component.tsx\n          push:\n            - match: \"(?=[/]?>)\"\n              pop: true\n            - include: comment\n            - include: type-arguments\n            - include: jsx-tag-attributes\n        - match: (>)\n          captures:\n            1: punctuation.definition.tag.end.tsx\n          push:\n            - meta_content_scope: meta.jsx.children.tsx\n            - match: (?=</)\n              pop: true\n            - include: jsx-children\n  jsx-tag-attribute-assignment:\n    - match: '=(?=\\s*(?:''|\"|{|/\\*|//|\\n))'\n      scope: keyword.operator.assignment.tsx\n  jsx-tag-attribute-name:\n    - match: |-\n        (?x)\n        \\s*\n        (?:([_$[:alpha:]][-_$[:alnum:].]*)(:))?\n        ([_$[:alpha:]][-_$[:alnum:]]*)\n        (?=\\s|=|/?>|/\\*|//)\n      captures:\n        1: entity.other.attribute-name.namespace.tsx\n        2: punctuation.separator.namespace.tsx\n        3: entity.other.attribute-name.tsx\n  jsx-tag-attributes:\n    - match: \\s+\n      push:\n        - meta_scope: meta.tag.attributes.tsx\n        - match: \"(?=[/]?>)\"\n          pop: true\n        - include: comment\n        - include: jsx-tag-attribute-name\n        - include: jsx-tag-attribute-assignment\n        - include: jsx-string-double-quoted\n        - include: jsx-string-single-quoted\n        - include: jsx-evaluated-code\n        - include: jsx-tag-attributes-illegal\n  jsx-tag-attributes-illegal:\n    - match: \\S+\n      scope: invalid.illegal.attribute.tsx\n  jsx-tag-in-expression:\n    - match: |-\n        (?x)\n        (?<!\\+\\+|--)(?<=[({\\[,?=>:*]|&&|\\|\\||\\?|\\*\\/|^await|[^\\._$[:alnum:]]await|^return|[^\\._$[:alnum:]]return|^default|[^\\._$[:alnum:]]default|^yield|[^\\._$[:alnum:]]yield|^)\\s*\n        (?!<\\s*[_$[:alpha:]][_$[:alnum:]]*((\\s+extends\\s+[^=>])|,)) # look ahead is not type parameter of arrow\n        (?=(<)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\\.|-))(?=((<\\s*)|(\\s+))(?!\\?)|\\/?>))\n      push:\n        - match: '(?!(<)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\\.|-))(?=((<\\s*)|(\\s+))(?!\\?)|\\/?>))'\n          pop: true\n        - include: jsx-tag\n  jsx-tag-without-attributes:\n    - match: '(<)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\\.|-))?\\s*(>)'\n      captures:\n        1: punctuation.definition.tag.begin.tsx\n        2: entity.name.tag.namespace.tsx\n        3: punctuation.separator.namespace.tsx\n        4: entity.name.tag.tsx\n        5: support.class.component.tsx\n        6: punctuation.definition.tag.end.tsx\n      push:\n        - meta_scope: meta.tag.without-attributes.tsx\n        - meta_content_scope: meta.jsx.children.tsx\n        - match: '(</)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\\.|-))?\\s*(>)'\n          captures:\n            1: punctuation.definition.tag.begin.tsx\n            2: entity.name.tag.namespace.tsx\n            3: punctuation.separator.namespace.tsx\n            4: entity.name.tag.tsx\n            5: support.class.component.tsx\n            6: punctuation.definition.tag.end.tsx\n          pop: true\n        - include: jsx-children\n  jsx-tag-without-attributes-in-expression:\n    - match: '(?<!\\+\\+|--)(?<=[({\\[,?=>:*]|&&|\\|\\||\\?|\\*\\/|^await|[^\\._$[:alnum:]]await|^return|[^\\._$[:alnum:]]return|^default|[^\\._$[:alnum:]]default|^yield|[^\\._$[:alnum:]]yield|^)\\s*(?=(<)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\\.|-))?\\s*(>))'\n      push:\n        - match: '(?!(<)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\\.|-))?\\s*(>))'\n          pop: true\n        - include: jsx-tag-without-attributes\n  label:\n    - match: '([_$[:alpha:]][_$[:alnum:]]*)\\s*(:)(?=\\s*\\{)'\n      captures:\n        1: entity.name.label.tsx\n        2: punctuation.separator.label.tsx\n      push:\n        - match: '(?<=\\})'\n          pop: true\n        - include: decl-block\n    - match: '([_$[:alpha:]][_$[:alnum:]]*)\\s*(:)'\n      captures:\n        1: entity.name.label.tsx\n        2: punctuation.separator.label.tsx\n  literal:\n    - include: numeric-literal\n    - include: boolean-literal\n    - include: null-literal\n    - include: undefined-literal\n    - include: numericConstant-literal\n    - include: array-literal\n    - include: this-literal\n    - include: super-literal\n  method-declaration:\n    - match: '(?x)(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:\\b(override)\\s+)?(?:\\b(public|private|protected)\\s+)?(?:\\b(abstract)\\s+)?(?:\\b(async)\\s+)?\\s*\\b(constructor)\\b(?!:)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      captures:\n        1: storage.modifier.tsx\n        2: storage.modifier.tsx\n        3: storage.modifier.tsx\n        4: storage.modifier.async.tsx\n        5: storage.type.tsx\n      push:\n        - meta_scope: meta.method.declaration.tsx\n        - match: '(?=\\}|;|,|$)|(?<=\\})'\n          pop: true\n        - include: method-declaration-name\n        - include: function-body\n    - match: '(?x)(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:\\b(override)\\s+)?(?:\\b(public|private|protected)\\s+)?(?:\\b(abstract)\\s+)?(?:\\b(async)\\s+)?(?:(?:\\s*\\b(new)\\b(?!:)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.)))|(?:(\\*)\\s*)?)(?=\\s*((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*))?[\\(])'\n      captures:\n        1: storage.modifier.tsx\n        2: storage.modifier.tsx\n        3: storage.modifier.tsx\n        4: storage.modifier.async.tsx\n        5: keyword.operator.new.tsx\n        6: keyword.generator.asterisk.tsx\n      push:\n        - meta_scope: meta.method.declaration.tsx\n        - match: '(?=\\}|;|,|$)|(?<=\\})'\n          pop: true\n        - include: method-declaration-name\n        - include: function-body\n    - match: |-\n        (?x)(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:\\b(override)\\s+)?(?:\\b(public|private|protected)\\s+)?(?:\\b(abstract)\\s+)?(?:\\b(async)\\s+)?(?:\\b(get|set)\\s+)?(?:(\\*)\\s*)?(?=\\s*(((\\b(?<!\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\b(?!\\$))|(\\b(?<!\\$)0(?:b|B)[01][01_]*(n)?\\b(?!\\$))|(\\b(?<!\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\b(?!\\$))|((?<!\\$)(?:\n          (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)| # 1.1E+3\n          (?:\\b[0-9][0-9_]*(\\.)[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # 1.E+3\n          (?:\\B(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # .1E+3\n          (?:\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|                 # 1E+3\n          (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b)|                      # 1.1\n          (?:\\b[0-9][0-9_]*(\\.)(n)?\\B)|                                  # 1.\n          (?:\\B(\\.)[0-9][0-9_]*(n)?\\b)|                                  # .1\n          (?:\\b[0-9][0-9_]*(n)?\\b(?!\\.))                                 # 1\n        )(?!\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`)|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])+\\]))\\s*(\\??))\\s*((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*))?[\\(])\n      captures:\n        1: storage.modifier.tsx\n        2: storage.modifier.tsx\n        3: storage.modifier.tsx\n        4: storage.modifier.async.tsx\n        5: storage.type.property.tsx\n        6: keyword.generator.asterisk.tsx\n      push:\n        - meta_scope: meta.method.declaration.tsx\n        - match: '(?=\\}|;|,|$)|(?<=\\})'\n          pop: true\n        - include: method-declaration-name\n        - include: function-body\n  method-declaration-name:\n    - match: |-\n        (?x)(?=((\\b(?<!\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\b(?!\\$))|(\\b(?<!\\$)0(?:b|B)[01][01_]*(n)?\\b(?!\\$))|(\\b(?<!\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\b(?!\\$))|((?<!\\$)(?:\n          (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)| # 1.1E+3\n          (?:\\b[0-9][0-9_]*(\\.)[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # 1.E+3\n          (?:\\B(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # .1E+3\n          (?:\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|                 # 1E+3\n          (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b)|                      # 1.1\n          (?:\\b[0-9][0-9_]*(\\.)(n)?\\B)|                                  # 1.\n          (?:\\B(\\.)[0-9][0-9_]*(n)?\\b)|                                  # .1\n          (?:\\b[0-9][0-9_]*(n)?\\b(?!\\.))                                 # 1\n        )(?!\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`)|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])+\\]))\\s*(\\??)\\s*[\\(\\<])\n      push:\n        - match: (?=\\(|\\<)\n          pop: true\n        - include: string\n        - include: array-literal\n        - include: numeric-literal\n        - match: \"[_$[:alpha:]][_$[:alnum:]]*\"\n          scope: meta.definition.method.tsx entity.name.function.tsx\n        - match: \\?\n          scope: keyword.operator.optional.tsx\n  namespace-declaration:\n    - match: '(?:(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?\\b(namespace|module)\\s+(?=[_$[:alpha:]\"''`]))'\n      captures:\n        1: keyword.control.export.tsx\n        2: storage.modifier.tsx\n        3: storage.type.namespace.tsx\n      push:\n        - meta_scope: meta.namespace.declaration.tsx\n        - match: '(?<=\\})|(?=;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))'\n          pop: true\n        - include: comment\n        - include: string\n        - match: \"([_$[:alpha:]][_$[:alnum:]]*)\"\n          scope: entity.name.type.module.tsx\n        - include: punctuation-accessor\n        - include: decl-block\n  new-expr:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(new)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      captures:\n        1: keyword.operator.new.tsx\n      push:\n        - meta_scope: new.expr.tsx\n        - match: '(?<=\\))|(?=[;),}\\]:?\\-\\+\\>]|\\|\\||\\&\\&|\\!\\=\\=|$|((?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))new(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.)))|((?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))function((\\s+[_$[:alpha:]][_$[:alnum:]]*)|(\\s*[\\(]))))'\n          pop: true\n        - include: expression\n  null-literal:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))null(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: constant.language.null.tsx\n  numeric-literal:\n    - match: '\\b(?<!\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\b(?!\\$)'\n      scope: constant.numeric.hex.tsx\n      captures:\n        1: storage.type.numeric.bigint.tsx\n    - match: '\\b(?<!\\$)0(?:b|B)[01][01_]*(n)?\\b(?!\\$)'\n      scope: constant.numeric.binary.tsx\n      captures:\n        1: storage.type.numeric.bigint.tsx\n    - match: '\\b(?<!\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\b(?!\\$)'\n      scope: constant.numeric.octal.tsx\n      captures:\n        1: storage.type.numeric.bigint.tsx\n    - match: |-\n        (?x)\n        (?<!\\$)(?:\n          (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)| # 1.1E+3\n          (?:\\b[0-9][0-9_]*(\\.)[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # 1.E+3\n          (?:\\B(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # .1E+3\n          (?:\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|                 # 1E+3\n          (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b)|                      # 1.1\n          (?:\\b[0-9][0-9_]*(\\.)(n)?\\B)|                                  # 1.\n          (?:\\B(\\.)[0-9][0-9_]*(n)?\\b)|                                  # .1\n          (?:\\b[0-9][0-9_]*(n)?\\b(?!\\.))                                 # 1\n        )(?!\\$)\n      captures:\n        0: constant.numeric.decimal.tsx\n        1: meta.delimiter.decimal.period.tsx\n        2: storage.type.numeric.bigint.tsx\n        3: meta.delimiter.decimal.period.tsx\n        4: storage.type.numeric.bigint.tsx\n        5: meta.delimiter.decimal.period.tsx\n        6: storage.type.numeric.bigint.tsx\n        7: storage.type.numeric.bigint.tsx\n        8: meta.delimiter.decimal.period.tsx\n        9: storage.type.numeric.bigint.tsx\n        10: meta.delimiter.decimal.period.tsx\n        11: storage.type.numeric.bigint.tsx\n        12: meta.delimiter.decimal.period.tsx\n        13: storage.type.numeric.bigint.tsx\n        14: storage.type.numeric.bigint.tsx\n  numericConstant-literal:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))NaN(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: constant.language.nan.tsx\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))Infinity(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: constant.language.infinity.tsx\n  object-binding-element:\n    - include: comment\n    - match: |-\n        (?x)(?=((\\b(?<!\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\b(?!\\$))|(\\b(?<!\\$)0(?:b|B)[01][01_]*(n)?\\b(?!\\$))|(\\b(?<!\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\b(?!\\$))|((?<!\\$)(?:\n          (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)| # 1.1E+3\n          (?:\\b[0-9][0-9_]*(\\.)[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # 1.E+3\n          (?:\\B(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # .1E+3\n          (?:\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|                 # 1E+3\n          (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b)|                      # 1.1\n          (?:\\b[0-9][0-9_]*(\\.)(n)?\\B)|                                  # 1.\n          (?:\\B(\\.)[0-9][0-9_]*(n)?\\b)|                                  # .1\n          (?:\\b[0-9][0-9_]*(n)?\\b(?!\\.))                                 # 1\n        )(?!\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`)|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])+\\]))\\s*(:))\n      push:\n        - match: '(?=,|\\})'\n          pop: true\n        - include: object-binding-element-propertyName\n        - include: binding-element\n    - include: object-binding-pattern\n    - include: destructuring-variable-rest\n    - include: variable-initializer\n    - include: punctuation-comma\n  object-binding-element-const:\n    - include: comment\n    - match: |-\n        (?x)(?=((\\b(?<!\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\b(?!\\$))|(\\b(?<!\\$)0(?:b|B)[01][01_]*(n)?\\b(?!\\$))|(\\b(?<!\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\b(?!\\$))|((?<!\\$)(?:\n          (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)| # 1.1E+3\n          (?:\\b[0-9][0-9_]*(\\.)[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # 1.E+3\n          (?:\\B(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # .1E+3\n          (?:\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|                 # 1E+3\n          (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b)|                      # 1.1\n          (?:\\b[0-9][0-9_]*(\\.)(n)?\\B)|                                  # 1.\n          (?:\\B(\\.)[0-9][0-9_]*(n)?\\b)|                                  # .1\n          (?:\\b[0-9][0-9_]*(n)?\\b(?!\\.))                                 # 1\n        )(?!\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`)|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])+\\]))\\s*(:))\n      push:\n        - match: '(?=,|\\})'\n          pop: true\n        - include: object-binding-element-propertyName\n        - include: binding-element-const\n    - include: object-binding-pattern-const\n    - include: destructuring-variable-rest-const\n    - include: variable-initializer\n    - include: punctuation-comma\n  object-binding-element-propertyName:\n    - match: |-\n        (?x)(?=((\\b(?<!\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\b(?!\\$))|(\\b(?<!\\$)0(?:b|B)[01][01_]*(n)?\\b(?!\\$))|(\\b(?<!\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\b(?!\\$))|((?<!\\$)(?:\n          (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)| # 1.1E+3\n          (?:\\b[0-9][0-9_]*(\\.)[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # 1.E+3\n          (?:\\B(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # .1E+3\n          (?:\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|                 # 1E+3\n          (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b)|                      # 1.1\n          (?:\\b[0-9][0-9_]*(\\.)(n)?\\B)|                                  # 1.\n          (?:\\B(\\.)[0-9][0-9_]*(n)?\\b)|                                  # .1\n          (?:\\b[0-9][0-9_]*(n)?\\b(?!\\.))                                 # 1\n        )(?!\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`)|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])+\\]))\\s*(:))\n      push:\n        - match: (:)\n          captures:\n            0: punctuation.destructuring.tsx\n          pop: true\n        - include: string\n        - include: array-literal\n        - include: numeric-literal\n        - match: \"([_$[:alpha:]][_$[:alnum:]]*)\"\n          scope: variable.object.property.tsx\n  object-binding-pattern:\n    - match: '(?:(\\.\\.\\.)\\s*)?(\\{)'\n      captures:\n        1: keyword.operator.rest.tsx\n        2: punctuation.definition.binding-pattern.object.tsx\n      push:\n        - match: '\\}'\n          captures:\n            0: punctuation.definition.binding-pattern.object.tsx\n          pop: true\n        - include: object-binding-element\n  object-binding-pattern-const:\n    - match: '(?:(\\.\\.\\.)\\s*)?(\\{)'\n      captures:\n        1: keyword.operator.rest.tsx\n        2: punctuation.definition.binding-pattern.object.tsx\n      push:\n        - match: '\\}'\n          captures:\n            0: punctuation.definition.binding-pattern.object.tsx\n          pop: true\n        - include: object-binding-element-const\n  object-identifiers:\n    - match: '([_$[:alpha:]][_$[:alnum:]]*)(?=\\s*\\??\\.\\s*prototype\\b(?!\\$))'\n      scope: support.class.tsx\n    - match: |-\n        (?x)(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*(?:\n          (\\#?[[:upper:]][_$[:digit:][:upper:]]*) |\n          (\\#?[_$[:alpha:]][_$[:alnum:]]*)\n        )(?=\\s*\\??\\.\\s*\\#?[_$[:alpha:]][_$[:alnum:]]*)\n      captures:\n        1: punctuation.accessor.tsx\n        2: punctuation.accessor.optional.tsx\n        3: variable.other.constant.object.property.tsx\n        4: variable.other.object.property.tsx\n    - match: |-\n        (?x)(?:\n          ([[:upper:]][_$[:digit:][:upper:]]*) |\n          ([_$[:alpha:]][_$[:alnum:]]*)\n        )(?=\\s*\\??\\.\\s*\\#?[_$[:alpha:]][_$[:alnum:]]*)\n      captures:\n        1: variable.other.constant.object.tsx\n        2: variable.other.object.tsx\n  object-literal:\n    - match: '\\{'\n      captures:\n        0: punctuation.definition.block.tsx\n      push:\n        - meta_scope: meta.objectliteral.tsx\n        - match: '\\}'\n          captures:\n            0: punctuation.definition.block.tsx\n          pop: true\n        - include: object-member\n  object-literal-method-declaration:\n    - match: |-\n        (?x)(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:\\b(async)\\s+)?(?:\\b(get|set)\\s+)?(?:(\\*)\\s*)?(?=\\s*(((\\b(?<!\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\b(?!\\$))|(\\b(?<!\\$)0(?:b|B)[01][01_]*(n)?\\b(?!\\$))|(\\b(?<!\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\b(?!\\$))|((?<!\\$)(?:\n          (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)| # 1.1E+3\n          (?:\\b[0-9][0-9_]*(\\.)[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # 1.E+3\n          (?:\\B(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # .1E+3\n          (?:\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|                 # 1E+3\n          (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b)|                      # 1.1\n          (?:\\b[0-9][0-9_]*(\\.)(n)?\\B)|                                  # 1.\n          (?:\\B(\\.)[0-9][0-9_]*(n)?\\b)|                                  # .1\n          (?:\\b[0-9][0-9_]*(n)?\\b(?!\\.))                                 # 1\n        )(?!\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`)|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])+\\]))\\s*(\\??))\\s*((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*))?[\\(])\n      captures:\n        1: storage.modifier.async.tsx\n        2: storage.type.property.tsx\n        3: keyword.generator.asterisk.tsx\n      push:\n        - meta_scope: meta.method.declaration.tsx\n        - match: '(?=\\}|;|,)|(?<=\\})'\n          pop: true\n        - include: method-declaration-name\n        - include: function-body\n        - match: |-\n            (?x)(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:\\b(async)\\s+)?(?:\\b(get|set)\\s+)?(?:(\\*)\\s*)?(?=\\s*(((\\b(?<!\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\b(?!\\$))|(\\b(?<!\\$)0(?:b|B)[01][01_]*(n)?\\b(?!\\$))|(\\b(?<!\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\b(?!\\$))|((?<!\\$)(?:\n              (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)| # 1.1E+3\n              (?:\\b[0-9][0-9_]*(\\.)[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # 1.E+3\n              (?:\\B(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # .1E+3\n              (?:\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|                 # 1E+3\n              (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b)|                      # 1.1\n              (?:\\b[0-9][0-9_]*(\\.)(n)?\\B)|                                  # 1.\n              (?:\\B(\\.)[0-9][0-9_]*(n)?\\b)|                                  # .1\n              (?:\\b[0-9][0-9_]*(n)?\\b(?!\\.))                                 # 1\n            )(?!\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`)|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])+\\]))\\s*(\\??))\\s*((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*))?[\\(])\n          captures:\n            1: storage.modifier.async.tsx\n            2: storage.type.property.tsx\n            3: keyword.generator.asterisk.tsx\n          push:\n            - match: (?=\\(|\\<)\n              pop: true\n            - include: method-declaration-name\n  object-member:\n    - include: comment\n    - include: object-literal-method-declaration\n    - match: '(?=\\[)'\n      push:\n        - meta_scope: meta.object.member.tsx meta.object-literal.key.tsx\n        - match: '(?=:)|((?<=[\\]])(?=\\s*[\\(\\<]))'\n          pop: true\n        - include: comment\n        - include: array-literal\n    - match: '(?=[\\''\\\"\\`])'\n      push:\n        - meta_scope: meta.object.member.tsx meta.object-literal.key.tsx\n        - match: '(?=:)|((?<=[\\''\\\"\\`])(?=((\\s*[\\(\\<,}])|(\\s+(as)\\s+))))'\n          pop: true\n        - include: comment\n        - include: string\n    - match: |-\n        (?x)(?=(\\b(?<!\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\b(?!\\$))|(\\b(?<!\\$)0(?:b|B)[01][01_]*(n)?\\b(?!\\$))|(\\b(?<!\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\b(?!\\$))|((?<!\\$)(?:\n          (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)| # 1.1E+3\n          (?:\\b[0-9][0-9_]*(\\.)[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # 1.E+3\n          (?:\\B(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # .1E+3\n          (?:\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|                 # 1E+3\n          (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b)|                      # 1.1\n          (?:\\b[0-9][0-9_]*(\\.)(n)?\\B)|                                  # 1.\n          (?:\\B(\\.)[0-9][0-9_]*(n)?\\b)|                                  # .1\n          (?:\\b[0-9][0-9_]*(n)?\\b(?!\\.))                                 # 1\n        )(?!\\$)))\n      push:\n        - meta_scope: meta.object.member.tsx meta.object-literal.key.tsx\n        - match: '(?=:)|(?=\\s*([\\(\\<,}])|(\\s+as\\s+))'\n          pop: true\n        - include: comment\n        - include: numeric-literal\n    - match: '(?<=[\\]\\''\\\"\\`])(?=\\s*[\\(\\<])'\n      push:\n        - meta_scope: meta.method.declaration.tsx\n        - match: '(?=\\}|;|,)|(?<=\\})'\n          pop: true\n        - include: function-body\n    - match: '(?![_$[:alpha:]])([[:digit:]]+)\\s*(?=(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*:)'\n      scope: meta.object.member.tsx\n      captures:\n        0: meta.object-literal.key.tsx\n        1: constant.numeric.decimal.tsx\n    - match: |-\n        (?x)(?:([_$[:alpha:]][_$[:alnum:]]*)\\s*(?=(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*:(\\s*\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/)*\\s*(\n          ((async\\s+)?(\n            (function\\s*[(<*]) |\n            (function\\s+) |\n            ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n          )) |\n          ((async\\s*)?(\n            ((<\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n            # sure shot arrow functions even if => is on new line\n        (\n          (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n          [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n          (\n            ([)]\\s*:) |                                                                                       # ():\n            ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:)                                                                  # [(]param: | [(]...param:\n          )\n        ) |\n        (\n          [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>]                                                              # < typeparam extends\n        ) |\n        # arrow function possible to detect only with => on same line\n        (\n          (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?                                                                                 # typeparameters\n          \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\)   # parameters\n          (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)?                                                                        # return type\n          \\s*=>                                                                                               # arrow operator\n        )\n          ))\n        )))\n      scope: meta.object.member.tsx\n      captures:\n        0: meta.object-literal.key.tsx\n        1: entity.name.function.tsx\n    - match: '(?:[_$[:alpha:]][_$[:alnum:]]*)\\s*(?=(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*:)'\n      scope: meta.object.member.tsx\n      captures:\n        0: meta.object-literal.key.tsx\n    - match: \\.\\.\\.\n      captures:\n        0: keyword.operator.spread.tsx\n      push:\n        - meta_scope: meta.object.member.tsx\n        - match: '(?=,|\\})'\n          pop: true\n        - include: expression\n    - match: '([_$[:alpha:]][_$[:alnum:]]*)\\s*(?=,|\\}|$|\\/\\/|\\/\\*)'\n      scope: meta.object.member.tsx\n      captures:\n        1: variable.other.readwrite.tsx\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(as)\\s+(const)(?=\\s*([,}]|$))'\n      scope: meta.object.member.tsx\n      captures:\n        1: keyword.control.as.tsx\n        2: storage.modifier.tsx\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(as)\\s+'\n      captures:\n        1: keyword.control.as.tsx\n      push:\n        - meta_scope: meta.object.member.tsx\n        - match: '(?=[;),}\\]:?\\-\\+\\>]|\\|\\||\\&\\&|\\!\\=\\=|$|^|((?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(as)\\s+))'\n          pop: true\n        - include: type\n    - match: '(?=[_$[:alpha:]][_$[:alnum:]]*\\s*=)'\n      push:\n        - meta_scope: meta.object.member.tsx\n        - match: '(?=,|\\}|$|\\/\\/|\\/\\*)'\n          pop: true\n        - include: expression\n    - match: \":\"\n      captures:\n        0: meta.object-literal.key.tsx punctuation.separator.key-value.tsx\n      push:\n        - meta_scope: meta.object.member.tsx\n        - match: '(?=,|\\})'\n          pop: true\n        - match: '(?<=:)\\s*(async)?(?=\\s*(<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)\\(\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))'\n          captures:\n            1: storage.modifier.async.tsx\n          push:\n            - match: (?<=\\))\n              pop: true\n            - include: type-parameters\n            - match: \\(\n              captures:\n                0: meta.brace.round.tsx\n              push:\n                - match: \\)\n                  captures:\n                    0: meta.brace.round.tsx\n                  pop: true\n                - include: expression-inside-possibly-arrow-parens\n        - match: '(?<=:)\\s*(async)?\\s*(\\()(?=\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))'\n          captures:\n            1: storage.modifier.async.tsx\n            2: meta.brace.round.tsx\n          push:\n            - match: \\)\n              captures:\n                0: meta.brace.round.tsx\n              pop: true\n            - include: expression-inside-possibly-arrow-parens\n        - match: (?<=:)\\s*(async)?\\s*(?=\\<\\s*$)\n          captures:\n            1: storage.modifier.async.tsx\n          push:\n            - match: (?<=\\>)\n              pop: true\n            - include: type-parameters\n        - match: '(?<=\\>)\\s*(\\()(?=\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))'\n          captures:\n            1: meta.brace.round.tsx\n          push:\n            - match: \\)\n              captures:\n                0: meta.brace.round.tsx\n              pop: true\n            - include: expression-inside-possibly-arrow-parens\n        - include: possibly-arrow-return-type\n        - include: expression\n    - include: punctuation-comma\n  parameter-array-binding-pattern:\n    - match: '(?:(\\.\\.\\.)\\s*)?(\\[)'\n      captures:\n        1: keyword.operator.rest.tsx\n        2: punctuation.definition.binding-pattern.array.tsx\n      push:\n        - match: '\\]'\n          captures:\n            0: punctuation.definition.binding-pattern.array.tsx\n          pop: true\n        - include: parameter-binding-element\n        - include: punctuation-comma\n  parameter-binding-element:\n    - include: comment\n    - include: string\n    - include: numeric-literal\n    - include: regex\n    - include: parameter-object-binding-pattern\n    - include: parameter-array-binding-pattern\n    - include: destructuring-parameter-rest\n    - include: variable-initializer\n  parameter-name:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(override|public|protected|private|readonly)\\s+(?=(override|public|protected|private|readonly)\\s+)'\n      captures:\n        1: storage.modifier.tsx\n    - match: |-\n        (?x)(?:(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(override|public|private|protected|readonly)\\s+)?(?:(\\.\\.\\.)\\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))\\s*(\\??)(?=\\s*\n        # function assignment |\n        (=\\s*(\n          ((async\\s+)?(\n            (function\\s*[(<*]) |\n            (function\\s+) |\n            ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n          )) |\n          ((async\\s*)?(\n            ((<\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n            # sure shot arrow functions even if => is on new line\n        (\n          (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n          [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n          (\n            ([)]\\s*:) |                                                                                       # ():\n            ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:)                                                                  # [(]param: | [(]...param:\n          )\n        ) |\n        (\n          [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>]                                                              # < typeparam extends\n        ) |\n        # arrow function possible to detect only with => on same line\n        (\n          (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?                                                                                 # typeparameters\n          \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\)   # parameters\n          (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)?                                                                        # return type\n          \\s*=>                                                                                               # arrow operator\n        )\n          ))\n        )) |\n        # typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n        (:\\s*(\n          (<) |\n          ([(]\\s*(\n            ([)]) |\n            (\\.\\.\\.) |\n            ([_$[:alnum:]]+\\s*(\n              ([:,?=])|\n              ([)]\\s*=>)\n            ))\n          ))\n        )) |\n        (:\\s*(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))Function(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))) |\n        (:\\s*((<\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*))))))) |\n        (:\\s*(=>|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n          ((async\\s+)?(\n            (function\\s*[(<*]) |\n            (function\\s+) |\n            ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n          )) |\n          ((async\\s*)?(\n            ((<\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n            # sure shot arrow functions even if => is on new line\n        (\n          (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n          [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n          (\n            ([)]\\s*:) |                                                                                       # ():\n            ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:)                                                                  # [(]param: | [(]...param:\n          )\n        ) |\n        (\n          [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>]                                                              # < typeparam extends\n        ) |\n        # arrow function possible to detect only with => on same line\n        (\n          (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?                                                                                 # typeparameters\n          \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\)   # parameters\n          (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)?                                                                        # return type\n          \\s*=>                                                                                               # arrow operator\n        )\n          ))\n        )))\n      captures:\n        1: storage.modifier.tsx\n        2: keyword.operator.rest.tsx\n        3: entity.name.function.tsx variable.language.this.tsx\n        4: entity.name.function.tsx\n        5: keyword.operator.optional.tsx\n    - match: '(?x)(?:(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(override|public|private|protected|readonly)\\s+)?(?:(\\.\\.\\.)\\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))\\s*(\\??)'\n      captures:\n        1: storage.modifier.tsx\n        2: keyword.operator.rest.tsx\n        3: variable.parameter.tsx variable.language.this.tsx\n        4: variable.parameter.tsx\n        5: keyword.operator.optional.tsx\n  parameter-object-binding-element:\n    - include: comment\n    - match: |-\n        (?x)(?=((\\b(?<!\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\b(?!\\$))|(\\b(?<!\\$)0(?:b|B)[01][01_]*(n)?\\b(?!\\$))|(\\b(?<!\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\b(?!\\$))|((?<!\\$)(?:\n          (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)| # 1.1E+3\n          (?:\\b[0-9][0-9_]*(\\.)[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # 1.E+3\n          (?:\\B(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # .1E+3\n          (?:\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|                 # 1E+3\n          (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b)|                      # 1.1\n          (?:\\b[0-9][0-9_]*(\\.)(n)?\\B)|                                  # 1.\n          (?:\\B(\\.)[0-9][0-9_]*(n)?\\b)|                                  # .1\n          (?:\\b[0-9][0-9_]*(n)?\\b(?!\\.))                                 # 1\n        )(?!\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`)|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])+\\]))\\s*(:))\n      push:\n        - match: '(?=,|\\})'\n          pop: true\n        - include: object-binding-element-propertyName\n        - include: parameter-binding-element\n    - include: parameter-object-binding-pattern\n    - include: destructuring-parameter-rest\n    - include: variable-initializer\n    - include: punctuation-comma\n  parameter-object-binding-pattern:\n    - match: '(?:(\\.\\.\\.)\\s*)?(\\{)'\n      captures:\n        1: keyword.operator.rest.tsx\n        2: punctuation.definition.binding-pattern.object.tsx\n      push:\n        - match: '\\}'\n          captures:\n            0: punctuation.definition.binding-pattern.object.tsx\n          pop: true\n        - include: parameter-object-binding-element\n  parameter-type-annotation:\n    - match: (:)\n      captures:\n        1: keyword.operator.type.annotation.tsx\n      push:\n        - meta_scope: meta.type.annotation.tsx\n        - match: \"(?=[,)])|(?==[^>])\"\n          pop: true\n        - include: type\n  paren-expression:\n    - match: \\(\n      captures:\n        0: meta.brace.round.tsx\n      push:\n        - match: \\)\n          captures:\n            0: meta.brace.round.tsx\n          pop: true\n        - include: expression\n  paren-expression-possibly-arrow:\n    - match: '(?<=[(=,])\\s*(async)?(?=\\s*((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*))?\\(\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))'\n      captures:\n        1: storage.modifier.async.tsx\n      push:\n        - match: (?<=\\))\n          pop: true\n        - include: paren-expression-possibly-arrow-with-typeparameters\n    - match: '(?<=[(=,]|=>|^return|[^\\._$[:alnum:]]return)\\s*(async)?(?=\\s*((((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*))?\\()|(<))\\s*$)'\n      captures:\n        1: storage.modifier.async.tsx\n      push:\n        - match: (?<=\\))\n          pop: true\n        - include: paren-expression-possibly-arrow-with-typeparameters\n    - include: possibly-arrow-return-type\n  paren-expression-possibly-arrow-with-typeparameters:\n    - include: type-parameters\n    - match: \\(\n      captures:\n        0: meta.brace.round.tsx\n      push:\n        - match: \\)\n          captures:\n            0: meta.brace.round.tsx\n          pop: true\n        - include: expression-inside-possibly-arrow-parens\n  possibly-arrow-return-type:\n    - match: '(?<=\\)|^)\\s*(:)(?=\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*=>)'\n      captures:\n        1: meta.arrow.tsx meta.return.type.arrow.tsx keyword.operator.type.annotation.tsx\n      push:\n        - meta_content_scope: meta.arrow.tsx meta.return.type.arrow.tsx\n        - match: '(?==>|\\{|(^\\s*(export|function|class|interface|let|var|const|import|enum|namespace|module|type|abstract|declare)\\s+))'\n          pop: true\n        - include: arrow-return-type-body\n  property-accessor:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(get|set)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: storage.type.property.tsx\n  punctuation-accessor:\n    - match: '(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))'\n      captures:\n        1: punctuation.accessor.tsx\n        2: punctuation.accessor.optional.tsx\n  punctuation-comma:\n    - match: \",\"\n      scope: punctuation.separator.comma.tsx\n  punctuation-semicolon:\n    - match: ;\n      scope: punctuation.terminator.statement.tsx\n  qstring-double:\n    - match: '\"'\n      captures:\n        0: punctuation.definition.string.begin.tsx\n      push:\n        - meta_scope: string.quoted.double.tsx\n        - match: '(\")|((?:[^\\\\\\n])$)'\n          captures:\n            1: punctuation.definition.string.end.tsx\n            2: invalid.illegal.newline.tsx\n          pop: true\n        - include: string-character-escape\n  qstring-single:\n    - match: \"'\"\n      captures:\n        0: punctuation.definition.string.begin.tsx\n      push:\n        - meta_scope: string.quoted.single.tsx\n        - match: '(\\'')|((?:[^\\\\\\n])$)'\n          captures:\n            1: punctuation.definition.string.end.tsx\n            2: invalid.illegal.newline.tsx\n          pop: true\n        - include: string-character-escape\n  regex:\n    - match: '(?<!\\+\\+|--|})(?<=[=(:,\\[?+!]|^return|[^\\._$[:alnum:]]return|^case|[^\\._$[:alnum:]]case|=>|&&|\\|\\||\\*\\/)\\s*(\\/)(?![\\/*])(?=(?:[^\\/\\\\\\[\\()]|\\\\.|\\[([^\\]\\\\]|\\\\.)+\\]|\\(([^\\)\\\\]|\\\\.)+\\))+\\/([dgimsuy]+|(?![\\/\\*])|(?=\\/\\*))(?!\\s*[a-zA-Z0-9_$]))'\n      captures:\n        1: punctuation.definition.string.begin.tsx\n      push:\n        - meta_scope: string.regexp.tsx\n        - match: \"(/)([dgimsuy]*)\"\n          captures:\n            1: punctuation.definition.string.end.tsx\n            2: keyword.other.tsx\n          pop: true\n        - include: regexp\n    - match: '((?<![_$[:alnum:])\\]]|\\+\\+|--|}|\\*\\/)|((?<=^return|[^\\._$[:alnum:]]return|^case|[^\\._$[:alnum:]]case))\\s*)\\/(?![\\/*])(?=(?:[^\\/\\\\\\[]|\\\\.|\\[([^\\]\\\\]|\\\\.)*\\])+\\/([dgimsuy]+|(?![\\/\\*])|(?=\\/\\*))(?!\\s*[a-zA-Z0-9_$]))'\n      captures:\n        0: punctuation.definition.string.begin.tsx\n      push:\n        - meta_scope: string.regexp.tsx\n        - match: \"(/)([dgimsuy]*)\"\n          captures:\n            1: punctuation.definition.string.end.tsx\n            2: keyword.other.tsx\n          pop: true\n        - include: regexp\n  regex-character-class:\n    - match: '\\\\[wWsSdDtrnvf]|\\.'\n      scope: constant.other.character-class.regexp\n    - match: '\\\\([0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4})'\n      scope: constant.character.numeric.regexp\n    - match: '\\\\c[A-Z]'\n      scope: constant.character.control.regexp\n    - match: \\\\.\n      scope: constant.character.escape.backslash.regexp\n  regexp:\n    - match: '\\\\[bB]|\\^|\\$'\n      scope: keyword.control.anchor.regexp\n    - match: '\\\\[1-9]\\d*|\\\\k<([a-zA-Z_$][\\w$]*)>'\n      captures:\n        0: keyword.other.back-reference.regexp\n        1: variable.other.regexp\n    - match: '[?+*]|\\{(\\d+,\\d+|\\d+,|,\\d+|\\d+)\\}\\??'\n      scope: keyword.operator.quantifier.regexp\n    - match: \\|\n      scope: keyword.operator.or.regexp\n    - match: (\\()((\\?=)|(\\?!)|(\\?<=)|(\\?<!))\n      captures:\n        1: punctuation.definition.group.regexp\n        2: punctuation.definition.group.assertion.regexp\n        3: meta.assertion.look-ahead.regexp\n        4: meta.assertion.negative-look-ahead.regexp\n        5: meta.assertion.look-behind.regexp\n        6: meta.assertion.negative-look-behind.regexp\n      push:\n        - meta_scope: meta.group.assertion.regexp\n        - match: (\\))\n          captures:\n            1: punctuation.definition.group.regexp\n          pop: true\n        - include: regexp\n    - match: '\\((?:(\\?:)|(?:\\?<([a-zA-Z_$][\\w$]*)>))?'\n      captures:\n        0: punctuation.definition.group.regexp\n        1: punctuation.definition.group.no-capture.regexp\n        2: variable.other.regexp\n      push:\n        - meta_scope: meta.group.regexp\n        - match: \\)\n          captures:\n            0: punctuation.definition.group.regexp\n          pop: true\n        - include: regexp\n    - match: '(\\[)(\\^)?'\n      captures:\n        1: punctuation.definition.character-class.regexp\n        2: keyword.operator.negation.regexp\n      push:\n        - meta_scope: constant.other.character-class.set.regexp\n        - match: '(\\])'\n          captures:\n            1: punctuation.definition.character-class.regexp\n          pop: true\n        - match: '(?:.|(\\\\(?:[0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}))|(\\\\c[A-Z])|(\\\\.))\\-(?:[^\\]\\\\]|(\\\\(?:[0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}))|(\\\\c[A-Z])|(\\\\.))'\n          scope: constant.other.character-class.range.regexp\n          captures:\n            1: constant.character.numeric.regexp\n            2: constant.character.control.regexp\n            3: constant.character.escape.backslash.regexp\n            4: constant.character.numeric.regexp\n            5: constant.character.control.regexp\n            6: constant.character.escape.backslash.regexp\n        - include: regex-character-class\n    - include: regex-character-class\n  return-type:\n    - match: (?<=\\))\\s*(:)(?=\\s*\\S)\n      captures:\n        1: keyword.operator.type.annotation.tsx\n      push:\n        - meta_scope: meta.return.type.tsx\n        - match: \"(?<![:|&])(?=$|^|[{};,]|//)\"\n          pop: true\n        - include: return-type-core\n    - match: (?<=\\))\\s*(:)\n      captures:\n        1: keyword.operator.type.annotation.tsx\n      push:\n        - meta_scope: meta.return.type.tsx\n        - match: '(?<![:|&])((?=[{};,]|//|^\\s*$)|((?<=\\S)(?=\\s*$)))'\n          pop: true\n        - include: return-type-core\n  return-type-core:\n    - include: comment\n    - match: '(?<=[:|&])(?=\\s*\\{)'\n      push:\n        - match: '(?<=\\})'\n          pop: true\n        - include: type-object\n    - include: type-predicate-operator\n    - include: type\n  shebang:\n    - match: \\A(#!).*(?=$)\n      scope: comment.line.shebang.tsx\n      captures:\n        1: punctuation.definition.comment.tsx\n  single-line-comment-consuming-line-ending:\n    - match: '(^[ \\t]+)?((//)(?:\\s*((@)internal)(?=\\s|$))?)'\n      captures:\n        1: punctuation.whitespace.comment.leading.tsx\n        2: comment.line.double-slash.tsx\n        3: punctuation.definition.comment.tsx\n        4: storage.type.internaldeclaration.tsx\n        5: punctuation.decorator.internaldeclaration.tsx\n      push:\n        - meta_content_scope: comment.line.double-slash.tsx\n        - match: (?=^)\n          pop: true\n  statements:\n    - include: declaration\n    - include: control-statement\n    - include: after-operator-block-as-object-literal\n    - include: decl-block\n    - include: label\n    - include: expression\n    - include: punctuation-semicolon\n    - include: string\n    - include: comment\n  string:\n    - include: qstring-single\n    - include: qstring-double\n    - include: template\n  string-character-escape:\n    - match: '\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|u\\{[0-9A-Fa-f]+\\}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.|$)'\n      scope: constant.character.escape.tsx\n  super-literal:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))super\\b(?!\\$)'\n      scope: variable.language.super.tsx\n  support-function-call-identifiers:\n    - include: literal\n    - include: support-objects\n    - include: object-identifiers\n    - include: punctuation-accessor\n    - match: '(?:(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))import(?=\\s*[\\(]\\s*[\\\"\\''\\`]))'\n      scope: keyword.operator.expression.import.tsx\n  support-objects:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(arguments)\\b(?!\\$)'\n      scope: variable.language.arguments.tsx\n    - match: |-\n        (?x)(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(Array|ArrayBuffer|Atomics|BigInt|BigInt64Array|BigUint64Array|Boolean|DataView|Date|Float32Array\n        |Float64Array|Function|Generator|GeneratorFunction|Int8Array|Int16Array|Int32Array|Intl|Map|Number|Object|Proxy\n        |Reflect|RegExp|Set|SharedArrayBuffer|SIMD|String|Symbol|TypedArray\n        |Uint8Array|Uint16Array|Uint32Array|Uint8ClampedArray|WeakMap|WeakSet)\\b(?!\\$)\n      scope: support.class.builtin.tsx\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))((Eval|Internal|Range|Reference|Syntax|Type|URI)?Error)\\b(?!\\$)'\n      scope: support.class.error.tsx\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(Promise)\\b(?!\\$)'\n      scope: support.class.promise.tsx\n    - match: |-\n        (?x)(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(clear(Interval|Timeout)|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|eval|\n        isFinite|isNaN|parseFloat|parseInt|require|set(Interval|Timeout)|super|unescape|uneval)(?=\\s*\\()\n      scope: support.function.tsx\n    - match: |-\n        (?x)(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(Math)(?:\\s*(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*(?:\n        (abs|acos|acosh|asin|asinh|atan|atan2|atanh|cbrt|ceil|clz32|cos|cosh|exp|\n        expm1|floor|fround|hypot|imul|log|log10|log1p|log2|max|min|pow|random|\n        round|sign|sin|sinh|sqrt|tan|tanh|trunc)\n        |\n        (E|LN10|LN2|LOG10E|LOG2E|PI|SQRT1_2|SQRT2)))?\\b(?!\\$)\n      captures:\n        1: support.constant.math.tsx\n        2: punctuation.accessor.tsx\n        3: punctuation.accessor.optional.tsx\n        4: support.function.math.tsx\n        5: support.constant.property.math.tsx\n    - match: |-\n        (?x)(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(console)(?:\\s*(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*(\n        assert|clear|count|debug|dir|error|group|groupCollapsed|groupEnd|info|log\n        |profile|profileEnd|table|time|timeEnd|timeStamp|trace|warn))?\\b(?!\\$)\n      captures:\n        1: support.class.console.tsx\n        2: punctuation.accessor.tsx\n        3: punctuation.accessor.optional.tsx\n        4: support.function.console.tsx\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(JSON)(?:\\s*(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*(parse|stringify))?\\b(?!\\$)'\n      captures:\n        1: support.constant.json.tsx\n        2: punctuation.accessor.tsx\n        3: punctuation.accessor.optional.tsx\n        4: support.function.json.tsx\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(import)\\s*(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*(meta)\\b(?!\\$)'\n      captures:\n        1: keyword.control.import.tsx\n        2: punctuation.accessor.tsx\n        3: punctuation.accessor.optional.tsx\n        4: support.variable.property.importmeta.tsx\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(new)\\s*(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*(target)\\b(?!\\$)'\n      captures:\n        1: keyword.operator.new.tsx\n        2: punctuation.accessor.tsx\n        3: punctuation.accessor.optional.tsx\n        4: support.variable.property.target.tsx\n    - match: |-\n        (?x) (?:(\\.)|(\\?\\.(?!\\s*[[:digit:]]))) \\s* (?:\n        (?:(constructor|length|prototype|__proto__)\\b(?!\\$|\\s*(<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\\())\n        |\n        (?:(EPSILON|MAX_SAFE_INTEGER|MAX_VALUE|MIN_SAFE_INTEGER|MIN_VALUE|NEGATIVE_INFINITY|POSITIVE_INFINITY)\\b(?!\\$)))\n      captures:\n        1: punctuation.accessor.tsx\n        2: punctuation.accessor.optional.tsx\n        3: support.variable.property.tsx\n        4: support.constant.tsx\n    - match: |-\n        (?x) (?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.)) \\b (?:\n        (document|event|navigator|performance|screen|window)\n        |\n        (AnalyserNode|ArrayBufferView|Attr|AudioBuffer|AudioBufferSourceNode|AudioContext|AudioDestinationNode|AudioListener\n        |AudioNode|AudioParam|BatteryManager|BeforeUnloadEvent|BiquadFilterNode|Blob|BufferSource|ByteString|CSS|CSSConditionRule\n        |CSSCounterStyleRule|CSSGroupingRule|CSSMatrix|CSSMediaRule|CSSPageRule|CSSPrimitiveValue|CSSRule|CSSRuleList|CSSStyleDeclaration\n        |CSSStyleRule|CSSStyleSheet|CSSSupportsRule|CSSValue|CSSValueList|CanvasGradient|CanvasImageSource|CanvasPattern\n        |CanvasRenderingContext2D|ChannelMergerNode|ChannelSplitterNode|CharacterData|ChromeWorker|CloseEvent|Comment|CompositionEvent\n        |Console|ConvolverNode|Coordinates|Credential|CredentialsContainer|Crypto|CryptoKey|CustomEvent|DOMError|DOMException\n        |DOMHighResTimeStamp|DOMImplementation|DOMString|DOMStringList|DOMStringMap|DOMTimeStamp|DOMTokenList|DataTransfer\n        |DataTransferItem|DataTransferItemList|DedicatedWorkerGlobalScope|DelayNode|DeviceProximityEvent|DirectoryEntry\n        |DirectoryEntrySync|DirectoryReader|DirectoryReaderSync|Document|DocumentFragment|DocumentTouch|DocumentType|DragEvent\n        |DynamicsCompressorNode|Element|Entry|EntrySync|ErrorEvent|Event|EventListener|EventSource|EventTarget|FederatedCredential\n        |FetchEvent|File|FileEntry|FileEntrySync|FileException|FileList|FileReader|FileReaderSync|FileSystem|FileSystemSync\n        |FontFace|FormData|GainNode|Gamepad|GamepadButton|GamepadEvent|Geolocation|GlobalEventHandlers|HTMLAnchorElement\n        |HTMLAreaElement|HTMLAudioElement|HTMLBRElement|HTMLBaseElement|HTMLBodyElement|HTMLButtonElement|HTMLCanvasElement\n        |HTMLCollection|HTMLContentElement|HTMLDListElement|HTMLDataElement|HTMLDataListElement|HTMLDialogElement|HTMLDivElement\n        |HTMLDocument|HTMLElement|HTMLEmbedElement|HTMLFieldSetElement|HTMLFontElement|HTMLFormControlsCollection|HTMLFormElement\n        |HTMLHRElement|HTMLHeadElement|HTMLHeadingElement|HTMLHtmlElement|HTMLIFrameElement|HTMLImageElement|HTMLInputElement\n        |HTMLKeygenElement|HTMLLIElement|HTMLLabelElement|HTMLLegendElement|HTMLLinkElement|HTMLMapElement|HTMLMediaElement\n        |HTMLMetaElement|HTMLMeterElement|HTMLModElement|HTMLOListElement|HTMLObjectElement|HTMLOptGroupElement|HTMLOptionElement\n        |HTMLOptionsCollection|HTMLOutputElement|HTMLParagraphElement|HTMLParamElement|HTMLPreElement|HTMLProgressElement\n        |HTMLQuoteElement|HTMLScriptElement|HTMLSelectElement|HTMLShadowElement|HTMLSourceElement|HTMLSpanElement|HTMLStyleElement\n        |HTMLTableCaptionElement|HTMLTableCellElement|HTMLTableColElement|HTMLTableDataCellElement|HTMLTableElement|HTMLTableHeaderCellElement\n        |HTMLTableRowElement|HTMLTableSectionElement|HTMLTextAreaElement|HTMLTimeElement|HTMLTitleElement|HTMLTrackElement\n        |HTMLUListElement|HTMLUnknownElement|HTMLVideoElement|HashChangeEvent|History|IDBCursor|IDBCursorWithValue|IDBDatabase\n        |IDBEnvironment|IDBFactory|IDBIndex|IDBKeyRange|IDBMutableFile|IDBObjectStore|IDBOpenDBRequest|IDBRequest|IDBTransaction\n        |IDBVersionChangeEvent|IIRFilterNode|IdentityManager|ImageBitmap|ImageBitmapFactories|ImageData|Index|InputDeviceCapabilities\n        |InputEvent|InstallEvent|InstallTrigger|KeyboardEvent|LinkStyle|LocalFileSystem|LocalFileSystemSync|Location|MIDIAccess\n        |MIDIConnectionEvent|MIDIInput|MIDIInputMap|MIDIOutputMap|MediaElementAudioSourceNode|MediaError|MediaKeyMessageEvent\n        |MediaKeySession|MediaKeyStatusMap|MediaKeySystemAccess|MediaKeySystemConfiguration|MediaKeys|MediaRecorder|MediaStream\n        |MediaStreamAudioDestinationNode|MediaStreamAudioSourceNode|MessageChannel|MessageEvent|MessagePort|MouseEvent\n        |MutationObserver|MutationRecord|NamedNodeMap|Navigator|NavigatorConcurrentHardware|NavigatorGeolocation|NavigatorID\n        |NavigatorLanguage|NavigatorOnLine|Node|NodeFilter|NodeIterator|NodeList|NonDocumentTypeChildNode|Notification\n        |OfflineAudioCompletionEvent|OfflineAudioContext|OscillatorNode|PageTransitionEvent|PannerNode|ParentNode|PasswordCredential\n        |Path2D|PaymentAddress|PaymentRequest|PaymentResponse|Performance|PerformanceEntry|PerformanceFrameTiming|PerformanceMark\n        |PerformanceMeasure|PerformanceNavigation|PerformanceNavigationTiming|PerformanceObserver|PerformanceObserverEntryList\n        |PerformanceResourceTiming|PerformanceTiming|PeriodicSyncEvent|PeriodicWave|Plugin|Point|PointerEvent|PopStateEvent\n        |PortCollection|Position|PositionError|PositionOptions|PresentationConnectionClosedEvent|PresentationConnectionList\n        |PresentationReceiver|ProcessingInstruction|ProgressEvent|PromiseRejectionEvent|PushEvent|PushRegistrationManager\n        |RTCCertificate|RTCConfiguration|RTCPeerConnection|RTCSessionDescriptionCallback|RTCStatsReport|RadioNodeList|RandomSource\n        |Range|ReadableByteStream|RenderingContext|SVGAElement|SVGAngle|SVGAnimateColorElement|SVGAnimateElement|SVGAnimateMotionElement\n        |SVGAnimateTransformElement|SVGAnimatedAngle|SVGAnimatedBoolean|SVGAnimatedEnumeration|SVGAnimatedInteger|SVGAnimatedLength\n        |SVGAnimatedLengthList|SVGAnimatedNumber|SVGAnimatedNumberList|SVGAnimatedPoints|SVGAnimatedPreserveAspectRatio\n        |SVGAnimatedRect|SVGAnimatedString|SVGAnimatedTransformList|SVGAnimationElement|SVGCircleElement|SVGClipPathElement\n        |SVGCursorElement|SVGDefsElement|SVGDescElement|SVGElement|SVGEllipseElement|SVGEvent|SVGFilterElement|SVGFontElement\n        |SVGFontFaceElement|SVGFontFaceFormatElement|SVGFontFaceNameElement|SVGFontFaceSrcElement|SVGFontFaceUriElement\n        |SVGForeignObjectElement|SVGGElement|SVGGlyphElement|SVGGradientElement|SVGHKernElement|SVGImageElement|SVGLength\n        |SVGLengthList|SVGLineElement|SVGLinearGradientElement|SVGMPathElement|SVGMaskElement|SVGMatrix|SVGMissingGlyphElement\n        |SVGNumber|SVGNumberList|SVGPathElement|SVGPatternElement|SVGPoint|SVGPolygonElement|SVGPolylineElement|SVGPreserveAspectRatio\n        |SVGRadialGradientElement|SVGRect|SVGRectElement|SVGSVGElement|SVGScriptElement|SVGSetElement|SVGStopElement|SVGStringList\n        |SVGStylable|SVGStyleElement|SVGSwitchElement|SVGSymbolElement|SVGTRefElement|SVGTSpanElement|SVGTests|SVGTextElement\n        |SVGTextPositioningElement|SVGTitleElement|SVGTransform|SVGTransformList|SVGTransformable|SVGUseElement|SVGVKernElement\n        |SVGViewElement|ServiceWorker|ServiceWorkerContainer|ServiceWorkerGlobalScope|ServiceWorkerRegistration|ServiceWorkerState\n        |ShadowRoot|SharedWorker|SharedWorkerGlobalScope|SourceBufferList|StereoPannerNode|Storage|StorageEvent|StyleSheet\n        |StyleSheetList|SubtleCrypto|SyncEvent|Text|TextMetrics|TimeEvent|TimeRanges|Touch|TouchEvent|TouchList|Transferable\n        |TreeWalker|UIEvent|USVString|VRDisplayCapabilities|ValidityState|WaveShaperNode|WebGL|WebGLActiveInfo|WebGLBuffer\n        |WebGLContextEvent|WebGLFramebuffer|WebGLProgram|WebGLRenderbuffer|WebGLRenderingContext|WebGLShader|WebGLShaderPrecisionFormat\n        |WebGLTexture|WebGLTimerQueryEXT|WebGLTransformFeedback|WebGLUniformLocation|WebGLVertexArrayObject|WebGLVertexArrayObjectOES\n        |WebSocket|WebSockets|WebVTT|WheelEvent|Window|WindowBase64|WindowEventHandlers|WindowTimers|Worker|WorkerGlobalScope\n        |WorkerLocation|WorkerNavigator|XMLHttpRequest|XMLHttpRequestEventTarget|XMLSerializer|XPathExpression|XPathResult\n        |XSLTProcessor))\\b(?!\\$)\n      captures:\n        1: support.variable.dom.tsx\n        2: support.class.dom.tsx\n    - match: |-\n        (?x) (?:(\\.)|(\\?\\.(?!\\s*[[:digit:]]))) \\s* (?:\n        (ATTRIBUTE_NODE|CDATA_SECTION_NODE|COMMENT_NODE|DOCUMENT_FRAGMENT_NODE|DOCUMENT_NODE|DOCUMENT_TYPE_NODE\n        |DOMSTRING_SIZE_ERR|ELEMENT_NODE|ENTITY_NODE|ENTITY_REFERENCE_NODE|HIERARCHY_REQUEST_ERR|INDEX_SIZE_ERR\n        |INUSE_ATTRIBUTE_ERR|INVALID_CHARACTER_ERR|NO_DATA_ALLOWED_ERR|NO_MODIFICATION_ALLOWED_ERR|NOT_FOUND_ERR\n        |NOT_SUPPORTED_ERR|NOTATION_NODE|PROCESSING_INSTRUCTION_NODE|TEXT_NODE|WRONG_DOCUMENT_ERR)\n        |\n        (_content|[xyz]|abbr|above|accept|acceptCharset|accessKey|action|align|[av]Link(?:color)?|all|alt|anchors|appCodeName\n        |appCore|applets|appMinorVersion|appName|appVersion|archive|areas|arguments|attributes|availHeight|availLeft|availTop\n        |availWidth|axis|background|backgroundColor|backgroundImage|below|bgColor|body|border|borderBottomWidth|borderColor\n        |borderLeftWidth|borderRightWidth|borderStyle|borderTopWidth|borderWidth|bottom|bufferDepth|callee|caller|caption\n        |cellPadding|cells|cellSpacing|ch|characterSet|charset|checked|childNodes|chOff|cite|classes|className|clear\n        |clientInformation|clip|clipBoardData|closed|code|codeBase|codeType|color|colorDepth|cols|colSpan|compact|complete\n        |components|content|controllers|cookie|cookieEnabled|cords|cpuClass|crypto|current|data|dateTime|declare|defaultCharset\n        |defaultChecked|defaultSelected|defaultStatus|defaultValue|defaultView|defer|description|dialogArguments|dialogHeight\n        |dialogLeft|dialogTop|dialogWidth|dir|directories|disabled|display|docmain|doctype|documentElement|elements|embeds\n        |enabledPlugin|encoding|enctype|entities|event|expando|external|face|fgColor|filename|firstChild|fontFamily|fontSize\n        |fontWeight|form|formName|forms|frame|frameBorder|frameElement|frames|hasFocus|hash|headers|height|history|host\n        |hostname|href|hreflang|hspace|htmlFor|httpEquiv|id|ids|ignoreCase|images|implementation|index|innerHeight|innerWidth\n        |input|isMap|label|lang|language|lastChild|lastIndex|lastMatch|lastModified|lastParen|layer[sXY]|left|leftContext\n        |lineHeight|link|linkColor|links|listStyleType|localName|location|locationbar|longDesc|lowsrc|lowSrc|marginBottom\n        |marginHeight|marginLeft|marginRight|marginTop|marginWidth|maxLength|media|menubar|method|mimeTypes|multiline|multiple\n        |name|nameProp|namespaces|namespaceURI|next|nextSibling|nodeName|nodeType|nodeValue|noHref|noResize|noShade|notationName\n        |notations|noWrap|object|offscreenBuffering|onLine|onreadystatechange|opener|opsProfile|options|oscpu|outerHeight\n        |outerWidth|ownerDocument|paddingBottom|paddingLeft|paddingRight|paddingTop|page[XY]|page[XY]Offset|parent|parentLayer\n        |parentNode|parentWindow|pathname|personalbar|pixelDepth|pkcs11|platform|plugins|port|prefix|previous|previousDibling\n        |product|productSub|profile|profileend|prompt|prompter|protocol|publicId|readOnly|readyState|referrer|rel|responseText\n        |responseXML|rev|right|rightContext|rowIndex|rows|rowSpan|rules|scheme|scope|screen[XY]|screenLeft|screenTop|scripts\n        |scrollbars|scrolling|sectionRowIndex|security|securityPolicy|selected|selectedIndex|selection|self|shape|siblingAbove\n        |siblingBelow|size|source|specified|standby|start|status|statusbar|statusText|style|styleSheets|suffixes|summary\n        |systemId|systemLanguage|tagName|tags|target|tBodies|text|textAlign|textDecoration|textIndent|textTransform|tFoot|tHead\n        |title|toolbar|top|type|undefined|uniqueID|updateInterval|URL|URLUnencoded|useMap|userAgent|userLanguage|userProfile\n        |vAlign|value|valueType|vendor|vendorSub|version|visibility|vspace|whiteSpace|width|X[MS]LDocument|zIndex))\\b(?!\\$|\\s*(<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\\()\n      captures:\n        1: punctuation.accessor.tsx\n        2: punctuation.accessor.optional.tsx\n        3: support.constant.dom.tsx\n        4: support.variable.property.dom.tsx\n    - match: |-\n        (?x)(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(Buffer|EventEmitter|Server|Pipe|Socket|REPLServer|ReadStream|WriteStream|Stream\n        |Inflate|Deflate|InflateRaw|DeflateRaw|GZip|GUnzip|Unzip|Zip)\\b(?!\\$)\n      scope: support.class.node.tsx\n    - match: |-\n        (?x)(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(process)(?:(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))(?:\n          (arch|argv|config|connected|env|execArgv|execPath|exitCode|mainModule|pid|platform|release|stderr|stdin|stdout|title|version|versions)\n          |\n          (abort|chdir|cwd|disconnect|exit|[sg]ete?[gu]id|send|[sg]etgroups|initgroups|kill|memoryUsage|nextTick|umask|uptime|hrtime)\n        ))?\\b(?!\\$)\n      captures:\n        1: support.variable.object.process.tsx\n        2: punctuation.accessor.tsx\n        3: punctuation.accessor.optional.tsx\n        4: support.variable.property.process.tsx\n        5: support.function.process.tsx\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(exports)|(module)(?:(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))(exports|id|filename|loaded|parent|children))?)\\b(?!\\$)'\n      captures:\n        1: support.type.object.module.tsx\n        2: support.type.object.module.tsx\n        3: punctuation.accessor.tsx\n        4: punctuation.accessor.optional.tsx\n        5: support.type.object.module.tsx\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(global|GLOBAL|root|__dirname|__filename)\\b(?!\\$)'\n      scope: support.variable.object.node.tsx\n    - match: |-\n        (?x) (?:(\\.)|(\\?\\.(?!\\s*[[:digit:]]))) \\s*\n        (?:\n         (on(?:Rowsinserted|Rowsdelete|Rowenter|Rowexit|Resize|Resizestart|Resizeend|Reset|\n           Readystatechange|Mouseout|Mouseover|Mousedown|Mouseup|Mousemove|\n           Before(?:cut|deactivate|unload|update|paste|print|editfocus|activate)|\n           Blur|Scrolltop|Submit|Select|Selectstart|Selectionchange|Hover|Help|\n           Change|Contextmenu|Controlselect|Cut|Cellchange|Clock|Close|Deactivate|\n           Datasetchanged|Datasetcomplete|Dataavailable|Drop|Drag|Dragstart|Dragover|\n           Dragdrop|Dragenter|Dragend|Dragleave|Dblclick|Unload|Paste|Propertychange|Error|\n           Errorupdate|Keydown|Keyup|Keypress|Focus|Load|Activate|Afterupdate|Afterprint|Abort)\n         ) |\n         (shift|showModelessDialog|showModalDialog|showHelp|scroll|scrollX|scrollByPages|\n           scrollByLines|scrollY|scrollTo|stop|strike|sizeToContent|sidebar|signText|sort|\n           sup|sub|substr|substring|splice|split|send|set(?:Milliseconds|Seconds|Minutes|Hours|\n           Month|Year|FullYear|Date|UTC(?:Milliseconds|Seconds|Minutes|Hours|Month|FullYear|Date)|\n           Time|Hotkeys|Cursor|ZOptions|Active|Resizable|RequestHeader)|search|slice|\n           savePreferences|small|home|handleEvent|navigate|char|charCodeAt|charAt|concat|\n           contextual|confirm|compile|clear|captureEvents|call|createStyleSheet|createPopup|\n           createEventObject|to(?:GMTString|UTCString|String|Source|UpperCase|LowerCase|LocaleString)|\n           test|taint|taintEnabled|indexOf|italics|disableExternalCapture|dump|detachEvent|unshift|\n           untaint|unwatch|updateCommands|join|javaEnabled|pop|push|plugins.refresh|paddings|parse|\n           print|prompt|preference|enableExternalCapture|exec|execScript|valueOf|UTC|find|file|\n           fileModifiedDate|fileSize|fileCreatedDate|fileUpdatedDate|fixed|fontsize|fontcolor|\n           forward|fromCharCode|watch|link|load|lastIndexOf|anchor|attachEvent|atob|apply|alert|\n           abort|routeEvents|resize|resizeBy|resizeTo|recalc|returnValue|replace|reverse|reload|\n           releaseCapture|releaseEvents|go|get(?:Milliseconds|Seconds|Minutes|Hours|Month|Day|Year|FullYear|\n           Time|Date|TimezoneOffset|UTC(?:Milliseconds|Seconds|Minutes|Hours|Day|Month|FullYear|Date)|\n           Attention|Selection|ResponseHeader|AllResponseHeaders)|moveBy|moveBelow|moveTo|\n           moveToAbsolute|moveAbove|mergeAttributes|match|margins|btoa|big|bold|borderWidths|blink|back\n         ) |\n         (acceptNode|add|addEventListener|addTextTrack|adoptNode|after|animate|append|\n           appendChild|appendData|before|blur|canPlayType|captureStream|\n           caretPositionFromPoint|caretRangeFromPoint|checkValidity|clear|click|\n           cloneContents|cloneNode|cloneRange|close|closest|collapse|\n           compareBoundaryPoints|compareDocumentPosition|comparePoint|contains|\n           convertPointFromNode|convertQuadFromNode|convertRectFromNode|createAttribute|\n           createAttributeNS|createCaption|createCDATASection|createComment|\n           createContextualFragment|createDocument|createDocumentFragment|\n           createDocumentType|createElement|createElementNS|createEntityReference|\n           createEvent|createExpression|createHTMLDocument|createNodeIterator|\n           createNSResolver|createProcessingInstruction|createRange|createShadowRoot|\n           createTBody|createTextNode|createTFoot|createTHead|createTreeWalker|delete|\n           deleteCaption|deleteCell|deleteContents|deleteData|deleteRow|deleteTFoot|\n           deleteTHead|detach|disconnect|dispatchEvent|elementFromPoint|elementsFromPoint|\n           enableStyleSheetsForSet|entries|evaluate|execCommand|exitFullscreen|\n           exitPointerLock|expand|extractContents|fastSeek|firstChild|focus|forEach|get|\n           getAll|getAnimations|getAttribute|getAttributeNames|getAttributeNode|\n           getAttributeNodeNS|getAttributeNS|getBoundingClientRect|getBoxQuads|\n           getClientRects|getContext|getDestinationInsertionPoints|getElementById|\n           getElementsByClassName|getElementsByName|getElementsByTagName|\n           getElementsByTagNameNS|getItem|getNamedItem|getSelection|getStartDate|\n           getVideoPlaybackQuality|has|hasAttribute|hasAttributeNS|hasAttributes|\n           hasChildNodes|hasFeature|hasFocus|importNode|initEvent|insertAdjacentElement|\n           insertAdjacentHTML|insertAdjacentText|insertBefore|insertCell|insertData|\n           insertNode|insertRow|intersectsNode|isDefaultNamespace|isEqualNode|\n           isPointInRange|isSameNode|item|key|keys|lastChild|load|lookupNamespaceURI|\n           lookupPrefix|matches|move|moveAttribute|moveAttributeNode|moveChild|\n           moveNamedItem|namedItem|nextNode|nextSibling|normalize|observe|open|\n           parentNode|pause|play|postMessage|prepend|preventDefault|previousNode|\n           previousSibling|probablySupportsContext|queryCommandEnabled|\n           queryCommandIndeterm|queryCommandState|queryCommandSupported|queryCommandValue|\n           querySelector|querySelectorAll|registerContentHandler|registerElement|\n           registerProtocolHandler|releaseCapture|releaseEvents|remove|removeAttribute|\n           removeAttributeNode|removeAttributeNS|removeChild|removeEventListener|\n           removeItem|replace|replaceChild|replaceData|replaceWith|reportValidity|\n           requestFullscreen|requestPointerLock|reset|scroll|scrollBy|scrollIntoView|\n           scrollTo|seekToNextFrame|select|selectNode|selectNodeContents|set|setAttribute|\n           setAttributeNode|setAttributeNodeNS|setAttributeNS|setCapture|\n           setCustomValidity|setEnd|setEndAfter|setEndBefore|setItem|setNamedItem|\n           setRangeText|setSelectionRange|setSinkId|setStart|setStartAfter|setStartBefore|\n           slice|splitText|stepDown|stepUp|stopImmediatePropagation|stopPropagation|\n           submit|substringData|supports|surroundContents|takeRecords|terminate|toBlob|\n           toDataURL|toggle|toString|values|write|writeln\n         ) |\n         (all|catch|finally|race|reject|resolve|then\n         )\n        )(?=\\s*\\()\n      captures:\n        1: punctuation.accessor.tsx\n        2: punctuation.accessor.optional.tsx\n        3: support.function.event-handler.tsx\n        4: support.function.tsx\n        5: support.function.dom.tsx\n        6: support.function.promise.tsx\n  switch-statement:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?=\\bswitch\\s*\\()'\n      push:\n        - meta_scope: switch-statement.expr.tsx\n        - match: '\\}'\n          captures:\n            0: punctuation.definition.block.tsx\n          pop: true\n        - include: comment\n        - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(switch)\\s*(\\()'\n          captures:\n            1: keyword.control.switch.tsx\n            2: meta.brace.round.tsx\n          push:\n            - meta_scope: switch-expression.expr.tsx\n            - match: \\)\n              captures:\n                0: meta.brace.round.tsx\n              pop: true\n            - include: expression\n        - match: '\\{'\n          captures:\n            0: punctuation.definition.block.tsx\n          push:\n            - meta_scope: switch-block.expr.tsx\n            - match: '(?=\\})'\n              pop: true\n            - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(case|default(?=:))(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n              captures:\n                1: keyword.control.switch.tsx\n              push:\n                - meta_scope: case-clause.expr.tsx\n                - match: (?=:)\n                  pop: true\n                - include: expression\n            - match: '(:)\\s*(\\{)'\n              captures:\n                1: case-clause.expr.tsx punctuation.definition.section.case-statement.tsx\n                2: meta.block.tsx punctuation.definition.block.tsx\n              push:\n                - meta_content_scope: meta.block.tsx\n                - match: '\\}'\n                  captures:\n                    0: meta.block.tsx punctuation.definition.block.tsx\n                  pop: true\n                - include: statements\n            - match: (:)\n              captures:\n                0: case-clause.expr.tsx punctuation.definition.section.case-statement.tsx\n            - include: statements\n  template:\n    - include: template-call\n    - match: \"([_$[:alpha:]][_$[:alnum:]]*)?(`)\"\n      captures:\n        1: entity.name.function.tagged-template.tsx\n        2: punctuation.definition.string.template.begin.tsx\n      push:\n        - meta_scope: string.template.tsx\n        - match: \"`\"\n          captures:\n            0: punctuation.definition.string.template.end.tsx\n          pop: true\n        - include: template-substitution-element\n        - include: string-character-escape\n  template-call:\n    - match: '(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)(<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\''([^\\''\\\\]|\\\\.)*\\'')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\''([^\\''\\\\]|\\\\.)*\\'')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))(([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\''([^\\''\\\\]|\\\\.)*\\'')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>)*(?<!=)\\>))*(?<!=)\\>)*(?<!=)>\\s*)?`)'\n      push:\n        - meta_scope: string.template.tsx\n        - match: (?=`)\n          pop: true\n        - match: '(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*))'\n          push:\n            - match: '(?=(<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\''([^\\''\\\\]|\\\\.)*\\'')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\''([^\\''\\\\]|\\\\.)*\\'')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))(([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\''([^\\''\\\\]|\\\\.)*\\'')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>)*(?<!=)\\>))*(?<!=)\\>)*(?<!=)>\\s*)?`)'\n              pop: true\n            - include: support-function-call-identifiers\n            - match: \"([_$[:alpha:]][_$[:alnum:]]*)\"\n              scope: entity.name.function.tagged-template.tsx\n        - include: type-arguments\n    - match: '([_$[:alpha:]][_$[:alnum:]]*)?\\s*(?=(<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\''([^\\''\\\\]|\\\\.)*\\'')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\''([^\\''\\\\]|\\\\.)*\\'')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))(([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\''([^\\''\\\\]|\\\\.)*\\'')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>)*(?<!=)\\>))*(?<!=)\\>)*(?<!=)>\\s*)`)'\n      captures:\n        1: entity.name.function.tagged-template.tsx\n      push:\n        - meta_scope: string.template.tsx\n        - match: (?=`)\n          pop: true\n        - include: type-arguments\n  template-substitution-element:\n    - match: '\\$\\{'\n      captures:\n        0: punctuation.definition.template-expression.begin.tsx\n      push:\n        - meta_scope: meta.template.expression.tsx\n        - meta_content_scope: meta.embedded.line.tsx\n        - match: '\\}'\n          captures:\n            0: punctuation.definition.template-expression.end.tsx\n          pop: true\n        - include: expression\n  template-type:\n    - include: template-call\n    - match: \"([_$[:alpha:]][_$[:alnum:]]*)?(`)\"\n      captures:\n        1: entity.name.function.tagged-template.tsx\n        2: punctuation.definition.string.template.begin.tsx\n      push:\n        - meta_scope: string.template.tsx\n        - match: \"`\"\n          captures:\n            0: punctuation.definition.string.template.end.tsx\n          pop: true\n        - include: template-type-substitution-element\n        - include: string-character-escape\n  template-type-substitution-element:\n    - match: '\\$\\{'\n      captures:\n        0: punctuation.definition.template-expression.begin.tsx\n      push:\n        - meta_scope: meta.template.expression.tsx\n        - meta_content_scope: meta.embedded.line.tsx\n        - match: '\\}'\n          captures:\n            0: punctuation.definition.template-expression.end.tsx\n          pop: true\n        - include: type\n  ternary-expression:\n    - match: '(?!\\?\\.\\s*[^[:digit:]])(\\?)(?!\\?)'\n      captures:\n        1: keyword.operator.ternary.tsx\n      push:\n        - match: \\s*(:)\n          captures:\n            1: keyword.operator.ternary.tsx\n          pop: true\n        - include: expression\n  this-literal:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))this\\b(?!\\$)'\n      scope: variable.language.this.tsx\n  type:\n    - include: comment\n    - include: type-string\n    - include: numeric-literal\n    - include: type-primitive\n    - include: type-builtin-literals\n    - include: type-parameters\n    - include: type-tuple\n    - include: type-object\n    - include: type-conditional\n    - include: type-operators\n    - include: type-fn-type-parameters\n    - include: type-paren-or-function-parameters\n    - include: type-function-return-type\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(readonly)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))\\s*'\n      captures:\n        1: storage.modifier.tsx\n    - include: type-name\n  type-alias-declaration:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?\\b(type)\\b\\s+([_$[:alpha:]][_$[:alnum:]]*)\\s*'\n      captures:\n        1: keyword.control.export.tsx\n        2: storage.modifier.tsx\n        3: storage.type.type.tsx\n        4: entity.name.type.alias.tsx\n      push:\n        - meta_scope: meta.type.declaration.tsx\n        - match: '(?=\\}|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))'\n          pop: true\n        - include: comment\n        - include: type-parameters\n        - match: '(=)\\s*(intrinsic)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n          captures:\n            1: keyword.operator.assignment.tsx\n            2: keyword.control.intrinsic.tsx\n          push:\n            - match: '(?=\\}|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))'\n              pop: true\n            - include: type\n        - match: (=)\\s*\n          captures:\n            1: keyword.operator.assignment.tsx\n          push:\n            - match: '(?=\\}|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))'\n              pop: true\n            - include: type\n  type-annotation:\n    - match: (:)(?=\\s*\\S)\n      captures:\n        1: keyword.operator.type.annotation.tsx\n      push:\n        - meta_scope: meta.type.annotation.tsx\n        - match: '(?<![:|&])((?=$|^|[,);\\}\\]]|//)|(?==[^>])|((?<=[\\}>\\]\\)]|[_$[:alpha:]])\\s*(?=\\{)))'\n          pop: true\n        - include: type\n    - match: (:)\n      captures:\n        1: keyword.operator.type.annotation.tsx\n      push:\n        - meta_scope: meta.type.annotation.tsx\n        - match: '(?<![:|&])((?=[,);\\}\\]]|//)|(?==[^>])|(?=^\\s*$)|((?<=\\S)(?=\\s*$))|((?<=[\\}>\\]\\)]|[_$[:alpha:]])\\s*(?=\\{)))'\n          pop: true\n        - include: type\n  type-arguments:\n    - match: \\<\n      captures:\n        0: punctuation.definition.typeparameters.begin.tsx\n      push:\n        - meta_scope: meta.type.parameters.tsx\n        - match: \\>\n          captures:\n            0: punctuation.definition.typeparameters.end.tsx\n          pop: true\n        - include: type-arguments-body\n  type-arguments-body:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(_)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      captures:\n        0: keyword.operator.type.tsx\n    - include: type\n    - include: punctuation-comma\n  type-builtin-literals:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(this|true|false|undefined|null|object)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: support.type.builtin.tsx\n  type-conditional:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(extends)\\s+'\n      captures:\n        1: storage.modifier.tsx\n      push:\n        - match: (?<=:)\n          pop: true\n        - match: \\?\n          captures:\n            0: keyword.operator.ternary.tsx\n          push:\n            - match: \":\"\n              captures:\n                0: keyword.operator.ternary.tsx\n              pop: true\n            - include: type\n        - include: type\n  type-fn-type-parameters:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(abstract)\\s+)?(new)\\b(?=\\s*\\<)'\n      captures:\n        1: meta.type.constructor.tsx storage.modifier.tsx\n        2: meta.type.constructor.tsx keyword.control.new.tsx\n      push:\n        - match: (?<=>)\n          pop: true\n        - include: comment\n        - include: type-parameters\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(abstract)\\s+)?(new)\\b\\s*(?=\\()'\n      captures:\n        1: storage.modifier.tsx\n        2: keyword.control.new.tsx\n      push:\n        - meta_scope: meta.type.constructor.tsx\n        - match: (?<=\\))\n          pop: true\n        - include: function-parameters\n    - match: |-\n        (?x)(\n          (?=\n            [(]\\s*(\n              ([)]) |\n              (\\.\\.\\.) |\n              ([_$[:alnum:]]+\\s*(\n                ([:,?=])|\n                ([)]\\s*=>)\n              ))\n            )\n          )\n        )\n      push:\n        - meta_scope: meta.type.function.tsx\n        - match: (?<=\\))\n          pop: true\n        - include: function-parameters\n  type-function-return-type:\n    - match: (=>)(?=\\s*\\S)\n      captures:\n        1: storage.type.function.arrow.tsx\n      push:\n        - meta_scope: meta.type.function.return.tsx\n        - match: '(?<!=>)(?<![|&])(?=[,\\]\\)\\{\\}=;>:\\?]|//|$)'\n          pop: true\n        - include: type-function-return-type-core\n    - match: \"=>\"\n      captures:\n        0: storage.type.function.arrow.tsx\n      push:\n        - meta_scope: meta.type.function.return.tsx\n        - match: '(?<!=>)(?<![|&])((?=[,\\]\\)\\{\\}=;:\\?>]|//|^\\s*$)|((?<=\\S)(?=\\s*$)))'\n          pop: true\n        - include: type-function-return-type-core\n  type-function-return-type-core:\n    - include: comment\n    - match: '(?<==>)(?=\\s*\\{)'\n      push:\n        - match: '(?<=\\})'\n          pop: true\n        - include: type-object\n    - include: type-predicate-operator\n    - include: type\n  type-name:\n    - match: '([_$[:alpha:]][_$[:alnum:]]*)\\s*(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*(<)'\n      captures:\n        1: entity.name.type.module.tsx\n        2: punctuation.accessor.tsx\n        3: punctuation.accessor.optional.tsx\n        4: meta.type.parameters.tsx punctuation.definition.typeparameters.begin.tsx\n      push:\n        - meta_content_scope: meta.type.parameters.tsx\n        - match: (>)\n          captures:\n            1: meta.type.parameters.tsx punctuation.definition.typeparameters.end.tsx\n          pop: true\n        - include: type-arguments-body\n    - match: '([_$[:alpha:]][_$[:alnum:]]*)\\s*(<)'\n      captures:\n        1: entity.name.type.tsx\n        2: meta.type.parameters.tsx punctuation.definition.typeparameters.begin.tsx\n      push:\n        - meta_content_scope: meta.type.parameters.tsx\n        - match: (>)\n          captures:\n            1: meta.type.parameters.tsx punctuation.definition.typeparameters.end.tsx\n          pop: true\n        - include: type-arguments-body\n    - match: '([_$[:alpha:]][_$[:alnum:]]*)\\s*(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))'\n      captures:\n        1: entity.name.type.module.tsx\n        2: punctuation.accessor.tsx\n        3: punctuation.accessor.optional.tsx\n    - match: \"[_$[:alpha:]][_$[:alnum:]]*\"\n      scope: entity.name.type.tsx\n  type-object:\n    - match: '\\{'\n      captures:\n        0: punctuation.definition.block.tsx\n      push:\n        - meta_scope: meta.object.type.tsx\n        - match: '\\}'\n          captures:\n            0: punctuation.definition.block.tsx\n          pop: true\n        - include: comment\n        - include: method-declaration\n        - include: indexer-declaration\n        - include: indexer-mapped-type-declaration\n        - include: field-declaration\n        - include: type-annotation\n        - match: \\.\\.\\.\n          captures:\n            0: keyword.operator.spread.tsx\n          push:\n            - match: '(?=\\}|;|,|$)|(?<=\\})'\n              pop: true\n            - include: type\n        - include: punctuation-comma\n        - include: punctuation-semicolon\n        - include: type\n  type-operators:\n    - include: typeof-operator\n    - match: '([&|])(?=\\s*\\{)'\n      captures:\n        0: keyword.operator.type.tsx\n      push:\n        - match: '(?<=\\})'\n          pop: true\n        - include: type-object\n    - match: \"[&|]\"\n      captures:\n        0: keyword.operator.type.tsx\n      push:\n        - match: (?=\\S)\n          pop: true\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))keyof(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: keyword.operator.expression.keyof.tsx\n    - match: (\\?|\\:)\n      scope: keyword.operator.ternary.tsx\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))infer(?=\\s+[_$[:alpha:]])'\n      scope: keyword.operator.expression.infer.tsx\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))import(?=\\s*\\()'\n      scope: keyword.operator.expression.import.tsx\n  type-parameters:\n    - match: (<)\n      captures:\n        1: punctuation.definition.typeparameters.begin.tsx\n      push:\n        - meta_scope: meta.type.parameters.tsx\n        - match: (>)\n          captures:\n            1: punctuation.definition.typeparameters.end.tsx\n          pop: true\n        - include: comment\n        - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(extends)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n          scope: storage.modifier.tsx\n        - include: type\n        - include: punctuation-comma\n        - match: (=)(?!>)\n          scope: keyword.operator.assignment.tsx\n  type-paren-or-function-parameters:\n    - match: \\(\n      captures:\n        0: meta.brace.round.tsx\n      push:\n        - meta_scope: meta.type.paren.cover.tsx\n        - match: \\)\n          captures:\n            0: meta.brace.round.tsx\n          pop: true\n        - match: |-\n            (?x)(?:(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(public|private|protected|readonly)\\s+)?(?:(\\.\\.\\.)\\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))\\s*(\\??)(?=\\s*(:\\s*(\n              (<) |\n              ([(]\\s*(\n                ([)]) |\n                (\\.\\.\\.) |\n                ([_$[:alnum:]]+\\s*(\n                  ([:,?=])|\n                  ([)]\\s*=>)\n                ))\n              ))\n            )) |\n            (:\\s*(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))Function(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))) |\n            (:\\s*((<\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*))))))))\n          captures:\n            1: storage.modifier.tsx\n            2: keyword.operator.rest.tsx\n            3: entity.name.function.tsx variable.language.this.tsx\n            4: entity.name.function.tsx\n            5: keyword.operator.optional.tsx\n        - match: '(?x)(?:(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(public|private|protected|readonly)\\s+)?(?:(\\.\\.\\.)\\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))\\s*(\\??)(?=:)'\n          captures:\n            1: storage.modifier.tsx\n            2: keyword.operator.rest.tsx\n            3: variable.parameter.tsx variable.language.this.tsx\n            4: variable.parameter.tsx\n            5: keyword.operator.optional.tsx\n        - include: type-annotation\n        - match: \",\"\n          scope: punctuation.separator.parameter.tsx\n        - include: type\n  type-predicate-operator:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(asserts)\\s+)?(?!asserts)(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))\\s(is)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      captures:\n        1: keyword.operator.type.asserts.tsx\n        2: variable.parameter.tsx variable.language.this.tsx\n        3: variable.parameter.tsx\n        4: keyword.operator.expression.is.tsx\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(asserts)\\s+(?!is)(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      captures:\n        1: keyword.operator.type.asserts.tsx\n        2: variable.parameter.tsx variable.language.this.tsx\n        3: variable.parameter.tsx\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))asserts(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: keyword.operator.type.asserts.tsx\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))is(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: keyword.operator.expression.is.tsx\n  type-primitive:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(string|number|bigint|boolean|symbol|any|void|never|unknown)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: support.type.primitive.tsx\n  type-string:\n    - include: qstring-single\n    - include: qstring-double\n    - include: template-type\n  type-tuple:\n    - match: '\\['\n      captures:\n        0: meta.brace.square.tsx\n      push:\n        - meta_scope: meta.type.tuple.tsx\n        - match: '\\]'\n          captures:\n            0: meta.brace.square.tsx\n          pop: true\n        - match: \\.\\.\\.\n          scope: keyword.operator.rest.tsx\n        - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))([_$[:alpha:]][_$[:alnum:]]*)\\s*(\\?)?\\s*(:)'\n          captures:\n            1: entity.name.label.tsx\n            2: keyword.operator.optional.tsx\n            3: punctuation.separator.label.tsx\n        - include: type\n        - include: punctuation-comma\n  typeof-operator:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))typeof(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      captures:\n        0: keyword.operator.expression.typeof.tsx\n      push:\n        - match: '(?=[,);}\\]=>:&|{\\?]|$|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))'\n          pop: true\n        - include: expression\n  undefined-literal:\n    - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))undefined(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))'\n      scope: constant.language.undefined.tsx\n  var-expr:\n    - match: '(?=(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?\\b(var|let)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.)))'\n      push:\n        - meta_scope: meta.var.expr.tsx\n        - match: '(?!(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?\\b(var|let)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.)))((?=;|}|((?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+)|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))|((?<!^let|[^\\._$[:alnum:]]let|^var|[^\\._$[:alnum:]]var)(?=\\s*$)))'\n          pop: true\n        - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?\\b(var|let)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))\\s*'\n          captures:\n            1: keyword.control.export.tsx\n            2: storage.modifier.tsx\n            3: storage.type.tsx\n          push:\n            - match: (?=\\S)\n              pop: true\n        - include: destructuring-variable\n        - include: var-single-variable\n        - include: variable-initializer\n        - include: comment\n        - match: (,)\\s*((?!\\S)|(?=\\/\\/))\n          captures:\n            1: punctuation.separator.comma.tsx\n          push:\n            - match: '(?<!,)(((?==|;|}|((?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+)|^\\s*$))|((?<=\\S)(?=\\s*$)))'\n              pop: true\n            - include: single-line-comment-consuming-line-ending\n            - include: comment\n            - include: destructuring-variable\n            - include: var-single-variable\n            - include: punctuation-comma\n        - include: punctuation-comma\n    - match: '(?=(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?\\b(const(?!\\s+enum\\b))(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.)))'\n      captures:\n        1: keyword.control.export.tsx\n        2: storage.modifier.tsx\n        3: storage.type.tsx\n      push:\n        - meta_scope: meta.var.expr.tsx\n        - match: '(?!(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?\\b(const(?!\\s+enum\\b))(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.)))((?=;|}|((?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+)|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))|((?<!^const|[^\\._$[:alnum:]]const)(?=\\s*$)))'\n          pop: true\n        - match: '(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?\\b(const(?!\\s+enum\\b))(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))\\s*'\n          captures:\n            1: keyword.control.export.tsx\n            2: storage.modifier.tsx\n            3: storage.type.tsx\n          push:\n            - match: (?=\\S)\n              pop: true\n        - include: destructuring-const\n        - include: var-single-const\n        - include: variable-initializer\n        - include: comment\n        - match: (,)\\s*((?!\\S)|(?=\\/\\/))\n          captures:\n            1: punctuation.separator.comma.tsx\n          push:\n            - match: '(?<!,)(((?==|;|}|((?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+)|^\\s*$))|((?<=\\S)(?=\\s*$)))'\n              pop: true\n            - include: single-line-comment-consuming-line-ending\n            - include: comment\n            - include: destructuring-const\n            - include: var-single-const\n            - include: punctuation-comma\n        - include: punctuation-comma\n  var-single-const:\n    - match: |-\n        (?x)([_$[:alpha:]][_$[:alnum:]]*)(?=\\s*\n        # function assignment |\n        (=\\s*(\n          ((async\\s+)?(\n            (function\\s*[(<*]) |\n            (function\\s+) |\n            ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n          )) |\n          ((async\\s*)?(\n            ((<\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n            # sure shot arrow functions even if => is on new line\n        (\n          (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n          [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n          (\n            ([)]\\s*:) |                                                                                       # ():\n            ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:)                                                                  # [(]param: | [(]...param:\n          )\n        ) |\n        (\n          [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>]                                                              # < typeparam extends\n        ) |\n        # arrow function possible to detect only with => on same line\n        (\n          (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?                                                                                 # typeparameters\n          \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\)   # parameters\n          (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)?                                                                        # return type\n          \\s*=>                                                                                               # arrow operator\n        )\n          ))\n        )) |\n        # typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n        (:\\s*(\n          (<) |\n          ([(]\\s*(\n            ([)]) |\n            (\\.\\.\\.) |\n            ([_$[:alnum:]]+\\s*(\n              ([:,?=])|\n              ([)]\\s*=>)\n            ))\n          ))\n        )) |\n        (:\\s*(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))Function(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))) |\n        (:\\s*((<\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*))))))) |\n        (:\\s*(=>|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n          ((async\\s+)?(\n            (function\\s*[(<*]) |\n            (function\\s+) |\n            ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n          )) |\n          ((async\\s*)?(\n            ((<\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n            # sure shot arrow functions even if => is on new line\n        (\n          (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n          [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n          (\n            ([)]\\s*:) |                                                                                       # ():\n            ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:)                                                                  # [(]param: | [(]...param:\n          )\n        ) |\n        (\n          [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>]                                                              # < typeparam extends\n        ) |\n        # arrow function possible to detect only with => on same line\n        (\n          (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?                                                                                 # typeparameters\n          \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\)   # parameters\n          (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)?                                                                        # return type\n          \\s*=>                                                                                               # arrow operator\n        )\n          ))\n        )))\n      captures:\n        1: meta.definition.variable.tsx variable.other.constant.tsx entity.name.function.tsx\n      push:\n        - meta_scope: meta.var-single-variable.expr.tsx\n        - match: '(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+))'\n          pop: true\n        - include: var-single-variable-type-annotation\n    - match: \"([_$[:alpha:]][_$[:alnum:]]*)\"\n      captures:\n        1: meta.definition.variable.tsx variable.other.constant.tsx\n      push:\n        - meta_scope: meta.var-single-variable.expr.tsx\n        - match: '(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+))'\n          pop: true\n        - include: var-single-variable-type-annotation\n  var-single-variable:\n    - match: |-\n        (?x)([_$[:alpha:]][_$[:alnum:]]*)(\\!)?(?=\\s*\n        # function assignment |\n        (=\\s*(\n          ((async\\s+)?(\n            (function\\s*[(<*]) |\n            (function\\s+) |\n            ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n          )) |\n          ((async\\s*)?(\n            ((<\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n            # sure shot arrow functions even if => is on new line\n        (\n          (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n          [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n          (\n            ([)]\\s*:) |                                                                                       # ():\n            ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:)                                                                  # [(]param: | [(]...param:\n          )\n        ) |\n        (\n          [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>]                                                              # < typeparam extends\n        ) |\n        # arrow function possible to detect only with => on same line\n        (\n          (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?                                                                                 # typeparameters\n          \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\)   # parameters\n          (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)?                                                                        # return type\n          \\s*=>                                                                                               # arrow operator\n        )\n          ))\n        )) |\n        # typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n        (:\\s*(\n          (<) |\n          ([(]\\s*(\n            ([)]) |\n            (\\.\\.\\.) |\n            ([_$[:alnum:]]+\\s*(\n              ([:,?=])|\n              ([)]\\s*=>)\n            ))\n          ))\n        )) |\n        (:\\s*(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))Function(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))) |\n        (:\\s*((<\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*))))))) |\n        (:\\s*(=>|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n          ((async\\s+)?(\n            (function\\s*[(<*]) |\n            (function\\s+) |\n            ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n          )) |\n          ((async\\s*)?(\n            ((<\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n            # sure shot arrow functions even if => is on new line\n        (\n          (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n          [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n          (\n            ([)]\\s*:) |                                                                                       # ():\n            ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:)                                                                  # [(]param: | [(]...param:\n          )\n        ) |\n        (\n          [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>]                                                              # < typeparam extends\n        ) |\n        # arrow function possible to detect only with => on same line\n        (\n          (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?                                                                                 # typeparameters\n          \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\)   # parameters\n          (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)?                                                                        # return type\n          \\s*=>                                                                                               # arrow operator\n        )\n          ))\n        )))\n      captures:\n        1: meta.definition.variable.tsx entity.name.function.tsx\n        2: keyword.operator.definiteassignment.tsx\n      push:\n        - meta_scope: meta.var-single-variable.expr.tsx\n        - match: '(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+))'\n          pop: true\n        - include: var-single-variable-type-annotation\n    - match: '([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])(\\!)?'\n      captures:\n        1: meta.definition.variable.tsx variable.other.constant.tsx\n        2: keyword.operator.definiteassignment.tsx\n      push:\n        - meta_scope: meta.var-single-variable.expr.tsx\n        - match: '(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+))'\n          pop: true\n        - include: var-single-variable-type-annotation\n    - match: '([_$[:alpha:]][_$[:alnum:]]*)(\\!)?'\n      captures:\n        1: meta.definition.variable.tsx variable.other.readwrite.tsx\n        2: keyword.operator.definiteassignment.tsx\n      push:\n        - meta_scope: meta.var-single-variable.expr.tsx\n        - match: '(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+))'\n          pop: true\n        - include: var-single-variable-type-annotation\n  var-single-variable-type-annotation:\n    - include: type-annotation\n    - include: string\n    - include: comment\n  variable-initializer:\n    - match: (?<!=|!)(=)(?!=)(?=\\s*\\S)(?!\\s*.*=>\\s*$)\n      captures:\n        1: keyword.operator.assignment.tsx\n      push:\n        - match: '(?=$|^|[,);}\\]]|((?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+))'\n          pop: true\n        - include: expression\n    - match: (?<!=|!)(=)(?!=)\n      captures:\n        1: keyword.operator.assignment.tsx\n      push:\n        - match: '(?=[,);}\\]]|((?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+))|(?=^\\s*$)|(?<=\\S)(?<!=)(?=\\s*$)'\n          pop: true\n        - include: expression\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/Verilog.sublime-syntax",
    "content": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: Verilog\nfile_extensions:\n  - v\n  - V\nscope: source.verilog\ncontexts:\n  main:\n    - match: '^\\s*(module|function|primitive)\\s+\\b([a-zA-Z_][a-zA-Z0-9_]*)\\b'\n      scope: meta.entity.module.verilog\n      captures:\n        1: storage.type.verilog\n        2: entity.name.type.class.verilog\n    - match: '^\\s*(?!else)(?!begin)([a-zA-Z_][a-zA-Z0-9_]*)\\s+([a-zA-Z_][a-zA-Z0-9_]*)\\s*(\\()'\n      scope: meta.definition.verilog\n      captures:\n        1: entity.name.type.class.verilog\n        2: entity.name.type.instance.verilog\n        3: keyword.operator.parenthesis.round.verilog\n    - match: '^\\s*(?!else)(?!begin)([a-zA-Z_][a-zA-Z0-9_]*)\\s+([#])(\\()([ ._+`,a-zA-Z0-9]+)(\\))\\s+([a-zA-Z_][a-zA-Z0-9_]*)\\s*(\\()'\n      scope: meta.definition.withparameter.verilog\n      captures:\n        1: entity.name.type.class.verilog\n        2: keyword.other.verilog\n        3: keyword.operator.parenthesis.round.verilog\n        4: keyword.other.verilog\n        5: keyword.operator.parenthesis.round.verilog\n        6: entity.name.type.instance.verilog\n        7: keyword.operator.parenthesis.round.verilog\n    - match: '^\\s*\\b(?!else)(?!begin)([a-zA-Z_][a-zA-Z0-9_]*)\\b\\s+([#])'\n      scope: meta.definition.withparameter.verilog\n      captures:\n        1: entity.name.type.class.verilog\n        2: keyword.other.verilog\n    - match: '^\\s*(defparam)\\s+([a-zA-Z_][a-zA-Z0-9_]*)(.[a-zA-Z_][a-zA-Z0-9_]*)\\s*(=)'\n      scope: meta.definition.defparam.verilog\n      captures:\n        1: keyword.other.verilog\n        2: entity.name.type.instance.verilog\n        3: meta.module.parameters.verilog\n        4: keyword.other.verilog\n    - match: \\b(automatic|cell|config|deassign|defparam|design|disable|edge|endconfig|endgenerate|endspecify|endtable|endtask|event|generate|genvar|ifnone|incdir|include|instance|liblist|library|localparam|macromodule|negedge|noshowcancelled|posedge|pulsestyle_onevent|pulsestyle_ondetect|real|realtime|scalared|showcancelled|specify|specparam|table|task|time|use|vectored)\\b\n      scope: keyword.other.verilog\n    - match: \"(#[0-9]+)\"\n      scope: keyword.delay.verilog\n    - match: \\b(initial|always|wait|force|release|assign)\\b\n      scope: keyword.control.verilog\n    - match: \\b(begin|end|fork|join)\\b\n      scope: keyword.other.verilog\n    - match: \\b(forever|repeat|while|for|if|else|case|casex|casez|default|endcase)\\b\n      scope: keyword.control.verilog\n    - match: '^\\s*(`include)\\s+([\"<].*[\">])'\n      scope: meta.include.verilog\n      captures:\n        1: meta.preprocessor.verilog\n        2: entity.name.type.include.verilog\n    - match: '^\\s*(`ifdef|`ifndef|`undef|`define)\\s+([a-zA-Z_][a-zA-Z0-9_]*)\\b'\n      scope: meta.preprocessor.ifdef.verilog\n      captures:\n        1: meta.preprocessor.verilog\n        2: constant.other.define.verilog\n    - match: '`(celldefine|default_nettype|define|else|elsif|endcelldefine|endif|ifdef|ifndef|include|line|nounconnected_drive|resetall|timescale|unconnected_drive|undef)\\b'\n      scope: meta.preprocessor.verilog\n    - match: \"[.][_a-zA-Z0-9]+\"\n      scope: meta.module.parameters.verilog\n    - match: '`\\b([a-zA-Z_][a-zA-Z0-9_]*)\\b'\n      scope: constant.other.define.verilog\n    - include: comments\n    - match: \\b(endmodule|endfunction|endprimitive)\\b\n      scope: storage.type.verilog\n    - match: '^\\s*\\b([a-zA-Z_][a-zA-Z0-9_]*)\\b\\s*(:)\\s*'\n      scope: meta.case.verilog\n      captures:\n        1: entity.name.state.verilog\n        2: keyword.operator.bitwise.verilog\n    - include: all-types\n    - match: (==|===|!=|!==|<=|>=|<|>)\n      scope: keyword.operator.comparison.verilog\n    - match: (\\-|\\+|\\*|\\/|%)\n      scope: keyword.operator.arithmetic.verilog\n    - match: (!|&&|\\|\\|)\n      scope: keyword.operator.logical.verilog\n    - match: (&|\\||\\^|~|<<|>>|\\?|:)\n      scope: keyword.operator.bitwise.verilog\n    - match: \"({|})\"\n      scope: keyword.operator.parenthesis.curly.verilog\n    - match: (\\(|\\))\n      scope: keyword.operator.parenthesis.round.verilog\n    - match: '(\\[|\\])'\n      scope: keyword.operator.parenthesis.square.verilog\n    - match: \"([;,])\"\n      scope: keyword.delimiter.verilog\n    - match: (#|@|=)\n      scope: keyword.other.verilog\n    - match: '\\b(output|input|inout|and|nand|nor|or|xor|xnor|buf|not|bufif[01]|notif[01]|r?[npc]mos|tran|r?tranif[01]|pullup|pulldown)\\b'\n      scope: support.type.verilog\n    - match: '((\\b\\d+)?''s?([bB]\\s*(([0-1_xXzZ?]+)|(`[A-Z]+[_0-9a-zA-Z]*))|[oO]\\s*(([0-7_xXzZ?]+)|(`[A-Z]+[_0-9a-zA-Z]*))|[dD]\\s*(([0-9_xXzZ?]+)|(`[A-Z]+[_0-9a-zA-Z]*))|[hH]\\s*(([0-9a-fA-F_xXzZ?]+)|(`[A-Z]+[_0-9a-zA-Z]*)))((e|E)(\\+|-)?[0-9]+)?\\b)|(\\b\\d+\\b)'\n      scope: constant.numeric.verilog\n    - include: strings\n    - match: '\\$\\b([a-zA-Z_][a-zA-Z0-9_]*)\\b'\n      scope: support.function.verilog\n  all-types:\n    - include: storage-type-verilog\n    - include: storage-modifier-verilog\n  comments:\n    - match: /\\*\n      captures:\n        0: punctuation.definition.comment.verilog\n      push:\n        - meta_scope: comment.block.verilog\n        - match: \\*/\n          captures:\n            0: punctuation.definition.comment.verilog\n          pop: true\n    - match: (//).*$\\n?\n      scope: comment.line.double-slash.verilog\n      captures:\n        1: punctuation.definition.comment.verilog\n  storage-modifier-verilog:\n    - match: '\\b(signed|unsigned|small|medium|large|supply[01]|strong[01]|pull[01]|weak[01]|highz[01])\\b'\n      scope: storage.modifier.verilog\n  storage-type-verilog:\n    - match: '\\b(wire|tri|tri[01]|supply[01]|wand|triand|wor|trior|trireg|reg|parameter|integer)\\b'\n      scope: storage.type.verilog\n  strings:\n    - match: '\"'\n      captures:\n        0: punctuation.definition.string.begin.verilog\n      push:\n        - meta_scope: string.quoted.double.verilog\n        - match: '\"'\n          captures:\n            0: punctuation.definition.string.end.verilog\n          pop: true\n        - match: \\\\.\n          scope: constant.character.escape.verilog\n    - match: \"'\"\n      captures:\n        0: punctuation.definition.string.begin.verilog\n      push:\n        - meta_scope: string.quoted.single.verilog\n        - match: \"'\"\n          captures:\n            0: punctuation.definition.string.end.verilog\n          pop: true\n        - match: \\\\.\n          scope: constant.character.escape.verilog\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/VimHelp.sublime-syntax",
    "content": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/syntax.html\nscope: source.vimhelp\nfile_extensions:\n  # shortname\n  - vimhelp\n\n# $VIMRUNTIME/syntax/help.vim\ncontexts:\n  main:\n    - match: '(?<=^\\s*)(vim?|ex):\\s*([a-z]+(=[^\\s:]+)?(\\s+|:))+'\n      scope: comment.line.modeline.vimhelp\n    - match: '^[-A-Z .][-A-Z0-9 .()_]*(?=\\s+\\*|$)'\n      scope: markup.heading.headline.vimhelp\n    - match: '^(===.*===)$'\n      captures:\n        1: punctuation.definition.heading.1.setext.vimhelp\n      push:\n        - meta_scope: markup.heading.1.setext.vimhelp\n        - match: '\\t|  '\n          pop: true\n    - match: '^(---.*---)$'\n      captures:\n        1: punctuation.definition.heading.2.setext.vimhelp\n      push:\n        - meta_scope: markup.heading.2.setext.vimhelp\n        - match: '\\t|  '\n          pop: true\n    - match: '(?:^| )(>)$'\n      captures:\n        1: punctuation.definition.blockquote.begin.vimhelp\n      push:\n        - meta_scope: markup.quote.vimhelp\n        - match: '^(<)'\n          captures:\n            1: punctuation.definition.blockquote.end.vimhelp\n          pop: true\n        - match: '^(?=\\S)'\n          pop: true\n    - match: '(?<!\\\\)(\\|)([#-)!+-~]+)(\\|)'\n      captures:\n        1: punctuation.definition.link.begin.vimhelp\n        2: markup.underline.link.vimhelp\n        3: punctuation.definition.link.end.vimhelp\n    - match: '(\\*)([#-)!+-~]+)(\\*)(?:\\s|$)'\n      captures:\n        1: punctuation.definition.constant.begin.vimhelp\n        2: entity.name.reference.link.vimhelp\n        3: punctuation.definition.constant.end.vimhelp\n    - match: '\\bVim version [0-9][0-9.a-z]*'\n      scope: variable.language.vimhelp\n    - match: 'N?VIM REFERENCE.*'\n      scope: variable.language.vimhelp\n    - match: '('')([a-z]{2,}|t_..)('')'\n      captures:\n        1: punctuation.definition.link.option.begin.vimhelp\n        2: markup.underline.link.option.vimhelp\n        3: punctuation.definition.link.option.end.vimhelp\n    - match: '(`)([^` \\t]+)(`)'\n      captures:\n        1: punctuation.definition.link.command.begin.vimhelp\n        2: markup.underline.link.command.vimhelp\n        3: punctuation.definition.link.command.end.vimhelp\n    - match: '(?<=^|[^a-z\"\\[])(`)([^`]+)(`)(?=[^a-z\\t.\"'']|$)'\n      captures:\n        1: punctuation.definition.link.command.begin.vimhelp\n        2: markup.underline.link.command.vimhelp\n        3: punctuation.definition.link.command.end.vimhelp\n    - match: '(?<=\\s*)(.*?)(?=\\s?)(~)$'\n      captures:\n        1: markup.heading.header.vimhelp\n        2: punctuation.definition.keyword.vimhelp\n    - match: '(.*) (?=`$)'\n      captures:\n        1: variable.other.graphic.vimhelp\n        2: punctuation.definition.keyword.vimhelp\n    - match: '\\b(note:?|Note:?|NOTE:?|Notes:?)\\b'\n      scope: constant.other.note.vimhelp\n    - match: '\\b(WARNING:?|Warning:)\\b'\n      scope: constant.other.warning.vimhelp\n    - match: '\\b(DEPRECATED:?|Deprecated:)\\b'\n      scope: constant.other.deprecated.vimhelp\n    - match: '(\\{)([-_a-zA-Z0-9''\"*+/:%#=\\[\\]<>.,]+)(\\})'\n      captures:\n        1: punctuation.definition.constant.begin.vimhelp\n        2: constant.numeric.vimhelp\n        3: punctuation.definition.constant.end.vimhelp\n    - match: '\\[(range|line|count|offset|\\+?cmd|(\\+|-|)num|\\+\\+opt)\\]'\n      scope: constant.numeric.vimhelp\n    - match: '\\[(arg(uments)?|ident|addr|group)\\]'\n      scope: constant.numeric.vimhelp\n    - match: '\\[(readonly|fifo|socket|converted|crypted)\\]'\n      scope: constant.numeric.vimhelp\n    - match: '<[-a-zA-Z0-9_]+>'\n      scope: markup.underline.link.key.vimhelp\n    - match: '<[SCM]-.>'\n      scope: markup.underline.link.key.vimhelp\n    - match: 'CTRL-((SHIFT-)?.|Break|PageUp|PageDown|Insert|Del|\\{char\\})'\n      scope: markup.underline.link.key.vimhelp\n    - match: '(META|ALT)-.'\n      scope: markup.underline.link.key.vimhelp\n    - match: '\\b(((https?|ftp|gopher)://|(mailto|file|news):)[^'' \t<>\"]+|(www|web|w3)[a-z0-9_-]*\\.[a-z0-9._-]+\\.[^'' \t<>\"]+)[a-zA-Z0-9/]'\n      scope: markup.underline.link.url.vimhelp\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/apt-source-list.sublime-syntax",
    "content": "%YAML 1.2\n---\n# See http://www.sublimetext.com/docs/syntax.html\nname: debsources\nfile_extensions:\n  - sources.list\nscope: text.apt-source-list\ncontexts:\n  main:\n    - include: comments\n    - match: ^[\\w-]+\n      scope: constant.language.apt-source-list\n    - match: \\w+://\\S+\n      scope: markup.underline.link.apt-source-list\n      push: distribution\n    - match: \\bmain\\b\n      scope: support.class.apt-source-list\n    - match: \\buniverse\\b\n      scope: support.constant.apt-source-list\n    - match: \\brestricted\\b\n      scope: storage.modifier.apt-source-list\n    - match: \\bmultiverse\\b\n      scope: keyword.other.apt-source-list\n    - match: '[\\w-]+'\n      scope: constant.other.apt-source-list\n\n  comments:\n    - match: '#'\n      scope: punctuation.definition.comment.apt-source-list\n      push: line_comment\n\n  line_comment:\n    - meta_scope: comment.line.apt-source-list\n    - match: $\n      pop: true\n\n  distribution:\n    - match: \\S+\n      scope: support.type.apt-source-list\n      pop: 1\n    - match: $\n      pop: 1\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/gnuplot.sublime-syntax",
    "content": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: gnuplot\nfile_extensions:\n  - gp\n  - gpl\n  - gnuplot\n  - gnu\n  - plot\n  - plt\nscope: source.gnuplot\ncontexts:\n  main:\n    - include: number\n    - include: string_single\n    - include: string_double\n    - match: '\\b(for)\\b\\s*(\\[)'\n      comment: |\n        gnuplot iteration statement.\n                    There are two forms:\n                        numeric [n = 1:2{:inc}]\n                        string based [str in \"x y z\"]\n                        but both can also iterate over lists etc, so this is kept loose.\n      captures:\n        1: keyword.other.iteration.gnuplot\n        2: punctuation.definition.range.begin.gnuplot\n      push:\n        - meta_scope: meta.structure.iteration.gnuplot\n        - match: '\\]'\n          captures:\n            0: punctuation.definition.range.end.gnuplot\n          pop: true\n        - include: number\n        - include: operator\n        - include: string_double\n        - include: string_single\n        - match: \":\"\n          scope: punctuation.separator.range.gnuplot\n        - match: '\\b([a-zA-Z]\\w*)\\b\\s*(=|in)'\n          scope: variable-assignment.range.gnuplot\n        - match: '(?i:[^\\s(pi|e)\\]])'\n          scope: invalid.illegal.expected-range-separator.gnuplot\n    - match: '\\['\n      comment: \"gnuplot range statement [a:b]. Lots of things are legal, still more make no sense!\"\n      captures:\n        0: punctuation.definition.range.begin.gnuplot\n      push:\n        - meta_scope: meta.structure.range.gnuplot\n        - match: '\\]'\n          captures:\n            0: punctuation.definition.range.end.gnuplot\n          pop: true\n        - include: number\n        - include: operator\n        - match: \":\"\n          scope: punctuation.separator.range.gnuplot\n        - match: '(?i:[^\\s(pi|e)\\]])'\n          scope: invalid.illegal.expected-range-separator.gnuplot\n    - match: \\\\.\n      scope: constant.character.escape.gnuplot\n    - match: '(?<!\\$)(#)(?!\\{).*$\\n?'\n      scope: comment.line.number-sign.gnuplot\n      captures:\n        1: punctuation.definition.comment.gnuplot\n    - match: for\n      comment: introduce in gnuplot 4.3.\n      scope: keyword.other.iteration.gnuplot\n    - match: \\b(angles|arrow|autoscale|bars|border|boxwidth|clabel|clip|cntrparam|colorbox|contour|decimalsign|dgrid3d|dummy|encoding|fit|format|grid|hidden3d|historysize|isosamples|key|label|locale|logscale|macros|bmargin|lmargin|rmargin|tmargin|mapping|mouse|multiplot|offsets|origin|output|palette|parametric|pm3d|pointsize|polar|print|rrange|trange|urange|vrange|samples|size|style|surface|tics|ticscale|ticslevel|timestamp|timefmt|title|view|xyplane|x2data|xdata|y2data|ydata|z2data|zdata|x2label|xlabel|y2label|ylabel|z2label|zlabel|x2range|xrange|y2range|yrange|z2range|zrange|mx2tics|mxtics|my2tics|mytics|mz2tics|mztics|nomx2tics|nomxtics|nomy2tics|nomytics|nomz2tics|nomztics|nox2tics|noxtics|noy2tics|noytics|noz2tics|noztics|x2tics|xtics|y2tics|ytics|z2tics|ztics|x2dtics|x2mtics|xdtics|xmtics|y2dtics|y2mtics|ydtics|ymtics|z2dtics|z2mtics|zdtics|zmtics|x2zeroaxis|xzeroaxis|y2zeroaxis|yzeroaxis|z2zeroaxis|zeroaxis|zzeroaxis|zero|)\\b\n      scope: keyword.other.setting.gnuplot\n    - match: \\b(cd|call|clear|exit|plot|splot|help|load|pause|quit|fit|replot|if|FIT_LIMIT|FIT_MAXITER|FIT_START_LAMBDA|FIT_LAMBDA_FACTOR|FIT_LOG|FIT_SCRIPT|print|pwd|reread|reset|save|show|test|!|functions|var)\\b\n      comment: missuse of scopes alert! Just for pretty colours\n      scope: keyword.other.command.gnuplot\n    - match: \\b(abs|acos|acosh|arg|asin|asinh|atan|atan2|atanh|besj0|besj1|besy0|besy1|ceil|cos|cosh|erf|erfc|exp|floor|gamma|ibeta|igamma|imag|int|inverf|invnorm|lambertw|lgamma|log|log10|norm|rand|real|sgn|sin|sinh|sqrt|tan|tanh)\\b\n      scope: support.function.gnuplot\n    - match: \\b(gprintf|sprintf|strlen|strstrt|substr|system|word|words)\\b\n      scope: support.function.string.gnuplot\n    - match: \\b(on|off|default|inside|outside|lmargin|rmargin|tmargin|bmargin|at|left|right|center|top|bottom|center|vertical|horizontal|Left|Right|noreverse|noinvert|samplen|spacing|width|height|noautotitle|columnheader|title|noenhanced|nobox|linestyle|ls|linetype|lt|linewidth|lw)\\b\n      scope: constant.other.type.gnuplot\n    - match: \\b(aed512|aed767|aifm|aqua|bitgraph|cgm|corel|dumb|dxf|eepic|emf|emtex|epslatex|epson_180dpi|epson_60dpi|epson_lx800|fig|gif|gpic|hp2623A|hp2648|hp500c|hpdj|hpgl|hpljii|hppj|imagen|jpeg|kc_tek40xx|km_tek40xx|latex|mf|mif|mp|nec_cp6|okidata|pbm|pcl5|pdf|png|postscript|pslatex|pstex|pstricks|qms|regis|selanar|starc|svg|tandy_60dpi|tek40xx|tek410x|texdraw|tgif|tkcanvas|tpic|unknown|vttek)\\b\n      scope: constant.other.terminal.gnuplot\n    - match: \\b(u(sing)?|t(it(le)?)?|notit(le)?|w(i(th)?)?|steps|fs(teps)?|notitle|l(i(nes)?)?|linespoints|via)\\b\n      scope: keyword.modifier.gnuplot\n    - match: |-\n        (?x:\n          \\b # Start with a word boundary\n          (?=\\b[\\w$]*(\\(|.*=))  # Look-ahead for a bracket or equals\n          (?![^(]*\\)) # negative look ahead for a closing bracket without an opening one. This stops a from matching in f(a)\n          (         # Group variable name\n            [A-Za-z]      # A letter\n            [\\w$]*      # Any word chars or $\n          )         # That is it for the name.\n        )\n      comment: user defined function / variable\n      scope: variable.other.gnuplot\n    - match: \\b(if)\\b\n      scope: keyword.control.gnuplot\n    - match: \\b(show)\\b\n      captures:\n        0: keyword.other.command.gnuplot\n      push:\n        - meta_scope: keyword.line.show.gnuplot\n        - meta_content_scope: keyword.line.show.gnuplot\n        - match: (?!\\#)($\\n?)\n          pop: true\n        - include: main\n    - match: \\b(set)\\b\\s*\\b(terminal|term)\\b\n      captures:\n        1: keyword.other.command.gnuplot\n        2: keyword.other.setting.gnuplot\n      push:\n        - meta_scope: keyword.line.set.terminal.gnuplot\n        - match: (?!\\#)($\\n?)\n          pop: true\n        - include: main\n    - match: \\b(set)\\b\\s*\\b(key)\\b\n      captures:\n        1: keyword.other.command.gnuplot\n        2: keyword.other.setting.gnuplot\n      push:\n        - meta_scope: keyword.line.set.key.gnuplot\n        - match: (?!\\#)($\\n?)\n          pop: true\n        - include: main\n    - match: \\b(set|unset)\\b\\s*(?!\\b(terminal|key|for)\\b)\n      captures:\n        1: keyword.other.command.gnuplot\n        2: keyword.other.setting.gnuplot\n      push:\n        - meta_scope: keyword.line.set.gnuplot\n        - meta_content_scope: keyword.line.set.gnuplot\n        - match: (?!\\#)($\\n?)\n          pop: true\n        - include: main\n  number:\n    - match: |-\n        (?x:         # turn on extended mode\n            -?         # an optional minus\n            (?:\n              0        # a zero\n              |        # ...or...\n              [1-9]    # a 1-9 character\n              \\d*      # followed by zero or more digits\n            )\n            (?:\n              \\.       # a period\n              \\d+      # followed by one or more digits\n              (?:\n                [eE]   # an e character\n                [+-]?  # followed by an option +/-\n                \\d+    # followed by one or more digits\n              )?       # make exponent optional\n            )?         # make decimal portion optional\n        )\n      comment: borrowed from textmate book\n      scope: constant.numeric.gnuplot\n  operator:\n    - match: \\s*(==|~=|>|>=|<|<=|&|&&|:|\\||\\|\\||\\+|-|\\*|\\.\\*|/|\\./|\\\\|\\.\\\\|\\^|\\.\\^)\\s*\n      comment: Operator symbols\n      scope: keyword.operator.symbols.matlab\n  string_double:\n    - match: '\"'\n      captures:\n        0: punctuation.definition.string.begin.gnuplot\n      push:\n        - meta_scope: string.quoted.double.gnuplot\n        - match: '\"'\n          captures:\n            0: punctuation.definition.string.end.gnuplot\n          pop: true\n        - match: '\\\\[\\$`\"\\\\\\n]'\n          scope: constant.character.escape.gnuplot\n  string_single:\n    - match: \"'\"\n      captures:\n        0: punctuation.definition.string.begin.gnuplot\n      push:\n        - meta_scope: string.quoted.single.gnuplot\n        - match: \"'\"\n          captures:\n            0: punctuation.definition.string.end.gnuplot\n          pop: true\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/log.sublime-syntax",
    "content": "%YAML 1.2\n---\n# See http://www.sublimetext.com/docs/3/syntax.html\nfile_extensions:\n  - log\nscope: text.log\nvariables:\n  ipv4_part: (?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\n  hours_minutes_seconds: (?:[01]\\d|2[0-3]):(?:[0-5]\\d):(?:[0-5]\\d)\n  error: \\b(?i:fail(?:ure|ed)?|error|exception|fatal|critical)\\b\n  warning: \\b(?i:warn(?:ing)?)\\b\n  info: \\b(?i:info)\\b\n  debug: \\b(?i:debug)\\b\ncontexts:\n  main:\n    - include: log_level_lines\n    - include: main_without_log_level_line\n  main_without_log_level_line:\n    - match: (\\w+)(=)\n      captures:\n        1: variable.parameter.log\n        2: keyword.operator.assignment.log\n    - match: (')([^']*)(')\n      scope: string.quoted.single.log\n      captures:\n        1: punctuation.definition.string.begin.log\n        3: punctuation.definition.string.end.log\n    - match: \\\"\n      captures:\n        1: punctuation.definition.string.begin.log\n      push: double_quoted_string\n    - include: dates\n    - include: ip_addresses\n    - include: numbers\n    - include: log_levels\n    #- include: scope:text.html.markdown#autolink-inet\n    - match: \\b\\w+:/{2,3}\n      scope: markup.underline.link.scheme.log\n      push: url-host\n  log_level_lines:\n    - match: (?=.*{{error}})\n      push:\n        - error_line_meta\n        - main_pop_at_eol\n    - match: (?=.*{{warning}})\n      push:\n        - warning_line_meta\n        - main_pop_at_eol\n    - match: (?=.*{{info}})\n      push:\n        - info_line_meta\n        - main_pop_at_eol\n    - match: (?=.*{{debug}})\n      push:\n        - debug_line_meta\n        - main_pop_at_eol\n  log_levels:\n    - match: '{{error}}'\n      scope: markup.error.log\n    - match: '{{warning}}'\n      scope: markup.warning.log\n    - match: '{{info}}'\n      scope: markup.info.log\n    - match: '{{debug}}'\n      scope: markup.info.log\n  error_line_meta:\n    - meta_scope: meta.annotation.error-line.log\n    - include: immediately_pop\n  warning_line_meta:\n    - meta_scope: meta.annotation.warning-line.log\n    - include: immediately_pop\n  info_line_meta:\n    - meta_scope: meta.annotation.info-line.log\n    - include: immediately_pop\n  debug_line_meta:\n    - meta_scope: meta.annotation.debug-line.log\n    - include: immediately_pop\n  immediately_pop:\n    - match: ''\n      pop: true\n  pop_at_eol:\n    - match: $\n      pop: true\n  main_pop_at_eol:\n    - include: main_without_log_level_line\n    - include: pop_at_eol\n  dates:\n    - match: \\b\\d{4}-\\d{2}-\\d{2}(?=\\b|T)\n      scope: meta.date.log meta.number.integer.decimal.log constant.numeric.value.log\n      push: maybe_date_time_separator\n    - match: \\b\\d{4}/\\d{2}/\\d{2}(?=\\b|T)\n      scope: meta.date.log meta.number.integer.decimal.log constant.numeric.value.log\n      push: maybe_date_time_separator\n    - match: \\b(?={{hours_minutes_seconds}})\n      push: time\n  time:\n    - match: (?:{{hours_minutes_seconds}})(?:(\\.)\\d{3})?\\b\n      scope: meta.time.log meta.number.integer.decimal.log constant.numeric.value.log\n      captures:\n        1: punctuation.separator.decimal.log\n    - include: immediately_pop\n  maybe_date_time_separator:\n    - match: T(?={{hours_minutes_seconds}})\n      scope: meta.date.log meta.time.log keyword.other.log\n      set: time\n    - include: immediately_pop\n  ip_addresses:\n    - match: \\b(?=(?:{{ipv4_part}}\\.){3}{{ipv4_part}}\\b)\n      push:\n        - meta_scope: meta.ipaddress.v4.log meta.number.integer.decimal.log\n        - match: \\d+\n          scope: constant.numeric.value.log\n        - match: \\.\n          scope: punctuation.separator.sequence.log\n        - include: immediately_pop\n    - match: (?=(?:\\h{0,4}:){2,6}\\h{1,4}\\b)\n      push:\n        - meta_scope: meta.ipaddress.v6.log meta.number.integer.hexadecimal.log\n        - match: \\h{1,4}\n          scope: constant.numeric.value.log\n        - match: ':'\n          scope: punctuation.separator.sequence.log\n        - include: immediately_pop\n  numbers:\n    - match: \\b(0x)(\\h+)(?:(\\.)(\\h+))?\\b\n      scope: meta.number.float.hexadecimal.log\n      captures:\n        1: constant.numeric.base.log\n        2: constant.numeric.value.log\n        3: constant.numeric.value.log punctuation.separator.decimal.log\n        4: constant.numeric.value.log\n    - match: \\b\\d+(\\.)\\d+\\b\n      scope: meta.number.float.log constant.numeric.value.log\n      captures:\n        1: punctuation.separator.decimal.log\n    - match: \\b\\d+\\b\n      scope: meta.number.integer.log constant.numeric.value.log\n  url-host:\n    - meta_content_scope: markup.underline.link.host.log\n    - match: \\[\n      scope: punctuation.section.brackets.begin.log\n      push:\n        - match: \\]\n          scope: punctuation.section.brackets.end.log\n          pop: true\n        - include: ip_addresses\n    - match: '[^:/\\s]+'\n    - match: ''\n      set: url-after-host\n  url-after-host:\n    - match: (:)(\\d+)\n      scope: markup.underline.link.port.log\n      captures:\n        1: punctuation.separator.mapping.port.log\n        2: constant.numeric.value.log\n    #- include: scope:text.html.markdown#url-escaped-chars\n    - match: (%)\\h{2}\n      scope: markup.underline.link.path.log constant.character.escape.url.log\n      captures:\n        1: punctuation.definition.escape.log\n    # After a valid domain, zero or more non-space non-< characters may follow\n    - match: (?=[?!.,:*_~]*[\\s<]) # Trailing punctuation (specifically, ?, !, ., ,, :, *, _, and ~) will not be considered part of the autolink, though they may be included in the interior of the link\n      pop: true\n    - match: \\( # When an autolink ends in ), we scan the entire autolink for the total number of parentheses. If there is a greater number of closing parentheses than opening ones, we don’t consider the last character part of the autolink, in order to facilitate including an autolink inside a parenthesis\n      push:\n        - meta_scope: markup.underline.link.path.log\n        - match: (?=[?!.,:*_~]*[\\s<])\n          pop: true\n        - match: \\)\n          pop: true\n    - match: (?=\\)[?!.,:*_~]*[\\s<])\n      pop: true\n    - match: '[^?!.,:*_~\\s<&()%]+|\\S'\n      scope: markup.underline.link.path.log\n    - include: immediately_pop\n  double_quoted_string:\n    - meta_scope: string.quoted.double.log\n    - match: \\\\\"\n      scope: constant.character.escape.log\n    - match: \\\\n\n      scope: constant.character.escape.log\n    - match: \\\"\n      scope: punctuation.definition.string.end.log\n      pop: true\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/show-nonprintable.sublime-syntax",
    "content": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: Highlight non-printables\nfile_extensions:\n    - show-nonprintable\nscope: whitespace\ncontexts:\n  main:\n    - match: \"·\"\n      scope: support.function.show-nonprintable.space\n    - match: \"├─*┤\"\n      scope: constant.character.escape.show-nonprintable.tab\n    - match: \"↹\"\n      scope: constant.character.escape.show-nonprintable.tab\n    - match: \"␊\"\n      scope: keyword.operator.show-nonprintable.line-feed\n    - match: \"␍\"\n      scope: string.show-nonprintable.carriage-return\n    - match: \"␀\"\n      scope: entity.other.attribute-name.show-nonprintable.null\n    - match: \"␇\"\n      scope: entity.other.attribute-name.show-nonprintable.bell\n    - match: \"␛\"\n      scope: entity.other.attribute-name.show-nonprintable.escape\n    - match: \"␈\"\n      scope: entity.other.attribute-name.show-nonprintable.backspace\n    - match: \"\\\\\\\\x[A-Z0-9][A-Z0-9]\"\n      scope: comment.block.show-nonprintable.backspace\n    - match: \"\\\\\\\\u\\\\{[a-z0-9]+\\\\}\"\n      scope: comment.block.show-nonprintable.backspace\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/syntax_test_csv.csv",
    "content": "# SYNTAX TEST \"CSV.sublime-syntax\"\nForename,Surname,House No.,Street,City,Postcode\n#^^^^^^^ meta.field-1\n#       ^ punctuation.separator.sequence\n#        ^^^^^^^ meta.field-2\n#               ^ punctuation.separator.sequence\n#                ^^^^^^^^^ meta.field-3\n#                         ^ punctuation.separator.sequence\n#                          ^^^^^^ meta.field-4\n#                                ^ punctuation.separator.sequence\n#                                 ^^^^ meta.field-1\n#                                     ^ punctuation.separator.sequence\n#                                      ^^^^^^^^ meta.field-2\nJohn,Doe,87,Logon Road,Citiville,TU43 6GH\n#^^^ meta.field-1\n#   ^ punctuation.separator.sequence\n#    ^^^ meta.field-2\n#       ^ punctuation.separator.sequence\n#        ^^ meta.field-3\n#          ^ punctuation.separator.sequence\n#           ^^^^^^^^^^ meta.field-4\n#                     ^ punctuation.separator.sequence\n#                      ^^^^^^^^^ meta.field-1\n#                               ^ punctuation.separator.sequence\n#                                ^^^^^^^^ meta.field-2\nJane,Doe,22,\"\"\"Fun\"\" Street\",\"The City, County\",FA90 1XA\n#^^^ meta.field-1\n#   ^ punctuation.separator.sequence\n#    ^^^ meta.field-2\n#       ^ punctuation.separator.sequence\n#        ^^ meta.field-3\n#          ^ punctuation.separator.sequence\n#           ^^^^^^^^^^^^^^^^ meta.field-4 string.quoted.double\n#            ^^ constant.character.escape\n#                 ^^ constant.character.escape\n#                           ^ punctuation.separator.sequence\n#                            ^ meta.field-1 string.quoted.double punctuation.definition.string.begin\n#                             ^^^^^^^^^^^^^^^^^ meta.field-1 string.quoted.double\n#                                             ^ meta.field-1 string.quoted.double punctuation.definition.string.end\n#                                              ^ punctuation.separator.sequence\n#                                               ^^^^^^^^ meta.field-2\nFred,Bloggs,\"19\",\"Street\n#^^^ meta.field-1\n#   ^ punctuation.separator.sequence\n#    ^^^^^^ meta.field-2\n#          ^ punctuation.separator.sequence\n#            ^^^ meta.field-3 string.quoted.double\n#               ^ punctuation.separator.sequence\n#                ^ meta.field-4 punctuation.definition.string.begin\n#                ^^^^^^^^ meta.field-4 string.quoted.double\nSpanning Multiple \"\"\n#^^^^^^^^^^^^^^^^^^^^ meta.field-4 string.quoted.double\n#                 ^^ constant.character.escape\nLines\",Citee,P0stc0d3\n#^^^^^ meta.field-4 string.quoted.double\n#    ^ meta.field-4 punctuation.definition.string.end\n#     ^ punctuation.separator.sequence\n#      ^^^^^ meta.field-1\n#           ^ punctuation.separator.sequence\n#            ^^^^^^^^ meta.field-2\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/syntax_test_helphelp.txt",
    "content": "# SYNTAX TEST \"VimHelp.sublime-syntax\"\n*helphelp.txt*\tNvim\n# <- punctuation.definition.constant.begin\n#^^^^^^^^^^^^ entity.name.reference.link\n#            ^ punctuation.definition.constant.end\n\n\n\t\t  VIM REFERENCE MANUAL    by Bram Moolenaar\n#   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ variable.language\n\n\nHelp on help files\t\t\t\t\t*helphelp*\n\n                                      Type |gO| to see the table of contents.\n#                                          ^ punctuation.definition.link.begin\n#                                           ^^ markup.underline.link\n#                                             ^ punctuation.definition.link.end\n\n==============================================================================\n#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ punctuation.definition.heading.1.setext\n1. Help commands\t\t\t\t\t*online-help*\n#^^^^^^^^^^^^^^^ markup.heading.1.setext\n\n\t\t\t*help* *<Help>* *:h* *:help* *<F1>* *i_<F1>* *i_<Help>*\n<Help>\t\tor\n#^^^^^ markup.underline.link.key\n:h[elp]\t\t\tOpen a window and display the help file in read-only\n\t\t\tmode.  If there is a help window open already, use\n\t\t\tthat one.  Otherwise, if the current window uses the\n\t\t\tfull width of the screen or is at least 80 characters\n\t\t\twide, the help window will appear just above the\n\t\t\tcurrent window.  Otherwise the new window is put at\n\t\t\tthe very top.\n\t\t\tThe 'helplang' option is used to select a language, if\n#      ^ punctuation.definition.link.option.begin\n#       ^^^^^^^^ markup.underline.link.option\n#               ^ punctuation.definition.link.option.end\n\t\t\tthe main help file is available in several languages.\n\n\t\t\tType |gO| to see the table of contents.\n\n\t\t\t\t\t\t*{subject}* *E149* *E661*\n:h[elp] {subject}\tLike \":help\", additionally jump to the tag {subject}.\n\t\t\tFor example:  >\n\t\t\t\t:help options\n\n<\t\t\t{subject} can include wildcards such as \"*\", \"?\" and\n#   ^ punctuation.definition.constant.begin\n#    ^^^^^^^ constant.numeric\n#           ^ punctuation.definition.constant.end\n\t\t\t\"[a-z]\":\n\t\t\t   :help z?\tjump to help for any \"z\" command\n\t\t\t   :help z.\tjump to the help for \"z.\"\n\t\t\tBut when a tag exists it is taken literally:\n\t\t\t   :help :?\tjump to help for \":?\"\n\n\t\t\tIf there is no full match for the pattern, or there\n\t\t\tare several matches, the \"best\" match will be used.\n\t\t\tA sophisticated algorithm is used to decide which\n\t\t\tmatch is better than another one.  These items are\n\t\t\tconsidered in the computation:\n\t\t\t- A match with same case is much better than a match\n\t\t\t  with different case.\n\t\t\t- A match that starts after a non-alphanumeric\n\t\t\t  character is better than a match in the middle of a\n\t\t\t  word.\n\t\t\t- A match at or near the beginning of the tag is\n\t\t\t  better than a match further on.\n\t\t\t- The more alphanumeric characters match, the better.\n\t\t\t- The shorter the length of the match, the better.\n\n\t\t\tThe 'helplang' option is used to select a language, if\n\t\t\tthe {subject} is available in several languages.\n\t\t\tTo find a tag in a specific language, append \"@ab\",\n\t\t\twhere \"ab\" is the two-letter language code.  See\n\t\t\t|help-translated|.\n\n\t\t\tNote that the longer the {subject} you give, the less\n\t\t\tmatches will be found.  You can get an idea how this\n\t\t\tall works by using commandline completion (type CTRL-D\n#                                                  ^^^^^^ markup.underline.link.key\n\t\t\tafter \":help subject\" |c_CTRL-D|).\n\t\t\tIf there are several matches, you can have them listed\n\t\t\tby hitting CTRL-D.  Example: >\n\t\t\t\t:help cont<Ctrl-D>\n\n<\t\t\tInstead of typing \":help CTRL-V\" to search for help\n\t\t\tfor CTRL-V you can type: >\n\t\t\t\t:help ^V\n<\t\t\tThis also works together with other characters, for\n\t\t\texample to find help for CTRL-V in Insert mode: >\n\t\t\t\t:help i^V\n<\n\t\t\tIt is also possible to first do \":help\" and then\n\t\t\tuse \":tag {pattern}\" in the help window.  The\n\t\t\t\":tnext\" command can then be used to jump to other\n\t\t\tmatches, \"tselect\" to list matches and choose one. >\n\t\t\t\t:help index\n\t\t\t\t:tselect /.*mode\n\n<\t\t\tWhen there is no argument you will see matches for\n\t\t\t\"help\", to avoid listing all possible matches (that\n\t\t\twould be very slow).\n\t\t\tThe number of matches displayed is limited to 300.\n\n\t\t\tThe `:help` command can be followed by '|' and another\n\t\t\tcommand, but you don't need to escape the '|' inside a\n\t\t\thelp command.  So these both work: >\n\t\t\t\t:help |\n\t\t\t\t:help k| only\n<\t\t\tNote that a space before the '|' is seen as part of\n#   ^^^^ constant.other.note\n\t\t\tthe \":help\" argument.\n\t\t\tYou can also use <NL> or <CR> to separate the help\n\t\t\tcommand from a following command.  You need to type\n\t\t\tCTRL-V first to insert the <NL> or <CR>.  Example: >\n\t\t\t\t:help so<C-V><CR>only\n<\n\n:h[elp]! [subject]\tLike \":help\", but in non-English help files prefer to\n\t\t\tfind a tag in a file with the same language as the\n\t\t\tcurrent file.  See |help-translated|.\n\n\t\t\t\t\t\t\t*:helpc* *:helpclose*\n:helpc[lose]\t\tClose one help window, if there is one.\n\t\t\tVim will try to restore the window layout (including\n\t\t\tcursor position) to the same layout it was before\n\t\t\topening the help window initially.  This might cause\n\t\t\ttriggering several autocommands.\n\n\t\t\t\t\t\t\t*:helpg* *:helpgrep*\n:helpg[rep] {pattern}[@xx]\n\t\t\tSearch all help text files and make a list of lines\n\t\t\tin which {pattern} matches.  Jumps to the first match.\n\t\t\tThe optional [@xx] specifies that only matches in the\n\t\t\t\"xx\" language are to be found.\n\t\t\tYou can navigate through the matches with the\n\t\t\t|quickfix| commands, e.g., |:cnext| to jump to the\n\t\t\tnext one.  Or use |:cwindow| to get the list of\n\t\t\tmatches in the quickfix window.\n\t\t\t{pattern} is used as a Vim regexp |pattern|.\n\t\t\t'ignorecase' is not used, add \"\\c\" to ignore case.\n\t\t\tExample for case sensitive search: >\n\t\t\t\t:helpgrep Uganda\n<\t\t\tExample for case ignoring search: >\n\t\t\t\t:helpgrep uganda\\c\n<\t\t\tExample for searching in French help: >\n\t\t\t\t:helpgrep backspace@fr\n<\t\t\tThe pattern does not support line breaks, it must\n\t\t\tmatch within one line.  You can use |:grep| instead,\n\t\t\tbut then you need to get the list of help files in a\n\t\t\tcomplicated way.\n\t\t\tCannot be followed by another command, everything is\n\t\t\tused as part of the pattern.  But you can use\n\t\t\t|:execute| when needed.\n\t\t\tCompressed help files will not be searched (Fedora\n\t\t\tcompresses the help files).\n\n\t\t\t\t\t\t\t*:lh* *:lhelpgrep*\n:lh[elpgrep] {pattern}[@xx]\n\t\t\tSame as \":helpgrep\", except the location list is used\n\t\t\tinstead of the quickfix list.  If the help window is\n\t\t\talready opened, then the location list for that window\n\t\t\tis used.  Otherwise, a new help window is opened and\n\t\t\tthe location list for that window is set.  The\n\t\t\tlocation list for the current window is not changed\n\t\t\tthen.\n\n\t\t\t\t\t\t\t*:exu* *:exusage*\n:exu[sage]\t\tShow help on Ex commands.  Added to simulate the Nvi\n\t\t\tcommand.\n\n\t\t\t\t\t\t\t*:viu* *:viusage*\n:viu[sage]\t\tShow help on Normal mode commands.  Added to simulate\n\t\t\tthe Nvi command.\n\nWhen no argument is given to |:help| the file given with the 'helpfile' option\nwill be opened.  Otherwise the specified tag is searched for in all \"doc/tags\"\nfiles in the directories specified in the 'runtimepath' option.\n\nIf you would like to open the help in the current window, see this tip:\n|help-curwin|.\n\nThe initial height of the help window can be set with the 'helpheight' option\n(default 20).\n\t\t\t\t\t\t*help-buffer-options*\nWhen the help buffer is created, several local options are set to make sure\nthe help text is displayed as it was intended:\n    'iskeyword'\t\tnearly all ASCII chars except ' ', '*', '\"' and '|'\n    'foldmethod'\t\"manual\"\n    'tabstop'\t\t8\n    'arabic'\t\toff\n    'binary'\t\toff\n    'buflisted'\t\toff\n    'cursorbind'\toff\n    'diff'\t\toff\n    'foldenable'\toff\n    'list'\t\toff\n    'modifiable'\toff\n    'number'\t\toff\n    'relativenumber'\toff\n    'rightleft'\t\toff\n    'scrollbind'\toff\n    'spell'\t\toff\n\nJump to specific subjects by using tags.  This can be done in two ways:\n- Use the \"CTRL-]\" command while standing on the name of a command or option.\n  This only works when the tag is a keyword.  \"<C-Leftmouse>\" and\n  \"g<LeftMouse>\" work just like \"CTRL-]\".\n- use the \":ta {subject}\" command.  This also works with non-keyword\n  characters.\n\nUse CTRL-T or CTRL-O to jump back.\nUse \":q\" to close the help window.\n\nIf there are several matches for an item you are looking for, this is how you\ncan jump to each one of them:\n1. Open a help window\n2. Use the \":tag\" command with a slash prepended to the tag.  E.g.: >\n\t:tag /min\n3. Use \":tnext\" to jump to the next matching tag.\n\nIt is possible to add help files for plugins and other items.  You don't need\nto change the distributed help files for that.  See |add-local-help|.\n\nTo write a local help file, see |write-local-help|.\n\nNote that the title lines from the local help files are automagically added to\nthe \"LOCAL ADDITIONS\" section in the \"help.txt\" help file |local-additions|.\nThis is done when viewing the file in Vim, the file itself is not changed.  It\nis done by going through all help files and obtaining the first line of each\nfile.  The files in $VIMRUNTIME/doc are skipped.\n\n\t\t\t\t\t\t\t*help-xterm-window*\nIf you want to have the help in another xterm window, you could use this\ncommand: >\n\t:!xterm -e vim +help &\n<\n\n\t\t\t\t\t*:helpt* *:helptags*\n\t\t\t*E150* *E151* *E152* *E153* *E154* *E670* *E856*\n:helpt[ags] [++t] {dir}\n\t\t\tGenerate the help tags file(s) for directory {dir}.\n\t\t\tWhen {dir} is ALL then all \"doc\" directories in\n\t\t\t'runtimepath' will be used.\n\n\t\t\tAll \"*.txt\" and \"*.??x\" files in the directory and\n\t\t\tsub-directories are scanned for a help tag definition\n\t\t\tin between stars.  The \"*.??x\" files are for\n\t\t\ttranslated docs, they generate the \"tags-??\" file, see\n\t\t\t|help-translated|.  The generated tags files are\n\t\t\tsorted.\n\t\t\tWhen there are duplicates an error message is given.\n\t\t\tAn existing tags file is silently overwritten.\n\n\t\t\tThe optional \"++t\" argument forces adding the\n\t\t\t\"help-tags\" tag.  This is also done when the {dir} is\n\t\t\tequal to $VIMRUNTIME/doc.\n\n\t\t\tTo rebuild the help tags in the runtime directory\n\t\t\t(requires write permission there): >\n\t\t\t\t:helptags $VIMRUNTIME/doc\n<\n\n\n==============================================================================\n2. Translated help files\t\t\t\t*help-translated*\n\nIt is possible to add translated help files, next to the original English help\nfiles.  Vim will search for all help in \"doc\" directories in 'runtimepath'.\n\nAt this moment translations are available for:\n\tChinese  - multiple authors\n\tFrench   - translated by David Blanchet\n\tItalian  - translated by Antonio Colombo\n\tJapanese - multiple authors\n\tPolish   - translated by Mikolaj Machowski\n\tRussian  - translated by Vassily Ragosin\nSee the Vim website to find them: http://www.vim.org/translations.php\n\nA set of translated help files consists of these files:\n\n\thelp.abx\n\thowto.abx\n\t...\n\ttags-ab\n\n\"ab\" is the two-letter language code.  Thus for Italian the names are:\n\n\thelp.itx\n\thowto.itx\n\t...\n\ttags-it\n\nThe 'helplang' option can be set to the preferred language(s).  The default is\nset according to the environment.  Vim will first try to find a matching tag\nin the preferred language(s).  English is used when it cannot be found.\n\nTo find a tag in a specific language, append \"@ab\" to a tag, where \"ab\" is the\ntwo-letter language code.  Example: >\n\t:he user-manual@it\n\t:he user-manual@en\nThe first one finds the Italian user manual, even when 'helplang' is empty.\nThe second one finds the English user manual, even when 'helplang' is set to\n\"it\".\n\nWhen using command-line completion for the \":help\" command, the \"@en\"\nextension is only shown when a tag exists for multiple languages.  When the\ntag only exists for English \"@en\" is omitted.  When the first candidate has an\n\"@ab\" extension and it matches the first language in 'helplang' \"@ab\" is also\nomitted.\n\nWhen using |CTRL-]| or \":help!\" in a non-English help file Vim will try to\nfind the tag in the same language.  If not found then 'helplang' will be used\nto select a language.\n\nHelp files must use latin1 or utf-8 encoding.  Vim assumes the encoding is\nutf-8 when finding non-ASCII characters in the first line.  Thus you must\ntranslate the header with \"For Vim version\".\n\nThe same encoding must be used for the help files of one language in one\ndirectory.  You can use a different encoding for different languages and use\na different encoding for help files of the same language but in a different\ndirectory.\n\nHints for translators:\n- Do not translate the tags.  This makes it possible to use 'helplang' to\n  specify the preferred language.  You may add new tags in your language.\n- When you do not translate a part of a file, add tags to the English version,\n  using the \"tag@en\" notation.\n- Make a package with all the files and the tags file available for download.\n  Users can drop it in one of the \"doc\" directories and start use it.\n  Report this to Bram, so that he can add a link on www.vim.org.\n- Use the |:helptags| command to generate the tags files.  It will find all\n  languages in the specified directory.\n\n==============================================================================\n3. Writing help files\t\t\t\t\t*help-writing*\n\nFor ease of use, a Vim help file for a plugin should follow the format of the\nstandard Vim help files, except for the first line.  If you are writing a new\nhelp file it's best to copy one of the existing files and use it as a\ntemplate.\n\nThe first line in a help file should have the following format:\n\n*plugin_name.txt*\t{short description of the plugin}\n\nThe first field is a help tag where \":help plugin_name\" will jump to.  The\nremainder of the line, after a Tab, describes the plugin purpose in a short\nway.  This will show up in the \"LOCAL ADDITIONS\" section of the main help\nfile.  Check there that it shows up properly: |local-additions|.\n\nIf you want to add a version number or last modification date, put it in the\nsecond line, right aligned.\n\nAt the bottom of the help file, place a Vim modeline to set the 'textwidth'\nand 'tabstop' options and the 'filetype' to \"help\".  Never set a global option\nin such a modeline, that can have undesired consequences.\n\n\nTAGS\n\nTo define a help tag, place the name between asterisks (*tag-name*).  The\ntag-name should be different from all the Vim help tag names and ideally\nshould begin with the name of the Vim plugin.  The tag name is usually right\naligned on a line.\n\nWhen referring to an existing help tag and to create a hot-link, place the\nname between two bars (|) eg. |help-writing|.\n\nWhen referring to a Vim command and to create a hot-link, place the\nname between two backticks, eg. inside `:filetype`.  You will see this is\nhighlighted as a command, like a code block (see below).\n\nWhen referring to a Vim option in the help file, place the option name between\ntwo single quotes, eg. 'statusline'\n\nWhen referring to any other technical term, such as a filename or function\nparameter, surround it in backticks, eg. `~/.path/to/init.vim`.\n\n\nHIGHLIGHTING\n\nTo define a column heading, use a tilde character at the end of the line.\nThis will highlight the column heading in a different color.  E.g.\n\nColumn heading~\n#^^^^^^^^^^^^^ markup.heading.header\n#             ^ punctuation.definition.keyword\n\nTo separate sections in a help file, place a series of '=' characters in a\nline starting from the first column.  The section separator line is highlighted\ndifferently.\n\nTo quote a block of ex-commands verbatim, place a greater than (>) character\nat the end of the line before the block and a less than (<) character as the\nfirst non-blank on a line following the block.  Any line starting in column 1\nalso implicitly stops the block of ex-commands before it.  E.g. >\n    function Example_Func()\n\techo \"Example\"\n    endfunction\n<\n\nThe following are highlighted differently in a Vim help file:\n  - a special key name expressed either in <> notation as in <PageDown>, or\n    as a Ctrl character as in CTRL-X\n  - anything between {braces}, e.g. {lhs} and {rhs}\n\nThe word \"Note\", \"Notes\" and similar automagically receive distinctive\nhighlighting.  So do these:\n\t*Todo\tsomething to do\n\t*Error\tsomething wrong\n\nYou can find the details in $VIMRUNTIME/syntax/help.vim\n\n\n vim:tw=78:ts=8:noet:ft=help:norl:\n#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ comment.line.modeline\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/syntax_test_man.man",
    "content": "# SYNTAX TEST \"Manpage.sublime-syntax\"\nSOMETHING(8)                System Manager's Manual               SOMETHING(8)\n# ^^^^^ meta.preprocessor\n#                           ^^^^^^^^^^^^^^^^^^^^^^^ markup.heading.title\n#                                                                   ^^^^^^^ meta.preprocessor\n\nNAME\n#^^^ markup.heading.other\n       example - do something useful\n\nSYNOPSIS\n       example  [options]  [--home  DIR]  [--shell  SHELL]  [--no-create-home]\n#                          ^ punctuation.section.brackets.begin\n#                           ^^^^^^ entity.name.command-line-option\n#                                   ^^^ variable.parameter\n#                                      ^ punctuation.section.brackets.end\n#                                         ^ punctuation.section.brackets.begin\n#                                          ^^^^^^^ entity.name.command-line-option\n#                                                   ^^^^^ variable.parameter\n#                                                        ^ punctuation.section.brackets.end\n#                                                           ^ punctuation.section.brackets.begin\n#                                                            ^^^^^^^^^^^^^^^^ entity.name.command-line-option\n#                                                                            ^ punctuation.section.brackets.end\n                  [-u | --set-upstream] [-o <string> | --push-option=<string>]\n#                 ^ punctuation.section.brackets.begin\n#                  ^^ entity.name.command-line-option\n#                     ^ keyword.operator.logical\n#                       ^^^^^^^^^^^^^^ entity.name.command-line-option\n#                                     ^ punctuation.section.brackets.end\n#                                                      ^^^^^^^^^^^^^ entity.name.command-line-option\n                  [--force-with-lease[=<refname>[:<expect>]]]\n#                 ^ punctuation.section.brackets.begin\n#                  ^^^^^^^^^^^^^^^^^^ entity.name.command-line-option\n#                                    ^ punctuation.section.brackets.begin\n#                                     ^ keyword.operator\n#                                       ^^^^^^^ variable.parameter\n#                                               ^ punctuation.section.brackets.begin\n#                                                  ^^^^^^ variable.parameter\n#                                                         ^^^ punctuation.section.brackets.end\n\n       example --system [options]\n#              ^^^^^^^^ entity.name\n\n   COMMON OPTIONS\n       [--quiet] [--debug] [--help|-h]  [--version]  [--conf FILE]\n\n        /* According to POSIX.1-2001, POSIX.1-2008 */\n#       ^^ source.c comment.block punctuation.definition.comment\n       #include <sys/select.h>\n#      ^^^^^^^^ source.c meta.preprocessor.include keyword.control.import.include\n           struct timeval {\n#          ^^^^^^ source.c storage.type\n            \n               time_t         tv_sec;     /* seconds */\n               suseconds_t    tv_usec;    /* microseconds */\n           };\n\n\n\nDESCRIPTION\n       example does something useful in  relation  to the command line options\n       and configuration information in /etc/example.conf.\n\nOPTIONS\n       --conf FILE\n#      ^^^^^^ entity.name.command-line-option\n#^^^^^^ - variable - entity - markup\n#             ^^^^ variable.parameter\n              Use FILE instead of /etc/example.conf.\n#             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - variable - entity\n\n       --disabled-login\n              Do  not  run passwd to set the password.  The user won't be able\n              to use her account until the password is set.\n\n       --disabled-password\n              Like --disabled-login, but logins are still possible (for  exam-\n#                  ^^^^^^^^^^^^^^^^ entity.name\n#^^^^^^^^^^^^^^^^^^ - entity - variable - markup\n#                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - entity - variable - markup\n              ple using SSH RSA keys) but not using password authentication.\n\n       --help Display brief instructions.\n#      ^^^^^^ entity.name.command-line-option\n#             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - variable.parameter\n\n       --home DIR\n#      ^^^^^^ entity.name.command-line-option\n#             ^^^ variable.parameter\n#                ^ - variable - entity - markup\n              Use DIR as the user's home directory, rather  than  the  default\n              specified  by the configuration file.  If the directory does not\n              exist, it is created and skeleton files are copied.\n\n       --[no-]signed, --signed=(true|false|if-asked)\n#      ^^^^^^^^^^^^^ entity.name.command-line-option\n#                   ^ punctuation.separator\n#                     ^^^^^^^^ entity.name.command-line-option\n#                             ^ keyword.operator\n#                              ^ - variable\n#                               ^^^^ variable.parameter\n#                                   ^ keyword.operator.logical\n#                                    ^^^^^ variable.parameter\n#                                         ^ keyword.operator.logical\n#                                          ^^^^^^^^ variable.parameter\n#                                                  ^ - variable\n       --no-recurse-submodules, --recurse-submodules=check|on-demand|only|no\n#      ^^^^^^^^^^^^^^^^^^^^^^^ entity.name.command-line-option\n#                             ^ punctuation.separator\n#                               ^^^^^^^^^^^^^^^^^^^^ entity.name.command-line-option\n#                                                   ^ keyword.operator\n#                                                    ^^^^^ variable.parameter\n#                                                         ^ keyword.operator.logical\n#                                                          ^^^^^^^^^ variable.parameter\n#                                                                   ^ keyword.operator.logical\n#                                                                    ^^^^ variable.parameter\n#                                                                        ^ keyword.operator.logical\n#                                                                         ^^ variable.parameter\n           May be used to make sure all submodule commits used by the\n\n       -c, -C NUM, --context[=NUM]\n#      ^^ entity.name.command-line-option\n#        ^ punctuation.separator\n#          ^^ entity.name.command-line-option\n#             ^^^ variable.parameter\n#                ^ punctuation.separator\n#                  ^^^^^^^^^ entity.name.command-line-option\n#                           ^^^^^^^ - entity.name\n#                            ^ keyword.operator\n#                             ^^^ variable.parameter\n#                                ^^ - variable\n              output NUM (default 3) lines of copied context\n\n       -      This is  not really a switch, but indicates that standard input\n#      ^ entity.name.command-line-option.man\n#       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - entity - variable\n              is coming from a file or a pipe and not interactively from the\n              command line.\n\nEXAMPLE\n       #include <stdio.h>\n#      ^^^^^^^^ source.c meta.preprocessor.include keyword.control.import.include\n\n    (This is not C code.)\n#   ^^^^^^^^^^^^^^^^^^^^^^ - source.c\n\n           struct timeval {\n               time_t      tv_sec;         /* seconds */\n               suseconds_t tv_usec;        /* microseconds */\n           };\n#           ^ source.c punctuation.terminator\n\n       The corresponding argument for pselect() has the following type:\n#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - source.c\n           #define POLLIN_SET  (EPOLLRDNORM | EPOLLRDBAND | EPOLLIN |\n                                EPOLLHUP | EPOLLERR)\n#                                                  ^ source.c meta.preprocessor.macro meta.group punctuation.section.group.end\n\nENVIRONMENT\n       $SYSTEMD_LOG_LEVEL\n#      ^ punctuation.definition.variable\n#       ^^^^^^^^^^^^^^^^^ constant.other\n           systemd reads the log level from this environment variable. This\n           can be overridden with --log-level=.\n\nENVIRONMENT VARIABLES\n       Various Git commands use the following environment variables:\n\n   The Git Repository\n       These environment variables apply to all core Git commands. Nb: it is\n       worth noting that they may be used/overridden by SCMS sitting above Git\n       so take care if using a foreign front-end.\n\n       GIT_INDEX_FILE\n#      ^^^^^^^^^^^^^^ support.constant.environment-variable\n           This environment allows the specification of an alternate index\n           file. If not specified, the default of $GIT_DIR/index is used.\n\n       GIT_INDEX_VERSION\n#      ^^^^^^^^^^^^^^^^^ support.constant.environment-variable\n           This environment variable allows the specification of an index\n           version for new repositories. It won’t affect existing index files.\n           By default index file version 2 or 3 is used. See git-update-\n           index(1) for more information.\n\nCOMMANDS\n       This section only lists general commands. For input and output com‐\n       mands, refer to sway-input(5) and sway-output(5).\n\n       The following commands may only be used in the configuration file.\n\n       bar [<bar-id>] <bar-subcommands...>\n#      ^^^ entity.name.command\n#          ^ punctuation.section.brackets.begin\n#           ^ punctuation.definition.generic.begin\n#            ^^^^^^ variable.parameter\n#                  ^ punctuation.definition.generic.end\n#                   ^ punctuation.section.brackets.end\n#                     ^ punctuation.definition.generic.begin\n#                      ^^^^^^^^^^^^^^^ variable.parameter\n#                                        ^ punctuation.definition.generic.end\n           For details on bar subcommands, see sway-bar(5).\n\n       default_orientation horizontal|vertical|auto\n#      ^^^^^^^^^^^^^^^^^^^ entity.name.command\n#                          ^^^^^^^^^^ variable.parameter\n#                                    ^ keyword.operator.logical\n#                                     ^^^^^^^^ variable.parameter\n#                                             ^ keyword.operator.logical\n#                                              ^^^^ variable.parameter\n           Sets the default container layout for tiled containers.\n\n       include <path>\n           Includes another file from path. path can be either a full path or\n           a path relative to the parent config, and expands shell syntax (see\n           wordexp(3) for details). The same include file can only be included\n           once; subsequent attempts will be ignored.\n\n       The following commands cannot be used directly in the configuration\n#      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - variable - entity\n       file. They are expected to be used with bindsym or at runtime through\n#      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - variable - entity\n       swaymsg(1).\n\n       border none|normal|csd|pixel [<n>]\n           Set border style for focused window. normal includes a border of\n           thickness n and a title bar. pixel is a border without title bar n\n           pixels thick. Default is normal with border thickness 2. csd is\n           short for client-side-decorations, which allows the client to draw\n           its own decorations.\n\n       border toggle\n#      ^^^^^^ entity.name.command\n           Cycles through the available border styles.\n\n       exit\n#      ^^^^ entity.name.command\n           Exit sway and end your Wayland session.\n\n       floating enable|disable|toggle\n           Make focused view floating, non-floating, or the opposite of what\n           it is now.\n\n       <criteria> focus\n#      ^ punctuation.definition.generic.begin\n#       ^^^^^^^^ variable.parameter\n#               ^ punctuation.definition.generic.end\n#                 ^^^^^ variable.parameter\n           Moves focus to the container that matches the specified criteria.\n\n       gaps inner|outer|horizontal|vertical|top|right|bottom|left all|current\n       set|plus|minus|toggle <amount>\n#      ^^^ variable.parameter\n#         ^ keyword.operator.logical\n           Changes the inner or outer gaps for either all workspaces or the\n           current workspace. outer gaps can be altered per side with top,\n           right, bottom, and left or per direction with horizontal and verti‐\n           cal.\n\n       layout toggle [split|tabbed|stacking|splitv|splith]\n       [split|tabbed|stacking|splitv|splith]...\n#      ^ punctuation.section.brackets.begin\n#       ^^^^^ variable.parameter\n#            ^ keyword.operator.logical\n           Cycles the layout mode of the focused container through a list of\n           layouts.\n\nSEE ALSO\n       The systemd Homepage[11], systemd-system.conf(5), locale.conf(5)\n#                                ^^^^^^^^^^^^^^^^^^^ entity.name.function\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/syntax_test_requirements.txt",
    "content": "# SYNTAX TEST \"Requirementstxt.sublime-syntax\"\n# Options\n# <- punctuation.definition.comment\n# ^^^^^^^ comment.line\n--allow-external\n#^^^^^^^^^^^^^^^ entity.name.function.option\n--allow-unverified\n\n# Freeze packages\nalabaster==0.7.6\nBabel>=2.9.1\ndocutils==0.12\ngevent_subprocess==0.1.2\ngitpython==3.0.7\nhg-diff==1.2.4\n#^^^^^^ variable.parameter.package-name\n#      ^^ keyword.operator.logical\n#        ^^^^^ constant.other\nJinja2>=2.8.1\nMarkupSafe==0.23\nPygments==2.7.4\npytz==2015.7\nsix==1.10.0\nsnowballstemmer==1.2.0\nSphinx==1.3.3\nsphinx-rtd-theme==0.1.9\nsvn==1.0.1\nzope.interface==4.2.0\n\n# Examples from PEP508\n# c.f. https://www.python.org/dev/peps/pep-0508/\nrequests [security,tests] >= 2.8.1, == 2.8.* ; python_version < \"2.7\" # Comment\n#^^^^^^^ variable.parameter.package-name\n#        ^^^^^^^^^^^^^^^^ variable.function.extra\n#        ^ punctuation.section.braces.begin\n#                 ^ punctuation.separator\n#                       ^ punctuation.section.braces.end\n#                         ^^ keyword.operator.logical\n#                            ^^^^^ constant.other\n#                                   ^^ keyword.operator.logical\n#                                      ^^^^^ constant.other\n#                                            ^ punctuation.definition.annotation\n#                                            ^^^^^^^^^^^^^^^^^^^^^^^^ meta.annotation\n#                                              ^^^^^^^^^^^^^^ variable.language\n#                                                             ^ keyword.operator.logical\n#                                                               ^ punctuation.definition.string.begin.double\n#                                                               ^^^^^ string.quoted.double.requirements-txt\n#                                                                   ^ punctuation.definition.string.end.double\n#                                                                     ^^^^^^^^^ comment.line\npip @ https://github.com/pypa/pip/archive/1.3.1.zip#sha1=da9234ee9982d4bbb3c72346a6de940a148ea686\n#   ^ punctuation.definition.keyword\n#   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ markup.underline.link.url\nname @ gopher:/foo/com\"\nfoobar[quux]<2,>=3; os_name=='a'\n\n# VCS repositories\n-e git+git://git.myproject.org/MyProject#egg=MyProject # Git\n# <- entity.name.function.option\n#^ entity.name.function.option\n#  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ markup.underline.link.versioncontrols\n#                                       ^^^^^^^^^^^^^^^ - comment.line\n#                                                      ^^^^^ comment.line\n-e git://git.myproject.org/MyProject.git@v1.0#egg=MyProject\n#  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ markup.underline.link.versioncontrols\n-e hg+https://hg.myproject.org/MyProject#egg=MyProject # Mercurial\n#  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ markup.underline.link.versioncontrols\n#                                                      ^^^^^^^^^^^ comment.line\n-e hg+http://hg.myproject.org/MyProject@da39a3ee5e6b#egg=MyProject\n#  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ markup.underline.link.versioncontrols\n-e svn+http://svn.myproject.org/svn/MyProject/trunk@2019#egg=MyProject # Subversion\n#  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ markup.underline.link.versioncontrols\n#                                                                      ^^^^^^^^^^^^ comment.line\n-e bzr+ssh://user@myproject.org/MyProject/trunk#egg=MyProject # Bazaar\n#  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ markup.underline.link.versioncontrols\n#                                                             ^^^^^^^^ comment.line\n-e bzr+https://bzr.myproject.org/MyProject/trunk@2019#egg=MyProject\n#  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ markup.underline.link.versioncontrols\n\n# Project or archive URL\nhttps://github.com/pallets/click/archive/7.0.zip#egg=click\n#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ markup.underline.link.url\n#                                               ^^^^^^^^^^ - comment.line\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/syntax_test_tsv.tsv",
    "content": "# SYNTAX TEST \"CSV.sublime-syntax\"\nForename\tSurname\tHouse No.\tStreet\tCity\tPostcode\n#^^^^^^^ meta.field-1\n#       ^ punctuation.separator.sequence\n#        ^^^^^^^ meta.field-2\n#               ^ punctuation.separator.sequence\n#                ^^^^^^^^^ meta.field-3\n#                         ^ punctuation.separator.sequence\n#                          ^^^^^^ meta.field-4\n#                                ^ punctuation.separator.sequence\n#                                 ^^^^ meta.field-1\n#                                     ^ punctuation.separator.sequence\n#                                      ^^^^^^^^ meta.field-2\nJohn\tDoe\t87\tLogon Road\tCitiville\tTU43 6GH\n#^^^ meta.field-1\n#   ^ punctuation.separator.sequence\n#    ^^^ meta.field-2\n#       ^ punctuation.separator.sequence\n#        ^^ meta.field-3\n#          ^ punctuation.separator.sequence\n#           ^^^^^^^^^^ meta.field-4\n#                     ^ punctuation.separator.sequence\n#                      ^^^^^^^^^ meta.field-1\n#                               ^ punctuation.separator.sequence\n#                                ^^^^^^^^ meta.field-2\nJane\tDoe\t22\t\"\"\"Fun\"\" Street\"\t\"The City\t County\"\tFA90 1XA\n#^^^ meta.field-1\n#   ^ punctuation.separator.sequence\n#    ^^^ meta.field-2\n#       ^ punctuation.separator.sequence\n#        ^^ meta.field-3\n#          ^ punctuation.separator.sequence\n#           ^^^^^^^^^^^^^^^^ meta.field-4 string.quoted.double\n#            ^^ constant.character.escape\n#                 ^^ constant.character.escape\n#                           ^ punctuation.separator.sequence\n#                            ^ meta.field-1 string.quoted.double punctuation.definition.string.begin\n#                             ^^^^^^^^^^^^^^^^^ meta.field-1 string.quoted.double\n#                                             ^ meta.field-1 string.quoted.double punctuation.definition.string.end\n#                                              ^ punctuation.separator.sequence\n#                                               ^^^^^^^^ meta.field-2\nFred\tBloggs\t\"19\"\t\"Street\n#^^^ meta.field-1\n#   ^ punctuation.separator.sequence\n#    ^^^^^^ meta.field-2\n#          ^ punctuation.separator.sequence\n#            ^^^ meta.field-3 string.quoted.double\n#               ^ punctuation.separator.sequence\n#                ^ meta.field-4 punctuation.definition.string.begin\n#                ^^^^^^^^ meta.field-4 string.quoted.double\nSpanning Multiple \"\"\n#^^^^^^^^^^^^^^^^^^^^ meta.field-4 string.quoted.double\n#                 ^^ constant.character.escape\nLines\"\tCitee\tP0stc0d3\n#^^^^^ meta.field-4 string.quoted.double\n#    ^ meta.field-4 punctuation.definition.string.end\n#     ^ punctuation.separator.sequence\n#      ^^^^^ meta.field-1\n#           ^ punctuation.separator.sequence\n#            ^^^^^^^^ meta.field-2\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/syslog.sublime-syntax",
    "content": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: syslog\nfile_extensions:\n  - syslog\nscope: text.log.syslog\ncontexts:\n  main:\n    - match: ^(\\w+\\s+\\d+)\\s+(\\d{2}:\\d{2}:\\d{2})\n      scope: meta.datetime.syslog\n      captures:\n        1: meta.date.syslog constant.numeric.syslog\n        2: meta.time.syslog constant.numeric.syslog\n      push: loghost\n    - match: ^\n      push: text\n  loghost:\n    - match: '[\\w:.-]+'\n      scope: entity.other.attribute-name.loghost.syslog\n      set: process\n  process:\n    - match: ([\\w.-]+)(?:(\\[)(\\d+)(\\]))?([ :])\n      captures:\n        1: support.function.process.syslog\n        2: punctuation.separator.pid.begin.syslog\n        3: meta.pid.syslog meta.number.integer.syslog constant.numeric.value.syslog\n        4: punctuation.separator.pid.end.syslog\n        5: punctuation.separator.mapping.syslog\n      set: structured-data\n  structured-data:\n    - match: '\\['\n      scope: punctuation.section.mapping.begin.syslog\n      push: structured-data-contents\n    - match: (?=\\S)\n      set: text\n  structured-data-contents:\n    - match: \\]\n      scope: punctuation.section.mapping.end.syslog\n      pop: true\n    - match: \\w+\n      scope: variable.parameter.syslog\n    - match: =\n      scope: keyword.operator.assignment.syslog\n      push: structured-data-assignment\n  structured-data-assignment:\n    - match: '[^\\s\\]]+'\n      scope: constant.other.syslog\n      pop: true\n    - match: (?=\\])\n      pop: true\n  text:\n    - match: $\n      pop: true\n    - match: '<\\w+>'\n      scope: constant.language.syslog\n    - match: \\b(CMD)\\b\\s+(\\()\n      captures:\n        1: entity.name.label.syslog\n        2: punctuation.section.block.begin.syslog\n      embed: scope:source.shell.bash\n      escape: \\)$\n      escape_captures:\n        0: punctuation.section.block.end.syslog\n    - include: scope:text.log\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/wgsl.sublime-syntax",
    "content": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/syntax.html\nname: WGSL\nfile_extensions:\n  - wgsl\nscope: source.wgsl\ncontexts:\n  main:\n    - include: line_comments\n    - include: block_comments\n    - include: keywords\n    - include: attributes\n    - include: functions\n    - include: function_calls\n    - include: constants\n    - include: types\n    - include: variables\n    - include: punctuation\n  attributes:\n    - match: '(@)([A-Za-z_]+)'\n      comment: attribute declaration\n      scope: meta.attribute.wgsl\n      captures:\n        1: keyword.operator.attribute.at\n        2: entity.name.attribute.wgsl\n  block_comments:\n    - match: /\\*\\*/\n      comment: empty block comments\n      scope: comment.block.wgsl\n    - match: /\\*\\*\n      comment: block documentation comments\n      push:\n        - meta_scope: comment.block.documentation.wgsl\n        - match: \\*/\n          pop: true\n        - include: block_comments\n    - match: /\\*(?!\\*)\n      comment: block comments\n      push:\n        - meta_scope: comment.block.wgsl\n        - match: \\*/\n          pop: true\n        - include: block_comments\n  constants:\n    - match: '(-?\\b[0-9][0-9]*\\.[0-9][0-9]*)([eE][+-]?[0-9]+)?\\b'\n      comment: decimal float literal\n      scope: constant.numeric.float.wgsl\n    - match: '-?\\b0x[0-9a-fA-F]+\\b|\\b0\\b|-?\\b[1-9][0-9]*\\b'\n      comment: int literal\n      scope: constant.numeric.decimal.wgsl\n    - match: '\\b0x[0-9a-fA-F]+u\\b|\\b0u\\b|\\b[1-9][0-9]*u\\b'\n      comment: uint literal\n      scope: constant.numeric.decimal.wgsl\n    - match: \\b(true|false)\\b\n      comment: boolean constant\n      scope: constant.language.boolean.wgsl\n  function_calls:\n    - match: '([A-Za-z0-9_]+)(\\()'\n      comment: function/method calls\n      captures:\n        1: entity.name.function.wgsl\n        2: punctuation.brackets.round.wgsl\n      push:\n        - meta_scope: meta.function.call.wgsl\n        - match: \\)\n          captures:\n            0: punctuation.brackets.round.wgsl\n          pop: true\n        - include: line_comments\n        - include: block_comments\n        - include: keywords\n        - include: attributes\n        - include: function_calls\n        - include: constants\n        - include: types\n        - include: variables\n        - include: punctuation\n  functions:\n    - match: '\\b(fn)\\s+([A-Za-z0-9_]+)((\\()|(<))'\n      comment: function definition\n      captures:\n        1: keyword.other.fn.wgsl\n        2: entity.name.function.wgsl\n        4: punctuation.brackets.round.wgsl\n      push:\n        - meta_scope: meta.function.definition.wgsl\n        - match: '\\{'\n          captures:\n            0: punctuation.brackets.curly.wgsl\n          pop: true\n        - include: line_comments\n        - include: block_comments\n        - include: keywords\n        - include: attributes\n        - include: function_calls\n        - include: constants\n        - include: types\n        - include: variables\n        - include: punctuation\n  keywords:\n    - match: \\b(bitcast|block|break|case|continue|continuing|default|discard|else|elseif|enable|fallthrough|for|function|if|loop|private|read|read_write|return|storage|switch|uniform|while|workgroup|write)\\b\n      comment: other keywords\n      scope: keyword.control.wgsl\n    - match: \\b(asm|const|do|enum|handle|mat|premerge|regardless|typedef|unless|using|vec|void)\\b\n      comment: reserved keywords\n      scope: keyword.control.wgsl\n    - match: \\b(let|var)\\b\n      comment: storage keywords\n      scope: keyword.other.wgsl storage.type.wgsl\n    - match: \\b(type)\\b\n      comment: type keyword\n      scope: keyword.declaration.type.wgsl storage.type.wgsl\n    - match: \\b(enum)\\b\n      comment: enum keyword\n      scope: keyword.declaration.enum.wgsl storage.type.wgsl\n    - match: \\b(struct)\\b\n      comment: struct keyword\n      scope: keyword.declaration.struct.wgsl storage.type.wgsl\n    - match: \\bfn\\b\n      comment: fn\n      scope: keyword.other.fn.wgsl\n    - match: (\\^|\\||\\|\\||&&|<<|>>|!)(?!=)\n      comment: logical operators\n      scope: keyword.operator.logical.wgsl\n    - match: '&(?![&=])'\n      comment: logical AND, borrow references\n      scope: keyword.operator.borrow.and.wgsl\n    - match: (\\+=|-=|\\*=|/=|%=|\\^=|&=|\\|=|<<=|>>=)\n      comment: assignment operators\n      scope: keyword.operator.assignment.wgsl\n    - match: '(?<![<>])=(?!=|>)'\n      comment: single equal\n      scope: keyword.operator.assignment.equal.wgsl\n    - match: (=(=)?(?!>)|!=|<=|(?<!=)>=)\n      comment: comparison operators\n      scope: keyword.operator.comparison.wgsl\n    - match: '(([+%]|(\\*(?!\\w)))(?!=))|(-(?!>))|(/(?!/))'\n      comment: math operators\n      scope: keyword.operator.math.wgsl\n    - match: \\.(?!\\.)\n      comment: dot access\n      scope: keyword.operator.access.dot.wgsl\n    - match: '->'\n      comment: dashrocket, skinny arrow\n      scope: keyword.operator.arrow.skinny.wgsl\n  line_comments:\n    - match: \\s*//.*\n      comment: single line comment\n      scope: comment.line.double-slash.wgsl\n  punctuation:\n    - match: ','\n      comment: comma\n      scope: punctuation.comma.wgsl\n    - match: '[{}]'\n      comment: curly braces\n      scope: punctuation.brackets.curly.wgsl\n    - match: '[()]'\n      comment: parentheses, round brackets\n      scope: punctuation.brackets.round.wgsl\n    - match: ;\n      comment: semicolon\n      scope: punctuation.semi.wgsl\n    - match: '[\\[\\]]'\n      comment: square brackets\n      scope: punctuation.brackets.square.wgsl\n    - match: '(?<![=-])[<>]'\n      comment: angle brackets\n      scope: punctuation.brackets.angle.wgsl\n  types:\n    - match: \\b(bool|i32|u32|f32)\\b\n      comment: scalar Types\n      scope: storage.type.wgsl\n    - match: \\b(i64|u64|f64)\\b\n      comment: reserved scalar Types\n      scope: storage.type.wgsl\n    - match: \\b(vec2i|vec3i|vec4i|vec2u|vec3u|vec4u|vec2f|vec3f|vec4f|vec2h|vec3h|vec4h)\\b\n      comment: vector type aliasses\n      scope: storage.type.wgsl\n    - match: \\b(mat2x2f|mat2x3f|mat2x4f|mat3x2f|mat3x3f|mat3x4f|mat4x2f|mat4x3f|mat4x4f|mat2x2h|mat2x3h|mat2x4h|mat3x2h|mat3x3h|mat3x4h|mat4x2h|mat4x3h|mat4x4h)\\b\n      comment: matrix type aliasses\n      scope: storage.type.wgsl\n    - match: '\\b(vec[2-4]|mat[2-4]x[2-4])\\b'\n      comment: vector/matrix types\n      scope: storage.type.wgsl\n    - match: \\b(atomic)\\b\n      comment: atomic types\n      scope: storage.type.wgsl\n    - match: \\b(array)\\b\n      comment: array types\n      scope: storage.type.wgsl\n    - match: '\\b([A-Z][A-Za-z0-9]*)\\b'\n      comment: Custom type\n      scope: entity.name.type.wgsl\n  variables:\n    - match: '\\b(?<!(?<!\\.)\\.)(?:r#(?!(crate|[Ss]elf|super)))?[a-z0-9_]+\\b'\n      comment: variables\n      scope: variable.other.wgsl\n"
  },
  {
    "path": "assets/theme_preview.rs",
    "content": "  // Output the square of a number.\n  fn print_square(num: f64) {\n      let result = f64::powf(num, 2.0);\n      println!(\"The square of {num:.2} is {result:.2}.\");\n  }\n"
  },
  {
    "path": "assets/themes/ansi.tmTheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n    <dict>\n        <!--\n        The colors in this theme are encoded as #RRGGBBAA where:\n        * If AA is 00, then RR is an ANSI palette number from 00 to 07.\n        * If AA is 01, the terminal's default fg/bg color is used.\n        -->\n        <key>author</key>\n        <string>Template: Chris Kempson, Scheme: Mitchell Kember</string>\n        <key>name</key>\n        <string>ANSI</string>\n        <key>colorSpaceName</key>\n        <string>sRGB</string>\n        <key>settings</key>\n        <array>\n            <dict>\n                <key>settings</key>\n                <dict>\n                    <key>background</key>\n                    <string>#00000001</string>\n                    <key>foreground</key>\n                    <string>#00000001</string>\n                    <!--\n                    Explicitly set the gutter color since bat falls back to a\n                    hardcoded DEFAULT_GUTTER_COLOR otherwise.\n                    -->\n                    <key>gutter</key>\n                    <string>#00000001</string>\n                    <key>gutterForeground</key>\n                    <string>#00000001</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Comments</string>\n                <key>scope</key>\n                <string>comment, punctuation.definition.comment</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#02000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Keywords</string>\n                <key>scope</key>\n                <string>keyword</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#05000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Functions</string>\n                <key>scope</key>\n                <string>entity.name.function, meta.require, support.function.any-method</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#04000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Labels</string>\n                <key>scope</key>\n                <string>entity.name.label, variable.parameter</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#06000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Classes</string>\n                <key>scope</key>\n                <string>support.class, entity.name.class, entity.name.type.class, entity.name</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#03000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Methods</string>\n                <key>scope</key>\n                <string>keyword.other.special-method</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#04000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Storage</string>\n                <key>scope</key>\n                <string>storage</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#05000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Support</string>\n                <key>scope</key>\n                <string>support.function</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#06000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Strings, Inherited Class</string>\n                <key>scope</key>\n                <string>string, constant.other.symbol, entity.other.inherited-class</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#02000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Integers</string>\n                <key>scope</key>\n                <string>constant.numeric</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#03000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Floats</string>\n                <key>scope</key>\n                <string>none</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#03000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Boolean</string>\n                <key>scope</key>\n                <string>none</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#03000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Constants</string>\n                <key>scope</key>\n                <string>constant</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#03000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Tags</string>\n                <key>scope</key>\n                <string>entity.name.tag</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#01000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Attributes</string>\n                <key>scope</key>\n                <string>entity.other.attribute-name</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#03000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Attribute IDs</string>\n                <key>scope</key>\n                <string>entity.other.attribute-name.id, punctuation.definition.entity</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#04000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Selector</string>\n                <key>scope</key>\n                <string>meta.selector</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#05000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Values</string>\n                <key>scope</key>\n                <string>none</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#03000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Headings</string>\n                <key>scope</key>\n                <string>markup.heading punctuation.definition.heading, entity.name.section, markup.heading - text.html.markdown, meta.mapping.key string.quoted.double</string>\n                <key>settings</key>\n                <dict>\n                    <key>fontStyle</key>\n                    <string></string>\n                    <key>foreground</key>\n                    <string>#04000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Units</string>\n                <key>scope</key>\n                <string>keyword.other.unit</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#03000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Bold</string>\n                <key>scope</key>\n                <string>markup.bold, punctuation.definition.bold</string>\n                <key>settings</key>\n                <dict>\n                    <key>fontStyle</key>\n                    <string>bold</string>\n                    <key>foreground</key>\n                    <string>#03000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Italic</string>\n                <key>scope</key>\n                <string>markup.italic, punctuation.definition.italic</string>\n                <key>settings</key>\n                <dict>\n                    <key>fontStyle</key>\n                    <string>italic</string>\n                    <key>foreground</key>\n                    <string>#05000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Code</string>\n                <key>scope</key>\n                <string>markup.raw.inline</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#02000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Link Text</string>\n                <key>scope</key>\n                <string>string.other.link, punctuation.definition.string.end.markdown, punctuation.definition.string.begin.markdown</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#01000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Link Url</string>\n                <key>scope</key>\n                <string>meta.link</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#03000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Quotes</string>\n                <key>scope</key>\n                <string>markup.quote</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#03000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Inserted</string>\n                <key>scope</key>\n                <string>markup.inserted</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#02000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Deleted</string>\n                <key>scope</key>\n                <string>markup.deleted</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#01000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Changed</string>\n                <key>scope</key>\n                <string>markup.changed</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#05000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Colors</string>\n                <key>scope</key>\n                <string>constant.other.color</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#06000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Regular Expressions</string>\n                <key>scope</key>\n                <string>string.regexp</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#06000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Escape Characters</string>\n                <key>scope</key>\n                <string>constant.character.escape</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#06000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Embedded</string>\n                <key>scope</key>\n                <string>punctuation.section.embedded, variable.interpolation</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#05000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Illegal</string>\n                <key>scope</key>\n                <string>invalid.illegal</string>\n                <key>settings</key>\n                <dict>\n                    <key>background</key>\n                    <string>#01000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Broken</string>\n                <key>scope</key>\n                <string>invalid.broken</string>\n                <key>settings</key>\n                <dict>\n                    <key>background</key>\n                    <string>#03000000</string>\n                </dict>\n            </dict>\n        </array>\n        <key>uuid</key>\n        <string>uuid</string>\n    </dict>\n</plist>\n"
  },
  {
    "path": "assets/themes/base16-256.tmTheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n    <dict>\n        <!--\n        Most base16 users should use the base16 theme. This theme, base16-256,\n        is for users who configure their terminal with a 256-color variant of a\n        base16 theme, and who use base16-shell. DO NOT use this theme simply\n        because your terminal supports 256 colors.\n\n        base16: https://github.com/chriskempson/base16\n        base16-shell: https://github.com/chriskempson/base16-shell\n\n        The colors in this theme are encoded as #RRGGBBAA where RR is an ANSI\n        palette number from 00 to ff (the 256 terminal colors), and AA is the\n        special value 00 to indicate this encoding is being used.\n        -->\n        <key>author</key>\n        <string>Template: Chris Kempson, Scheme: Mitchell Kember</string>\n        <key>name</key>\n        <string>Base16 256</string>\n        <key>colorSpaceName</key>\n        <string>sRGB</string>\n        <key>settings</key>\n        <array>\n            <dict>\n                <key>settings</key>\n                <dict>\n                    <key>background</key>\n                    <string>#00000000</string>\n                    <key>caret</key>\n                    <string>#07000000</string>\n                    <key>foreground</key>\n                    <string>#07000000</string>\n                    <key>invisibles</key>\n                    <string>#08000000</string>\n                    <key>lineHighlight</key>\n                    <string>#08000000</string>\n                    <key>selection</key>\n                    <string>#13000000</string>\n                    <key>gutter</key>\n                    <string>#12000000</string>\n                    <key>gutterForeground</key>\n                    <string>#08000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Text</string>\n                <key>scope</key>\n                <string>variable.parameter.function</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#07000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Comments</string>\n                <key>scope</key>\n                <string>comment, punctuation.definition.comment</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#08000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Punctuation</string>\n                <key>scope</key>\n                <string>punctuation.definition.string, punctuation.definition.variable, punctuation.definition.string, punctuation.definition.parameters, punctuation.definition.string, punctuation.definition.array</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#07000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Delimiters</string>\n                <key>scope</key>\n                <string>none</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#07000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Operators</string>\n                <key>scope</key>\n                <string>keyword.operator</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#07000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Keywords</string>\n                <key>scope</key>\n                <string>keyword</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#05000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Variables</string>\n                <key>scope</key>\n                <string>variable</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#07000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Functions</string>\n                <key>scope</key>\n                <string>entity.name.function, meta.require, support.function.any-method</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#04000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Labels</string>\n                <key>scope</key>\n                <string>entity.name.label</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#11000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Classes</string>\n                <key>scope</key>\n                <string>support.class, entity.name.class, entity.name.type.class</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#03000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Classes</string>\n                <key>scope</key>\n                <string>meta.class</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#0f000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Methods</string>\n                <key>scope</key>\n                <string>keyword.other.special-method</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#04000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Storage</string>\n                <key>scope</key>\n                <string>storage</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#05000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Support</string>\n                <key>scope</key>\n                <string>support.function</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#06000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Strings, Inherited Class</string>\n                <key>scope</key>\n                <string>string, constant.other.symbol, entity.other.inherited-class</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#02000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Integers</string>\n                <key>scope</key>\n                <string>constant.numeric</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#10000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Floats</string>\n                <key>scope</key>\n                <string>none</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#10000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Boolean</string>\n                <key>scope</key>\n                <string>none</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#10000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Constants</string>\n                <key>scope</key>\n                <string>constant</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#10000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Tags</string>\n                <key>scope</key>\n                <string>entity.name.tag, entity.name</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#01000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Attributes</string>\n                <key>scope</key>\n                <string>entity.other.attribute-name</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#10000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Attribute IDs</string>\n                <key>scope</key>\n                <string>entity.other.attribute-name.id, punctuation.definition.entity</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#04000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Selector</string>\n                <key>scope</key>\n                <string>meta.selector</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#05000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Values</string>\n                <key>scope</key>\n                <string>none</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#10000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Headings</string>\n                <key>scope</key>\n                <string>markup.heading punctuation.definition.heading, entity.name.section, markup.heading - text.html.markdown</string>\n                <key>settings</key>\n                <dict>\n                    <key>fontStyle</key>\n                    <string></string>\n                    <key>foreground</key>\n                    <string>#04000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Units</string>\n                <key>scope</key>\n                <string>keyword.other.unit</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#10000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Bold</string>\n                <key>scope</key>\n                <string>markup.bold, punctuation.definition.bold</string>\n                <key>settings</key>\n                <dict>\n                    <key>fontStyle</key>\n                    <string>bold</string>\n                    <key>foreground</key>\n                    <string>#03000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Italic</string>\n                <key>scope</key>\n                <string>markup.italic, punctuation.definition.italic</string>\n                <key>settings</key>\n                <dict>\n                    <key>fontStyle</key>\n                    <string>italic</string>\n                    <key>foreground</key>\n                    <string>#05000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Code</string>\n                <key>scope</key>\n                <string>markup.raw.inline</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#02000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Link Text</string>\n                <key>scope</key>\n                <string>string.other.link, punctuation.definition.string.end.markdown, punctuation.definition.string.begin.markdown</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#01000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Link Url</string>\n                <key>scope</key>\n                <string>meta.link</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#10000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Quotes</string>\n                <key>scope</key>\n                <string>markup.quote</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#10000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Separator</string>\n                <key>scope</key>\n                <string>meta.separator</string>\n                <key>settings</key>\n                <dict>\n                    <key>background</key>\n                    <string>#13000000</string>\n                    <key>foreground</key>\n                    <string>#07000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Inserted</string>\n                <key>scope</key>\n                <string>markup.inserted</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#02000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Deleted</string>\n                <key>scope</key>\n                <string>markup.deleted</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#01000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Changed</string>\n                <key>scope</key>\n                <string>markup.changed</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#05000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Colors</string>\n                <key>scope</key>\n                <string>constant.other.color</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#06000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Regular Expressions</string>\n                <key>scope</key>\n                <string>string.regexp</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#06000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Escape Characters</string>\n                <key>scope</key>\n                <string>constant.character.escape</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#06000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Embedded</string>\n                <key>scope</key>\n                <string>punctuation.section.embedded, variable.interpolation</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#05000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Illegal</string>\n                <key>scope</key>\n                <string>invalid.illegal</string>\n                <key>settings</key>\n                <dict>\n                    <key>background</key>\n                    <string>#01000000</string>\n                    <key>foreground</key>\n                    <string>#0f000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Broken</string>\n                <key>scope</key>\n                <string>invalid.broken</string>\n                <key>settings</key>\n                <dict>\n                    <key>background</key>\n                    <string>#10000000</string>\n                    <key>foreground</key>\n                    <string>#00000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Deprecated</string>\n                <key>scope</key>\n                <string>invalid.deprecated</string>\n                <key>settings</key>\n                <dict>\n                    <key>background</key>\n                    <string>#11000000</string>\n                    <key>foreground</key>\n                    <string>#0f000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Unimplemented</string>\n                <key>scope</key>\n                <string>invalid.unimplemented</string>\n                <key>settings</key>\n                <dict>\n                    <key>background</key>\n                    <string>#08000000</string>\n                    <key>foreground</key>\n                    <string>#0f000000</string>\n                </dict>\n            </dict>\n        </array>\n        <key>uuid</key>\n        <string>uuid</string>\n    </dict>\n</plist>\n"
  },
  {
    "path": "assets/themes/base16.tmTheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n    <dict>\n        <!--\n        This theme is meant for users who configure their terminal with a base16\n        color theme. If you use a 256-color variant along with base16-shell, use\n        the bat theme base16-256 instead.\n\n        base16: https://github.com/chriskempson/base16\n        base16-shell: https://github.com/chriskempson/base16-shell\n\n        The colors in this theme are encoded as #RRGGBBAA where RR is an ANSI\n        palette number from 00 to 0f (the 8 colors and their bright versions),\n        and AA is the special value 00 to indicate this encoding is being used.\n        -->\n        <key>author</key>\n        <string>Template: Chris Kempson, Scheme: Mitchell Kember</string>\n        <key>name</key>\n        <string>Base16</string>\n        <key>colorSpaceName</key>\n        <string>sRGB</string>\n        <key>settings</key>\n        <array>\n            <dict>\n                <key>settings</key>\n                <dict>\n                    <key>background</key>\n                    <string>#00000000</string>\n                    <key>caret</key>\n                    <string>#07000000</string>\n                    <key>foreground</key>\n                    <string>#07000000</string>\n                    <key>invisibles</key>\n                    <string>#08000000</string>\n                    <key>lineHighlight</key>\n                    <string>#08000000</string>\n                    <key>selection</key>\n                    <string>#0b000000</string>\n                    <key>gutter</key>\n                    <string>#0a000000</string>\n                    <key>gutterForeground</key>\n                    <string>#08000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Text</string>\n                <key>scope</key>\n                <string>variable.parameter.function</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#07000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Comments</string>\n                <key>scope</key>\n                <string>comment, punctuation.definition.comment</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#08000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Punctuation</string>\n                <key>scope</key>\n                <string>punctuation.definition.string, punctuation.definition.variable, punctuation.definition.string, punctuation.definition.parameters, punctuation.definition.string, punctuation.definition.array</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#07000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Delimiters</string>\n                <key>scope</key>\n                <string>none</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#07000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Operators</string>\n                <key>scope</key>\n                <string>keyword.operator</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#07000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Keywords</string>\n                <key>scope</key>\n                <string>keyword</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#05000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Variables</string>\n                <key>scope</key>\n                <string>variable</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#07000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Functions</string>\n                <key>scope</key>\n                <string>entity.name.function, meta.require, support.function.any-method</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#04000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Labels</string>\n                <key>scope</key>\n                <string>entity.name.label</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#0e000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Classes</string>\n                <key>scope</key>\n                <string>support.class, entity.name.class, entity.name.type.class</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#03000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Classes</string>\n                <key>scope</key>\n                <string>meta.class</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#0f000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Methods</string>\n                <key>scope</key>\n                <string>keyword.other.special-method</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#04000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Storage</string>\n                <key>scope</key>\n                <string>storage</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#05000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Support</string>\n                <key>scope</key>\n                <string>support.function</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#06000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Strings, Inherited Class</string>\n                <key>scope</key>\n                <string>string, constant.other.symbol, entity.other.inherited-class</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#02000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Integers</string>\n                <key>scope</key>\n                <string>constant.numeric</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#09000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Floats</string>\n                <key>scope</key>\n                <string>none</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#09000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Boolean</string>\n                <key>scope</key>\n                <string>none</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#09000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Constants</string>\n                <key>scope</key>\n                <string>constant</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#09000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Tags</string>\n                <key>scope</key>\n                <string>entity.name.tag, entity.name</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#01000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Attributes</string>\n                <key>scope</key>\n                <string>entity.other.attribute-name</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#09000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Attribute IDs</string>\n                <key>scope</key>\n                <string>entity.other.attribute-name.id, punctuation.definition.entity</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#04000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Selector</string>\n                <key>scope</key>\n                <string>meta.selector</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#05000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Values</string>\n                <key>scope</key>\n                <string>none</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#09000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Headings</string>\n                <key>scope</key>\n                <string>markup.heading punctuation.definition.heading, entity.name.section, markup.heading - text.html.markdown</string>\n                <key>settings</key>\n                <dict>\n                    <key>fontStyle</key>\n                    <string></string>\n                    <key>foreground</key>\n                    <string>#04000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Units</string>\n                <key>scope</key>\n                <string>keyword.other.unit</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#09000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Bold</string>\n                <key>scope</key>\n                <string>markup.bold, punctuation.definition.bold</string>\n                <key>settings</key>\n                <dict>\n                    <key>fontStyle</key>\n                    <string>bold</string>\n                    <key>foreground</key>\n                    <string>#03000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Italic</string>\n                <key>scope</key>\n                <string>markup.italic, punctuation.definition.italic</string>\n                <key>settings</key>\n                <dict>\n                    <key>fontStyle</key>\n                    <string>italic</string>\n                    <key>foreground</key>\n                    <string>#05000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Code</string>\n                <key>scope</key>\n                <string>markup.raw.inline</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#02000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Link Text</string>\n                <key>scope</key>\n                <string>string.other.link, punctuation.definition.string.end.markdown, punctuation.definition.string.begin.markdown</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#01000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Link Url</string>\n                <key>scope</key>\n                <string>meta.link</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#09000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Quotes</string>\n                <key>scope</key>\n                <string>markup.quote</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#09000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Separator</string>\n                <key>scope</key>\n                <string>meta.separator</string>\n                <key>settings</key>\n                <dict>\n                    <key>background</key>\n                    <string>#0b000000</string>\n                    <key>foreground</key>\n                    <string>#07000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Inserted</string>\n                <key>scope</key>\n                <string>markup.inserted</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#02000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Deleted</string>\n                <key>scope</key>\n                <string>markup.deleted</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#01000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Changed</string>\n                <key>scope</key>\n                <string>markup.changed</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#05000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Colors</string>\n                <key>scope</key>\n                <string>constant.other.color</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#06000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Regular Expressions</string>\n                <key>scope</key>\n                <string>string.regexp</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#06000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Escape Characters</string>\n                <key>scope</key>\n                <string>constant.character.escape</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#06000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Embedded</string>\n                <key>scope</key>\n                <string>punctuation.section.embedded, variable.interpolation</string>\n                <key>settings</key>\n                <dict>\n                    <key>foreground</key>\n                    <string>#05000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Illegal</string>\n                <key>scope</key>\n                <string>invalid.illegal</string>\n                <key>settings</key>\n                <dict>\n                    <key>background</key>\n                    <string>#01000000</string>\n                    <key>foreground</key>\n                    <string>#0f000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Broken</string>\n                <key>scope</key>\n                <string>invalid.broken</string>\n                <key>settings</key>\n                <dict>\n                    <key>background</key>\n                    <string>#09000000</string>\n                    <key>foreground</key>\n                    <string>#00000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Deprecated</string>\n                <key>scope</key>\n                <string>invalid.deprecated</string>\n                <key>settings</key>\n                <dict>\n                    <key>background</key>\n                    <string>#0e000000</string>\n                    <key>foreground</key>\n                    <string>#0f000000</string>\n                </dict>\n            </dict>\n            <dict>\n                <key>name</key>\n                <string>Unimplemented</string>\n                <key>scope</key>\n                <string>invalid.unimplemented</string>\n                <key>settings</key>\n                <dict>\n                    <key>background</key>\n                    <string>#08000000</string>\n                    <key>foreground</key>\n                    <string>#0f000000</string>\n                </dict>\n            </dict>\n        </array>\n        <key>uuid</key>\n        <string>uuid</string>\n    </dict>\n</plist>\n"
  },
  {
    "path": "build/application.rs",
    "content": "use std::{env, fs, path::PathBuf};\n\nuse crate::util::render_template;\n\n/// Generate manpage and shell completions for the bat application.\npub fn gen_man_and_comp() -> anyhow::Result<()> {\n    println!(\"cargo:rerun-if-changed=assets/manual/\");\n    println!(\"cargo:rerun-if-changed=assets/completions/\");\n\n    println!(\"cargo:rerun-if-env-changed=PROJECT_NAME\");\n    println!(\"cargo:rerun-if-env-changed=PROJECT_EXECUTABLE\");\n    println!(\"cargo:rerun-if-env-changed=CARGO_PKG_VERSION\");\n    println!(\"cargo:rerun-if-env-changed=BAT_ASSETS_GEN_DIR\");\n\n    // Read environment variables.\n    let project_name = env::var(\"PROJECT_NAME\").unwrap_or(\"bat\".into());\n    let executable_name = env::var(\"PROJECT_EXECUTABLE\").unwrap_or(project_name.clone());\n    let executable_name_uppercase = executable_name.to_uppercase();\n    let project_version = env::var(\"CARGO_PKG_VERSION\")?;\n\n    let variables = [\n        (\"PROJECT_NAME\", project_name),\n        (\"PROJECT_EXECUTABLE\", executable_name),\n        (\"PROJECT_EXECUTABLE_UPPERCASE\", executable_name_uppercase),\n        (\"PROJECT_VERSION\", project_version),\n    ]\n    .into_iter()\n    .collect();\n\n    let Some(out_dir) = env::var_os(\"BAT_ASSETS_GEN_DIR\")\n        .or_else(|| env::var_os(\"OUT_DIR\"))\n        .map(PathBuf::from)\n    else {\n        anyhow::bail!(\"BAT_ASSETS_GEN_DIR or OUT_DIR should be set for build.rs\");\n    };\n\n    fs::create_dir_all(out_dir.join(\"assets/manual\")).unwrap();\n    fs::create_dir_all(out_dir.join(\"assets/completions\")).unwrap();\n\n    render_template(\n        &variables,\n        \"assets/manual/bat.1.in\",\n        out_dir.join(\"assets/manual/bat.1\"),\n    )?;\n    render_template(\n        &variables,\n        \"assets/completions/bat.bash.in\",\n        out_dir.join(\"assets/completions/bat.bash\"),\n    )?;\n    render_template(\n        &variables,\n        \"assets/completions/bat.fish.in\",\n        out_dir.join(\"assets/completions/bat.fish\"),\n    )?;\n    render_template(\n        &variables,\n        \"assets/completions/_bat.ps1.in\",\n        out_dir.join(\"assets/completions/_bat.ps1\"),\n    )?;\n    render_template(\n        &variables,\n        \"assets/completions/bat.zsh.in\",\n        out_dir.join(\"assets/completions/bat.zsh\"),\n    )?;\n\n    println!(\n        \"cargo:rustc-env=BAT_GENERATED_COMPLETION_BASH={}\",\n        out_dir.join(\"assets/completions/bat.bash\").display()\n    );\n    println!(\n        \"cargo:rustc-env=BAT_GENERATED_COMPLETION_FISH={}\",\n        out_dir.join(\"assets/completions/bat.fish\").display()\n    );\n    println!(\n        \"cargo:rustc-env=BAT_GENERATED_COMPLETION_PS1={}\",\n        out_dir.join(\"assets/completions/_bat.ps1\").display()\n    );\n    println!(\n        \"cargo:rustc-env=BAT_GENERATED_COMPLETION_ZSH={}\",\n        out_dir.join(\"assets/completions/bat.zsh\").display()\n    );\n\n    Ok(())\n}\n"
  },
  {
    "path": "build/main.rs",
    "content": "#[cfg(feature = \"application\")]\nmod application;\nmod syntax_mapping;\nmod util;\n\nfn main() -> anyhow::Result<()> {\n    // only watch manually-designated files\n    // see: https://doc.rust-lang.org/cargo/reference/build-scripts.html#rerun-if-changed\n    println!(\"cargo:rerun-if-changed=build/\");\n\n    syntax_mapping::build_static_mappings()?;\n\n    #[cfg(feature = \"application\")]\n    application::gen_man_and_comp()?;\n\n    Ok(())\n}\n"
  },
  {
    "path": "build/syntax_mapping.rs",
    "content": "use std::{\n    convert::Infallible,\n    env, fs,\n    path::{Path, PathBuf},\n    str::FromStr,\n};\n\nuse anyhow::{anyhow, bail};\nuse indexmap::IndexMap;\nuse itertools::Itertools;\nuse once_cell::sync::Lazy;\nuse proc_macro2::TokenStream;\nuse quote::{quote, ToTokens, TokenStreamExt};\nuse regex::Regex;\nuse serde_derive::Deserialize;\nuse serde_with::DeserializeFromStr;\nuse walkdir::WalkDir;\n\n/// Known mapping targets.\n///\n/// Corresponds to `syntax_mapping::MappingTarget`.\n#[allow(clippy::enum_variant_names)]\n#[derive(Clone, Debug, Eq, PartialEq, Hash, DeserializeFromStr)]\npub enum MappingTarget {\n    MapTo(String),\n    MapToUnknown,\n    MapExtensionToUnknown,\n}\nimpl FromStr for MappingTarget {\n    type Err = Infallible;\n    fn from_str(s: &str) -> Result<Self, Self::Err> {\n        match s {\n            \"MappingTarget::MapToUnknown\" => Ok(Self::MapToUnknown),\n            \"MappingTarget::MapExtensionToUnknown\" => Ok(Self::MapExtensionToUnknown),\n            syntax => Ok(Self::MapTo(syntax.into())),\n        }\n    }\n}\nimpl ToTokens for MappingTarget {\n    fn to_tokens(&self, tokens: &mut TokenStream) {\n        let t = match self {\n            Self::MapTo(syntax) => quote! { MappingTarget::MapTo(#syntax) },\n            Self::MapToUnknown => quote! { MappingTarget::MapToUnknown },\n            Self::MapExtensionToUnknown => quote! { MappingTarget::MapExtensionToUnknown },\n        };\n        tokens.append_all(t);\n    }\n}\n\n#[derive(Clone, Debug, PartialEq, Eq, Hash, DeserializeFromStr)]\n/// A single matcher.\n///\n/// Codegen converts this into a `Lazy<Option<GlobMatcher>>`.\nstruct Matcher(Vec<MatcherSegment>);\n/// Parse a matcher.\n///\n/// Note that this implementation is rather strict: it will greedily interpret\n/// every valid environment variable replacement as such, then immediately\n/// hard-error if it finds a '$' anywhere in the remaining text segments.\n///\n/// The reason for this strictness is I currently cannot think of a valid reason\n/// why you would ever need '$' as plaintext in a glob pattern. Therefore any\n/// such occurrences are likely human errors.\n///\n/// If we later discover some edge cases, it's okay to make it more permissive.\n///\n/// Revision history:\n/// - 2024-02-20: allow `{` and `}` (glob brace expansion)\nimpl FromStr for Matcher {\n    type Err = anyhow::Error;\n    fn from_str(s: &str) -> Result<Self, Self::Err> {\n        use MatcherSegment as Seg;\n        static VAR_REGEX: Lazy<Regex> = Lazy::new(|| Regex::new(r\"\\$\\{([\\w\\d_]+)\\}\").unwrap());\n\n        let mut segments = vec![];\n        let mut text_start = 0;\n        for capture in VAR_REGEX.captures_iter(s) {\n            let match_0 = capture.get(0).unwrap();\n\n            // text before this var\n            let text_end = match_0.start();\n            segments.push(Seg::Text(s[text_start..text_end].into()));\n            text_start = match_0.end();\n\n            // this var\n            segments.push(Seg::Env(capture.get(1).unwrap().as_str().into()));\n        }\n        // possible trailing text\n        segments.push(Seg::Text(s[text_start..].into()));\n\n        // cleanup empty text segments\n        let non_empty_segments = segments\n            .into_iter()\n            .filter(|seg| seg.text().map(|t| !t.is_empty()).unwrap_or(true))\n            .collect_vec();\n\n        // sanity check\n        if non_empty_segments\n            .windows(2)\n            .any(|segs| segs[0].is_text() && segs[1].is_text())\n        {\n            unreachable!(\"Parsed into consecutive text segments: {non_empty_segments:?}\");\n        }\n\n        // guard empty case\n        if non_empty_segments.is_empty() {\n            bail!(r#\"Parsed an empty matcher: \"{s}\"\"#);\n        }\n\n        // guard variable syntax leftover fragments\n        if non_empty_segments\n            .iter()\n            .filter_map(Seg::text)\n            .any(|t| t.contains('$'))\n        {\n            bail!(r#\"Invalid matcher: \"{s}\"\"#);\n        }\n\n        Ok(Self(non_empty_segments))\n    }\n}\nimpl ToTokens for Matcher {\n    fn to_tokens(&self, tokens: &mut TokenStream) {\n        let t = match self.0.as_slice() {\n            [] => unreachable!(\"0-length matcher should never be created\"),\n            [MatcherSegment::Text(text)] => {\n                quote! { Lazy::new(|| Some(build_matcher_fixed(#text))) }\n            }\n            // parser logic ensures that this case can only happen when there are dynamic segments\n            segs @ [_, ..] => quote! { Lazy::new(|| build_matcher_dynamic(&[ #(#segs),* ])) },\n        };\n        tokens.append_all(t);\n    }\n}\n\n/// A segment in a matcher.\n///\n/// Corresponds to `syntax_mapping::MatcherSegment`.\n#[derive(Debug, Clone, PartialEq, Eq, Hash)]\nenum MatcherSegment {\n    Text(String),\n    Env(String),\n}\nimpl ToTokens for MatcherSegment {\n    fn to_tokens(&self, tokens: &mut TokenStream) {\n        let t = match self {\n            Self::Text(text) => quote! { MatcherSegment::Text(#text) },\n            Self::Env(env) => quote! { MatcherSegment::Env(#env) },\n        };\n        tokens.append_all(t);\n    }\n}\n#[allow(dead_code)]\nimpl MatcherSegment {\n    fn is_text(&self) -> bool {\n        matches!(self, Self::Text(_))\n    }\n    fn is_env(&self) -> bool {\n        matches!(self, Self::Env(_))\n    }\n    fn text(&self) -> Option<&str> {\n        match self {\n            Self::Text(t) => Some(t),\n            Self::Env(_) => None,\n        }\n    }\n    fn env(&self) -> Option<&str> {\n        match self {\n            Self::Text(_) => None,\n            Self::Env(t) => Some(t),\n        }\n    }\n}\n\n/// A struct that models a single .toml file in /src/syntax_mapping/builtins/.\n#[derive(Clone, Debug, Deserialize)]\nstruct MappingDefModel {\n    mappings: IndexMap<MappingTarget, Vec<Matcher>>,\n}\nimpl MappingDefModel {\n    fn into_mapping_list(self) -> MappingList {\n        let list = self\n            .mappings\n            .into_iter()\n            .flat_map(|(target, matchers)| {\n                matchers\n                    .into_iter()\n                    .map(|matcher| (matcher, target.clone()))\n                    .collect::<Vec<_>>()\n            })\n            .collect();\n        MappingList(list)\n    }\n}\n\n#[derive(Clone, Debug)]\nstruct MappingList(Vec<(Matcher, MappingTarget)>);\nimpl ToTokens for MappingList {\n    fn to_tokens(&self, tokens: &mut TokenStream) {\n        let len = self.0.len();\n        let array_items = self\n            .0\n            .iter()\n            .map(|(matcher, target)| quote! { (#matcher, #target) });\n\n        let t = quote! {\n            /// Generated by build script from /src/syntax_mapping/builtins/.\n            pub(crate) static BUILTIN_MAPPINGS: [(Lazy<Option<GlobMatcher>>, MappingTarget); #len] = [#(#array_items),*];\n        };\n        tokens.append_all(t);\n    }\n}\n\n/// Get the list of paths to all mapping definition files that should be\n/// included for the current target platform.\nfn get_def_paths() -> anyhow::Result<Vec<PathBuf>> {\n    let source_subdirs = [\n        \"common\",\n        #[cfg(target_family = \"unix\")]\n        \"unix-family\",\n        #[cfg(any(\n            target_os = \"freebsd\",\n            target_os = \"netbsd\",\n            target_os = \"openbsd\",\n            target_os = \"macos\"\n        ))]\n        \"bsd-family\",\n        #[cfg(target_os = \"linux\")]\n        \"linux\",\n        #[cfg(target_os = \"macos\")]\n        \"macos\",\n        #[cfg(target_os = \"windows\")]\n        \"windows\",\n    ];\n\n    let mut toml_paths = vec![];\n    for subdir_name in source_subdirs {\n        let subdir = Path::new(\"src/syntax_mapping/builtins\").join(subdir_name);\n        if !subdir.try_exists()? {\n            // Directory might not exist due to this `cargo vendor` bug:\n            // https://github.com/rust-lang/cargo/issues/15080\n            continue;\n        }\n        let wd = WalkDir::new(subdir);\n        let paths = wd\n            .into_iter()\n            .filter_map_ok(|entry| {\n                let path = entry.path();\n                (path.is_file() && path.extension().map(|ext| ext == \"toml\").unwrap_or(false))\n                    .then(|| path.to_owned())\n            })\n            .collect::<Result<Vec<_>, _>>()?;\n        toml_paths.extend(paths);\n    }\n\n    toml_paths.sort_by_key(|path| {\n        path.file_name()\n            .expect(\"file name should not terminate in ..\")\n            .to_owned()\n    });\n\n    Ok(toml_paths)\n}\n\nfn read_all_mappings() -> anyhow::Result<MappingList> {\n    let mut all_mappings = vec![];\n\n    for path in get_def_paths()? {\n        let toml_string = fs::read_to_string(path)?;\n        let mappings = toml::from_str::<MappingDefModel>(&toml_string)?.into_mapping_list();\n        all_mappings.extend(mappings.0);\n    }\n\n    let duplicates = all_mappings\n        .iter()\n        .duplicates_by(|(matcher, _)| matcher)\n        .collect_vec();\n    if !duplicates.is_empty() {\n        bail!(\"Rules with duplicate matchers found: {duplicates:?}\");\n    }\n\n    Ok(MappingList(all_mappings))\n}\n\n/// Build the static syntax mappings defined in /src/syntax_mapping/builtins/\n/// into a .rs source file, which is to be inserted with `include!`.\npub fn build_static_mappings() -> anyhow::Result<()> {\n    println!(\"cargo:rerun-if-changed=src/syntax_mapping/builtins/\");\n\n    let mappings = read_all_mappings()?;\n\n    // IMPRV: parse + unparse is a bit cringe, but there seems to be no better\n    // option given the limited APIs of `prettyplease`\n    let rs_src = syn::parse_file(&mappings.to_token_stream().to_string())?;\n    let rs_src_pretty = prettyplease::unparse(&rs_src);\n\n    let codegen_path = Path::new(&env::var_os(\"OUT_DIR\").ok_or(anyhow!(\"OUT_DIR is unset\"))?)\n        .join(\"codegen_static_syntax_mappings.rs\");\n\n    fs::write(codegen_path, rs_src_pretty)?;\n\n    Ok(())\n}\n"
  },
  {
    "path": "build/util.rs",
    "content": "#![allow(dead_code)]\n\nuse std::{collections::HashMap, fs, path::Path};\n\n/// Generates a file from a template.\npub fn render_template(\n    variables: &HashMap<&str, String>,\n    in_file: &str,\n    out_file: impl AsRef<Path>,\n) -> anyhow::Result<()> {\n    let mut content = fs::read_to_string(in_file)?;\n\n    for (variable_name, value) in variables {\n        // Replace {{variable_name}} by the value\n        let pattern = format!(\"{{{{{variable_name}}}}}\");\n        content = content.replace(&pattern, value);\n    }\n\n    fs::write(out_file, content)?;\n    Ok(())\n}\n"
  },
  {
    "path": "diagnostics/.gitattributes",
    "content": "* linguist-vendored\n"
  },
  {
    "path": "diagnostics/info.sh",
    "content": "#!/usr/bin/env bash\n_modules=('system' 'bat' 'bat_config' 'bat_wrapper' 'bat_wrapper_function' 'tool')\n_modules_consented=()\n\nset -o pipefail\n\nexport LC_ALL=C\nexport LANG=C\n\nBAT=\"bat\"\nif ! command -v bat &>/dev/null; then\n\tif command -v batcat &> /dev/null; then\n\t\tBAT=\"batcat\"\n\telse\n\t\ttput setaf 1\n\t\tprintf \"%s\\n%s\\n\" \\\n\t\t\t\"Unable to find a bat executable on your PATH.\" \\\n\t\t\t\"Please ensure that 'bat' exists and is not named something else.\"\n\t\ttput sgr0\n\t\texit 1\n\tfi\nfi\n\n# -----------------------------------------------------------------------------\n# Modules:\n# -----------------------------------------------------------------------------\n\n_bat_:description() {\n\t_collects \"Version information for 'bat'.\"\n\t_collects \"Custom syntaxes and themes for 'bat'.\"\n}\n\n_bat_config_:description() {\n\t_collects \"The environment variables used by 'bat'.\"\n\t_collects \"The 'bat' configuration file.\"\n}\n\n_bat_wrapper_:description() {\n\t_collects \"Any wrapper script used by 'bat'.\"\n}\n\n_bat_wrapper_function_:description() {\n\t_collects \"The wrapper function surrounding 'bat' (if applicable).\"\n}\n\n_system_:description() {\n\t_collects \"Operating system name.\"\n\t_collects \"Operating system version.\"\n}\n\n_tool_:description() {\n\t_collects \"Version information for 'less'.\"\n}\n\n# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\n_bat_:run() {\n\t_out \"$BAT\" --version\n\t_out env | grep '^BAT_\\|^PAGER='\n\n\tlocal cache_dir\n\tcache_dir=\"$($BAT --cache-dir)\"\n\tif [[ -f \"${cache_dir}/syntaxes.bin\" ]]; then\n\t\t_print_command \"$BAT\" \"--list-languages\"\n\t\techo \"Found custom syntax set.\"\n\tfi\n\n\tif [[ -f \"${cache_dir}/themes.bin\" ]]; then\n\t\t_print_command \"$BAT\" \"--list-themes\"\n\t\techo \"Found custom theme set.\"\n\tfi\n}\n\n_bat_config_:run() {\n\tif [[ -f \"$(\"$BAT\" --config-file)\" ]]; then\n\t\t_out_fence cat \"$(\"$BAT\" --config-file)\"\n\tfi\n}\n\n_bat_wrapper_:run() {\n\t_bat_wrapper_:detect_wrapper() {\n\t\tlocal bat=\"$1\"\n\t\tif file \"$(command -v \"${bat}\")\" | grep \"text executable\" &> /dev/null; then\n\t\t\t_out_fence cat \"$(command -v \"${bat}\")\"\n\t\t\treturn\n\t\tfi\n\n\t\tprintf \"\\nNo wrapper script for '%s'.\\n\" \"${bat}\"\n\t}\n\n\t_bat_wrapper_:detect_wrapper bat\n\tif [[ \"$BAT\" != \"bat\" ]]; then\n\t\t_bat_wrapper_:detect_wrapper \"$BAT\"\n\tfi\n}\n\n_bat_wrapper_function_:run() {\n\t_bat_wrapper_function_:detect_wrapper() {\n\t\tlocal command=\"$1\"\n\t\tcase \"$(\"$SHELL\" --version | head -n 1)\" in\n\t\t\t*fish*)\n\t\t\t\tif \"$SHELL\" --login -i -c \"type ${command}\" 2>&1 | grep 'function' &> /dev/null; then\n\t\t\t\t\t_out_fence \"$SHELL\" --login -i -c \"functions ${command}\"\n\t\t\t\t\treturn\n\t\t\t\tfi ;;\n\n\t\t\t*bash* | *zsh*)\n\t\t\t\tlocal type\n\t\t\t\ttype=\"$(\"$SHELL\" --login -i -c \"type ${command}\" 2>&1)\"\n\t\t\t\tif grep 'function' <<< \"$type\" &> /dev/null; then\n\t\t\t\t\t_out_fence \"$SHELL\" --login -i -c \"declare -f ${command}\"\n\t\t\t\t\treturn\n\t\t\t\telif grep 'alias' <<< \"$type\" &> /dev/null; then\n\t\t\t\t\t_out_fence \"$SHELL\" --login -i -c \"type ${command}\"\n\t\t\t\t\treturn\n\t\t\t\tfi ;;\n\n\t\t\t*)\n\t\t\t\techo \"Unable to determine if a wrapper function for '${command}' is set.\"\n\t\t\t\treturn ;;\n\t\tesac\n\t\tprintf \"\\nNo wrapper function for '%s'.\\n\" \"${command}\"\n\t}\n\n\t_bat_wrapper_function_:detect_wrapper bat\n\t_bat_wrapper_function_:detect_wrapper cat\n\tif [[ \"$BAT\" != \"bat\" ]]; then\n\t\t_bat_wrapper_function_:detect_wrapper \"$BAT\"\n\tfi\n}\n\n_system_:run() {\n\t_out uname -srm\n\n\tif command -v \"sw_vers\" &> /dev/null; then _out sw_vers; fi\n\tif command -v \"lsb_release\" &> /dev/null; then _out lsb_release -a; fi\n}\n\n_tool_:run() {\n\t_out less --version | head -n1\n}\n\n# -----------------------------------------------------------------------------\n# Functions:\n# -----------------------------------------------------------------------------\n\n_print_command() {\n\tprintf '\\n**$' 1>&2\n\tprintf ' %s' \"$@\" 1>&2\n\tprintf '**\\n' 1>&2\n}\n\n_out() {\n\t_print_command \"$@\"\n\t\"$@\" 2>&1 | sed 's/$/  /'\n}\n\n_out_fence() {\n\t_print_command \"$@\"\n\tprintf '```\\n' 1>&2\n\t\"$@\" 2>&1\n\tprintf '```\\n' 1>&2\n}\n\n_tput() {\n\ttput \"$@\" 1>&2 2> /dev/null\n}\n\n_collects() {\n\tprintf \" - %s\\n\" \"$1\" 1>&2\n}\n\n_ask_module() {\n\t_tput clear\n\t_tput cup 0 0\n\n\tcat 1>&2 << EOF\n--------------------------------------------------------------------------------\nThis script runs some harmless commands to collect information about your\nsystem and bat configuration. It will give you a small preview of the commands\nthat will be run, and ask consent before running them. Once completed, it will\noutput a small report that you can review and copy into the issue description.\n--------------------------------------------------------------------------------\nEOF\n\n\t# Print description.\n\t_tput setaf 3\n\tprintf \"The following data will be collected:\\n\" 1>&2\n\t_tput sgr0\n\t\"_$1_:description\"\n\t_tput sgr0\n\n\t# Print preview.\n\t_tput setaf 3\n\tprintf \"\\nThe following commands will be run:\\n\" 1>&2\n\t_tput sgr0\n\tdeclare -f \"_$1_:run\" \\\n\t\t| sed 's/^ *//; s/;$//' \\\n\t\t| grep '^_out[^ ]* ' \\\n\t\t| sed 's/^_out[^ ]* //' \\\n\t\t| sed \"s/\\\"\\$BAT\\\"/$BAT/\" 1>&2\n\n\t# Prompt\n\tprintf \"\\n\" 1>&2\n\tlocal response\n\twhile true; do\n\t\t_tput cup \"$(($( tput lines || echo 22) - 2))\"\n\t\t_tput el\n\t\tread -er -p \"Collect $(sed 's/_/ /' <<< \"$1\") data? [Y/n] \" response\n\t\tcase \"$response\" in\n\t\t\tY | y | yes | '') return 0 ;;\n\t\t\tN | n | no) return 1 ;;\n\t\t\t*) continue ;;\n\t\tesac\n\tdone\n}\n\n_run_module() {\n\tlocal module=\"$1\"\n\tprintf \"%s\\n%s\\n\" \"$module\" \"$(printf \"%${#module}s\" | tr ' ' '-')\"\n\t\"_$1_:run\"\n}\n\n# -----------------------------------------------------------------------------\n# Functions:\n# -----------------------------------------------------------------------------\n\n# Tell the user if their executable isn't named \"bat\".\nif [[ \"$BAT\" != \"bat\" ]] && [[ \"$1\" != '-y' ]]; then\n\ttrap '_tput rmcup; exit 1' INT\n\t_tput smcup\n\t_tput clear\n\t_tput cup 0 0\n\t_tput setaf 1\n\tprintf \"The %s executable on your system is named '%s'.\\n%s\\n\" \"bat\" \"$BAT\" \\\n\t\t\"If your issue is related to installation, please check that this isn't the issue.\"\n\t_tput sgr0\n\tprintf \"Press any key to continue...\\n\"\n\tread -rsn1\n\t_tput rmcup\nfi\n\n# Ask for consent.\nif [[ \"$1\" == '-y' ]]; then\n\t_modules_consented=(\"${_modules[@]}\")\nelse\n\ttrap '_tput rmcup; exit 1' INT\n\t_tput smcup\n\tfor _module in \"${_modules[@]}\"; do\n\t\tif _ask_module \"$_module\"; then\n\t\t\t_modules_consented+=(\"$_module\")\n\t\tfi\n\tdone\n\t_tput rmcup\nfi\n\n# Collect information.\nfor _module in \"${_modules_consented[@]}\"; do\n\t_run_module \"$_module\" 2>&1\n\tprintf \"\\n\"\ndone\n"
  },
  {
    "path": "doc/README-ja.md",
    "content": "<p align=\"center\">\n  <img src=\"logo-header.svg\" alt=\"bat - a cat clone with wings\"><br>\n  <a href=\"https://github.com/sharkdp/bat/actions?query=workflow%3ACICD\"><img src=\"https://github.com/sharkdp/bat/workflows/CICD/badge.svg\" alt=\"Build Status\"></a>\n  <img src=\"https://img.shields.io/crates/l/bat.svg\" alt=\"license\">\n  <a href=\"https://crates.io/crates/bat\"><img src=\"https://img.shields.io/crates/v/bat.svg?colorB=319e8c\" alt=\"Version info\"></a><br>\n  シンタックスハイライトとGitとの連携機能付きの <i>cat(1)</i> クローン。\n</p>\n\n<p align=\"center\">\n  <a href=\"#シンタックスハイライト\">特徴</a> •\n  <a href=\"#使い方\">使い方</a> •\n  <a href=\"#インストール\">インストール</a> •\n  <a href=\"#カスタマイズ\">カスタマイズ</a> •\n  <a href=\"#プロジェクトの目標と既存の類似したOSS\">プロジェクトの目標と既存の類似したOSS</a><br>\n  [<a href=\"../README.md\">English</a>]\n  [<a href=\"README-zh.md\">中文</a>]\n  [日本語]\n  [<a href=\"README-ko.md\">한국어</a>]\n  [<a href=\"README-ru.md\">Русский</a>]\n</p>\n\n### シンタックスハイライト\n\n`bat` は多くのプログラミング言語やマークアップ言語の\nシンタックスハイライトに対応しています:\n\n![Syntax highlighting example](https://imgur.com/rGsdnDe.png)\n\n### Gitの統合\n\n`bat` は `git` とも連携しており、差分を表現する記号が表示されます\n（図の左端）:\n\n![Git integration example](https://i.imgur.com/2lSW4RE.png)\n\n### 印刷できない文字の表示\n\n`-A`/`--show-all` オプションをつけることで\n印刷できない文字を可視化できます:\n\n![Non-printable character example](https://i.imgur.com/WndGp9H.png)\n\n### 自動ページング\n\n出力が1つの画面に対して大きすぎる場合、`bat` は自身の出力をページャー(例えば `less`) にパイプで繋げます。\n\n### ファイルの連結\n\nあなたはさらにファイルを連結させるために使うことも可能です:wink:。\n`bat` は非対話型のターミナルを検出すると(すなわち他のプロセスにパイプしたりファイル出力していると)、\n`bat` は `cat` の完全互換として振る舞い、\nプレーンなファイルを表示します。\n\n## 使い方\n\n単一のファイルを表示させたい場合\n\n```bash\n> bat README.md\n```\n\n複数のファイルを一度に表示させたい場合\n\n```bash\n> bat src/*.rs\n```\n\n標準入力から自動的に構文を決定させたい場合(ハイライトされるのは、\nたいていは `#!/bin/sh` のようなシバンを利用して、\nファイルの一行目から構文を決定できる場合のみです)\n\n```bash\n> curl -s https://sh.rustup.rs | bat\n```\n\n標準入力から明示的に言語を指定したい場合\n\n```bash\n> yaml2json .travis.yml | json_pp | bat -l json\n```\n\n空白文字を可視化させたい場合:\n```bash\n> bat -A /etc/hosts\n```\n\n`cat` の代わりに `bat` を使用する際の例:\n\n```bash\nbat > note.md  # quickly create a new file\n\nbat header.md content.md footer.md > document.md\n\nbat -n main.rs  # show line numbers (only)\n\nbat f - g  # output 'f', then stdin, then 'g'.\n```\n\n### 他のツールとの統合\n\n#### `fzf`\n\n[`fzf`](https://github.com/junegunn/fzf) のプレビューウィンドウに `bat` を使用できます。\nその場合、`bat` の `--color=always` オプションを用いてカラー出力を強制しなければなりません。\nまた、`--line-range` オプションを用いることで巨大なファイルの読み込み時間を制限できます:\n```bash\nfzf --preview 'bat --color=always --style=numbers --line-range=:500 {}'\n```\n\n詳しくは [`fzf` の `README`](https://github.com/junegunn/fzf#preview-window) を参照してください。\n\n#### `find` or `fd`\n\n`find` の `-exec` オプションを使用して、`bat` ですべての検索結果をプレビューできます:\n```bash\nfind … -exec bat {} +\n```\n\n[`fd`](https://github.com/sharkdp/fd) を使用している場合は、`-X` /`-exec-batch` オプションを使用して同じことを行うことができます:\n```bash\nfd … -X bat\n```\n\n#### `ripgrep`\n\n[`batgrep`](https://github.com/eth-p/bat-extras/blob/master/doc/batgrep.md) では、[`ripgrep`](https://github.com/BurntSushi/ripgrep) 検索結果のプリンターとして `bat` を使用できます。\n\n```bash\nbatgrep needle src/\n```\n\n#### `tail -f`\n\n`bat` を `tail -f` と組み合わせて、構文強調表示を使用して特定のファイルを継続的に監視できます。\n```bash\ntail -f /var/log/pacman.log | bat --paging=never -l log\n```\n注意事項：`tail -f`と組み合わせるには、ページングをオフにしなければなりません。また、この場合は構文が自動検出されないため、明示的に指定（`-l log`）しています。\n\n#### `git`\n\n`bat` を `git show` と組み合わせて、\n適切な構文強調表示を使用して特定のファイルの古いバージョンを表示できます:\n```bash\ngit show v0.6.0:src/main.rs | bat -l rs\n```\n\n差分内の構文強調表示は現在サポートされていないことに注意してください。 これを探しているなら、[`delta`](https://github.com/dandavison/delta) をチェックしてください。\n\n#### `xclip`\n\n`bat` の出力の行番号と Git 変更マーカーにより、ファイルの内容をコピーするのが難しくなる場合があります。\nこれを防ぐには、`-p` / `-plain` オプションを使用して `bat` を呼び出すか、\n単に出力を `xclip` にパイプします:\n```bash\nbat main.cpp | xclip\n```\n`bat` は出力がリダイレクトされていることを検出し、プレーンファイルの内容を出力します。\n\n#### `man`\n\n`bat` は `MANPAGER` 環境変数を設定することにより、\n`man` の色付けページャーとして使用できます:\n\n```bash\nexport MANPAGER=\"sh -c 'col -bx | bat -l man -p'\"\nman 2 select\n```\n\nフォーマットの問題が発生した場合は\n`MANROFFOPT=\"-c\"` を設定する必要もあります。\n\nこれを新しいコマンドにバンドルしたい場合は [`batman`](https://github.com/eth-p/bat-extras/blob/master/doc/batman.md) も使用できます。\n\n[Manpage syntax](assets/syntaxes/Manpage.sublime-syntax) はこのリポジトリで開発されており、まだ作業が必要であることに注意してください。\n\n#### `prettier` / `shfmt` / `rustfmt`\n\n[`prettybat`](https://github.com/eth-p/bat-extras/blob/master/doc/prettybat.md) スクリプトは、コードをフォーマットし、`bat` で印刷するラッパーです。\n\n\n## インストール\n\n[![Packaging status](https://repology.org/badge/vertical-allrepos/bat-cat.svg?columns=3&exclude_unsupported=1)](https://repology.org/project/bat-cat/versions)\n\n###  On Ubuntu (`apt` を使用)\n*... や他のDebianベースのLinuxディストリビューション*\n\n[20.04 (\"Focal\") 以降の Ubuntu](https://packages.ubuntu.com/search?keywords=bat&exact=1) または [2021 年 8 月以降の Debian (Debian 11 - \"Bullseye\")](https://packages.debian.org/bullseye/bat) では `bat` パッケージが利用できます。\n\n```bash\napt install bat\n```\n\n`apt` を使用して `bat` をインストールした場合、実行可能ファイルの名前が `bat` ではなく `batcat` になることがあります([他のパッケージとの名前衝突のため](https://github.com/sharkdp/bat/issues/982))。`bat -> batcat` のシンボリックリンクまたはエイリアスを設定することで、実行可能ファイル名が異なることによる問題の発生を防ぎ、他のディストリビューションと一貫性を保てます。\n\n``` bash\nmkdir -p ~/.local/bin\nln -s /usr/bin/batcat ~/.local/bin/bat\n```\n\n### On Ubuntu (最新の `.deb` パッケージを使用)\n*... や他のDebianベースのLinuxディストリビューション\n\nbatの最新リリースを実行する場合、または Ubuntu/Debian の古いバージョンを使用している場合は、[release page](https://github.com/sharkdp/bat/releases) から最新の `.deb` パッケージをダウンロードし、\n次の方法でインストールします:\n```bash\nsudo dpkg -i bat_0.18.3_amd64.deb  # adapt version number and architecture\n```\n\n### On Alpine Linux\n\n適切なリポジトリが有効になっている場合は、\n公式のソースから [`bat` package](https://pkgs.alpinelinux.org/packages?name=bat) をインストールできます:\n\n```bash\napk add bat\n```\n\n###  On Arch Linux\n\n[Arch Linuxの公式リソース](https://www.archlinux.org/packages/extra/x86_64/bat/)\nからインストールできます。\n\n```bash\npacman -S bat\n```\n\n### On Fedora\n\n公式の [Fedora Modular](https://docs.fedoraproject.org/en-US/modularity/using-modules/) リポジトリから [the `bat` package](https://koji.fedoraproject.org/koji/packageinfo?packageID=27506) をインストールできます。\n\n```bash\ndnf install bat\n```\n\n### On Gentoo Linux\n\n公式ソースから\n[the `bat` package](https://packages.gentoo.org/packages/sys-apps/bat) をインストールできます。\n\n```bash\nemerge sys-apps/bat\n```\n\n###  On Void Linux\n\nxbps-install経由で `bat` をインストールできます。\n```\nxbps-install -S bat\n```\n\n### On FreeBSD\n\npkg を使用してプリコンパイルされた [`bat` package](https://www.freshports.org/textproc/bat) をインストールできます:\n\n```bash\npkg install bat\n```\n\nまたは FreeBSD ポートから自分でビルドすることもできます:\n\n```bash\ncd /usr/ports/textproc/bat\nmake install\n```\n\n### Via nix\n\n`bat` を [nix package manager](https://nixos.org/nix) 経由でインストールすることができます:\n\n```bash\nnix-env -i bat\n```\n\n### On openSUSE\n\n`bat` をzypperでインストールすることができます:\n\n```bash\nzypper install bat\n```\n\n###  On macOS\n\n[Homebrew](http://braumeister.org/formula/bat)で `bat` をインストールできます:\n\n```bash\nbrew install bat\n```\n\nまたは [MacPorts](https://ports.macports.org/port/bat/summary) で `bat` をインストールします:\n\n```bash\nport install bat\n```\n\n###  On Windows\n\nWindowsにbatをインストールするいくつかのオプションがあります。\nbatをインストールしたら [Windowsでのbatの使用](#windows-での-bat-の利用) セクションをご覧ください。\n\n#### With Chocolatey\n\n[Chocolatey](https://chocolatey.org/packages/Bat) から `bat` をインストールできます:\n```bash\nchoco install bat\n```\n\n#### With Scoop\n\n[scoop](https://scoop.sh/) から `bat` をインストールできます:\n```bash\nscoop install bat\n```\n\n[Visual C ++再頒布可能](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads) パッケージをインストールする必要があります。\n\n#### From prebuilt binaries:\n\n[リリースページ](https://github.com/sharkdp/bat/releases) からビルド済みのバイナリをダウンロードできます。\n\n[Visual C ++再頒布可能](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads) パッケージをインストールする必要があります。\n\n###  Via Docker\n\nコンテナ内で `bat` を使いたい方のために [Docker image](https://hub.docker.com/r/danlynn/bat/) が用意されています:\n```bash\ndocker pull danlynn/bat\nalias bat='docker run -it --rm -e BAT_THEME -e BAT_STYLE -e BAT_TABS -v \"$(pwd):/myapp\" danlynn/bat'\n```\n\n###  Via Ansible\n\n[Ansible](https://www.ansible.com/) でインストールすることができます:\n\n```bash\n# Install role on local machine\nansible-galaxy install aeimer.install_bat\n```\n\n```yaml\n---\n# Playbook to install bat\n- host: all\n  roles:\n    - aeimer.install_bat\n```\n\n- [Ansible Galaxy](https://galaxy.ansible.com/aeimer/install_bat)\n- [GitHub](https://github.com/aeimer/ansible-install-bat)\n\nこれは以下のディストリビューションで動作するはずです:\n- Debian/Ubuntu\n- ARM (eg. Raspberry PI)\n- Arch Linux\n- Void Linux\n- FreeBSD\n- MacOS\n\n### From binaries\n\n\n多くの異なるアーキテクチャのためのプレビルドバージョンを[リリースページ](https://github.com/sharkdp/bat/releases)からチェックしてみてください。静的にリンクされている多くのバイナリも利用できます: ファイル名に `musl` を含むアーカイブを探してみてください。\n\n### From source\n\n\n`bat` をソースからビルドしたいならば、Rust 1.79.0 以上の環境が必要です。\n`cargo` を使用してビルドすることができます:\n\n```bash\ncargo install --locked bat\n```\n\n一部のプラットフォームでは `llvm` および/または `libclang-dev` のインストールが必要になる場合があります。\n\n## カスタマイズ\n\n### ハイライト テーマ\n\n`bat --list-themes` を使うと現在利用可能なシンタックスハイライトのテーマを入手できます。\n`TwoDark` テーマを選ぶためには\n`--theme=TwoDark` オプションをつけるか `BAT_THEME` という環境変数に\n`TwoDark` を代入する必要があります。 シェルの起動ファイルに `export BAT_THEME=\"TwoDark\"`\nと定義すればその設定が変わることはないでしょう。あるいは、 `bat` の\n[設定ファイル](#設定ファイル)を利用してください。\n\nカスタムファイルでさまざまなテーマをプレビューする場合は、\n次のコマンドを使用できます（これには [`fzf`](https://github.com/junegunn/fzf) が必要です）。\n``` bash\nbat --list-themes | fzf --preview=\"bat --theme={} --color=always /path/to/file\"\n```\n\n`bat` はデフォルトだと黒い背景色のターミナルに適しています。\nしかし、`GitHub` や `OneHalfLight` のような白い背景色のテーマでもいい感じにすることができます。\n['新しいテーマの追加' セクションに従って](#新しいテーマの追加)\nカスタムテーマを使用することもできます。\n\n### 出力のスタイル\n\n`--style` を使うことで `bat` の表示の見た目を変更することができます。\n例えば、 `--style=numbers,changes` と入力します。\nすると、Gitの差分と行番号だけが表示され、グリッド線とファイルヘッダーは表示されません。\n環境変数に `BAT_STYLE` を定義するとこれらの設定を永続的に使用することができます。\n[設定ファイル](#設定ファイル) を参考にしても良いでしょう。\n\n### 新しい構文の追加 / 言語の定義\n\n`bat` はシンタックスハイライトのための [`syntect`](https://github.com/trishume/syntect/)\nという素晴らしいライブラリを使用しています。`syntect` は、\n[Sublime Text の `.sublime-syntax` ファイル](https://www.sublimetext.com/docs/3/syntax.html)\nとテーマを読み取ることができます。新しい構文を定義するために以下の手順を行います。\n\n構文定義ファイルを入れておくためのフォルダを作ります:\n\n```bash\nmkdir -p \"$(bat --config-dir)/syntaxes\"\ncd \"$(bat --config-dir)/syntaxes\"\n\n# Put new '.sublime-syntax' language definition files\n# in this folder (or its subdirectories), for example:\ngit clone https://github.com/tellnobody1/sublime-purescript-syntax\n```\n\n次のコマンドを使用して、これらのファイルをバイナリキャッシュに解析します:\n\n```bash\nbat cache --build\n```\n\n最後に `bat --list-languages` と入力すると新しい言語が利用可能かどうかチェックします。\n\nデフォルトの設定に戻したいときは以下のコマンドを実行します:\n\n```bash\nbat cache --clear\n```\n\n### 新しいテーマの追加\n\nこれは構文を新しく定義するやり方と非常に似ています。\n\nまず、新しいシンタックスハイライトのテーマのフォルダを作ります:\n```bash\nmkdir -p \"$(bat --config-dir)/themes\"\ncd \"$(bat --config-dir)/themes\"\n\n# Download a theme in '.tmTheme' format, for example:\ngit clone https://github.com/greggb/sublime-snazzy\n\n# Update the binary cache\nbat cache --build\n```\n\n最後に、 `bat --list-themes` で新しいテーマが利用可能かチェックします\n\n### 異なるページャーの使用\n\n`bat` は環境変数 `PAGER` に使用するページャーを明記します。\nこの環境変数が定義されていない場合、デフォルトで `less` が使用されます。\nもし、異なるページャーを使用したい場合は、`PAGER` を修正してください。\nまたは、`PAGER` を上書きする環境変数として `BAT_PAGER` を定義することも可能です。\n\nもし、ページャーにコマンドライン引数を渡したい場合は、\n`PAGER`/`BAT_PAGER` 環境変数を定義してください:\n\n```bash\nexport BAT_PAGER=\"less -RF\"\n```\n\n環境変数を利用する代わりに、 `bat` の [設定ファイル](#設定ファイル) を使用して設定も可能です（`--pager` オプション）\n\n**注意**: デフォルトにより、ページャーが `less` にセットされているならば\n`bat` はページャーの以下のコマンドラインオプション を受け付けるでしょう:\n`-R`/`--RAW-CONTROL-CHARS`, `-F`/`--quit-if-one-screen` そして `-X`/`--no-init`。\n最後のオプション（-X）は、530 より古いバージョンにのみ使用されます。\n\n`-R` オプションは、ANSIカラーを正しく解釈するために必要です。\n2番目のオプション（`-F`）は、出力サイズが端末の垂直サイズよりも小さい場合、すぐに終了するようにlessに指示します。\nこれは、ページャーを終了するために `q` を押す必要がないため、小さなファイルに便利です。\n3番目のオプション（`-X`）は、`less` の古いバージョンの `--quit-if-one-screen` 機能のバグを修正するために必要です。 \n残念ながら、`less` のマウスホイールのサポートも少なくなります。\n\n`less` の古いバージョンでマウスホイールのスクロールを有効にしたい場合は、\n`-R` だけを渡すことができます（上記の例のように、これは1画面終了機能を無効にします）。 \n530以下の場合は、そのまま使用できます。\n\n### Dark mode\n\nmacOSでダークモード機能を使用する場合、OSテーマに基づいて異なるテーマを使用するように `bat` を構成することができます。 \n次のスニペットは、ライトモードの場合は `デフォルト` のテーマを使用し、\nダークモードの場合は `GitHub` テーマを使用します。\n\n```bash\nalias cat=\"bat --theme=\\$(defaults read -globalDomain AppleInterfaceStyle &> /dev/null && echo default || echo GitHub)\"\n```\n\n## 設定ファイル\n\n`bat` は設定ファイルでカスタマイズすることが可能です。ファイルの場所はOSに依存します。\n使用しているOSのデフォルトパスを調べるには以下のコマンドを実行してください:\n```\nbat --config-file\n```\n\nまたは、`BAT_CONFIG_PATH` 環境変数を使用して、`bat` が\n構成ファイルのデフォルト以外の場所を指すようにすることができます:\n```bash\nexport BAT_CONFIG_PATH=\"/path/to/bat.conf\"\n```\n\n### フォーマット\n\nこの設定ファイルはコマンドライン引数の単純なリストです。 `bat --help` を利用すると、利用可能なオプションとその値を閲覧することができます。さらに、`#` でコメント文を加えることができます。\n\n設定ファイルの例:\n```bash\n# Set the theme to \"TwoDark\"\n--theme=\"TwoDark\"\n\n# Show line numbers, Git modifications and file header (but no grid)\n--style=\"numbers,changes,header\"\n\n# Use italic text on the terminal (not supported on all terminals)\n--italic-text=always\n\n# Use C++ syntax for Arduino .ino files\n--map-syntax \"*.ino:C++\"\n\n# Use \".gitignore\"-style highlighting for \".ignore\" files\n--map-syntax \".ignore:Git Ignore\"\n```\n\n## Windows での `bat` の利用\n\nWindows 上で `bat` はほとんど動作しますが、いくつかの機能は設定を必要をする場合があります。\n\n### ページング\n\nWindowsには、`more` 形式の非常に限られたページャーしか含まれていません。\n`less` 用のWindowsバイナリは、[ホームページ](http://www.greenwoodsoftware.com/less/download.html) または\n[Chocolatey](https://chocolatey.org/packages/Less) からダウンロードできます。\nこれを使用するには、バイナリを `PATH` のディレクトリに配置するか、環境変数を定義します。[Chocolateyパッケージ](#on-windows) は `less` を自動的にインストールします。\n\n### 色\n\nWindows 10では、`conhost.exe` （コマンドプロンプト）と\n[v1511](https://en.wikipedia.org/wiki/Windows_10_version_history#Version_1511_(November_Update)) 以降の PowerShell の両方、\nおよびbashの新しいバージョンの色がネイティブにサポートされています。 以前のバージョンのWindowsでは、\n[ConEmu](https://conemu.github.io/) を含む [Cmder](http://cmder.net/) を使用できます。\n\n**注意:** Git と MSYS の `less` はWindows上で色を正しく解釈しません。\nもし、あなたが他のページャーをインストールしていないのであれば、 `--paging=never` オプションを付け加えるか\n`BAT_PAGER` に空文字を設定することでページングを完全に無効にできます。\n\n### Cygwin\n\nWindows上の `bat` は Cygwin のunix風のpath(`/cygdrive/*`)をネイティブサポートしていません。絶対的なcygwinパスを引数として受けたときに、 `bat` は以下のエラーを返すでしょう: `The system cannot find the path specified. (os error 3)`\n\nwrapperを作成するか、以下の関数を `.bash_profile` に追記することで、この問題を解決することができます:\n\n```bash\nbat() {\n    local index\n    local args=(\"$@\")\n    for index in $(seq 0 ${#args[@]}) ; do\n        case \"${args[index]}\" in\n        -*) continue;;\n        *)  [ -e \"${args[index]}\" ] && args[index]=\"$(cygpath --windows \"${args[index]}\")\";;\n        esac\n    done\n    command bat \"${args[@]}\"\n}\n```\n\n## トラブルシューティング\n\n### ターミナルと色\n\n`bat` はターミナルがトゥルーカラーをサポートしている/していないに関係なくサポートします。\nしかし、シンタックスハイライトのテーマの色が8-bitカラーに最適化されていない場合、\n24-bitであるトゥルーカラーをサポートしているターミナルを使用することを強く推奨します（`terminator`, `konsole`, `iTerm2`, ...）。\nこの [記事](https://gist.github.com/XVilka/8346728) には\n24-bitカラーがサポートされているターミナルの一覧が掲載されています。\n\n本当の色をターミナルにセットするために、環境変数 `COLORTERM` に `truecolor` か\n`24bit` のどちらかを代入してください。さもなければ、`bat` はどの色を使うのか決定することができません。または、24-bit エスケープシーケンスがサポートされません\n（そして、8-bit colorに戻ります）。\n\n### 行番号とグリッド線がほとんど見えない\n\n異なるテーマを試してみてください（`bat --list-themes` でテーマを閲覧できます）。\n`OneHalfDark` と `OneHalfLight` テーマはグリッド線と線の色を明るくします。\n\n### ファイルエンコーディング\n\n`bat` は UTF-16 と同様に UTF-8 をネイティブにサポートします。\n他のすべてのファイルエンコーディングでは、エンコーディングは通常自動検出できないため、最初に UTF-8 に変換する必要があります。\nこれを行うには `iconv` を使用できます。\n例: Latin-1（ISO-8859-1）エンコーディングの PHP ファイルがある場合、次のように呼び出すことができます:\n``` bash\niconv -f ISO-8859-1 -t UTF-8 my-file.php | bat\n```\n注: `bat` が構文を自動検出できない場合は\n`-l` / `-language` オプションを使用する必要がある場合があります。\n\n## 開発\n\n```bash\n# Recursive clone to retrieve all submodules\ngit clone --recursive https://github.com/sharkdp/bat\n\n# Build (debug version)\ncd bat\ncargo build --bins\n\n# Run unit tests and integration tests\ncargo test\n\n# Install (release version)\ncargo install --locked\n\n# Build a bat binary with modified syntaxes and themes\nbash assets/create.sh\ncargo install --locked --force\n```\n\n## Maintainers\n\n- [sharkdp](https://github.com/sharkdp)\n- [eth-p](https://github.com/eth-p)\n\n## プロジェクトの目標と既存の類似したOSS\n\n`bat` は以下の目標を達成しようと試みています:\n\n- 美しく高度なシンタックスハイライトの提供\n- ファイルの差分を表示するためのGitとの連携\n-  (POSIX) `cat` との完全互換\n- ユーザーフレンドリーなコマンドラインインターフェースの提供\n\nあなたが同様のプログラムを探しているなら、多くの選択肢があります。\n比較については [このドキュメント](alternatives.md) を参照してください。\n\n## ライセンス\nCopyright (c) 2018-2021 [bat-developers](https://github.com/sharkdp/bat).\n\n`bat` は MIT License 及び Apache License 2.0 の両方の条件の下で配布されています。\n\nライセンスの詳細については [LICENSE-APACHE](../LICENSE-APACHE) 及び [LICENSE-MIT](../LICENSE-MIT) ファイルを参照して下さい。\n"
  },
  {
    "path": "doc/README-ko.md",
    "content": "<p align=\"center\">\n  <img src=\"logo-header.svg\" alt=\"bat - a cat clone with wings\"><br>\n  <a href=\"https://github.com/sharkdp/bat/actions?query=workflow%3ACICD\"><img src=\"https://github.com/sharkdp/bat/workflows/CICD/badge.svg\" alt=\"Build Status\"></a>\n  <img src=\"https://img.shields.io/crates/l/bat.svg\" alt=\"license\">\n  <a href=\"https://crates.io/crates/bat\"><img src=\"https://img.shields.io/crates/v/bat.svg?colorB=319e8c\" alt=\"Version info\"></a><br>\n  문법 강조와 Git 통합 기능의 <i>cat(1)</i> 클론\n</p>\n\n<p align=\"center\">\n  <a href=\"#문법-강조\">주요 기능들</a> •\n  <a href=\"#사용법\">사용법</a> •\n  <a href=\"#설치\">설치</a> •\n  <a href=\"#사용자화\">사용자화</a> •\n  <a href=\"#프로젝트-목표와-대안들\">프로젝트 목표와 대안들</a><br>\n  [<a href=\"../README.md\">English</a>]\n  [<a href=\"README-zh.md\">中文</a>]\n  [<a href=\"README-ja.md\">日本語</a>]\n  [한국어]\n  [<a href=\"README-ru.md\">Русский</a>]\n</p>\n\n### 문법 강조\n\n`bat`은 다양한 프로그래밍 및 마크업 언어의 문법 강조(syntax highlighting) 기능을\n지원합니다:\n\n![Syntax highlighting example](https://imgur.com/rGsdnDe.png)\n\n### Git 통합\n\n`bat`은 `git`을 통해 인덱스와 함께 변경분을 표시합니다\n(왼쪽 사이드바를 확인하세요):\n\n![Git integration example](https://i.imgur.com/2lSW4RE.png)\n\n### 비인쇄 문자 처리\n\n`-A`/`--show-all` 옵션을 사용하여 비인쇄 문자를 표시 및 강조할 수 있습니다:\n\n![Non-printable character example](https://i.imgur.com/WndGp9H.png)\n\n### 자동 페이징\n\n`bat`은 기본적으로 한 화면에 비해 출력이 큰 경우 `less`와 같은 페이저(pager)로\n출력을 연결(pipe)합니다.\n만약 `bat`을 언제나 `cat`처럼 작동하게 하려면 (출력을 페이지하지 않기),\n`--paging=never` 옵션을 커맨드 라인이나 설정 파일에 넣을 수 있습니다.\n셸(shell) 설정에서 `cat`을 `bat`의 alias로 사용하려면,\n`alias cat='bat --paging=never'`를 써서 기본 행동을 유지할 수 있습니다.\n\n### 파일 연결(concatenation)\n\n페이저(pager)를 사용하더라도 `bat`은 파일들을 연결(concatenate)할 수 있습니다\n:wink:.\n`bat`이 비대화형(non-interactive) 터미널(예를 들어, 다른 프로세스나 파일에\n연결(pipe)한 경우)을 감지하면, `bat`은 `--pager` 옵션의 값과 상관없이 `cat`과\n동일하게 파일 내용을 그대로 출력합니다.\n\n## 사용법\n\n터미널에 하나의 파일 표시하기\n\n```bash\n> bat README.md\n```\n\n여러 파일 한 번에 보여주기\n\n```bash\n> bat src/*.rs\n```\n\nstdin에서 읽고, 자동으로 맞는 문법 결정하기 (참고로, 문법 강조는 파일의 첫\n줄만으로 문법이 결정될 수 있을 때만 작동합니다.\n이는 보통 `#!/bin/sh`와 같은 셔뱅(shebang)으로 판단합니다.)\n\n```bash\n> curl -s https://sh.rustup.rs | bat\n```\n\nstdin에서 읽고, 명시적으로 언어 지정하기\n\n```bash\n> yaml2json .travis.yml | json_pp | bat -l json\n```\n\n비인쇄 문자 표시 및 강조하기\n```bash\n> bat -A /etc/hosts\n```\n\n`cat` 대신 사용하기:\n\n```bash\nbat > note.md  # quickly create a new file\n\nbat header.md content.md footer.md > document.md\n\nbat -n main.rs  # show line numbers (only)\n\nbat f - g  # output 'f', then stdin, then 'g'.\n```\n\n### 다른 도구들과 통합하기\n\n#### `fzf`\n\n`bat`을 [`fzf`](https://github.com/junegunn/fzf)의 프리뷰로 쓸 수 있습니다.\n이를 위해서는 `bat`의 `--color=always` 옵션으로 항상 컬러 출력이 나오게 해야\n합니다.\n또한 `--line-range` 옵션으로 긴 파일의 로드 시간을 제한할 수 있습니다:\n```bash\nfzf --preview 'bat --color=always --style=numbers --line-range=:500 {}'\n```\n더 많은 정보는\n[`fzf`의 `README`](https://github.com/junegunn/fzf#preview-window)를 참고하세요.\n\n#### `find`와 `fd`\n\n`find`의 `-exec` 옵션을 사용하여 모든 검색 결과를 `bat`로 미리 볼 수 있습니다: \n```bash\nfind … -exec bat {} +\n```\n\n[`fd`](https://github.com/sharkdp/fd)를 사용하는 경우, `-X`/`--exec-batch`\n옵션을 이용하여 동일하게 사용할 수 있습니다:\n```bash\nfd … -X bat\n```\n\n#### `ripgrep`\n\n[`batgrep`](https://github.com/eth-p/bat-extras/blob/master/doc/batgrep.md)을\n통해 `bat`로 [`ripgrep`](https://github.com/BurntSushi/ripgrep)의 검색 결과를\n출력할 수 있습니다.\n\n```bash\nbatgrep needle src/\n```\n\n#### `tail -f`\n\n`bat`와 `tail -f`를 함께 사용하여 주어진 파일을 문법 강조하며 지속적으로\n모니터할 수 있습니다.\n```bash\ntail -f /var/log/pacman.log | bat --paging=never -l log\n```\n참고로 이 작업을 하려면 페이징 기능을 꺼야 합니다.\n또한 이 경우 문법을 자동 감지할 수 없기 때문에, 적용할 문법을 직접 지정해야\n합니다 (`-l log`).\n\n#### `git`\n\n`bat`과 `git show`를 함께 사용하여 주어진 파일의 이전 버전을 올바른 문법 강조로\n볼 수 있습니다:\n```bash\ngit show v0.6.0:src/main.rs | bat -l rs\n```\n\n#### `git diff`\n\n`bat`과 `git diff`를 함께 사용하여 수정된 코드 주위의 줄들을 올바른 문법 강조로\n볼 수 있습니다:\n```bash\nbatdiff() {\n    git diff --name-only --relative --diff-filter=d -z | xargs -0 bat --diff\n}\n```\n이것을 별도의 도구로 쓰고 싶다면\n[`bat-extras`](https://github.com/eth-p/bat-extras)의 `batdiff`를 확인해 보세요.\n\nGit과 diff의 더 많은 지원을 원한다면\n[`delta`](https://github.com/dandavison/delta)를 확인해 보세요.\n\n#### `xclip`\n\n`bat` 출력에 줄 번호와 Git 수정 내역이 포함되어서 파일의 내용을 복사하기\n어려울 수 있습니다.\n이 경우에는 `bat`의 `-p`/`--plain` 옵션을 사용하거나 간단히 `xclip`으로 출력을\n연결(pipe)하면 됩니다:\n```bash\nbat main.cpp | xclip\n```\n`bat`는 출력이 우회되고 있다는 것을 감지하여 파일 내용 그대로를 출력합니다.\n\n#### `man`\n\n`MANPAGER` 환경 변수 설정을 통해 `bat`을 `man`의 컬러 페이저(pager)로 쓸 수\n있습니다.\n\n```bash\nexport MANPAGER=\"sh -c 'col -bx | bat -l man -p'\"\nman 2 select\n```\n(Debian이나 Ubuntu를 사용한다면 `bat`을 `batcat`으로 치환하세요.)\n\n포팻 문제가 발생한다면, `MANROFFOPT=\"-c\"`을 써야 할 수 있습니다.\n\n이 기능을 포함한 새로운 명령어를 선호한다면,\n[`batman`](https://github.com/eth-p/bat-extras/blob/master/doc/batman.md)을 쓸\n수도 있습니다. \n\n참고로 [Manpage 문법](../assets/syntaxes/Manpage.sublime-syntax)은 본 저장소에서\n개발 중에 있으며, 아직 더 손봐야 합니다.\n\n또한, 이는 Mandoc의 `man` 구현에서\n[작동하지 않습니다](https://github.com/sharkdp/bat/issues/1145).\n\n#### `prettier` / `shfmt` / `rustfmt`\n\n[`prettybat`](https://github.com/eth-p/bat-extras/blob/master/doc/prettybat.md)\n스크립트는 코드를 포맷하고 `bat`으로 출력하는 래퍼(wrapper)입니다.\n\n\n## 설치\n\n[![Packaging status](https://repology.org/badge/vertical-allrepos/bat-cat.svg?columns=3&exclude_unsupported=1)](https://repology.org/project/bat-cat/versions)\n\n### Ubuntu에서 (`apt` 사용)\n*... 그리고 다른 Debian 기반의 Linux 배포판들에서.*\n\n`bat`은 [Ubuntu](https://packages.ubuntu.com/eoan/bat)와\n[Debian](https://packages.debian.org/sid/bat) 패키지 배포 과정에 도입되는 중이며,\nEoan 19.10 버전의 Ubuntu에서부터 제공됩니다.\n현재 Debian에서는 불안정한 \"Sid\" 브랜치에서만 `bat`이 제공됩니다.\n\n만약 충분히 최신 버전의 Ubuntu/Debian이 설치되어 있다면 간단히 다음을 실행하세요:\n\n```bash\napt install bat\n```\n\n**중요**: 만약 `bat`을 이와 같이 설치한다면, ([다른 패키지와의 이름\n충돌](https://github.com/sharkdp/bat/issues/982)로 인하여) `bat` 대신에\n`batcat`이라는 이름의 실행 파일로 설치될 수 있음을 참고하세요.\n이에 따른 문제들과 다른 배포판들과의 일관성을 위하여 `bat -> batcat` symlink\n혹은 alias를 설정할 수 있습니다:\n``` bash\nmkdir -p ~/.local/bin\nln -s /usr/bin/batcat ~/.local/bin/bat\n```\n\n### Ubuntu에서 (가장 최신 `.deb` 패키지들 사용)\n*... 그리고 다른 Debian 기반의 Linux 배포판들에서.*\n\n만약 여러분이 설치한 Ubuntu/Debian에 패키지가 배포되지 않거나 가장 최신 릴리즈된\n`bat`을 원한다면, [릴리즈 페이지](https://github.com/sharkdp/bat/releases)에서\n다음과 같이 `.deb` 패키지를 받아 설치하세요:\n\n```bash\nsudo dpkg -i bat_0.18.3_amd64.deb  # adapt version number and architecture\n```\n\n### Alpine Linux에서\n\n적절한 저장소가 활성화되어 있다면, 공식 소스를 통해\n[`bat` 패키지](https://pkgs.alpinelinux.org/packages?name=bat)를 설치할 수\n있습니다:\n\n```bash\napk add bat\n```\n\n### Arch Linux에서\n\n공식 소스를 통해\n[`bat` 패키지](https://www.archlinux.org/packages/extra/x86_64/bat/)를\n설치할 수 있습니다:\n\n```bash\npacman -S bat\n```\n\n### Fedora에서\n\n공식\n[Fedora 모듈](https://docs.fedoraproject.org/en-US/modularity/using-modules/)\n저장소에서\n[`bat` 패키지](https://koji.fedoraproject.org/koji/packageinfo?packageID=27506)를\n설치할 수 있습니다:\n\n```bash\ndnf install bat\n```\n\n### Funtoo Linux에서\n\ndev-kit을 통해 [`bat` 패키지](https://github.com/funtoo/dev-kit/tree/1.4-release/sys-apps/bat)를 설치할 수 있습니다: \n\n```bash\nemerge sys-apps/bat\n```\n\n### Gentoo Linux에서\n\n공식 소스를 통해\n[`bat` 패키지](https://packages.gentoo.org/packages/sys-apps/bat)를 설치할 수\n있습니다:\n\n```bash\nemerge sys-apps/bat\n```\n\n### Void Linux에서\n\nxbps-install을 이용해 `bat`을 설치할 수 있습니다:\n```bash\nxbps-install -S bat\n```\n\n### Termux에서\n\npkg를 이용해 `bat`을 설치할 수 있습니다:\n```bash\npkg install bat\n```\n\n### FreeBSD에서\n\npkg를 이용하여 미리 컴파일된\n[`bat` 패키지](https://www.freshports.org/textproc/bat)를 설치할 수 있습니다:\n\n```bash\npkg install bat\n```\n\n또는 FreeBSD 포트에서 직접 빌드할 수도 있습니다:\n\n```bash\ncd /usr/ports/textproc/bat\nmake install\n```\n\n### nix를 써서\n\n[nix package manager](https://nixos.org/nix)를 이용해 `bat`을 설치할 수\n있습니다:\n\n```bash\nnix-env -i bat\n```\n\n### openSUSE에서\n\nzypper를 이용해 `bat`을 설치할 수 있습니다:\n\n```bash\nzypper install bat\n```\n\n### snap 패키지를 써서\n\n지금으로서는 추천하는 snap 패키지가 없습니다.\n제공되는 패키지들이 존재할 수는 있지만, 공식적으로 지원되지 않으며\n[문제](https://github.com/sharkdp/bat/issues/1519)가 있을 수 있습니다.\n\n\n### macOS (또는 Linux)에서 Homebrew를 써서\n\n[macOS의 Homebrew](https://formulae.brew.sh/formula/bat) 또는\n[Linux의 Homebrew](https://formulae.brew.sh/formula-linux/bat)를 이용하여\n`bat`을 설치할 수 있습니다.\n\n```bash\nbrew install bat\n```\n\n### macOS에서 MacPorts를 써서\n\n[MacPorts](https://ports.macports.org/port/bat/summary)를 이용하여 `bat`을\n설치할 수 있습니다:\n\n```bash\nport install bat\n```\n\n### Windows에서\n\nWindows에서 `bat`을 설치할 수 있는 몇 가지 옵션들이 있습니다.\n먼저 `bat`을 설치한 후,\n[\"Windows에서 `bat` 사용하기\"](#windows에서-bat-사용하기) 섹션을 살펴보세요.\n\n#### 전제 조건\n\n[Visual C++ 재배포 가능](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads)\n패키지를 설치해야 합니다.\n\n#### Chocolatey를 써서\n\n[Chocolatey](https://chocolatey.org/packages/Bat)를 이용해 `bat`을 설치할 수\n있습니다:\n```bash\nchoco install bat\n```\n\n#### Scoop을 써서\n\n[scoop](https://scoop.sh/)을 이용해 `bat`을 설치할 수 있습니다:\n```bash\nscoop install bat\n```\n\n#### 사전 빌드된 바이너리들로\n\n[릴리즈 페이지](https://github.com/sharkdp/bat/releases)에서 사전 빌드된\n바이너리를 다운받을 수 있습니다.\n\n[Visual C++ 재배포 가능](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads)\n패키지를 설치해야 합니다.\n\n### 바이너리들로\n\n[릴리즈 페이지](https://github.com/sharkdp/bat/releases)에서 다양한 아키텍처를\n위해 사전 빌드된 버전들을 확인할 수 있습니다.\n정적 링크 바이너리들은 파일 이름에 `musl` 이 포함된 아카이브들을 확인하세요.\n\n### 소스에서\n\n`bat`의 소스를 빌드하기 위해서는, Rust 1.79.0 이상이 필요합니다.\n`cargo`를 이용해 전부 빌드할 수 있습니다:\n\n```bash\ncargo install --locked bat\n```\n\n참고로 man 페이지나 셸 자동 완성 파일과 같은 부가 파일들은 이 방법으로 설치될 수\n없습니다.\n이것들은 `cargo`에 의해 생성이 되고 (`build` 밑의) cargo 타켓 폴더에서 찾을 수\n있습니다.\n\n## 사용자화\n\n### 문법 강조 테마\n\n`bat --list-themes`을 사용하여 사용 가능한 문법 강조 테마들의 목록을 확인할 수\n있습니다.\n`TwoDark` 테마를 선택하려면, `--theme=TwoDark` 옵션과 함께 `bat`을 사용하거나\n`BAT_THEME` 환경 변수를 `TwoDark`로 설정하세요.\n셸 시작 파일에 `export BAT_THEME=\"TwoDark\"` 를 정의해 영구적으로 설정할 수\n있습니다.\n이 밖에 `bat`의 [설정 파일](#설정-파일)을 이용할 수 있습니다.\n\n만약 다른 테마들을 사용하여 특정 파일을 보고 싶다면, 다음 명령어를 쓸 수\n있습니다(이 경우 [`fzf`](https://github.com/junegunn/fzf)가 필요합니다.)\n\n```bash\nbat --list-themes | fzf --preview=\"bat --theme={} --color=always /path/to/file\"\n```\n\n`bat`은 기본적으로 어두운 배경에 적합합니다.\n그러나 밝은 배경의 터미널을 사용한다면 `GitHub`이나 `OneHalfLight`과 같은 테마가\n더 잘 어울립니다.\n아래 [새로운 테마 추가하기](#새로운-테마-추가하기) 섹션에 따라 커스텀 테마를\n사용할 수도 있습니다.\n\n### 8비트 테마\n\n`bat`은 트루컬러 지원이 되더라도 항상\n[8비트 색상](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors)을 사용하는\n세 개의 테마가 있습니다.\n\n- `ansi`는 어떤 터미널에서도 무난하게 보입니다. 이는 3비트 색상을 사용합니다:\n  검정, 빨강, 녹색, 노랑, 파랑, 마젠타, 시안, 하양.\n- `base16`은 [base16](https://github.com/tinted-theming/home) 터미널 테마를 위해\n  디자인되었습니다.\n  이는 [base16 스타일 가이드라인](https://github.com/tinted-theming/home/blob/main/styling.md)에\n  따라 4비트 색상(3비트 색상에 밝은 변형 추가)을 사용합니다.\n- `base16-256`는 [base16-shell](https://github.com/tinted-theming/base16-shell)을\n  위해 디자인되었습니다.\n  이는 16부터 21의 일부 밝은 색상을 8비트 색상으로 대치합니다.\n  단지 256-색상 터미널을 쓰지만 base16-shell을 쓰지 않는다고 해서 이것을\n  사용하지 **마십시오**.\n\n이들 테마는 더 제한적이지만, 트루컬러 테마에 비해 두 장점이 있습니다:\n\n- 이들은 3비트 혹은 4비트 색상을 쓰는 다른 터미널 소프트웨어와 더 잘\n  어울립니다.\n- 만약 터미널 테마를 바꾼다면, 이미 화면 상의 `bat`의 출력도 이에 맞추어\n  업데이트됩니다.\n\n### 출력 스타일\n\n`--style` 옵션을 이용하면 `bat`의 출력 모양을 조절할 수 있습니다.\n예를 들어, `--style=numbers,changes`를 통해 Git 변경분과 줄 번호는 출력하지만\n격자와 파일 헤더는 출력하지 않을 수 있습니다.\n`BAT_STYLE` 환경 변수를 정의하여 이러한 수정을 영구적으로 하거나 `bat`의\n[설정 파일](#설정-파일)을 사용하세요.\n\n### 새로운 문법 / 언어 정의 추가하기\n\n만약 `bat`에서 특정 문법이 지원되지 않을 경우, 다음의 절차를 통해 현재 `bat`\n설치본에 새로운 문법을 쉽게 추가할 수 있습니다.\n\n`bat`은 문법 강조를 위해 훌륭한\n[`syntect`](https://github.com/trishume/syntect/) 라이브러리를 사용합니다.\n`syntect`는 임의의 [Sublime Text의 `.sublime-syntax`\n파일](https://www.sublimetext.com/docs/3/syntax.html)과 테마를 읽을 수 있습니다.\n\n[Package Control](https://packagecontrol.io/)에 Sublime 문법 패키지를 찾는\n방법이 잘 정리되어 있습니다.\n일단 문법을 찾았다면:\n\n1. 문법 정의 파일들을 넣을 폴더를 만듭니다:\n\n  ```bash\n  mkdir -p \"$(bat --config-dir)/syntaxes\"\n  cd \"$(bat --config-dir)/syntaxes\"\n\n  # Put new '.sublime-syntax' language definition files\n  # in this folder (or its subdirectories), for example:\n  git clone https://github.com/tellnobody1/sublime-purescript-syntax\n  ```\n\n2. 이제 다음 명령어를 통해 파일들을 파싱(parse)하여 바이너리 캐시를 만듭니다.\n\n  ```bash\n  bat cache --build\n  ```\n\n3. 마지막으로, `bat --list-languages`로 새로 추가한 언어가 사용 가능한지\n  확인합니다.\n\n  만약 기본 설정으로 돌아갈 일이 생긴다면, 다음 명령어를 이용합니다:\n\n  ```bash\n  bat cache --clear\n  ```\n\n4. 만약 특정 문법이 `bat`에 기본적으로 포함되어 있어야 한다고 생각한다면, 방침과\n  절차를 [여기](../doc/assets.md)서 읽은 후 \"문법 요청(syntax request)\"을 열어\n  주세요: [문법 요청하기](https://github.com/sharkdp/bat/issues/new?labels=syntax-request&template=syntax_request.md).\n\n### 새로운 테마 추가하기\n\n이 과정은 새로운 문법 정의 추가 방식과 매우 비슷합니다.\n\n먼저, 새로운 문법 강조 테마 폴더를 만듭니다.\n```bash\nmkdir -p \"$(bat --config-dir)/themes\"\ncd \"$(bat --config-dir)/themes\"\n\n# Download a theme in '.tmTheme' format, for example:\ngit clone https://github.com/greggb/sublime-snazzy\n\n# Update the binary cache\nbat cache --build\n```\n\n마지막으로 `bat --list-themes`을 통해 새로 추가한 테마들이 사용 가능한지\n확인합니다.\n\n### 파일 타입 설정을 추가하거나 변경하기\n\n새로운 파일 이름 패턴을 추가하려면 (혹은 이미 존재하는 것을 변경하려면)\n`--map-syntax` 커맨드 라인 옵션을 사용하세요.\n이 옵션은 `pattern:syntax` 꼴의 인자를 받습니다.\n이때 `pattern`은 파일 이름과 절대 파일 경로를 매치할 글로브(glob) 패턴입니다.\n`syntax` 부분은 지원되는 언어의 전체 이름입니다\n(`bat --list-languages`를 통해 개요를 확인하세요).\n\n참고: 이 옵션은 커맨드 라인에 넘겨 주는 것보다는 `bat`의 설정 파일에 넣는 것이\n좋을 것입니다 (아래를 보세요).\n\n예시: \"INI\" 문법 강조를 `.conf` 파일 확장자의 모든 파일에 적용하려면, 다음을\n사용하세요:\n```bash\n--map-syntax='*.conf:INI'\n```\n\n예시: `.ignore`(완전 일치)이라는 이름의 모든 파일을 \"Git Ignore\" 문법으로\n열려면, 다음을 사용하세요:\n```bash\n--map-syntax='.ignore:Git Ignore'\n```\n\n예시: `/etc/apache2`의 하위 폴더들에 있는 모든 `.conf` 파일들을 \"Apache Conf\"\n문법으로 열려면, 다음을 사용하세요 (이 대응(mapping)은 이미 내장되어 있습니다):\n```bash\n--map-syntax='/etc/apache2/**/*.conf:Apache Conf'\n```\n\n### 다른 페이저 사용하기\n\n`bat`은 환경 변수 `PAGER`에 명시된 페이저를 사용합니다.\n이 변수가 정의되어 있지 않다면, `less`가 기본으로 사용됩니다.\n만약 다른 페이저를 사용하고 싶다면, `PAGER` 변수를 수정하거나 `BAT_PAGER` 환경\n변수를 설정하여 `PAGER`의 설정을 오버라이드(override)할 수 있습니다.\n\n만약 커맨드라인 인수들을 페이저에게 넘겨 주려면, `PAGER`/`BAT_PAGER` 변수로\n설정할 수 있습니다:\n\n```bash\nexport BAT_PAGER=\"less -RF\"\n```\n\n환경 변수를 사용하는 대신, `bat`의 [설정 파일](#설정-파일)로 페이저를 설정할\n수도 있습니다 (`--pager` 옵션).\n\n**참고**: 기본적으로, 페이저가 `less`로 설정되어 있다면 (그리고 커맨드 라인\n옵션이 지정되어 있지 않다면), `bat`은 다음 옵션들을 페이저로 넘겨줍니다:\n`-R`/`--RAW-CONTROL-CHARS`, `-F`/`--quit-if-one-screen` 그리고 `-X`/`--no-init`.\n마지막 옵션(`-X`)은 530 이전 버전의 `less`에만 사용됩니다.\n\n`-R` 옵션은 ANSI 색상을 올바르게 해석하기 위해 필요합니다.\n두 번째 옵션(`-F`)은 출력 크기가 터미널의 세로 크기보다 작을 경우 less가 즉시\n종료되도록 합니다.\n이는 작은 파일을 다룰 때 페이저를 종료하기 위해 `q`를 누를 필요 없어서\n편리합니다.\n세 번째 옵션(`-X`)는 예전 버전의 `less`에 있는 `--quit-if-one-screen` 기능의\n버그를 고치기 위해 필요합니다.\n안타깝게도, 이는 `less`의 마우스 휠 지원과 호환되지 않습니다.\n\n`less`의 예전 버전에서 마우스 휠 기능을 활성화하려면, `-R` 옵션을 넘겨주세요\n(위의 예제처럼, 이 옵션은 quit-if-one-screen 기능을 비활성화합니다).\nless 530과 이후 버전에서는 그대로 사용할 수 있습니다.\n\n### 들여쓰기\n\n`bat`은 페이저에 의존하지 않고 탭을 4 스페이스로 확장합니다.\n이를 변경하려면 간단히 `--tabs` 인자에 표시되기를 원하는 스페이스 개수를\n추가하세요.\n\n**참고**: (`bat`의 `--pager` 인자 혹은 `less`의 `LESS` 환경 변수를 통해)\n페이저의 탭 길이를 지정하는 것은 효과가 없을 것인데, 이는 페이저가 이미\n스페이스로 확장된 탭을 받기 때문입니다.\n이 기능은 사이드바에 의한 들여쓰기 문제를 회피하기 위해 추가되었습니다.\n`bat`을 `--tabs=0`과 함께 호출하면 이를 오버라이드하여 페이저가 탭을 처리하게\n합니다.\n\n### 다크 모드\n\nmacOS에서 다크 모드를 사용하고 있다면, `bat`가 OS 테마에 따라 다른 테마를\n사용하도록 구성할 수 있습니다.\n아래 스니펫은 _다크 모드_에서는 `default` 테마를, _라이트 모드_에서는 `GitHub`\n테마를 사용하는 방법입니다.\n\n```bash\nalias cat=\"bat --theme=\\$(defaults read -globalDomain AppleInterfaceStyle &> /dev/null && echo default || echo GitHub)\"\n```\n\n## 설정 파일\n\n`bat`는 설정 파일로도 사용자화 할 수 있습니다.\n설정 파일의 위치는 운영 체제에 따라 다릅니다.\n아래 커맨드를 통해 시스템의 기본 경로를 확인할 수 있습니다.\n```\nbat --config-file\n```\n\n또는, `BAT_CONFIG_PATH` 환경 변수를 사용하여 `bat`가 설정 파일의 기본 경로\n이외의 위치를 사용하도록 할 수 있습니다.\n```bash\nexport BAT_CONFIG_PATH=\"/path/to/bat.conf\"\n```\n\n기본 설정 파일은 `--generate-config-file` 옵션으로 생성할 수 있습니다.\n```bash\nbat --generate-config-file\n```\n\n### 포맷\n\n설정 파일은 단순히 커맨드 라인 인자들의 리스트입니다.\n`bat --help`로 가능한 모든 옵션과 값들을 확인하세요.\n추가적으로, 줄 앞에 `#` 문자를 추가해 주석을 넣을 수 있습니다.\n\n설정 파일 예시:\n```bash\n# \"TwoDark\" 테마 설정하기\n--theme=\"TwoDark\"\n\n# 줄 번호, Git 변경 내용, 파일 헤더 보이기 (격자 없이)\n--style=\"numbers,changes,header\"\n\n# 터미널에서 이탤릭체 쓰기 (일부 터미널에서 미지원)\n--italic-text=always\n\n# Arduino .ino 파일에 C++ 문법 쓰기\n--map-syntax \"*.ino:C++\"\n```\n\n## Windows에서 `bat` 사용하기\n\n`bat`는 대부분의 경우 Windows에서 기본적으로 잘 작동하지만, 일부 기능은 추가적인\n구성이 필요할 수 있습니다.\n\n#### 전제 조건\n\n[Visual C++ 재배포 가능](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads)\n패키지를 설치해야 합니다.\n\n### 페이징\n\nWindows는 `more` 형식의 매우 제한된 페이저만 포함합니다.\nWindows용 `less` 바이너리는\n[공식 홈페이지](http://www.greenwoodsoftware.com/less/download.html)나\n[Chocolatey](https://chocolatey.org/packages/Less)를 통해 다운로드 받을 수\n있습니다.\n이를 사용하려면 디렉터리 안의 바이너리를 `PATH`에 넣거나\n[환경 변수로 정의](#using-a-different-pager)하세요.\n[Chocolatey 패키지](#on-windows)는 `less`를 자동으로 설치합니다.\n\n### 색상\n\nWindows 10은\n[v1511](https://en.wikipedia.org/wiki/Windows_10_version_history#Version_1511_(November_Update))부터\n기본적으로 `conhost.exe`(Command Prompt)와 PowerShell에서 색상을 지원하며,\n최신 버전의 bash에서도 색상을 지원합니다.\n이전 버전의 Windows에서는, [ConEmu](https://conemu.github.io/)가 포함된\n[Cmder](http://cmder.net/)를 사용할 수 있습니다.\n\n**참고:** Git과 MSYS 버전의 `less`는 Windows에서 색상을 올바르게 해석하지\n않습니다.\n다른 페이저가 설치되어 있지 않은 경우, `--paging=never`을 넘겨주거나\n`BAT_PAGER`을 빈 문자열로 설정하여 페이징을 완전히 비활성화 할 수 있습니다.\n\n### Cygwin\n\nWindows에서의 `bat`은 기본적으로 Cygwin의 unix 스타일 경로(`/cygdrive/*`)를\n지원하지 않습니다.\nCygwin 절대 경로를 인자로 받았을 때, `bat`은 다음과 같은 오류를 반환합니다:\n`The system cannot find the path specified. (os error 3)`\n\n이는 wrapper를 만들거나 다음 함수를 `.bash_profile`에 추가하여 해결할 수\n있습니다:\n\n```bash\nbat() {\n    local index\n    local args=(\"$@\")\n    for index in $(seq 0 ${#args[@]}) ; do\n        case \"${args[index]}\" in\n        -*) continue;;\n        *)  [ -e \"${args[index]}\" ] && args[index]=\"$(cygpath --windows \"${args[index]}\")\";;\n        esac\n    done\n    command bat \"${args[@]}\"\n}\n```\n\n## 문제 해결\n\n### 터미널과 색상\n\n`bat`은 터미널의 트루컬러 지원 여부와 상관 없이 동작합니다.\n그러나 대부분 문법 강조 테마의 색상은 8비트 색상에 최적화되어 있지 않습니다.\n따라서 24비트 트루컬러 지원이 되는 터미널(`terminator`, `konsole`, `iTerm2`,\n...)을 사용하는 것을 적극 권장합니다.\n트루컬러를 지원하는 터미널들과 더 자세한 정보는\n[이 글](https://gist.github.com/XVilka/8346728)에서 찾아보실 수 있습니다.\n\n사용하고 있는 트루컬러 터미널에서 `COLORTERM` 변수를 `truecolor` 혹은\n`24bit`로 설정되어 있는지 확인하세요.\n그렇지 않을 경우, `bat`은 24비트 확장열(escape sequence)이 지원되는지 여부를\n판단할 수 없습니다 (그리고 8비트 색상을 사용합니다).\n\n### 줄 번호와 격자가 잘 보이지 않는 경우\n\n다른 테마를 사용해 보세요 (`bat --list-themes`에서 목록을 볼 수 있습니다).\n`OneHalfDark`와 `OneHalfLight` 테마는 더 밝은 눈금과 선의 색상을 사용합니다.\n\n### 파일 인코딩\n\n`bat`은 기본적으로 UTF-8과 UTF-16을 지원합니다.\n다른 모든 종류의 파일 인코딩에 대해서는, 일반적으로 인코딩을 자동으로 판별하는\n방법이 없기 때문에 먼저 UTF-8으로 변환해야 할 수 있습니다.\n이를 위해 `iconv`를 사용할 수 있습니다.\n예시: Latin-1(ISO-8859-1)로 인코딩된 PHP 파일은 다음과 같이 처리할 수 있습니다:\n``` bash\niconv -f ISO-8859-1 -t UTF-8 my-file.php | bat\n```\n참고: `bat`으로 문법 자동 감지가 되지 않는 경우에는 `-l`/`--language` 옵션을\n사용할 수 있습니다.\n\n## 개발\n\n```bash\n# 모든 서브모듈을 받기 위해 재귀적으로 복제하기\ngit clone --recursive https://github.com/sharkdp/bat\n\n# (디버그 버전) 빌드\ncd bat\ncargo build --bins\n\n# 단위 테스트와 통합 테스트 실행\ncargo test\n\n# (배포 버전) 설치\ncargo install --locked\n\n# 수정된 문법과 테마가 적용된 bat 바이너리 빌드\nbash assets/create.sh\ncargo install --locked --force\n```\n\n`bat`의 pretty-printing 기능을 라이브러리로 사용하는 애플리케이션을 만들고\n싶다면, [API 문서](https://docs.rs/bat/)를 살펴보세요.\n참고로 `bat`에 라이브러리로써 의존한다면, `regex-onig`나 `regex-fancy`를\n기능으로 사용해야 합니다.\n\n## 기여하기\n\n[`CONTRIBUTING.md`](../CONTRIBUTING.md) 가이드를 살펴보세요.\n\n## 메인테이너들\n\n- [sharkdp](https://github.com/sharkdp)\n- [eth-p](https://github.com/eth-p)\n- [keith-hall](https://github.com/keith-hall)\n- [Enselic](https://github.com/Enselic)\n\n## 보안 취약점\n\n만약 `bat`의 취약점을 발견하였다면, [David Peter](https://david-peter.de/)에게 메일로 연락주시기 바랍니다. \n\n## 프로젝트 목표와 대안들\n\n`bat`은 다음과 같은 목표를 달성하려고 합니다:\n\n- 아름답고 발전된 문법 강조 기능 제공\n- Git과의 연동을 통한 파일 변경 내용 확인\n- (POSIX) `cat`의 대체제\n- 사용자 친화적인 커맨드 라인 인터페이스 제공\n\n비슷한 프로그램들을 찾고 있다면 많은 대안들이 있습니다.\n비교는 [이 문서](../doc/alternatives.md)를 참조해 주세요.\n\n## 라이센스\nCopyright (c) 2018-2021 [bat-developers](https://github.com/sharkdp/bat).\n\n`bat`는 여러분의 선택에 따라 MIT 라이센스 또는 Apache 라이센스 2.0의 조건에 따라\n배포됩니다.\n\n라이센스의 세부사항은 [LICENSE-APACHE](../LICENSE-APACHE)와\n[LICENSE-MIT](../LICENSE-MIT)를 참조하세요.\n"
  },
  {
    "path": "doc/README-ru.md",
    "content": "<p align=\"center\">\n  <img src=\"logo-header.svg\" alt=\"bat - a cat clone with wings\"><br>\n  <a href=\"https://github.com/sharkdp/bat/actions?query=workflow%3ACICD\"><img src=\"https://github.com/sharkdp/bat/workflows/CICD/badge.svg\" alt=\"Build Status\"></a>\n  <img src=\"https://img.shields.io/crates/l/bat.svg\" alt=\"license\">\n  <a href=\"https://crates.io/crates/bat\"><img src=\"https://img.shields.io/crates/v/bat.svg?colorB=319e8c\" alt=\"Version info\"></a><br>\n  Клон утилиты <i>cat(1)</i> с поддержкой подсветки синтаксиса и Git\n</p>\n\n<p align=\"center\">\n  <a href=\"#подсветка-синтаксиса\">Ключевые возможности</a> •\n  <a href=\"#как-использовать\">Использование</a> •\n  <a href=\"#установка\">Установка</a> •\n  <a href=\"#кастомизация\">Кастомизация</a> •\n  <a href=\"#цели-и-альтернативы\">Цели и альтернативы </a><br>\n  [<a href=\"../README.md\">English</a>]\n  [<a href=\"README-zh.md\">中文</a>]\n  [<a href=\"README-ja.md\">日本語</a>]\n  [<a href=\"README-ko.md\">한국어</a>]\n  [Русский]\n</p>\n\n### Подсветка синтаксиса\n\n`bat` поддерживает подсветку синтаксиса для огромного количества языков программирования и разметки:\n\n![Пример подсветки синтаксиса](https://i.imgur.com/3FGy5tW.png)\n\n### Интеграция с Git\n`bat` использует `git`, чтобы показать изменения в коде\n(смотрите на левый сайдбар):\n\n![Пример интеграции с Git](https://i.imgur.com/azUAzdx.png)\n\n### Показ непечатных символов\n\nВы можете использовать флаг `-A` / `--show-all`, чтобы показать непечатные символы:\n\n![Строка с неотображемыми символами](https://i.imgur.com/X0orYY9.png)\n\n### Автоматический пейджинг терминала\n\n`bat` умеет перенаправлять вывод в пейджер терминала (например, в `less`), если вывод не помещается на экране полностью.\nЕсли вы хотите, чтобы `bat` работал как `cat` всё время, вы можете установить опцию `--paging=never` в командной строке или в конфигурационном файле.\nЕсли вы намерены использовать `bat` в качестве алиаса для `cat`, вы можете установить `alias cat='bat --paging=never'`, чтобы сохранить изначальное поведение.\n\n### Объединение файлов\n\nО... Вы также можете объединять файлы :wink:. Когда\n`bat` обнаружит неинтерактивный терминал (например, когда вы перенаправляете вывод в файл или процесс), он будет работать как утилита `cat` и выведет содержимое файлов как обычный текст (без подсветки синтаксиса).\n\n## Как использовать\n\nВывести единственный файл в терминале\n\n```bash\n> bat README.md\n```\n\nОтобразить сразу несколько файлов в терминале\n\n```bash\n> bat src/*.rs\n```\n\nЧитаем из stdin и определяем синтаксис автоматически (внимание: это делается по заглавной строке файла, например, `#!/bin/sh`)\n\n```bash\n> curl -s https://sh.rustup.rs | bat\n```\n\nПрочитать из stdin с явным указанием языка\n\n```bash\n> yaml2json .travis.yml | json_pp | bat -l json\n```\n\nВывести и выделить неотображаемые символы\n```bash\n> bat -A /etc/hosts\n```\n\nИспользование в качестве замены `cat`\n\n```bash\nbat > note.md  # мгновенно создаем новый файл\n\nbat header.md content.md footer.md > document.md\n\nbat -n main.rs  # показываем только количество строк\n\nbat f - g  # выводит 'f', потом stdin, а потом 'g'.\n```\n\n### Интеграция с другими утилитами\n\n#### `fzf`\n\nВы можете использовать `bat` как просмотрщик для [`fzf`](https://github.com/junegunn/fzf).\nЧтобы это заработало, используйте опцию `--color=always`, чтобы вывод был всегда цветным.\nВы можете также использовать опцию `--line-range`, чтобы уменьшить время загрузки для больших файлов:\n\n```bash\nfzf --preview \"bat --color=always --style=numbers --line-range=:500 {}\"\n```\n\nБольше деталей смотрите в [`README` программы `fzf`](https://github.com/junegunn/fzf#preview-window).\n\n#### `find` или `fd`\n\nВы можете использовать флаг `-exec` в `find`, чтобы посмотреть превью всех файлов в `bat`\n```bash\nfind … -exec bat {} +\n```\n\nЕсли вы используете [`fd`](https://github.com/sharkdp/fd), применяйте для этого флаг `-X`/`--exec-batch`:\n```bash\nfd … -X bat\n```\n\n#### `ripgrep`\n\nС помощью [`batgrep`](https://github.com/eth-p/bat-extras/blob/master/doc/batgrep.md), `bat` может быть использован для вывода результата запроса [`ripgrep`](https://github.com/BurntSushi/ripgrep)\n\n```bash\nbatgrep needle src/\n```\n\n#### `tail -f`\n\n`bat` может быть использован вместе с  `tail -f`, чтобы выводить содержимое файла с подсветкой синтаксиса в реальном времени.\n```bash\ntail -f /var/log/pacman.log | bat --paging=never -l log\n```\nЗаметьте, что мы должны отключить пэйджинг, чтобы это заработало. Мы также явно указали синтаксис (`-l log`), так как он не может быть автоматически определен в данном случае.\n\n#### `git`\n\nВы можете использовать `bat` с `git show`, чтобы просмотреть старую версию файла с подсветкой синтаксиса:\n```bash\ngit show v0.6.0:src/main.rs | bat -l rs\n```\n\n#### `git diff`\n\nВы можете использовать `bat` с `git diff` для просмотра строк кода вокруг изменений с подсветкой синтаксиса:\n```bash\nbatdiff() {\n    git diff --name-only --relative --diff-filter=d -z | xargs -0 bat --diff\n}\n```\nЕсли вы хотите использовать это как отдельную программу, посмотрите `batdiff` из [`bat-extras`](https://github.com/eth-p/bat-extras).\n\nЕсли вам это нужна более полная поддержка для операций с git и diff, посмотрите [`delta`](https://github.com/dandavison/delta).\n\n#### `xclip`\n\nНумерация строк и отображение изменений затрудняет копирование содержимого файлов в буфер обмена.\nЧтобы справиться с этим, используйте флаг `-p`/`--plain` или просто перенаправьте стандартный вывод в `xclip`:\n```bash\nbat main.cpp | xclip\n```\n`bat` обнаружит перенаправление вывода и выведет обычный текст без подсветки синтаксиса.\n\n#### `man`\n\n`bat` может быть использован для раскрашивания вывода `man`, для этого установите переменную окружения\n`MANPAGER`:\n\n```bash\nexport MANPAGER=\"sh -c 'col -bx | bat -l man -p'\"\nman 2 select\n```\n(замените `bat` на `batcat`, если у вас Debian или Ubuntu)\n\nВозможно вам понадобится также установить `MANROFFOPT=\"-c\"`, если у вас есть проблемы с форматированием.\n\nЕсли вы хотите сделать этой одной командой, вы можете использовать [`batman`](https://github.com/eth-p/bat-extras/blob/master/doc/batman.md).\n\nОбратите внимание, что [синтаксис manpage](assets/syntaxes/02_Extra/Manpage.sublime-syntax) разрабатывается в этом репозитории и все еще находится в разработке.\n\nТакже заметьте, что это [не заработает](https://github.com/sharkdp/bat/issues/1145) с реализацией `man` через Mandocs.\n\n#### `prettier` / `shfmt` / `rustfmt`\n\n[`Prettybat`](https://github.com/eth-p/bat-extras/blob/master/doc/prettybat.md) — скрипт, который форматирует код и выводит его с помощью `bat`.\n\n#### Подсветка сообщений `--help`\n\nВы можете использовать `bat`, чтобы подсвечивать текст справки комманд: `$ cp --help | bat -plhelp`\n\nВы можете сделать такую вспомогательную команду для этого:\n\n```bash\n# in your .bashrc/.zshrc/*rc\nalias bathelp='bat --plain --language=help'\nhelp() {\n    \"$@\" --help 2>&1 | bathelp\n}\n```\n\nВ этом случае, вы можете просто писать `$ help cp` или `$ help git commit`.\n\nЕсли вы используете `zsh`, вы можете объявить глобальные алиасы для `-h` и `--help`:\n\n```bash\nalias -g -- -h='-h 2>&1 | bat --language=help --style=plain'\nalias -g -- --help='--help 2>&1 | bat --language=help --style=plain'\n```\n\nВ этом случае, вы можете продолжать использовать `cp --help`, но при этом получать подцвеченный вывод.\n\nОбратите внимание, что не всегда опция `-h` является краткой формы опции `--help` (например, у `ls`).\n\nПожалуйста, сообщайте о проблемах с подсветкой справки в [этот репозиторий](https://github.com/victor-gp/cmd-help-sublime-syntax).\n\n## Установка\n\n[![Packaging status](https://repology.org/badge/vertical-allrepos/bat-cat.svg?columns=3&exclude_unsupported=1)](https://repology.org/project/bat-cat/versions)\n\n### Ubuntu (с помощью `apt`)\n*... и другие дистрибутивы основанные на Debian.*\n\n`bat` доступен на [Ubuntu since 20.04 (\"Focal\")](https://packages.ubuntu.com/search?keywords=bat&exact=1) и [Debian since August 2021 (Debian 11 - \"Bullseye\")](https://packages.debian.org/bullseye/bat).\n\nЕсли ваша версия Ubuntu/Debian достаточно новая, вы можете установить `bat` так:\n\n```bash\napt install bat\n```\n\nЕсли вы установили `bat` таким образом, то бинарный файл может быть установлен как `batcat` вместо `bat` (из-за [конфликта имени с другим пакетом](https://github.com/sharkdp/bat/issues/982)). Вы можете сделать симлинк или алиас `bat -> batcat`, чтобы предотвратить подобные проблемы и в других дистрибутивах.\n\n``` bash\nmkdir -p ~/.local/bin\nln -s /usr/bin/batcat ~/.local/bin/bat\n```\n\n### Ubuntu (С помощью самого нового `.deb` пакета)\n*... и другие дистрибутивы Linux основанные на Debian*\n\nЕсли пакет еще недоступен в вашем Ubuntu/Debian дистрибутиве или вы хотите установить самую последнюю версию `bat`, то вы можете скачать самый последний `deb`-пакет отсюда:\n[release page](https://github.com/sharkdp/bat/releases) и установить так:\n\n```bash\nsudo dpkg -i bat_0.18.3_amd64.deb  # измените архитектуру и версию\n```\n\n### Alpine Linux\n\nВы можете установить [`bat`](https://pkgs.alpinelinux.org/packages?name=bat) из официальных источников:\n\n```bash\napk add bat\n```\n\n### Arch Linux\n\nВы можете установить [`bat`](https://www.archlinux.org/packages/extra/x86_64/bat/) из официального источника:\n\n```bash\npacman -S bat\n```\n\n### Fedora\n\nВы можете установить [`bat`](https://koji.fedoraproject.org/koji/packageinfo?packageID=27506) из официального репозитория [Fedora Modular](https://docs.fedoraproject.org/en-US/modularity/using-modules/).\n\n```bash\ndnf install bat\n```\n\n### Gentoo Linux\n\nВы можете установить [`bat`](https://packages.gentoo.org/packages/sys-apps/bat) из официальных источников:\n\n```bash\nemerge sys-apps/bat\n```\n\n### Void Linux\n\nВы можете установить `bat` с помощью `xbps-install`:\n```bash\nxbps-install -S bat\n```\n\n### FreeBSD\n\nВы можете установить [`bat`](https://www.freshports.org/textproc/bat) с помощью `pkg`:\n\n```bash\npkg install bat\n```\n\nили самому скомпилировать его:\n\n```bash\ncd /usr/ports/textproc/bat\nmake install\n```\n\n### On OpenBSD\n\nВы можете установить `bat` с помощью [`pkg_add(1)`](https://man.openbsd.org/pkg_add.1):\n\n```bash\npkg_add bat\n```\n\n### С помощью nix\n\nВы можете установить `bat`, используя [nix package manager](https://nixos.org/nix):\n\n```bash\nnix-env -i bat\n```\n\n### Через flox\n\nВы можете установить `bat` используя [Flox](https://flox.dev)\n\n```bash\nflox install bat\n```\n\n### openSUSE\n\nВы можете установить `bat` с помощью `zypper`:\n\n```bash\nzypper install bat\n```\n\n### На macOS (или Linux) через Homebrew\n\nВы можете установить `bat` с помощью [Homebrew](http://braumeister.org/formula/bat):\n\n```bash\nbrew install bat\n```\n\n### На macOS через MacPorts\n\nИли же установить его с помощью [MacPorts](https://ports.macports.org/port/bat/summary):\n\n```bash\nport install bat\n```\n\n### Windows\n\nЕсть несколько способов установить `bat`. Как только вы установили его, посмотрите на секцию [\"Использование `bat` в Windows\"](#использование-bat-в-windows).\n\n#### Пререквитизы\n\nВам нужно установить пакет [Visual C++ Redistributable](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads).\n\n#### С помощью WinGet\n\nВы можете установить `bat` через [WinGet](https://learn.microsoft.com/en-us/windows/package-manager/winget):\n\n```bash\nwinget install sharkdp.bat\n```\n\n#### С помощью Chocolatey\n\nВы можете установить `bat` с помощью [Chocolatey](https://chocolatey.org/packages/Bat):\n```bash\nchoco install bat\n```\n\n#### С помощью Scoop\n\nВы можете установить `bat` с помощью [scoop](https://scoop.sh/):\n```bash\nscoop install bat\n```\n\n#### Из заранее скомпилированных файлов:\n\nИх вы можете скачать на [странице релизов](https://github.com/sharkdp/bat/releases).\n\n### Из скомпилированных файлов\n\nПерейдите на [страницу релизов](https://github.com/sharkdp/bat/releases) для\nскомпилированных файлов `bat` для различных платформ. Бинарные файлы со статической связкой так же доступны: выбирайте архив с `musl` в имени.\n\n### Из исходников\n\nЕсли вы желаете установить `bat` из исходников, вам понадобится Rust 1.79.0 или выше. После этого используйте `cargo`, чтобы всё скомпилировать:\n\n```bash\ncargo install --locked bat\n```\n\nЗаметьте, что дополнительные файлы, такие как документация man и подсказки командной строки, не могут быть установлены таким способом.\nОни будут сгенерированы командой `cargo` должны быть доступны в папке сборки (в `build`).\n\nПодсказки командной строки также доступны при таком запуске:\n```bash\nbat --completion <shell>\n# see --help for supported shells\n```\n\n## Кастомизация\n\n### Темы для подсветки синтаксиса\n\nИспользуйте `bat --list-themes`, чтобы вывести список всех доступных тем. Для выбора темы `TwoDark` используйте `bat` с флагом\n`--theme=TwoDark` или выставьте переменную окружения `BAT_THEME` в `TwoDark`. Используйте `export BAT_THEME=\"TwoDark\"` в конфигурационном файле вашей оболочки, чтобы изменить ее навсегда. Или же используйте [конфигурационный файл](https://github.com/sharkdp/bat#configuration-file) `bat`.\n\nЕсли вы хотите просто просмотреть темы, используйте следующую команду (для этого вам понадобится [`fzf`](https://github.com/junegunn/fzf)):\n```bash\nbat --list-themes | fzf --preview=\"bat --theme={} --color=always /путь/к/файлу\"\n```\n\n`bat` отлично смотрится на темном фоне. Однако если ваш терминал использует светлую тему, то такие темы как `GitHub` или `OneHalfLight` будут смотреться куда лучше!\nВы также можете использовать новую тему, для этого перейдите [в раздел добавления тем](https://github.com/sharkdp/bat#добавление-новых-тем).\n\n### Изменение внешнего вывода\n\nВы можете использовать флаг `--style`, чтобы изменять внешний вид вывода в `bat`.\nНапример, вы можете использовать `--style=numbers,changes`, чтобы показать только количество строк и изменений в Git. Установите переменную окружения `BAT_STYLE` чтобы изменить это навсегда, или используйте [конфиг файл](https://github.com/sharkdp/bat#configuration-file) `bat`.\n\n### Добавление новых синтаксисов\n\n`bat` использует [`syntect`](https://github.com/trishume/syntect/) для подсветки синтаксиса. `syntect` может читать\n[файл `.sublime-syntax`](https://www.sublimetext.com/docs/3/syntax.html)\nи темы. Чтобы добавить новый синтаксис, сделайте следующее:\n\nСоздайте каталог с синтаксисом:\n\n```bash\nmkdir -p \"$(bat --config-dir)/syntaxes\"\ncd \"$(bat --config-dir)/syntaxes\"\n\n# Разместите файлы '.sublime-syntax'\n# в каталоге (или субкаталогах), например:\ngit clone https://github.com/tellnobody1/sublime-purescript-syntax\n```\n\nТеперь используйте следующую команду, чтобы превратить эти файлы в бинарный кеш:\n\n```bash\nbat cache --build\n```\n\nТеперь вы можете использовать `bat --list-languages`, чтобы проверить, доступны ли новые языки.\n\nЕсли когда-нибудь вы заходите вернуться к настройкам по умолчанию, введите\n\n```bash\nbat cache --clear\n```\n\n### Добавление новых тем\n\nЭто работает похожим образом, так же как и добавление новых тем подсветки синтаксиса\n\nВо-первых, создайте каталог с новыми темами для синтаксиса:\n```bash\nmkdir -p \"$(bat --config-dir)/themes\"\ncd \"$(bat --config-dir)/themes\"\n\n# Загрузите тему в формате '.tmTheme':\ngit clone https://github.com/greggb/sublime-snazzy\n\n# Обновите кеш\nbat cache --build\n```\n\nТеперь используйте `bat --list-themes`, чтобы проверить доступность новых тем.\n\n### Использование другого пейджера.\n\n`bat` использует пейджер, указанный в переменной окружения `PAGER`. Если она не задана, то используется `less`.\nЕсли вы желаете использовать другой пейджер, вы можете либо изменить переменную `PAGER`, либо `BAT_PAGER` чтобы перезаписать то, что указано в `PAGER`.\n\nЧтобы передать дополнительные аргументы вашему пейджеру, перечислите их в этой переменной:\n\n```bash\nexport BAT_PAGER=\"less -RF\"\n```\n\nТак же вы можете использовать [файл конфигурации](https://github.com/sharkdp/bat#configuration-file) `bat` (флаг `--pager`).\n\n**Внимание**: По умолчанию пейджером является`less` (без каких-либо аргументов),\n`bat` задаст следующие флаги для пейджера:\n `-R`/`--RAW-CONTROL-CHARS`,\n`-F`/`--quit-if-one-screen` и `-X`/`--no-init`. Последний флаг(`-X`) используется только для `less`, чья версия раньше 530.\n\nФлаг `-R` нужен чтобы корректно воспроизвести ANSI цвета. Второй флаг (`-F`) говорит\n`less` чтобы тот сразу же завершился, если размер вывода меньше чем вертикальный размер терминала.\nЭто удобно для небольших файлов, так как вам не надо каждый раз нажимать `q`, чтобы выйти из пейджера. Третий флаг (`-X`) нужен для того, чтобы исправить баг с `--quit-if-one-screen` в старых версиях `less`. К сожалению, это блокирует возможность использования колеса мышки.\n\nЕсли вы хотите все же его включить, вы можете добавить флаг `-R`.\nДля `less` новее чем 530 оно должно работать из коробки.\n\n### Темная тема\n\nЕсли вы используете темный режим в macOS, возможно вы захотите чтобы `bat` использовал другую тему, основанную на теме вашей ОС. Следующий сниппет использует тему `default`, когда у вас включен темный режим, и тему `GitHub`, когда включен светлый.\n\n```bash\nalias cat=\"bat --theme=\\$(defaults read -globalDomain AppleInterfaceStyle &> /dev/null && echo default || echo GitHub)\"\n```\n\n## Файл конфигурации\n\n`bat` также может быть кастомизирован с помощью файла конфигурации. Его местоположение зависит от вашей ОС: чтобы посмотреть его путь, введите\n```\nbat --config-file\n```\n\nТакже вы можете установить переменную окружения `BAT_CONFIG_PATH`, чтобы изменить путь к файлу конфигурации.\n```bash\nexport BAT_CONFIG_PATH=\"/path/to/bat.conf\"\n```\n\nФайл конфигурации «по умолчанию» может быть создан с помощью флага `--generate-config-file`.\n```bash\nbat --generate-config-file\n```\n\n### Формат\n\nФайл конфигурации - это всего лишь набор аргументов. Введите `bat --help`, чтобы просмотреть список всех возможных флагов и аргументов. Также вы можете закомментировать строку с помощью `#`.\n\nПример файла конфигурации:\n```bash\n# Установить тему \"TwoDark\"\n--theme=\"TwoDark\"\n\n# Показывать количество строк, изменений в Git и заголовок файла\n--style=\"numbers,changes,header\"\n\n# Использовать курсив (поддерживается не всеми терминалами)\n--italic-text=always\n\n# Использовать синтаксис C++ для всех Arduino .ino файлов\n--map-syntax \"*.ino:C++\"\n\n# Использовать синтаксис Git Ignore для всех файлов .ignore\n--map-syntax \".ignore:Git Ignore\"\n```\n\n## Использование `bat` в Windows\n\n`bat` полностью работоспособен \"из коробки\", но для некоторых возможностей могут понадобиться дополнительные настройки.\n\n### Пейджинг\n\nWindows поддерживает только очень простой пейджер `more`. Вы можете скачать установщик для `less` [с его сайта](http://www.greenwoodsoftware.com/less/download.html) или [через Chocolatey](https://chocolatey.org/packages/Less). Чтобы его использовать, скопируйте исполняемый файл в ваш `PATH` или [используйте переменную окружения](#Использование-другого-пейджера). [Пакет из Chocolatey](#windows) установит все автоматически.\n\n### Цвета\n\nWindows 10 поддерживает цвета и в `conhost.exe` (Command Prompt), и в PowerShell начиная с версии Windows\n[v1511](https://ru.wikipedia.org/wiki/Windows_10#Обновления и поддержка), так же как и в bash. На ранних версиях Windows вы можете использовать\n[Cmder](http://cmder.net/), в котором есть [ConEmu](https://conemu.github.io/).\n\n**Внимание:** Версия `less` в Git и MSYS2 воспроизводит цвета некорректно. Если у вас нет других пейджеров, мы можете отключить использование пейджеров с помощью флага `--paging=never`\nили установить `BAT_PAGER` равным пустой строке.\n\n### Cygwin\n\nИз коробки `bat` не поддерживает пути в стиле Unix (`/cygdrive/*`). Когда указан абсолютный путь cygwin, `bat` выдаст следующую ошибку: `The system cannot find the path specified. (os error 3)`\n\nОна может быть решена добавлением следующей функции в `.bash_profile`:\n\n```bash\nbat() {\n    local index\n    local args=(\"$@\")\n    for index in $(seq 0 ${#args[@]}) ; do\n        case \"${args[index]}\" in\n        -*) continue;;\n        *)  [ -e \"${args[index]}\" ] && args[index]=\"$(cygpath --windows \"${args[index]}\")\";;\n        esac\n    done\n    command bat \"${args[@]}\"\n}\n```\n\n## Проблемы и их решение\n\n### Терминалы и цвета\n\n`bat` поддерживает терминалы *с* и *без* поддержки truecolor. Однако подсветка синтаксиса не оптимизирована для терминалов с 8-битными цветами, и рекомендуется использовать терминалы с поддержкой 24-битных цветов (`terminator`, `konsole`, `iTerm2`, ...).\nСмотрите [эту статью](https://gist.github.com/XVilka/8346728) для полного списка терминалов.\n\nУдостоверьтесь, что переменная `COLORTERM` равна `truecolor` или\n`24bit`. Иначе `bat` не сможет определить поддержку 24-битных цветов (и будет использовать 8-битные).\n\n### Текст и номера строк плохо видны\n\nИспользуйте другую тему (`bat --list-themes` выведет список всех установленных тем). Темы `OneHalfDark` и\n`OneHalfLight` имеют более яркие номера строк и тексты.\n\n### Кодировки файлов\n\n`bat` поддерживает UTF-8 и UTF-16. Файлы в других кодировках, возможно, придётся перекодировать, так как кодировка может быть распознана неверно. Используйте `iconv`.\nПример: у вас есть PHP файл в кодировке Latin-1 (ISO-8859-1):\n``` bash\niconv -f ISO-8859-1 -t UTF-8 my-file.php | bat\n```\nВнимание: вам может понадобиться флаг `-l`/`--language`, если `bat` не сможет автоматически определить синтаксис.\n\n## Разработка\n\n```bash\n# Рекурсивно клонирует все модули\ngit clone --recursive https://github.com/sharkdp/bat\n\n# Компиляции в режиме разработки\ncd bat\ncargo build --bins\n\n# Запуск тестов\ncargo test\n\n# Установка (релизная версия)\ncargo install --locked\n\n# Компилирование исполняемого файла bat с другим синтаксисом и темами\nbash assets/create.sh\ncargo install --locked --force\n```\n\n## Разработчики\n\n- [sharkdp](https://github.com/sharkdp)\n- [eth-p](https://github.com/eth-p)\n\n## Цели и альтернативы\n\nЦели проекта `bat`:\n\n- Красивая и продвинутая подсветка синтаксиса.\n- Интеграция с Git.\n- Полноценная замена `cat`.\n- Дружелюбный интерфейс и аргументы.\n\nЕсть очень много альтернатив `bat`. Смотрите [этот документ](doc/alternatives.md) для сравнения.\n\n## Лицензия\nCopyright (c) 2018-2024 [Разработчики bat](https://github.com/sharkdp/bat).\n\n`bat` распространяется под лицензиями MIT License и Apache License 2.0 (на выбор пользователя).\n\nСмотрите [LICENSE-APACHE](LICENSE-APACHE) и [LICENSE-MIT](LICENSE-MIT) для более подробного ознакомления.\n"
  },
  {
    "path": "doc/README-zh.md",
    "content": "<p align=\"center\">\n  <img src=\"logo-header.svg\" alt=\"bat - a cat clone with wings\"><br>\n  <a href=\"https://github.com/sharkdp/bat/actions?query=workflow%3ACICD\"><img src=\"https://github.com/sharkdp/bat/workflows/CICD/badge.svg\" alt=\"Build Status\"></a>\n  <img src=\"https://img.shields.io/crates/l/bat.svg\" alt=\"license\">\n  <a href=\"https://crates.io/crates/bat\"><img src=\"https://img.shields.io/crates/v/bat.svg?colorB=319e8c\" alt=\"Version info\"></a><br>\n  类似 <i>cat(1)</i>，但带有 git 集成和语法高亮.\n</p>\n\n<p align=\"center\">\n  <a href=\"#语法高亮\">主要功能</a> •\n  <a href=\"#如何使用\">使用方法</a> •\n  <a href=\"#安装\">安装</a> •\n  <a href=\"#自定义\">自定义</a> •\n  <a href=\"#project-goals-and-alternatives\">项目目标和替代方案</a><br>\n  [<a href=\"../README.md\">English</a>]\n  [中文]\n  [<a href=\"README-ja.md\">日本語</a>]\n  [<a href=\"README-ko.md\">한국어</a>]\n  [<a href=\"README-ru.md\">Русский</a>]\n</p>\n\n### 语法高亮\n\n`bat` 对大部分编程语言和标记语言提供语法高亮：\n\n![Syntax highlighting example](https://imgur.com/rGsdnDe.png)\n\n### Git 集成\n\n`bat` 能从 git 中获取文件的修改并展示在边栏（见下图）：\n\n![Git integration example](https://i.imgur.com/2lSW4RE.png)\n\n### 不可打印(non-printable)字符可视化\n\n添加`-A`/`--show-all`参数可以文件文件中的不可打印字符:\n\n![Non-printable character example](https://i.imgur.com/WndGp9H.png)\n\n### 自动分页\n\n`bat`会在一般情况下将大于屏幕可显示范围的内容输出到分页器(pager, e.g. `less`)。\n\n你可以在调用时添加`--paging=never`参数来使`bat`不使用分页器（就像`cat`一样）。如果你想要用为`cat`使用`bat`别名，可以在 shell 配置文件（shell configuration）中添加`alias cat='bat --paging=never'`。\n\n#### 智能输出\n\n`bat`能够在设置了分页器选项的同时进行管道:wink:。\n当`bat`检测到当前环境为非可交互终端或管道时（例如使用`bat`并将内容用管道输出到文件），`bat`会像`cat`一样，一次输出文件内容为纯文本且无视`--paging`参数。\n\n## 如何使用\n\n在终端中查看一个文件\n\n```bash\n> bat README.md\n```\n\n一次性展示多个文件\n\n```bash\n> bat src/*.rs\n```\n\n从`stdin`读入流，自动为内容添加语法高亮（前提是输入内容的语言可以被正确识别，通常根据内容第一行的 shebang 标记，形如`#!bin/sh`）\n\n```bash\n> curl -s https://sh.rustup.rs | bat\n```\n\n显式指定`stdin`输入的语言\n\n```bash\n> yaml2json .travis.yml | json_pp | bat -l json\n```\n\n显示不可打印字符\n\n```bash\n> bat -A /etc/hosts\n```\n\n与`cat`的兼容性\n\n```bash\nbat > note.md  # 创建一个空文件\n\nbat header.md content.md footer.md > document.md\n\nbat -n main.rs  # 只显示行号\n\nbat f - g  # 输出 f，接着是标准输入流，最后 g\n```\n\n### 第三方工具交互\n\n#### `fzf`\n\n你可以使用`bat`作为`fzf`的预览器。这需要在`bat`后添加`--color=always`选项，以及`--line-range` 选项来限制大文件的加载次数。\n\n```bash\nfzf --preview 'bat --color=always --style=numbers --line-range=:500 {}'\n```\n\n更多信息请参阅[`fzf`的说明](https://github.com/junegunn/fzf#preview-window)。\n\n#### `find` 或 `fd`\n\n你可以使用`find`的`-exec`选项来用`bat`预览搜索结果：\n\n```bash\nfind … -exec bat {} +\n```\n\n亦或者在用`fd`时添加`-X`/`--exec-batch`选项：\n\n```bash\nfd … -X bat\n```\n\n#### `ripgrep`\n\n`bat`也能用`batgrep`来显示`ripgrep`的搜索结果。\n\n```bash\nbatgrep needle src/\n```\n\n#### `tail -f`\n\n当与`tail -f`一起使用，`bat`可以持续监视文件内容并为其添加语法高亮。\n\n```bash\ntail -f /var/log/pacman.log | bat --paging=never -l log\n```\n\n注意：这项功能需要在关闭分页时使用，同时要手动指定输入的内容语法（通过`-l log`）。\n\n#### `git`\n\n`bat`也能直接接受来自`git show`的输出并为其添加语法高亮（当然也需要手动指定语法）：\n\n```bash\ngit show v0.6.0:src/main.rs | bat -l rs\n```\n\n#### `git diff`\n\n`bat`也可以和`git diff`一起使用：\n\n```bash\nbatdiff() {\n    git diff --name-only --relative --diff-filter=d -z | xargs -0 bat --diff\n}\n```\n\n该功能也作为一个独立工具提供，你可以在[`bat-extras`](https://github.com/eth-p/bat-extras)中找到`batdiff`。\n\n如果你想了解更多 git 和 diff 的信息，参阅[`delta`](https://github.com/dandavison/delta)。\n\n#### `xclip`\n\n当需要拷贝文件内容时，行号以及 git 标记会影响输出，此时可以使用`-p`/`--plain`参数来把纯文本传递给`xclip`。\n\n```bash\nbat main.cpp | xclip\n```\n\n`bat`会检测输出是否是管道重定向来决定是否使用纯文本输出。\n\n#### `man`\n\n`bat` 可以通过设置 `MANPAGER` 环境变量，用作 `man` 的彩色分页器：\n\n```bash\nexport MANPAGER=\"sh -c 'awk '\\''{ gsub(/\\x1B\\[[0-9;]*m/, \\\"\\\", \\$0); gsub(/.\\x08/, \\\"\\\", \\$0); print }'\\'' | bat -p -lman'\"\nman 2 select\n```\n\n（如果你使用 Debian 或 Ubuntu，请将 `batcat` 替换为 `bat`）\n\n如果你希望将其打包为一个新的命令，也可以使用 [`batman`](https://github.com/eth-p/bat-extras/blob/master/doc/batman.md)。\n\n> [!WARNING]\n> 在使用 Mandoc 的 `man` 实现时，这[无法](https://github.com/sharkdp/bat/issues/1145)直接工作。\n>\n> 请使用 `batman`，或将此 Shell 脚本包装为 [Shebang 可执行文件](https://en.wikipedia.org/wiki/Shebang_(Unix))，并将 `MANPAGER` 指向该文件。\n\n注意，[Manpage 语法](assets/syntaxes/02_Extra/Manpage.sublime-syntax)是在此仓库中开发的，仍需一些改进。\n\n#### `prettier` / `shfmt` / `rustfmt`\n\n`prettybat`脚本能够格式化代码并用`bat`输出。\n\n## 安装\n\n[![Packaging status](https://repology.org/badge/vertical-allrepos/bat-cat.svg?columns=3&exclude_unsupported=1)](https://repology.org/project/bat-cat/versions)\n\n### Ubuntu (使用 `apt`)\n\n*... 以及其他基于 Debian的发行版.*\n\n`bat` 要求的版本： [Ubuntu 高于 20.04 (\"Focal\")](https://packages.ubuntu.com/search?keywords=bat&exact=1) 和 [Debian 高于 August 2021 (Debian 11 - \"Bullseye\")](https://packages.debian.org/bullseye/bat).\n\n当你的发行版满足条件那么直接在终端运执行：\n\n```bash\nsudo apt install bat\n```\n\n重要：如果你通过这种方法安装`bat`，请留意你所安装的可执行文件是否为`batcat`（由[其他包的可执行文件名冲突](https://github.com/sharkdp/bat/issues/982)造成）。你可以创建一个`bat -> batcat`的符号链接(symlink)或别名来避免因为可执行文件不同带来的问题并与其他发行版保持一致性。\n\n```bash\nmkdir -p ~/.local/bin\nln -s /usr/bin/batcat ~/.local/bin/bat\n```\n\n### Ubuntu (使用`.deb`包)\n\n*... 以及其他基于 Debian的发行版.*\n\n如果你无法使用上一种方法安装，或需要用最新版的`bat`，你可以从[release 页面](https://github.com/sharkdp/bat/releases)下载最新的`.deb`包并通过下述方法安装：\n\n```bash\nsudo dpkg -i bat_0.18.3_amd64.deb  # adapt version number and architecture\n```\n\n### Alpine Linux\n\n你可以用下面下列命令从官方源中安装[`bat 包`](https://pkgs.alpinelinux.org/packages?name=bat)：\n\n```bash\napk add bat\n```\n\n### Arch Linux\n\n你可以用下面下列命令从官方源中安装[`bat`包](https://www.archlinux.org/packages/extra/x86_64/bat/)：\n\n```bash\npacman -S bat\n```\n\n### Fedora\n\n你可以使用下列命令从官方[Fedora Modular](https://docs.fedoraproject.org/en-US/modularity/using-modules/)仓库安装[`bat` 包](https://koji.fedoraproject.org/koji/packageinfo?packageID=27506)：\n\n```bash\ndnf install bat\n```\n\n### Funtoo Linux\n\n你可以从 dev-kit 中安装[`bat` 包](https://github.com/funtoo/dev-kit/tree/1.4-release/sys-apps/bat)：\n\n```bash\nemerge sys-apps/bat\n```\n\n### Gentoo Linux\n\n你可以使用下列命令从官方源中安装 [`bat` 包](https://packages.gentoo.org/packages/sys-apps/bat)：\n\n\n```bash\nemerge sys-apps/bat\n```\n\n### Void Linux\n\n你可以用 xbps-install 安装`bat`：\n\n```bash\nxbps-install -S bat\n```\n\n### Termux:\n\n你可以用 pkg 安装`bat：\n\n```bash\npkg install bat\n```\n\n### FreeBSD\n\n你可以用 pkg 来安装一份预编译的[`bat` 包](https://www.freshports.org/textproc/bat)：\n\n```bash\npkg install bat\n```\n\n或从 FreeBSD ports 自己编译一份：\n\n```bash\ncd /usr/ports/textproc/bat\nmake install\n```\n\n### OpenBSD\n\n你可以用`pkg——add`安装`bat`包\n\n```bash\npkg_add bat\n```\n\n### 通过 nix\n\n你可以用[nix 包管理器](https://nixos.org/nix)安装`bat`：\n\n```bash\nnix-env -i bat\n```\n\n### openSUSE\n\n你可以用 zypper 安装`bat`：\n\n```bash\nzypper install bat\n```\n\n### 通过 snap\n\n目前还没有推荐的 snap 包可用。可以使用其他现存的包但不会受到官方支持且可能会遇到[问题](https://github.com/sharkdp/bat/issues/1519)。\n\n### macOS (或 Linux) 通过 Homebrew\n\n你可以用 [Homebrew on MacOS](https://formulae.brew.sh/formula/bat) 或者 [Homebrew on Linux](https://formulae.brew.sh/formula-linux/bat) 安装`bat`：\n\n```bash\nbrew install bat\n```\n\n### macOS 通过 MacPorts\n\n或用 [MacPorts](https://ports.macports.org/port/bat/summary) 安装`bat`：\n\n```bash\nport install bat\n```\n\n### Windows\n\n在 Windows 上具有多种安装`bat`的方法。若你已完成安装，记得看看 [\"在 Windows 上使用`bat`\"](#在-Windows-中使用-bat) 。\n\n#### 前置条件\n\n你必须已安装 [Visual C++ Redistributable](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads) 包。\n\n#### 使用 Chocolatey\n\n你可以用[Chocolatey](https://chocolatey.org/packages/Bat) 安装`bat`：\n\n```bash\nchoco install bat\n```\n\n#### 使用 Scoop\n\n你可以用 [scoop](https://scoop.sh/) 安装`bat`：\n\n```bash\nscoop install bat\n```\n\n#### 使用预编译二进制版本\n\n直接从 [Release 发布页](https://github.com/sharkdp/bat/releases) 下载已经编译好的二进制包，前提是你安装了 [Visual C++ Redistributable](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads) 包。\n\n### 使用二进制版本\n\n在 [Release 发布页](https://github.com/sharkdp/bat/releases) 中可以找到为多种架构构建的`bat`版本和静态编译的二进制文件（文件名带有`musl`）。\n\n### 从源码编译\n\n如果你想要自己构建`bat`，那么你需要安装有高于1.74.0版本的 Rust。\n\n使用以下命令编译。\n\n```bash\ncargo install --locked bat\n```\n\n注意：man page或 shell 自动补全所需要的额外文件无法通过该方法安装。但你可以在`cargo`的生成目录找到这些文件（`build`目录下）。\n\n## 自定义\n\n### 语法高亮主题\n\n使用 `bat --list-themes` 一份语法高亮主题的清单，然后用`--theme=TwoDark`来指定主题为`TwoDark`，也可以通过设置`BAT_THEME`环境变量来选定主题。把`export BAT_THEME=\"TwoDark\"`添加到 shell 的启动脚本（shell startup file）来取得永久效果。或者使用`bat`的[配置文件](#c配置文件)\n\n若想要查看所有主题在一个文件上的显示效果可以用一下命令（需要安装`fzf`）：\n\n```bash\nbat --list-themes | fzf --preview=\"bat --theme={} --color=always /path/to/file\"\n```\n\n`bat`在默认情况下能够在黑色主题背景下获得较好的效果，如果你的终端使用亮色背景，可以试试`GitHub`或`OneHalfLight`。想要添加自定义主题可以参考[添加主题](#添加主题)。\n\n### 8-bit 主题\n\n`bat` 自带三个 [8-bit 色彩](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors) 主题：\n\n- `ansi` 适应于大部分终端。它使用 3-bit 色彩：黑红绿黄蓝洋红靛青白。\n- `base16`专为 [base16](https://github.com/tinted-theming/home) 终端设计。它使用 4-bit 色彩（带有亮度的 3-bit 色彩）。根据 [base16 styling guidelines](https://github.com/tinted-theming/home/blob/main/styling.md) 制作。\n- `base16-25`专为 [base16-shell](https://github.com/tinted-theming/base16-shell) 设计。它把部分亮色替换为 8-bit 色彩。请不要直接使用该主题，除非你清楚你的256色终端是否使用 base16-shell。\n\n尽管这些主题具有诸多限制，但具有一些 truecolor 主题不具有的三个优点：\n\n- 享有最佳兼容性。并不是所有终端工具都支持高于 3-bit 的色彩。\n- 适应终端主题。\n- 视觉上和其他的终端工具更协调。\n\n### 输出样式\n\n你可以用`--style`参数来控制`bat`输出的样式。使用`--style=numbers,changes`可以只开启 Git 修改和行号显示而不添加其他内容。`BAT_STYLE`环境变量具有相同功能。\n\n### 添加新的语言和语法\n\n当现有的`bat`不支持某个语言或语法时你可以自己添加。\n\n`bat`使用`syntect`库来支持语法高亮，该库使用 [Sublime Text `.sublime-syntax` 语法文件](https://www.sublimetext.com/docs/3/syntax.html)和主题。而后者中的大部分可以在 [Package Control](https://packagecontrol.io/) 找到。\n\n当你找到一份语法文件，按照下列方法：\n\n1. 创建包含语法描述文件的目录：\n   \n   ```bash\n   mkdir -p \"$(bat --config-dir)/syntaxes\"\n   cd \"$(bat --config-dir)/syntaxes\"\n   \n   # Put new '.sublime-syntax' language definition files\n   # in this folder (or its subdirectories), for example:\n   git clone https://github.com/tellnobody1/sublime-purescript-syntax\n   ```\n\n2. 调用下面指令把文件转换为二进制缓存：\n   \n   ```bash\n   bat cache --build\n   ```\n\n3. 最后用`bat --list-languages`来检查新的语法是否被成功导入。如果想要回滚到最初状态，执行：\n   \n   ```bash\n   bat cache --clear\n   ```\n\n4. 如果你觉得`bat`有必要自带该语法支持，请在阅读[指导](doc/assets.md)后向仓库提交 [Syntax Request](https://github.com/sharkdp/bat/issues/new?labels=syntax-request&template=syntax_request.md)。\n\n### 添加主题\n\n类似添加语法支持，第一步也是创建一个带有语法高亮的目录\n\n```bash\nmkdir -p \"$(bat --config-dir)/themes\"\ncd \"$(bat --config-dir)/themes\"\n\n# 下载一个主题\ngit clone https://github.com/greggb/sublime-snazzy\n\n# 更新二进制缓存\nbat cache --build\n```\n\n然后用`bat --list-themes`检查添加是否成功。\n\n### 添加或修改文件关联\n\n你可以用`--map-syntax`参数添加或修改文件名模板。它需要一个类似`pattern:syntax`的参数来指定，其中`pattern`是 glob 文件匹配模板，`syntax`则是支持的语法的完整名（使用`bat --list-languages`来查看获取一份清单）。\n\n注意：方便起见，你可能需要把参数添加到配置文件，而不是每次都在命令行中传递该参数。\n\n以下展示了把“INI”关联到具有`.conf`扩展名的文件\n\n```bash\n--map-syntax='*.conf:INI'\n```\n\n把`.ignore`文件与“Git Ignore”关联\n\n```bash\n--map-syntax='.ignore:Git Ignore'\n```\n\n把`/etc/apache2`内的`.conf`文件关联到“Apache Conf”语法（`bat`已默认绑定）\n\n```bash\n--map-syntax='/etc/apache2/**/*.conf:Apache Conf'\n```\n\n### 使用自定义分页器\n\n`bat`默认使用`PAGER`环境变量定义的分页器，如果没有定义则使用`less`。`bat`提供了`BAT_PAGER`环境变量来专为`bat`选择分页器（优先级高于`PAGER`）。\n\n注意：当`PAGER`设置为`more`或`most`时，`bat`会使用`less`来代替以确保能提供色彩支持。\n\n```bash\nexport BAT_PAGER=\"less -RF\"\n```\n\n除了使用环境变量来改变`bat`使用的的分页器，也可以在配置文件中提供`--pager`参数。\n\n注意：`bat`会把部分命令行参数直接传递给分页器：`-R`/`--RAW-CONTROL-CHARS`,`-F`/`--quit-if-one-screen`以及`-X`/`--no-init`（该参数仅适用于高于530版本的`less`）。其中`-R` 参数需要在解释 ANSI 标准颜色时起作用。`-F`则指示`less`在输出内容的垂直尺寸小于终端尺寸时立即退出。当文件内容可以在一个屏幕里完全显示时，就不需要按`q`键退出阅读模式，很方便就是了。`-X`则能修复`-F`在`less`的老版本中的一些bug（代价是不支持鼠标滚轮，但可以用`-R`来取消`quit-if-one-screen`功能。）。\n\n### 缩进\n\n`bat` 使用四个空格宽的制表符，而不受分页器影响，同时也可以用`--tabs`参数来自定义。\n\n注意：通过其他方法针对分页器的制表符设置不会生效（例如通过`bat`的`--pager`参数传递或`less`使用的`LESS`环境变量）。因为在输出提交给分页器之前，内容中的制表符就已经被`bat`替换为了特定长度的空格以避免由于边栏导致的缩进问题。你可以用给`bat`传递`--tabs=0`参数来取消该设定并让分页器自己处理制表符。\n\n### 暗色模式\n\n如果你用的 macOS 处于暗色模式，你可以为`bat`启用基于系统主题的主题。如下所示操作会让`bat`在系统处于亮色模式时加载`GitHub`主题和暗色模式时加载`default`主题。\n\n```bash\nalias cat=\"bat --theme=\\$(defaults read -globalDomain AppleInterfaceStyle &> /dev/null && echo default || echo GitHub)\"\n```\n\n## 配置文件\n\n```bash\nbat --config-file\n```\n\n你也可以用`BAT_CONFIG_PATH`来为`bat`指定自定义位置的配置文件：\n\n```bash\nexport BAT_CONFIG_PATH=\"/path/to/bat.conf\"\n```\n\n使用`--generate-config-file`参数调用`bat`会在指定位置生成一份默认的`bat`配置文件：\n\n```bash\nbat --generate-config-file\n```\n\n### 格式\n\n配置文件其实是一份按行分割的命令行参数列表。你可以用`bat --help`来查看所有可用的参数和适用的值。配置文件中`#`打头的行会被视为注释而不生效。\n\n以下是一份示例：\n\n```bash\n# 设置主题为 TwoDark\n--theme=\"TwoDark\"\n\n# 显示行号和 Git 修改信息， 但没有边框\n--style=\"numbers,changes,header\"\n\n# 在终端中以斜体输出文本（不是所有终端都支持）\n--italic-text=always\n\n# 使用 C++ 语法来给 Arduino 的 .ino 文件提供高亮\n--map-syntax \"*.ino:C++\"\n```\n\n## 在 Windows 中使用 `bat`\n\n`bat` 在 Windows 上开箱即用，除了部分功能需要额外配置。\n\n### 前置条件\n\n你需要先安装 [Visual C++ Redistributable](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads) 包。\n\n### 分页\n\nWindows 只有一个提供有限功能的分页器，你可以从[这里下载](http://www.greenwoodsoftware.com/less/download.html)或用 [Chocolatey 安装](https://chocolatey.org/packages/Less) Windows 版本的`less`。第一种方法需要你把它所在目录加入`PATH`环境变量或[定义分页器变量](#使用自定义分页器)\n\n### 色彩\n\nWindows 10 从 [v1511](https://en.wikipedia.org/wiki/Windows_10_version_history#Version_1511_(November_Update)) 开始 shell（`conhost.exe`，命令提示符或 Powershell）原生支持色彩。在早些版本的 Windows 中你可以用第三方终端如 [Cmder](http://cmder.net/) （使用[ConEmu](https://conemu.github.io/)）。\n\n注意：Git 和 MSYS 版本的 `less` 没法正确在 Windows 表达色彩。如果你没有安装其他分页器，你可以直接用`--paging=never`或设置`BAT_PAGER`为空字符串来关闭分页功能。\n\n### Cygwin\n\nWindows 上的`bat`原生不支持 Cygwin' unix-style 路径（`/cygdrive/*`）。当传递一个绝对 cygwin 路径作为参数值时，`bat`会产生`The system cannot find the path specified. (os error 3)`的错误。你可以`.bash_profile`文件中添加以下函数来解决这个问题。\n\n```bash\nbat() {\n    local index\n    local args=(\"$@\")\n    for index in $(seq 0 ${#args[@]}) ; do\n        case \"${args[index]}\" in\n        -*) continue;;\n        *)  [ -e \"${args[index]}\" ] && args[index]=\"$(cygpath --windows \"${args[index]}\")\";;\n        esac\n    done\n    command bat \"${args[@]}\"\n}\n```\n\n## 疑难解答\n\n### 输出内容含糊不清\n\n当输入文件包含颜色代码和其他 ANSI 转义符号时，`bat`会产生错误的语法高亮和文本，导致输出看起来令人无法理解。当你需要输出该文件时，请使用`--color=never --wrap=never`参数来关闭上色和文字包裹。\n\n### 终端与色彩\n\n`bat`会区分支持 truecolor 和不支持 truecolor 的终端。但是大部分语法高亮主题都是用了没有为 8-bit 色彩支持的颜色，因此强烈推荐使用一个支持 24-bit 色彩的终端（`terminator`，`konsole`，`iTerm2`...），或使用一个 [8-bit 主题](#8-bit-主题)来限制一些颜色。查看[这篇文章使用自定义分页器](https://gist.github.com/XVilka/8346728)了解更多支持 truecolor 的终端。你需要定义`COLORTERM`变量为`truecolor`或`24bit`来确保`bat`能够识别终端的对颜色的支持，否则会使用 8 bit 模式。\n\n### 行号和边框很难看清\n\n试试其他主题，说不定能有所改善（用`bat --list-themes`查看主题列表）。\n\n### 文件编码\n\n`bat`原生支持 UTF-8 和 UTF-16。至于其他文件你可能需要在使用`bat`之前先把编码转换到UTF-8。\n\n这里展示了使用`iconv`来把 Latin-1(ISO-8859-1) 编码的 PHP 文件转换到 UTF-8：\n\n```bash\niconv -f ISO-8859-1 -t UTF-8 my-file.php | bat\n```\n\n注意： 当`bat`无法识别语言时你可能会需要`-l`/`--language`参数。\n\n## 开发\n\n```bash\n# 递归 clone 以获取所有子模块\ngit clone --recursive https://github.com/sharkdp/bat\n\n# 构建（调试版本）\ncd bat\ncargo build --bins\n\n# 运行单元测试和集成测试\ncargo test\n\n# 安装（发布版本）\ncargo install --path . --locked\n\n# 使用修改后的语法和主题构建一个 bat 二进制文件\nbash assets/create.sh\ncargo install --path . --locked --force\n```\n\n如果你想构建一个使用 `bat` 美化打印功能的应用程序，请查看 [API 文档](https://docs.rs/bat/)。请注意，当你依赖 `bat` 作为库时，必须使用 `regex-onig` 或 `regex-fancy` 作为特性。\n\n## 贡献指南\n\n请查看 [`CONTRIBUTING.md`](CONTRIBUTING.md) 指南。\n\n## 维护者\n\n- [sharkdp](https://github.com/sharkdp)\n- [eth-p](https://github.com/eth-p)\n- [keith-hall](https://github.com/keith-hall)\n- [Enselic](https://github.com/Enselic)\n\n## 安全漏洞\n\n如果你想报告 `bat` 中的漏洞，请通过邮件联系 [David Peter](https://david-peter.de/)。\n\n## 项目目标和替代方案\n\n`bat` 试图实现以下目标：\n\n- 提供美观的高级语法高亮\n- 与 Git 集成以显示文件修改\n- 成为 (POSIX) `cat` 的替代品\n- 提供用户友好的命令行界面\n\n如果你在寻找类似的程序，有很多替代方案。请参阅[本文档](doc/alternatives.md)进行比较。\n\n## 许可证\n\n版权所有 (c) 2018-2021 [bat-developers](https://github.com/sharkdp/bat)。\n\n`bat` 可根据 MIT 许可证或 Apache 许可证 2.0 的条款使用，任选其一。\n\n有关许可证的详细信息，请参阅 [LICENSE-APACHE](LICENSE-APACHE) 和 [LICENSE-MIT](LICENSE-MIT) 文件。\n"
  },
  {
    "path": "doc/alternatives.md",
    "content": "# Alternatives\n\nThe following table tries to give an overview *from `bat`s perspective*, i.e. we only compare\ncategories which are relevant for `bat`. Some of these projects have completely different goals and\nif you are not looking for a program like `bat`, this comparison might not be for you.\n\n|                                              | bat                                                                 | [pygments](http://pygments.org/) | [highlight](http://www.andre-simon.de/doku/highlight/highlight.php) | [ccat](https://github.com/jingweno/ccat) | [source-highlight](https://www.gnu.org/software/src-highlite/) | [hicat](https://github.com/rstacruz/hicat)          | [coderay](https://github.com/rubychan/coderay)      | [rouge](https://github.com/jneen/rouge)             | [clp](https://github.com/jpe90/clp)      |\n|----------------------------------------------|---------------------------------------------------------------------|----------------------------------|---------------------------------------------------------------------|------------------------------------------|----------------------------------------------------------------|-----------------------------------------------------|-----------------------------------------------------|-----------------------------------------------------|-----------------------------------------------------|\n| Drop-in `cat` replacement                    | :heavy_check_mark:&nbsp;[*](https://github.com/sharkdp/bat/issues/134)   | :x:                              | :x:                                                                 | (✔️)                     | :x:                                                            | :x:&nbsp;[*](https://github.com/rstacruz/hicat/issues/6) | :x:                                                 | :x:                                                 | :x:                                                                 |\n| Git integration                              | :heavy_check_mark:                                                  | :x:                              | :x:                                                                 | :x:                                      | :x:                                                            | :x:                                                 | :x:                                                 | :x:                                                 | :x:                                                                 |\n| Automatic paging                             | :heavy_check_mark:                                                  | :x:                              | :x:                                                                 | :x:                                      | :x:                                                            | :heavy_check_mark:                                  | :x:                                                 | :x:                                                 | :x:                                                                 |\n| Languages (circa)                            | 150                                                                 | 300                              | 200                                                                 | 7                                        | 80                                                             | 130                                                 | 30                                                  | 130                                                 | 150                                                 |\n| Extensible (languages, themes)               | :heavy_check_mark:                                                  | (✔️)             | (✔️)                                                | :x:                                      | (✔️)                                           | :x:                                                 | :x:                                                 | :x:                                                 | :heavy_check_mark:                                                 |\n| Advanced highlighting (e.g. nested syntaxes) | :heavy_check_mark:                                                  | :heavy_check_mark:               | (✔️) ?                                              | :x:                                      | :heavy_check_mark:                                             | :heavy_check_mark:                                  | :heavy_check_mark:                                  | :heavy_check_mark:                                  | :heavy_check_mark:                                  |\n| Execution time [ms] (`jquery-3.3.1.js`)      | 422                                                                 | 455                              | 299                                                                 | 39                                       | 208                                                            | 287                                                 | 128                                                 | 740                                                 | 22                                          |\n| Execution time [ms] (`miniz.c`)              | 27                                                                  | 169                              | 19                                                                  | 4                                        | 36                                                             | 131                                                 | 58                                                  | 231                                                 | 4                                          |\n| Execution time [ms] (957 kB XML file)        | 215                                                                 | 296                              | 236                                                                 | 165                                      | 83                                                            | 412                                                 | 135                                                 | 386                                                 | 127                                          |\n\nIf you think that some entries in this table are outdated or wrong, please open a ticket or pull\nrequest.\n\nSome other alternatives that are also related, but not yet included in the table:\n- [lesspipe](https://github.com/wofr06/lesspipe)\n- [vimpager](https://github.com/rkitover/vimpager)\n\n## Benchmarks\n\nThe benchmarks above have been created with this script:\n```bash\n#!/usr/bin/env bash\n\ncd \"$(dirname \"${BASH_SOURCE[0]}\")\" || exit\n\nif ! command -v hyperfine > /dev/null 2>&1; then\n    echo \"'hyperfine' does not seem to be installed.\"\n    echo \"You can get it here: https://github.com/sharkdp/hyperfine\"\n    exit 1\nfi\n\nSRC=\"test-src/jquery-3.3.1.js\"\n\n\ncmd_bat=\"bat --style=full --color=always --paging=never '$SRC'\"\ncmd_bat_simple=\"bat --plain --wrap=never --tabs=0 --color=always --paging=never '$SRC'\"\ncmd_pygmentize=\"pygmentize -g '$SRC'\"\ncmd_highlight=\"highlight -O truecolor '$SRC'\"\ncmd_ccat=\"ccat --color=always '$SRC'\"\ncmd_source_highlight=\"source-highlight --failsafe --infer-lang -f esc -i '$SRC'\"\ncmd_hicat=\"hicat '$SRC'\"\ncmd_coderay=\"coderay '$SRC'\"\ncmd_rouge=\"rougify '$SRC'\"\ncmd_clp=\"clp '$SRC'\"\n\nhyperfine --warmup 3 \\\n    \"$cmd_bat\" \\\n    \"$cmd_bat_simple\" \\\n    \"$cmd_pygmentize\" \\\n    \"$cmd_highlight\" \\\n    \"$cmd_ccat\" \\\n    \"$cmd_source_highlight\" \\\n    \"$cmd_hicat\" \\\n    \"$cmd_coderay\" \\\n    \"$cmd_rouge\" \\\n    \"$cmd_clp\" \\\n```\n"
  },
  {
    "path": "doc/assets.md",
    "content": "## Adding new builtin languages for syntax highlighting\n\nShould you find that a particular syntax is not available within `bat` and think it should be included in `bat` by default, you can follow the instructions outlined below.\n\n`bat` uses the excellent [syntect](https://github.com/trishume/syntect) library to highlight source\ncode. As a basis, syntect uses [Sublime Text](https://www.sublimetext.com/) syntax definitions\nin the `.sublime-syntax` format.\n\n**Important:** Before proceeding, verify that the syntax you wish to add meets the [criteria for inclusion](#Criteria-for-inclusion-of-new-syntaxes).\n\n1. Find a Sublime Text syntax for the given language, preferably in a separate Git repository\n   which can be included as a submodule (under `assets/syntaxes`) using\n   `git submodule add <https github link> ./assets/syntaxes/02_Extra/<repo name>`, replacing\n   the contents of the angle brackets as appropriate.\n\n2. If the Sublime Text syntax is only available as a `.tmLanguage` file, open the file in\n   Sublime Text and convert it to a `.sublime-syntax` file via *Tools* -> *Developer* ->\n   *New Syntax from XXX.tmLanguage...*. Save the new file in the `assets/syntaxes` folder.\n   If only `.tmLanguage.json` or `.tmLanguage.yml` file is available, use\n   [PackageDev](https://packagecontrol.io/packages/PackageDev) to convert it to `.tmLanguage.plist`\n   format and then rename the converted file to `.tmLanguage` file.\n\n3. Run the `assets/create.sh` script. It calls `bat cache --build` to parse all available\n   `.sublime-syntax` files and serialize them to a `syntaxes.bin` file.\n\n4. Re-compile `bat`. At compilation time, the `syntaxes.bin` file will be stored inside the\n   `bat` binary.\n\n5. Use `bat --list-languages` to check if the new languages are available. You may want to do something like ``export PATH=\"`pwd`/target/debug:$PATH\"`` to ensure the locally compiled version is the one being used.\n\n6. Add a syntax test for the new language. See [below](#Syntax-tests) for details.\n\n7. If you send a pull request with your changes, please do *not* include the changed `syntaxes.bin`\n   file. A new binary cache file will be created once before every new release of `bat`. This\n   avoids bloating the repository size unnecessarily.\n\n### Syntax tests\n\n`bat` has a set of syntax highlighting regression tests in `tests/syntax-tests`. The main idea is\nmake sure that we do not run into issues we had in the past where either (1) syntax highlighting\nfor some language is suddenly not working anymore or (2) `bat` suddenly crashes for some input (due\nto `regex` incompatibilities between `syntect` and Sublime Text).\n\nIn order to add a new test file, please follow these steps (let's take \"Ruby\" as an example):\n\n1. Make sure that you are running the **latest version of `bat`** and that `bat` is available on\n   the path. If you are creating a syntax test for a new builtin syntax (see above), make sure that\n   your version of `bat` already has the new syntax builtin.\n2. Find an example Ruby source file or write one yourself. If possible, the file should aim to be\n   \"comprehensive\" (i.e. include a lot of the possible syntax), but this is not strictly necessary.\n   A simple file is better than none at all. Also, the files shouldn't be gigantic.\n3. Save the file in `tests/syntax-tests/source/Ruby` (adapt for your language). The file name could\n   be `test.rb` (adapt extension) but can also be adapted if that is necessary in order for `bat` to\n   highlight it correctly (e.g. `Makefile`).\n4. If you have copied the file from somewhere else, please make sure that the file *may* be copied\n   under the respective license and that the license is compatible with `bat`s license. If it\n   requires attribution, please add a `LICENSE.md` in the same folder with a text like this:\n    ```\n    The `test.rb` file has been added from [enter source here] under the following license:\n\n    [add license text here]\n    ```\n5. Go to `tests/syntax-tests` and run the `update.sh` Bash script. A new file should be generated\n   in the `highlighted` folder (e.g. `highlighted/Ruby/test.rb`).\n6. Use `cat` or `bat --language=txt` to display the content of this file and make sure that the\n   syntax highlighting looks correct.\n7. `git add` the new files in the `source` folder as well as the autogenerated files in the\n   `highlighted` folder.\n\n### Troubleshooting\n\nMake sure that the local cache does not interfere with the internally stored syntaxes and\nthemes (`bat cache --clear`).\n\n## Criteria for inclusion of new syntaxes\n\n* More than 10,000 downloads at [Package Control](https://packagecontrol.io)\n\n### Manual modifications\n\nThe following files have been manually modified after converting from a `.tmLanguage` file:\n\n* `Apache.sublime_syntax`=> removed `conf` and `CONF` file types.\n* `Dart.sublime-syntax` => removed `#regex.dart` include.\n* `DotENV.sublime-syntax` => added `.env.template`, `env` and `env.*` file types ([upstream PR](https://github.com/zaynali53/DotENV/pull/17)).\n* `INI.sublime-syntax` => added `.coveragerc`, `.pylintrc`, `.gitlint`, `.hgrc`, `hgrc`, and `desktop` file types and support for comments after section headers.\n* `Org mode.sublime-syntax` => removed `task` file type.\n* `Robot.sublime_syntax` => changed name to \"Robot Framework\", added `.resource` extension.\n* `SML.sublime_syntax` => removed `ml` file type.\n* `wgsl.sublime-syntax` => added `wgsl` file extension.\n\n### Non-submodule additions\n\n* `Assembly (x86_64)` has been manually added from https://github.com/13xforever/x86-assembly-textmate-bundle due to `git clone` recursion problems\n* `Nim.sublime-syntax` has been added manually from https://github.com/getzola/zola/blob/master/sublime_syntaxes/Nim.sublime-syntax as there was no suitable Git repository for it. The original syntax seems to originate from https://github.com/Varriount/NimLime\n* `Rego.sublime-syntax` has been added manually from https://github.com/open-policy-agent/opa/blob/master/misc/syntax/sublime/rego.sublime-syntax\n   as it is not kept in a standalone repository. The file is generated from\n   https://github.com/open-policy-agent/opa/blob/master/misc/syntax/textmate/Rego.tmLanguage\n* `SML.sublime_syntax` has been added manually from\n   https://github.com/seanjames777/SML-Language-Definitiona as it is not\n   kept in a standalone repository. The file generated is from\n   https://github.com/seanjames777/SML-Language-Definition/blob/master/sml.tmLanguage\n* `Cabal.sublime_syntax` has been added manually from\n  https://github.com/SublimeHaskell/SublimeHaskell/ - we don't want to include the whole submodule because it includes other syntaxes (\"Haskell improved\") as well.\n* `Lean.sublime-syntax` has been added manually from https://github.com/leanprover/vscode-lean4/blob/master/vscode-lean4/syntaxes/lean4.json via conversion.\n"
  },
  {
    "path": "doc/long-help.txt",
    "content": "A cat(1) clone with syntax highlighting and Git integration.\n\nUsage: bat [OPTIONS] [FILE]...\n       bat <COMMAND>\n\nArguments:\n  [FILE]...\n          File(s) to print / concatenate. Use a dash ('-') or no argument at all to read from\n          standard input.\n\nOptions:\n  -A, --show-all\n          Show non-printable characters like space, tab or newline. This option can also be used to\n          print binary files. Use '--tabs' to control the width of the tab-placeholders.\n\n      --nonprintable-notation <notation>\n          Set notation for non-printable characters.\n          \n          Possible values:\n            * unicode (␇, ␊, ␀, ..)\n            * caret   (^G, ^J, ^@, ..)\n\n      --binary <behavior>\n          How to treat binary content. (default: no-printing)\n          \n          Possible values:\n            * no-printing: do not print any binary content\n            * as-text: treat binary content as normal text\n\n  -p, --plain...\n          Only show plain style, no decorations. This is an alias for '--style=plain'. When '-p' is\n          used twice ('-pp'), it also disables automatic paging (alias for '--style=plain\n          --paging=never').\n\n  -l, --language <language>\n          Explicitly set the language for syntax highlighting. The language can be specified as a\n          name (like 'C++' or 'LaTeX') or possible file extension (like 'cpp', 'hpp' or 'md'). Use\n          '--list-languages' to show all supported language names and file extensions.\n\n      --fallback-syntax <fallback-syntax>\n          Set a fallback language for syntax highlighting when auto-detection fails. Unlike\n          '--language', this is only used when no syntax could be detected from filename, custom\n          syntax mappings, or first-line detection.\n          \n          [aliases: --fallback-language]\n\n  -H, --highlight-line <N:M>\n          Highlight the specified line ranges with a different background color For example:\n            '--highlight-line 40' highlights line 40\n            '--highlight-line 30:40' highlights lines 30 to 40\n            '--highlight-line :40' highlights lines 1 to 40\n            '--highlight-line 40:' highlights lines 40 to the end of the file\n            '--highlight-line 30:+10' highlights lines 30 to 40\n\n      --file-name <name>\n          Specify the name to display for a file. Useful when piping data to bat from STDIN when bat\n          does not otherwise know the filename. Note that the provided file name is also used for\n          syntax detection.\n\n  -d, --diff\n          Only show lines that have been added/removed/modified with respect to the Git index. Use\n          --diff-context=N to control how much context you want to see.\n\n      --diff-context <N>\n          Include N lines of context around added/removed/modified lines when using '--diff'.\n\n      --tabs <T>\n          Set the tab width to T spaces. Use a width of 0 to pass tabs through directly\n\n      --wrap <mode>\n          Specify the text-wrapping mode (*auto*, never, character, word). The '--terminal-width'\n          option can be used in addition to control the output width.\n\n  -S, --chop-long-lines\n          Truncate all lines longer than screen width. Alias for '--wrap=never'.\n\n      --terminal-width <width>\n          Explicitly set the width of the terminal instead of determining it automatically. If\n          prefixed with '+' or '-', the value will be treated as an offset to the actual terminal\n          width. See also: '--wrap'.\n\n  -n, --number\n          Only show line numbers, no other decorations. This is an alias for '--style=numbers'\n\n      --color <when>\n          Specify when to use colored output. The automatic mode only enables colors if an\n          interactive terminal is detected - colors are automatically disabled if the output goes to\n          a pipe.\n          Possible values: *auto*, never, always.\n\n      --italic-text <when>\n          Specify when to use ANSI sequences for italic text in the output. Possible values: always,\n          *never*.\n\n      --decorations <when>\n          Specify when to use the decorations that have been specified via '--style'. The automatic\n          mode only enables decorations if an interactive terminal is detected. The always mode will\n          show decorations even when piping output. Possible values: *auto*, never, always.\n\n  -f, --force-colorization\n          Alias for '--decorations=always --color=always'. This is useful if the output of bat is\n          piped to another program, but you want to keep the colorization/decorations.\n\n      --paging <when>\n          Specify when to use the pager. To disable the pager, use '--paging=never' or its\n          alias,'-P'. To disable the pager permanently, set BAT_PAGING to 'never'. To control which\n          pager is used, see the '--pager' option. Possible values: *auto*, never, always.\n\n      --pager <command>\n          Determine which pager is used. This option will override the PAGER and BAT_PAGER\n          environment variables. The default pager is 'less'. If you provide '--pager=builtin', use\n          the built-in 'minus' pager. To control when the pager is used, see the '--paging' option.\n          Example: '--pager \"less -RF\"'.\n\n  -m, --map-syntax <glob:syntax>\n          Map a glob pattern to an existing syntax name. The glob pattern is matched on the full\n          path and the filename. For example, to highlight *.build files with the Python syntax, use\n          -m '*.build:Python'. To highlight files named '.myignore' with the Git Ignore syntax, use\n          -m '.myignore:Git Ignore'. Note that the right-hand side is the *name* of the syntax, not\n          a file extension.\n\n      --ignored-suffix <ignored-suffix>\n          Ignore extension. For example:\n            'bat --ignored-suffix \".dev\" my_file.json.dev' will use JSON syntax, and ignore '.dev'\n\n      --theme <theme>\n          Set the theme for syntax highlighting. Use '--list-themes' to see all available themes. To\n          set a default theme, add the '--theme=\"...\"' option to the configuration file or export\n          the BAT_THEME environment variable (e.g.: export BAT_THEME=\"...\").\n          \n          Special values:\n          \n            * auto: Picks a dark or light theme depending on the terminal's colors (default).\n                    Use '--theme-light' and '--theme-dark' to customize the selected theme.\n              * auto:always: Detect the terminal's colors even when the output is redirected.\n              * auto:system: Detect the color scheme from the system-wide preference (macOS only).\n            * dark: Use the dark theme specified by '--theme-dark'.\n            * light: Use the light theme specified by '--theme-light'.\n\n      --theme-light <theme>\n          Sets the theme name for syntax highlighting used when the terminal uses a light\n          background. Use '--list-themes' to see all available themes. To set a default theme, add\n          the '--theme-light=\"...\" option to the configuration file or export the BAT_THEME_LIGHT\n          environment variable (e.g. export BAT_THEME_LIGHT=\"...\").\n\n      --theme-dark <theme>\n          Sets the theme name for syntax highlighting used when the terminal uses a dark background.\n          Use '--list-themes' to see all available themes. To set a default theme, add the\n          '--theme-dark=\"...\" option to the configuration file or export the BAT_THEME_DARK\n          environment variable (e.g. export BAT_THEME_DARK=\"...\").\n\n      --list-themes\n          Display a list of supported themes for syntax highlighting.\n\n  -s, --squeeze-blank\n          Squeeze consecutive empty lines into a single empty line.\n\n      --squeeze-limit <squeeze-limit>\n          Set the maximum number of consecutive empty lines to be printed.\n\n      --strip-ansi <when>\n          Specify when to strip ANSI escape sequences from the input. The automatic mode will remove\n          escape sequences unless the syntax highlighting language is plain text. Possible values:\n          auto, always, *never*.\n\n      --style <components>\n          Configure which elements (line numbers, file headers, grid borders, Git modifications, ..)\n          to display in addition to the file contents. The argument is a comma-separated list of\n          components to display (e.g. 'numbers,changes,grid') or a pre-defined style ('full'). To\n          set a default style, add the '--style=\"..\"' option to the configuration file or export the\n          BAT_STYLE environment variable (e.g.: export BAT_STYLE=\"..\").\n          \n          When styles are specified in multiple places, the \"nearest\" set of styles take precedence.\n          The command-line arguments are the highest priority, followed by the BAT_STYLE environment\n          variable, and then the configuration file. If any set of styles consists entirely of\n          components prefixed with \"+\" or \"-\", it will modify the previous set of styles instead of\n          replacing them.\n          \n          By default, the following components are enabled:\n            changes, grid, header-filename, numbers, snip\n          \n          Possible values:\n          \n            * default: enables recommended style components (default).\n            * full: enables all available components.\n            * auto: same as 'default', unless the output is piped.\n            * plain: disables all available components.\n            * changes: show Git modification markers.\n            * header: alias for 'header-filename'.\n            * header-filename: show filenames before the content.\n            * header-filesize: show file sizes before the content.\n            * grid: vertical/horizontal lines to separate side bar\n                    and the header from the content.\n            * rule: horizontal lines to delimit files.\n            * numbers: show line numbers in the side bar.\n            * snip: draw separation lines between distinct line ranges.\n\n  -r, --line-range <N:M>\n          Only print the specified range of lines for each file. For example:\n            '--line-range 30:40' prints lines 30 to 40\n            '--line-range :40' prints lines 1 to 40\n            '--line-range 40:' prints lines 40 to the end of the file\n            '--line-range 40' only prints line 40\n            '--line-range -10:' prints the last 10 lines\n            '--line-range 30:+10' prints lines 30 to 40\n            '--line-range 35::5' prints lines 30 to 40 (line 35 with 5 lines of context)\n            '--line-range 30:40:2' prints lines 28 to 42 (range 30-40 with 2 lines of context)\n\n  -L, --list-languages\n          Display a list of supported languages for syntax highlighting.\n\n  -u, --unbuffered\n          Enable unbuffered input reading. When this flag is set, bat will display data as soon as\n          it is available, without waiting for a complete line. This is useful for streaming use\n          cases like 'tail -f logfile | bat -u --paging=never'. Note that line numbers are\n          automatically disabled in unbuffered mode, and syntax highlighting may be imperfect on\n          partial lines.\n\n      --completion <SHELL>\n          Show shell completion for a certain shell. [possible values: bash, fish, zsh, ps1]\n\n      --diagnostic\n          Show diagnostic information for bug reports.\n\n  -E, --quiet-empty\n          When this flag is set, bat will produce no output at all when the input is empty. This is\n          useful when piping commands that may produce empty output, like 'git diff'.\n\n      --acknowledgements\n          Show acknowledgements.\n\n      --set-terminal-title\n          Sets terminal title to filenames when using a pager.\n\n  -h, --help\n          Print help (see a summary with '-h')\n\n  -V, --version\n          Print version\n"
  },
  {
    "path": "doc/release-checklist.md",
    "content": "# Release checklist\n\n## Version bump\n\n- [ ] Update version in `Cargo.toml`. Run `cargo build` to update `Cargo.lock`.\n      Make sure to `git add` the `Cargo.lock` changes as well.\n- [ ] Find the current min. supported Rust version by running\n      `cargo metadata --no-deps --format-version 1 | jq -r '.packages[0].rust_version'`.\n- [ ] Update the version and the min. supported Rust version in `README.md` and\n      `doc/README-*.md`. Check with\n      `git grep -i -e 'rust.*1\\.' -e '1\\..*rust' | grep README | grep -v tests/`.\n\n## CHANGELOG.md updates\n\n- [ ] Go to https://github.com/sharkdp/bat/releases/new, click \"Choose a tag\",\n  type the name of the tag that will be created later, click \"Generate release\n  notes\". DO NOT ACTUALLY CREATE ANY RELEASE IN THIS STEP.\n- [ ] Compare current `CHANGELOG.md` with auto-generated release notes and add\n  missing entries. Expect in particular dependabot PRs to not be in\n  `CHANGELOG.md` since they are [auto-merged] if CI passes.\n- [ ] Introduce a section for the new release and perform final touch-ups.\n\n## Update syntaxes and themes (build assets)\n\n- [ ] Install the latest master version (`cargo clean && cargo install --locked -f --path .`) and make\n      sure that it is available on the `PATH` (`bat --version` should show the\n      new version).\n- [ ] Run `assets/create.sh` and check in the binary asset files.\n\n## Documentation\n\n- [ ] Review [`-h`](./short-help.txt), [`--help`](./long-help.txt), and the `man` page. The `man` page is shown in\n      the output of the CI job called *Documentation*, so look there.\n      The CI workflow corresponding to the tip of the master branch is a good place to look.\n\n## Pre-release checks\n\n- [ ] Push all changes and wait for CI to succeed (before continuing with the\n      next section).\n- [ ] Optional: manually test the new features and command-line options. To do\n      this, install the latest `bat` version again (to include the new syntaxes\n      and themes).\n- [ ] Run `cargo publish --dry-run` to make sure that it will\n      succeed later (after creating the GitHub release).\n\n## Release\n\n- [ ] Create a tag and push it: `git tag vX.Y.Z; git push origin tag vX.Y.Z`.\n      This will trigger the deployment via GitHub Actions.\n      REMINDER: If your `origin` is a fork, don't forget to push to e.g. `upstream` instead!\n- [ ] Go to https://github.com/sharkdp/bat/releases/new to create the new\n      release. Select the new tag and also use it as the release title. For the\n      release notes, copy the corresponding section from `CHANGELOG.md` and\n      possibly add additional remarks for package maintainers.\n      Publish the release.\n- [ ] Check if the binary deployment works (archives and Debian packages should\n      appear when the CI run for the Git tag has finished).\n- [ ] Publish to crates.io by running `cargo publish` in a *clean* repository.\n      The safest way to do this is to clone a fresh copy.\n\n## Post-release\n\n- [ ] Prepare a new \"unreleased\" section at the top of `CHANGELOG.md`.\n      Put this at the top:\n\n```\n# unreleased\n\n## Features\n\n## Bugfixes\n\n## Other\n\n## Syntaxes\n\n## Themes\n\n## `bat` as a library\n\n\n```\n\n[auto-merged]: https://github.com/sharkdp/bat/blob/master/.github/workflows/Auto-merge-dependabot-PRs.yml\n"
  },
  {
    "path": "doc/short-help.txt",
    "content": "A cat(1) clone with wings.\n\nUsage: bat [OPTIONS] [FILE]...\n       bat <COMMAND>\n\nArguments:\n  [FILE]...  File(s) to print / concatenate. Use '-' for standard input.\n\nOptions:\n  -A, --show-all\n          Show non-printable characters (space, tab, newline, ..).\n      --nonprintable-notation <notation>\n          Set notation for non-printable characters.\n      --binary <behavior>\n          How to treat binary content. (default: no-printing)\n  -p, --plain...\n          Show plain style (alias for '--style=plain').\n  -l, --language <language>\n          Set the language for syntax highlighting.\n      --fallback-syntax <fallback-syntax>\n          Set a fallback language for undetected syntaxes. [aliases: --fallback-language]\n  -H, --highlight-line <N:M>\n          Highlight lines N through M.\n      --file-name <name>\n          Specify the name to display for a file.\n  -d, --diff\n          Only show lines that have been added/removed/modified.\n      --tabs <T>\n          Set the tab width to T spaces.\n      --wrap <mode>\n          Specify the text-wrapping mode (*auto*, never, character, word).\n  -S, --chop-long-lines\n          Truncate all lines longer than screen width. Alias for '--wrap=never'.\n  -n, --number\n          Show line numbers (alias for '--style=numbers').\n      --color <when>\n          When to use colors (*auto*, never, always).\n      --italic-text <when>\n          Use italics in output (always, *never*)\n      --decorations <when>\n          When to show the decorations (*auto*, never, always).\n      --paging <when>\n          Specify when to use the pager, or use `-P` to disable (*auto*, never, always).\n  -m, --map-syntax <glob:syntax>\n          Use the specified syntax for files matching the glob pattern ('*.cpp:C++').\n      --theme <theme>\n          Set the color theme for syntax highlighting.\n      --theme-light <theme>\n          Sets the color theme for syntax highlighting used for light backgrounds.\n      --theme-dark <theme>\n          Sets the color theme for syntax highlighting used for dark backgrounds.\n      --list-themes\n          Display all supported highlighting themes.\n  -s, --squeeze-blank\n          Squeeze consecutive empty lines.\n      --style <components>\n          Comma-separated list of style elements to display (*default*, auto, full, plain, changes,\n          header, header-filename, header-filesize, grid, rule, numbers, snip).\n  -r, --line-range <N:M>\n          Only print the lines from N to M.\n  -L, --list-languages\n          Display all supported languages.\n  -u, --unbuffered\n          Enable unbuffered input reading for streaming use cases.\n      --completion <SHELL>\n          Show shell completion for a certain shell. [possible values: bash, fish, zsh, ps1]\n  -E, --quiet-empty\n          Produce no output when the input is empty.\n  -h, --help\n          Print help (see more with '--help')\n  -V, --version\n          Print version\n"
  },
  {
    "path": "doc/sponsors.md",
    "content": "## Sponsors\n\n`bat` development is sponsored by many individuals and companies. Thank you very much!\n\nPlease note, that being sponsored does not affect the individuality of the `bat`\nproject or affect the maintainers' actions in any way.\nWe remain impartial and continue to assess pull requests solely on merit - the\nfeatures added, bugs solved, and effect on the overall complexity of the code.\nNo issue will have a different priority based on sponsorship status of the\nreporter.\n\nContributions from anybody are most welcomed, please see our [`CONTRIBUTING.md`](../CONTRIBUTING.md) guide.\n\nIf you want to see our biggest sponsors, check the top of [`README.md`](../README.md#sponsors).\n"
  },
  {
    "path": "examples/advanced.rs",
    "content": "/// A program that prints its own source code using the bat library\nuse bat::{PagingMode, PrettyPrinter, WrappingMode};\n\nfn main() {\n    PrettyPrinter::new()\n        .header(true)\n        .grid(true)\n        .line_numbers(true)\n        .use_italics(true)\n        // The following line will be highlighted in the output:\n        .highlight(line!() as usize)\n        .theme(\"1337\")\n        .wrapping_mode(WrappingMode::Character)\n        .paging_mode(PagingMode::QuitIfOneScreen)\n        .input_file(file!())\n        .print()\n        .unwrap();\n}\n"
  },
  {
    "path": "examples/buffer.rs",
    "content": "use bat::{\n    assets::HighlightingAssets, config::Config, controller::Controller, output::OutputHandle, Input,\n};\n\nfn main() {\n    let mut buffer = String::new();\n    let config = Config {\n        colored_output: true,\n        ..Default::default()\n    };\n    let assets = HighlightingAssets::from_binary();\n    let controller = Controller::new(&config, &assets);\n    let input = Input::from_file(file!());\n    controller\n        .run(\n            vec![input.into()],\n            Some(&mut OutputHandle::FmtWrite(&mut buffer)),\n        )\n        .unwrap();\n\n    println!(\"{buffer}\");\n}\n"
  },
  {
    "path": "examples/cat.rs",
    "content": "/// A very simple colorized `cat` clone, using `bat` as a library.\n/// See `src/bin/bat` for the full `bat` application.\nuse bat::PrettyPrinter;\n\nfn main() {\n    PrettyPrinter::new()\n        .header(true)\n        .grid(true)\n        .line_numbers(true)\n        .input_files(std::env::args_os().skip(1))\n        .print()\n        .unwrap();\n}\n"
  },
  {
    "path": "examples/inputs.rs",
    "content": "/// A small demonstration of the Input API.\n/// This prints embedded bytes with a custom header and then reads from STDIN.\nuse bat::{Input, PrettyPrinter};\n\nfn main() {\n    PrettyPrinter::new()\n        .header(true)\n        .grid(true)\n        .line_numbers(true)\n        .inputs(vec![\n            Input::from_bytes(b\"echo 'Hello World!'\")\n                .name(\"embedded.sh\") // Dummy name provided to detect the syntax.\n                .kind(\"Embedded\")\n                .title(\"An embedded shell script.\"),\n            Input::from_stdin().title(\"Standard Input\").kind(\"FD\"),\n        ])\n        .print()\n        .unwrap();\n}\n"
  },
  {
    "path": "examples/list_syntaxes_and_themes.rs",
    "content": "/// A simple program that lists all supported syntaxes and themes.\nuse bat::PrettyPrinter;\n\nfn main() {\n    let printer = PrettyPrinter::new();\n\n    println!(\"Syntaxes:\");\n    for syntax in printer.syntaxes() {\n        println!(\"- {} ({})\", syntax.name, syntax.file_extensions.join(\", \"));\n    }\n\n    println!();\n\n    println!(\"Themes:\");\n    for theme in printer.themes() {\n        println!(\"- {theme}\");\n    }\n}\n"
  },
  {
    "path": "examples/simple.rs",
    "content": "/// A simple program that prints its own source code using the bat library\nuse bat::PrettyPrinter;\n\nfn main() {\n    PrettyPrinter::new().input_file(file!()).print().unwrap();\n}\n"
  },
  {
    "path": "examples/yaml.rs",
    "content": "/// A program that serializes a Rust structure to YAML and pretty-prints the result\nuse bat::{Input, PrettyPrinter};\nuse serde::Serialize;\n\n#[derive(Serialize)]\nstruct Person {\n    name: String,\n    height: f64,\n    adult: bool,\n    children: Vec<Person>,\n}\n\nfn main() {\n    let person = Person {\n        name: String::from(\"Anne Mustermann\"),\n        height: 1.76f64,\n        adult: true,\n        children: vec![Person {\n            name: String::from(\"Max Mustermann\"),\n            height: 1.32f64,\n            adult: false,\n            children: vec![],\n        }],\n    };\n\n    let mut bytes = Vec::with_capacity(128);\n    serde_yaml::to_writer(&mut bytes, &person).unwrap();\n    PrettyPrinter::new()\n        .language(\"yaml\")\n        .line_numbers(true)\n        .grid(true)\n        .header(true)\n        .input(Input::from_bytes(&bytes).name(\"person.yaml\").kind(\"File\"))\n        .print()\n        .unwrap();\n}\n"
  },
  {
    "path": "flake.nix",
    "content": "{\n  description = \"bat\";\n\n  inputs.nixpkgs.url = \"github:NixOS/nixpkgs/nixos-unstable\";\n\n  outputs =\n    { self, ... }@inputs:\n    let\n      supportedSystems = [\n        \"x86_64-linux\" # 64-bit Intel/AMD Linux\n        \"aarch64-linux\" # 64-bit ARM Linux\n        \"aarch64-darwin\" # 64-bit ARM macOS\n        \"x86_64-darwin\" # 64-bit Intel macOS\n      ];\n\n      forEachSupportedSystem =\n        f:\n        inputs.nixpkgs.lib.genAttrs supportedSystems (\n          system:\n          f {\n            inherit system;\n            pkgs = import inputs.nixpkgs {\n              inherit system;\n            };\n          }\n        );\n    in\n    {\n      devShells = forEachSupportedSystem (\n        { pkgs, system }:\n        {\n          default = pkgs.mkShellNoCC {\n            packages = with pkgs; [\n              cargo\n            ];\n          };\n        }\n      );\n    };\n}\n"
  },
  {
    "path": "rustfmt.toml",
    "content": "# Defaults are used\r\n"
  },
  {
    "path": "src/assets/assets_metadata.rs",
    "content": "use std::fs::File;\nuse std::path::Path;\nuse std::time::SystemTime;\n\nuse semver::Version;\nuse serde_derive::{Deserialize, Serialize};\n\nuse crate::error::*;\n\n#[derive(Debug, PartialEq, Eq, Default, Serialize, Deserialize)]\npub struct AssetsMetadata {\n    bat_version: Option<String>,\n    creation_time: Option<SystemTime>,\n}\n\nconst FILENAME: &str = \"metadata.yaml\";\n\nimpl AssetsMetadata {\n    #[cfg(feature = \"build-assets\")]\n    pub(crate) fn new(current_version: &str) -> AssetsMetadata {\n        AssetsMetadata {\n            bat_version: Some(current_version.to_owned()),\n            creation_time: Some(SystemTime::now()),\n        }\n    }\n\n    #[cfg(feature = \"build-assets\")]\n    pub(crate) fn save_to_folder(&self, path: &Path) -> Result<()> {\n        let file = File::create(path.join(FILENAME))?;\n        serde_yaml::to_writer(file, self)?;\n\n        Ok(())\n    }\n\n    fn try_load_from_folder(path: &Path) -> Result<Self> {\n        let file = File::open(path.join(FILENAME))?;\n        Ok(serde_yaml::from_reader(file)?)\n    }\n\n    /// Load metadata about the stored cache file from the given folder.\n    ///\n    /// There are several possibilities:\n    ///   - We find a `metadata.yaml` file and are able to parse it\n    ///     - return the contained information\n    ///   - We find a `metadata.yaml` file, but are not able to parse it\n    ///     - return a [`Error::SerdeYamlError`]\n    ///   - We do not find a `metadata.yaml` file but a `syntaxes.bin` or `themes.bin` file\n    ///     - assume that these were created by an old version of bat and return\n    ///       [`AssetsMetadata::default()`] without version information\n    ///   - We do not find a `metadata.yaml` file and no cached assets\n    ///     - no user provided assets are available, return `None`\n    pub fn load_from_folder(path: &Path) -> Result<Option<Self>> {\n        match Self::try_load_from_folder(path) {\n            Ok(metadata) => Ok(Some(metadata)),\n            Err(e) => {\n                if let Error::SerdeYamlError(_) = e {\n                    Err(e)\n                } else if path.join(\"syntaxes.bin\").exists() || path.join(\"themes.bin\").exists() {\n                    Ok(Some(Self::default()))\n                } else {\n                    Ok(None)\n                }\n            }\n        }\n    }\n\n    pub fn is_compatible_with(&self, current_version: &str) -> bool {\n        let current_version =\n            Version::parse(current_version).expect(\"bat follows semantic versioning\");\n        let stored_version = self\n            .bat_version\n            .as_ref()\n            .and_then(|ver| Version::parse(ver).ok());\n\n        if let Some(stored_version) = stored_version {\n            current_version.major == stored_version.major\n                && current_version.minor == stored_version.minor\n        } else {\n            false\n        }\n    }\n}\n"
  },
  {
    "path": "src/assets/build_assets/acknowledgements.rs",
    "content": "use std::fmt::Write;\nuse std::fs::read_to_string;\nuse std::path::{Path, PathBuf};\n\nuse walkdir::DirEntry;\n\nuse crate::error::*;\n\nstruct PathAndStem {\n    path: PathBuf,\n    stem: String,\n    relative_path: String,\n}\n\n/// Looks for LICENSE and NOTICE files in `source_dir`, does some rudimentary\n/// analysis, and compiles them together in a single string that is meant to be\n/// used in the output to `--acknowledgements`\npub fn build_acknowledgements(\n    source_dir: &Path,\n    include_acknowledgements: bool,\n) -> Result<Option<String>> {\n    if !include_acknowledgements {\n        return Ok(None);\n    }\n\n    let mut acknowledgements = format!(\"{}\\n\\n\", include_str!(\"../../../NOTICE\"));\n\n    // Sort entries so the order is stable over time\n    let entries = walkdir::WalkDir::new(source_dir).sort_by(|a, b| a.path().cmp(b.path()));\n    for path_and_stem in entries\n        .into_iter()\n        .flatten()\n        .flat_map(|entry| to_path_and_stem(source_dir, entry))\n    {\n        if let Some(license_text) = handle_file(&path_and_stem)? {\n            append_to_acknowledgements(\n                &mut acknowledgements,\n                &path_and_stem.relative_path,\n                &license_text,\n            )\n        }\n    }\n\n    Ok(Some(acknowledgements))\n}\n\nfn to_path_and_stem(source_dir: &Path, entry: DirEntry) -> Option<PathAndStem> {\n    let path = entry.path();\n\n    Some(PathAndStem {\n        path: path.to_owned(),\n        stem: path.file_stem().map(|s| s.to_string_lossy().to_string())?,\n        relative_path: path\n            .strip_prefix(source_dir)\n            .map(|p| p.to_string_lossy().to_string())\n            .ok()?,\n    })\n}\n\nfn handle_file(path_and_stem: &PathAndStem) -> Result<Option<String>> {\n    if path_and_stem.stem == \"NOTICE\" {\n        handle_notice(&path_and_stem.path)\n    } else if path_and_stem.stem.eq_ignore_ascii_case(\"LICENSE\") {\n        handle_license(&path_and_stem.path)\n    } else {\n        Ok(None)\n    }\n}\n\nfn handle_notice(path: &Path) -> Result<Option<String>> {\n    // Assume NOTICE as defined by Apache License 2.0. These must be part of acknowledgements.\n    Ok(Some(read_to_string(path)?))\n}\n\nfn handle_license(path: &Path) -> Result<Option<String>> {\n    let license_text = read_to_string(path)?;\n\n    if include_license_in_acknowledgments(&license_text) {\n        Ok(Some(license_text))\n    } else if license_not_needed_in_acknowledgements(&license_text) {\n        Ok(None)\n    } else {\n        Err(format!(\"ERROR: License is of unknown type: {path:?}\").into())\n    }\n}\n\nfn include_license_in_acknowledgments(license_text: &str) -> bool {\n    let markers = vec![\n        // MIT\n        \"The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\",\n\n        // BSD\n        \"Redistributions in binary form must reproduce the above copyright notice,\",\n\n        // Apache 2.0\n        \"Apache License Version 2.0, January 2004 http://www.apache.org/licenses/\",\n        \"Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\",\n\n        // CC BY 4.0\n        \"Creative Commons Attribution 4.0 International Public License\",\n    ];\n\n    license_contains_marker(license_text, &markers)\n}\n\nfn license_not_needed_in_acknowledgements(license_text: &str) -> bool {\n    let markers = vec![\n        // Public domain\n        \"This is free and unencumbered software released into the public domain.\",\n\n        // Public domain with stronger wording than above\n        \"DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE\",\n\n        // Special license of assets/syntaxes/01_Packages/LICENSE\n        \"Permission to copy, use, modify, sell and distribute this software is granted. This software is provided \\\"as is\\\" without express or implied warranty, and with no claim as to its suitability for any purpose.\"\n    ];\n\n    license_contains_marker(license_text, &markers)\n}\n\nfn license_contains_marker(license_text: &str, markers: &[&str]) -> bool {\n    let normalized_license_text = normalize_license_text(license_text);\n    markers.iter().any(|m| normalized_license_text.contains(m))\n}\n\nfn append_to_acknowledgements(\n    acknowledgements: &mut String,\n    relative_path: &str,\n    license_text: &str,\n) {\n    write!(acknowledgements, \"## {relative_path}\\n\\n{license_text}\").ok();\n\n    // Make sure the last char is a newline to not mess up formatting later\n    if acknowledgements\n        .chars()\n        .last()\n        .expect(\"acknowledgements is not the empty string\")\n        != '\\n'\n    {\n        acknowledgements.push('\\n');\n    }\n\n    // Add two more newlines to make it easy to distinguish where this text ends\n    // and the next starts\n    acknowledgements.push_str(\"\\n\\n\");\n}\n\n/// Replaces newlines with a space character, and replaces multiple spaces with one space.\n/// This makes the text easier to analyze.\nfn normalize_license_text(license_text: &str) -> String {\n    use regex::Regex;\n\n    let whitespace_and_newlines = Regex::new(r\"\\s\").unwrap();\n    let as_single_line = whitespace_and_newlines.replace_all(license_text, \" \");\n\n    let many_spaces = Regex::new(\" +\").unwrap();\n    many_spaces.replace_all(&as_single_line, \" \").to_string()\n}\n\n#[cfg(test)]\nmod tests {\n    #[cfg(test)]\n    use super::*;\n\n    #[test]\n    fn test_normalize_license_text() {\n        let license_text = \"This is a license text with these terms:\n * Complicated multi-line\n   term with indentation\";\n\n        assert_eq!(\n            \"This is a license text with these terms: * Complicated multi-line term with indentation\".to_owned(),\n            normalize_license_text(license_text),\n        );\n    }\n\n    #[test]\n    fn test_normalize_license_text_with_windows_line_endings() {\n        let license_text = \"This license text includes windows line endings\\r\nand we need to handle that.\";\n\n        assert_eq!(\n            \"This license text includes windows line endings and we need to handle that.\"\n                .to_owned(),\n            normalize_license_text(license_text),\n        );\n    }\n\n    #[test]\n    fn test_append_to_acknowledgements_adds_newline_if_missing() {\n        let mut acknowledgements = \"preamble\\n\\n\\n\".to_owned();\n\n        append_to_acknowledgements(&mut acknowledgements, \"some/path\", \"line without newline\");\n        assert_eq!(\n            \"preamble\n\n\n## some/path\n\nline without newline\n\n\n\",\n            acknowledgements\n        );\n\n        append_to_acknowledgements(&mut acknowledgements, \"another/path\", \"line with newline\\n\");\n        assert_eq!(\n            \"preamble\n\n\n## some/path\n\nline without newline\n\n\n## another/path\n\nline with newline\n\n\n\",\n            acknowledgements\n        );\n    }\n}\n"
  },
  {
    "path": "src/assets/build_assets.rs",
    "content": "use std::convert::TryInto;\nuse std::path::Path;\n\nuse syntect::highlighting::ThemeSet;\nuse syntect::parsing::{SyntaxSet, SyntaxSetBuilder};\n\nuse crate::assets::*;\nuse acknowledgements::build_acknowledgements;\n\nmod acknowledgements;\n\npub fn build(\n    source_dir: &Path,\n    include_integrated_assets: bool,\n    include_acknowledgements: bool,\n    target_dir: &Path,\n    current_version: &str,\n) -> Result<()> {\n    let theme_set = build_theme_set(source_dir, include_integrated_assets)?;\n\n    let syntax_set_builder = build_syntax_set_builder(source_dir, include_integrated_assets)?;\n\n    let syntax_set = syntax_set_builder.build();\n\n    let acknowledgements = build_acknowledgements(source_dir, include_acknowledgements)?;\n\n    print_unlinked_contexts(&syntax_set);\n\n    write_assets(\n        &theme_set,\n        &syntax_set,\n        &acknowledgements,\n        target_dir,\n        current_version,\n    )\n}\n\nfn build_theme_set(source_dir: &Path, include_integrated_assets: bool) -> Result<LazyThemeSet> {\n    let mut theme_set = if include_integrated_assets {\n        crate::assets::get_integrated_themeset().try_into()?\n    } else {\n        ThemeSet::new()\n    };\n\n    let theme_dir = source_dir.join(\"themes\");\n    if theme_dir.exists() {\n        let res = theme_set.add_from_folder(&theme_dir);\n        if let Err(err) = res {\n            println!(\n                \"Failed to load one or more themes from '{}' (reason: '{err}')\",\n                theme_dir.to_string_lossy(),\n            );\n        }\n    } else {\n        println!(\n            \"No themes were found in '{}', using the default set\",\n            theme_dir.to_string_lossy()\n        );\n    }\n\n    theme_set.try_into()\n}\n\nfn build_syntax_set_builder(\n    source_dir: &Path,\n    include_integrated_assets: bool,\n) -> Result<SyntaxSetBuilder> {\n    let mut syntax_set_builder = if !include_integrated_assets {\n        let mut builder = syntect::parsing::SyntaxSetBuilder::new();\n        builder.add_plain_text_syntax();\n        builder\n    } else {\n        from_binary::<SyntaxSet>(get_serialized_integrated_syntaxset(), COMPRESS_SYNTAXES)\n            .into_builder()\n    };\n\n    let syntax_dir = source_dir.join(\"syntaxes\");\n    if syntax_dir.exists() {\n        syntax_set_builder.add_from_folder(syntax_dir, true)?;\n    } else {\n        println!(\n            \"No syntaxes were found in '{}', using the default set.\",\n            syntax_dir.to_string_lossy()\n        );\n    }\n\n    Ok(syntax_set_builder)\n}\n\nfn print_unlinked_contexts(syntax_set: &SyntaxSet) {\n    let missing_contexts = syntax_set.find_unlinked_contexts();\n    if !missing_contexts.is_empty() {\n        println!(\"Some referenced contexts could not be found!\");\n        for context in missing_contexts {\n            println!(\"- {context}\");\n        }\n    }\n}\n\nfn write_assets(\n    theme_set: &LazyThemeSet,\n    syntax_set: &SyntaxSet,\n    acknowledgements: &Option<String>,\n    target_dir: &Path,\n    current_version: &str,\n) -> Result<()> {\n    let _ = std::fs::create_dir_all(target_dir);\n    asset_to_cache(\n        theme_set,\n        &target_dir.join(\"themes.bin\"),\n        \"theme set\",\n        COMPRESS_THEMES,\n    )?;\n    asset_to_cache(\n        syntax_set,\n        &target_dir.join(\"syntaxes.bin\"),\n        \"syntax set\",\n        COMPRESS_SYNTAXES,\n    )?;\n\n    if let Some(acknowledgements) = acknowledgements {\n        asset_to_cache(\n            acknowledgements,\n            &target_dir.join(\"acknowledgements.bin\"),\n            \"acknowledgements\",\n            COMPRESS_ACKNOWLEDGEMENTS,\n        )?;\n    }\n\n    print!(\n        \"Writing metadata to folder {} ... \",\n        target_dir.to_string_lossy()\n    );\n    crate::assets_metadata::AssetsMetadata::new(current_version).save_to_folder(target_dir)?;\n    println!(\"okay\");\n\n    Ok(())\n}\n\npub(crate) fn asset_to_contents<T: serde::Serialize>(\n    asset: &T,\n    description: &str,\n    compressed: bool,\n) -> Result<Vec<u8>> {\n    let mut contents = vec![];\n    if compressed {\n        bincode::serialize_into(\n            flate2::write::ZlibEncoder::new(&mut contents, flate2::Compression::best()),\n            asset,\n        )\n    } else {\n        bincode::serialize_into(&mut contents, asset)\n    }\n    .map_err(|_| format!(\"Could not serialize {description}\"))?;\n    Ok(contents)\n}\n\nfn asset_to_cache<T: serde::Serialize>(\n    asset: &T,\n    path: &Path,\n    description: &str,\n    compressed: bool,\n) -> Result<()> {\n    print!(\"Writing {description} to {} ... \", path.to_string_lossy());\n    let contents = asset_to_contents(asset, description, compressed)?;\n    std::fs::write(path, &contents[..])\n        .map_err(|_| format!(\"Could not save {description} to {}\", path.to_string_lossy()))?;\n    println!(\"okay\");\n    Ok(())\n}\n"
  },
  {
    "path": "src/assets/lazy_theme_set.rs",
    "content": "use super::*;\n\nuse std::collections::BTreeMap;\nuse std::convert::TryFrom;\n\nuse serde_derive::{Deserialize, Serialize};\n\nuse once_cell::unsync::OnceCell;\n\nuse syntect::highlighting::{Theme, ThemeSet};\n\n/// Same structure as a [`syntect::highlighting::ThemeSet`] but with themes\n/// stored in raw serialized form, and deserialized on demand.\n#[derive(Debug, Default, Serialize, Deserialize)]\npub struct LazyThemeSet {\n    /// This is a [`BTreeMap`] because that's what [`syntect::highlighting::ThemeSet`] uses\n    themes: BTreeMap<String, LazyTheme>,\n}\n\n/// Stores raw serialized data for a theme with methods to lazily deserialize\n/// (load) the theme.\n#[derive(Debug, Serialize, Deserialize)]\nstruct LazyTheme {\n    serialized: Vec<u8>,\n\n    #[serde(skip, default = \"OnceCell::new\")]\n    deserialized: OnceCell<syntect::highlighting::Theme>,\n}\n\nimpl LazyThemeSet {\n    /// Lazily load the given theme\n    pub fn get(&self, name: &str) -> Option<&Theme> {\n        self.themes.get(name).and_then(|lazy_theme| {\n            lazy_theme\n                .deserialized\n                .get_or_try_init(|| lazy_theme.deserialize())\n                .ok()\n        })\n    }\n\n    /// Returns the name of all themes.\n    pub fn themes(&self) -> impl Iterator<Item = &str> {\n        self.themes.keys().map(|name| name.as_ref())\n    }\n}\n\nimpl LazyTheme {\n    fn deserialize(&self) -> Result<Theme> {\n        asset_from_contents(\n            &self.serialized[..],\n            \"lazy-loaded theme\",\n            COMPRESS_LAZY_THEMES,\n        )\n    }\n}\n\nimpl TryFrom<LazyThemeSet> for ThemeSet {\n    type Error = Error;\n\n    /// Since the user might want to add custom themes to bat, we need a way to\n    /// convert from a `LazyThemeSet` to a regular [`ThemeSet`] so that more\n    /// themes can be added. This function does that pretty straight-forward\n    /// conversion.\n    fn try_from(lazy_theme_set: LazyThemeSet) -> Result<Self> {\n        let mut theme_set = ThemeSet::default();\n\n        for (name, lazy_theme) in lazy_theme_set.themes {\n            theme_set.themes.insert(name, lazy_theme.deserialize()?);\n        }\n\n        Ok(theme_set)\n    }\n}\n\n#[cfg(feature = \"build-assets\")]\nimpl TryFrom<ThemeSet> for LazyThemeSet {\n    type Error = Error;\n\n    /// To collect themes, a [`ThemeSet`] is needed. Once all desired themes\n    /// have been added, we need a way to convert that into [`LazyThemeSet`] so\n    /// that themes can be lazy-loaded later. This function does that\n    /// conversion.\n    fn try_from(theme_set: ThemeSet) -> Result<Self> {\n        let mut lazy_theme_set = LazyThemeSet::default();\n\n        for (name, theme) in theme_set.themes {\n            // All we have to do is to serialize the theme\n            let lazy_theme = LazyTheme {\n                serialized: crate::assets::build_assets::asset_to_contents(\n                    &theme,\n                    &format!(\"theme {name}\"),\n                    COMPRESS_LAZY_THEMES,\n                )?,\n                deserialized: OnceCell::new(),\n            };\n\n            // Ok done, now we can add it\n            lazy_theme_set.themes.insert(name, lazy_theme);\n        }\n\n        Ok(lazy_theme_set)\n    }\n}\n"
  },
  {
    "path": "src/assets/serialized_syntax_set.rs",
    "content": "use std::path::PathBuf;\n\nuse syntect::parsing::SyntaxSet;\n\nuse super::*;\n\n/// A SyntaxSet in serialized form, i.e. bincoded and flate2 compressed.\n/// We keep it in this format since we want to load it lazily.\n#[derive(Debug)]\npub enum SerializedSyntaxSet {\n    /// The data comes from a user-generated cache file.\n    FromFile(PathBuf),\n\n    /// The data to use is embedded into the bat binary.\n    FromBinary(&'static [u8]),\n}\n\nimpl SerializedSyntaxSet {\n    pub fn deserialize(&self) -> Result<SyntaxSet> {\n        match self {\n            SerializedSyntaxSet::FromBinary(data) => Ok(from_binary(data, COMPRESS_SYNTAXES)),\n            SerializedSyntaxSet::FromFile(ref path) => {\n                asset_from_cache(path, \"syntax set\", COMPRESS_SYNTAXES)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/assets.rs",
    "content": "use std::ffi::OsStr;\nuse std::fs;\nuse std::path::Path;\n\nuse once_cell::unsync::OnceCell;\n\nuse syntect::highlighting::Theme;\nuse syntect::parsing::{SyntaxReference, SyntaxSet};\n\nuse path_abs::PathAbs;\n\nuse crate::error::*;\nuse crate::input::{InputReader, OpenedInput};\nuse crate::syntax_mapping::ignored_suffixes::IgnoredSuffixes;\nuse crate::syntax_mapping::MappingTarget;\nuse crate::theme::{default_theme, ColorScheme};\nuse crate::{bat_warning, SyntaxMapping};\n\nuse lazy_theme_set::LazyThemeSet;\n\nuse serialized_syntax_set::*;\n\n#[cfg(feature = \"build-assets\")]\npub use crate::assets::build_assets::*;\n\npub(crate) mod assets_metadata;\n#[cfg(feature = \"build-assets\")]\nmod build_assets;\nmod lazy_theme_set;\nmod serialized_syntax_set;\n\n#[derive(Debug)]\npub struct HighlightingAssets {\n    syntax_set_cell: OnceCell<SyntaxSet>,\n    serialized_syntax_set: SerializedSyntaxSet,\n\n    theme_set: LazyThemeSet,\n    fallback_theme: Option<&'static str>,\n}\n\n#[derive(Debug)]\npub struct SyntaxReferenceInSet<'a> {\n    pub syntax: &'a SyntaxReference,\n    pub syntax_set: &'a SyntaxSet,\n}\n\n/// Lazy-loaded syntaxes are already compressed, and we don't want to compress\n/// already compressed data.\npub(crate) const COMPRESS_SYNTAXES: bool = false;\n\n/// We don't want to compress our [LazyThemeSet] since the lazy-loaded themes\n/// within it are already compressed, and compressing another time just makes\n/// performance suffer\npub(crate) const COMPRESS_THEMES: bool = false;\n\n/// Compress for size of ~40 kB instead of ~200 kB without much difference in\n/// performance due to lazy-loading\npub(crate) const COMPRESS_LAZY_THEMES: bool = true;\n\n/// Compress for size of ~10 kB instead of ~120 kB\npub(crate) const COMPRESS_ACKNOWLEDGEMENTS: bool = true;\n\nimpl HighlightingAssets {\n    fn new(serialized_syntax_set: SerializedSyntaxSet, theme_set: LazyThemeSet) -> Self {\n        HighlightingAssets {\n            syntax_set_cell: OnceCell::new(),\n            serialized_syntax_set,\n            theme_set,\n            fallback_theme: None,\n        }\n    }\n\n    pub fn from_cache(cache_path: &Path) -> Result<Self> {\n        Ok(HighlightingAssets::new(\n            SerializedSyntaxSet::FromFile(cache_path.join(\"syntaxes.bin\")),\n            asset_from_cache(&cache_path.join(\"themes.bin\"), \"theme set\", COMPRESS_THEMES)?,\n        ))\n    }\n\n    pub fn from_binary() -> Self {\n        HighlightingAssets::new(\n            SerializedSyntaxSet::FromBinary(get_serialized_integrated_syntaxset()),\n            get_integrated_themeset(),\n        )\n    }\n\n    pub fn set_fallback_theme(&mut self, theme: &'static str) {\n        self.fallback_theme = Some(theme);\n    }\n\n    /// Return the collection of syntect syntax definitions.\n    pub fn get_syntax_set(&self) -> Result<&SyntaxSet> {\n        self.syntax_set_cell\n            .get_or_try_init(|| self.serialized_syntax_set.deserialize())\n    }\n\n    /// Use [Self::get_syntaxes] instead\n    #[deprecated]\n    pub fn syntaxes(&self) -> &[SyntaxReference] {\n        self.get_syntax_set()\n            .expect(\".syntaxes() is deprecated, use .get_syntaxes() instead\")\n            .syntaxes()\n    }\n\n    pub fn get_syntaxes(&self) -> Result<&[SyntaxReference]> {\n        Ok(self.get_syntax_set()?.syntaxes())\n    }\n\n    fn get_theme_set(&self) -> &LazyThemeSet {\n        &self.theme_set\n    }\n\n    pub fn themes(&self) -> impl Iterator<Item = &str> {\n        self.get_theme_set().themes()\n    }\n\n    /// Use [Self::get_syntax_for_path] instead\n    #[deprecated]\n    pub fn syntax_for_file_name(\n        &self,\n        file_name: impl AsRef<Path>,\n        mapping: &SyntaxMapping,\n    ) -> Option<&SyntaxReference> {\n        self.get_syntax_for_path(file_name, mapping)\n            .ok()\n            .map(|syntax_in_set| syntax_in_set.syntax)\n    }\n\n    /// Detect the syntax based on, in order:\n    ///  1. Syntax mappings with [MappingTarget::MapTo] and [MappingTarget::MapToUnknown]\n    ///     (e.g. `/etc/profile` -> `Bourne Again Shell (bash)`)\n    ///  2. The file name (e.g. `Dockerfile`)\n    ///  3. Syntax mappings with [MappingTarget::MapExtensionToUnknown]\n    ///     (e.g. `*.conf`)\n    ///  4. The file name extension (e.g. `.rs`)\n    ///\n    /// When detecting syntax based on syntax mappings, the full path is taken\n    /// into account. When detecting syntax based on file name, no regard is\n    /// taken to the path of the file. Only the file name itself matters. When\n    /// detecting syntax based on file name extension, only the file name\n    /// extension itself matters.\n    ///\n    /// Returns [Error::UndetectedSyntax] if it was not possible detect syntax\n    /// based on path/file name/extension (or if the path was mapped to\n    /// [MappingTarget::MapToUnknown] or [MappingTarget::MapExtensionToUnknown]).\n    /// In this case it is appropriate to fall back to other methods to detect\n    /// syntax. Such as using the contents of the first line of the file.\n    ///\n    /// Returns [Error::UnknownSyntax] if a syntax mapping exist, but the mapped\n    /// syntax does not exist.\n    pub fn get_syntax_for_path(\n        &self,\n        path: impl AsRef<Path>,\n        mapping: &SyntaxMapping,\n    ) -> Result<SyntaxReferenceInSet<'_>> {\n        let path = path.as_ref();\n\n        let syntax_match = mapping.get_syntax_for(path);\n\n        if let Some(MappingTarget::MapToUnknown) = syntax_match {\n            return Err(Error::UndetectedSyntax(path.to_string_lossy().into()));\n        }\n\n        if let Some(MappingTarget::MapTo(syntax_name)) = syntax_match {\n            return self\n                .find_syntax_by_token(syntax_name)?\n                .ok_or_else(|| Error::UnknownSyntax(syntax_name.to_owned()));\n        }\n\n        let file_name = path.file_name().unwrap_or_default();\n\n        match (\n            self.get_syntax_for_file_name(file_name, &mapping.ignored_suffixes)?,\n            syntax_match,\n        ) {\n            (Some(syntax), _) => Ok(syntax),\n\n            (_, Some(MappingTarget::MapExtensionToUnknown)) => {\n                Err(Error::UndetectedSyntax(path.to_string_lossy().into()))\n            }\n\n            _ => self\n                .get_syntax_for_file_extension(file_name, &mapping.ignored_suffixes)?\n                .ok_or_else(|| Error::UndetectedSyntax(path.to_string_lossy().into())),\n        }\n    }\n\n    /// Look up a syntect theme by name.\n    pub fn get_theme(&self, theme: &str) -> &Theme {\n        match self.get_theme_set().get(theme) {\n            Some(theme) => theme,\n            None => {\n                if theme == \"ansi-light\" || theme == \"ansi-dark\" {\n                    bat_warning!(\"Theme '{theme}' is deprecated, using 'ansi' instead.\");\n                    return self.get_theme(\"ansi\");\n                }\n                if !theme.is_empty() {\n                    bat_warning!(\"Unknown theme '{theme}', using default.\")\n                }\n                self.get_theme_set()\n                    .get(\n                        self.fallback_theme\n                            .unwrap_or_else(|| default_theme(ColorScheme::Dark)),\n                    )\n                    .expect(\"something is very wrong if the default theme is missing\")\n            }\n        }\n    }\n\n    pub(crate) fn get_syntax(\n        &self,\n        language: Option<&str>,\n        fallback_syntax: Option<&str>,\n        input: &mut OpenedInput,\n        mapping: &SyntaxMapping,\n    ) -> Result<SyntaxReferenceInSet<'_>> {\n        if let Some(language) = language {\n            let syntax_set = self.get_syntax_set()?;\n            return syntax_set\n                .find_syntax_by_token(language)\n                .map(|syntax| SyntaxReferenceInSet { syntax, syntax_set })\n                .ok_or_else(|| Error::UnknownSyntax(language.to_owned()));\n        }\n\n        let path = input.path();\n        let absolute_path = path.and_then(|p| {\n            PathAbs::new(p)\n                .ok()\n                .map(|abs| abs.as_path().to_path_buf())\n                .or_else(|| Some(p.to_owned()))\n        });\n\n        let path_syntax = if let Some(ref path) = absolute_path {\n            self.get_syntax_for_path(path, mapping).or_else(|e| {\n                // If syntax detection failed on the given path, retry with the\n                // canonicalized path (which resolves symlinks). This handles\n                // cases like `Aliases/0install -> ../Formula/zero-install.rb`\n                // where the symlink name has no extension but the target does.\n                // See #1001.\n                if matches!(e, Error::UndetectedSyntax(_)) {\n                    if let Ok(resolved) = fs::canonicalize(path) {\n                        if resolved != *path {\n                            return match self.get_syntax_for_path(&resolved, mapping) {\n                                Ok(syntax) => Ok(syntax),\n                                Err(Error::UndetectedSyntax(_)) => Err(e),\n                                Err(err) => Err(err),\n                            };\n                        }\n                    }\n                }\n                Err(e)\n            })\n        } else {\n            Err(Error::UndetectedSyntax(\"[unknown]\".into()))\n        };\n\n        // If a path wasn't provided, or if path based syntax detection\n        // above failed, we fall back to first-line syntax detection.\n        match path_syntax {\n            Err(Error::UndetectedSyntax(path)) => {\n                if let Some(syntax_in_set) = self.get_first_line_syntax(&mut input.reader)? {\n                    Ok(syntax_in_set)\n                } else if let Some(language) = fallback_syntax {\n                    self.find_syntax_by_token(language)?\n                        .ok_or_else(|| Error::UnknownSyntax(language.to_owned()))\n                } else {\n                    Err(Error::UndetectedSyntax(path))\n                }\n            }\n            _ => path_syntax,\n        }\n    }\n\n    pub(crate) fn find_syntax_by_name(\n        &self,\n        syntax_name: &str,\n    ) -> Result<Option<SyntaxReferenceInSet<'_>>> {\n        let syntax_set = self.get_syntax_set()?;\n        Ok(syntax_set\n            .find_syntax_by_name(syntax_name)\n            .map(|syntax| SyntaxReferenceInSet { syntax, syntax_set }))\n    }\n\n    fn find_syntax_by_extension(\n        &self,\n        e: Option<&OsStr>,\n    ) -> Result<Option<SyntaxReferenceInSet<'_>>> {\n        let syntax_set = self.get_syntax_set()?;\n        let extension = e.and_then(|x| x.to_str()).unwrap_or_default();\n        Ok(syntax_set\n            .find_syntax_by_extension(extension)\n            .map(|syntax| SyntaxReferenceInSet { syntax, syntax_set }))\n    }\n\n    fn find_syntax_by_hidden_file_name(\n        &self,\n        file_name: &OsStr,\n    ) -> Result<Option<SyntaxReferenceInSet<'_>>> {\n        let Some(hidden_file_extension) = file_name\n            .to_str()\n            .and_then(|name| name.strip_prefix('.'))\n            .filter(|name| !name.is_empty())\n        else {\n            return Ok(None);\n        };\n\n        // syntect stores `hidden_file_extensions` in the same extension list as\n        // regular file extensions, but dotfiles must be queried without the\n        // leading period.\n        self.find_syntax_by_extension(Some(OsStr::new(hidden_file_extension)))\n    }\n\n    fn find_syntax_by_token(&self, token: &str) -> Result<Option<SyntaxReferenceInSet<'_>>> {\n        let syntax_set = self.get_syntax_set()?;\n        Ok(syntax_set\n            .find_syntax_by_token(token)\n            .map(|syntax| SyntaxReferenceInSet { syntax, syntax_set }))\n    }\n\n    fn get_syntax_for_file_name(\n        &self,\n        file_name: &OsStr,\n        ignored_suffixes: &IgnoredSuffixes,\n    ) -> Result<Option<SyntaxReferenceInSet<'_>>> {\n        let mut syntax = self.find_syntax_by_extension(Some(file_name))?;\n        if syntax.is_none() {\n            syntax = self.find_syntax_by_hidden_file_name(file_name)?;\n        }\n        if syntax.is_none() {\n            syntax =\n                ignored_suffixes.try_with_stripped_suffix(file_name, |stripped_file_name| {\n                    // Note: recursion\n                    self.get_syntax_for_file_name(stripped_file_name, ignored_suffixes)\n                })?;\n        }\n        Ok(syntax)\n    }\n\n    fn get_syntax_for_file_extension(\n        &self,\n        file_name: &OsStr,\n        ignored_suffixes: &IgnoredSuffixes,\n    ) -> Result<Option<SyntaxReferenceInSet<'_>>> {\n        let mut syntax = self.find_syntax_by_extension(Path::new(file_name).extension())?;\n        if syntax.is_none() {\n            syntax =\n                ignored_suffixes.try_with_stripped_suffix(file_name, |stripped_file_name| {\n                    // Note: recursion\n                    self.get_syntax_for_file_extension(stripped_file_name, ignored_suffixes)\n                })?;\n        }\n        Ok(syntax)\n    }\n\n    fn get_first_line_syntax(\n        &self,\n        reader: &mut InputReader,\n    ) -> Result<Option<SyntaxReferenceInSet<'_>>> {\n        let syntax_set = self.get_syntax_set()?;\n        Ok(String::from_utf8(reader.first_line.clone())\n            .ok()\n            .and_then(|l| {\n                // Strip UTF-8 BOM if present\n                let line = l.strip_prefix('\\u{feff}').unwrap_or(&l);\n                syntax_set.find_syntax_by_first_line(line)\n            })\n            .map(|syntax| SyntaxReferenceInSet { syntax, syntax_set }))\n    }\n}\n\npub(crate) fn get_serialized_integrated_syntaxset() -> &'static [u8] {\n    include_bytes!(\"../assets/syntaxes.bin\")\n}\n\npub(crate) fn get_integrated_themeset() -> LazyThemeSet {\n    from_binary(include_bytes!(\"../assets/themes.bin\"), COMPRESS_THEMES)\n}\n\npub fn get_acknowledgements() -> String {\n    from_binary(\n        include_bytes!(\"../assets/acknowledgements.bin\"),\n        COMPRESS_ACKNOWLEDGEMENTS,\n    )\n}\n\npub(crate) fn from_binary<T: serde::de::DeserializeOwned>(v: &[u8], compressed: bool) -> T {\n    asset_from_contents(v, \"n/a\", compressed)\n        .expect(\"data integrated in binary is never faulty, but make sure `compressed` is in sync!\")\n}\n\nfn asset_from_contents<T: serde::de::DeserializeOwned>(\n    contents: &[u8],\n    description: &str,\n    compressed: bool,\n) -> Result<T> {\n    if compressed {\n        bincode::deserialize_from(flate2::read::ZlibDecoder::new(contents))\n    } else {\n        bincode::deserialize_from(contents)\n    }\n    .map_err(|_| format!(\"Could not parse {description}\").into())\n}\n\nfn asset_from_cache<T: serde::de::DeserializeOwned>(\n    path: &Path,\n    description: &str,\n    compressed: bool,\n) -> Result<T> {\n    let contents = fs::read(path).map_err(|_| {\n        format!(\n            \"Could not load cached {description} '{}'\",\n            path.to_string_lossy()\n        )\n    })?;\n    asset_from_contents(&contents[..], description, compressed)\n        .map_err(|_| format!(\"Could not parse cached {description}\").into())\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n\n    use std::ffi::OsStr;\n\n    use std::fs::File;\n    use std::io::{BufReader, Write};\n    use tempfile::TempDir;\n\n    use crate::input::Input;\n\n    struct SyntaxDetectionTest<'a> {\n        assets: HighlightingAssets,\n        pub syntax_mapping: SyntaxMapping<'a>,\n        pub temp_dir: TempDir,\n    }\n\n    impl SyntaxDetectionTest<'_> {\n        fn new() -> Self {\n            SyntaxDetectionTest {\n                assets: HighlightingAssets::from_binary(),\n                syntax_mapping: SyntaxMapping::new(),\n                temp_dir: TempDir::new().expect(\"creation of temporary directory\"),\n            }\n        }\n\n        fn get_syntax_name(\n            &self,\n            language: Option<&str>,\n            fallback_syntax: Option<&str>,\n            input: &mut OpenedInput,\n            mapping: &SyntaxMapping,\n        ) -> String {\n            self.assets\n                .get_syntax(language, fallback_syntax, input, mapping)\n                .map(|syntax_in_set| syntax_in_set.syntax.name.clone())\n                .unwrap_or_else(|_| \"!no syntax!\".to_owned())\n        }\n\n        fn syntax_for_real_file_with_content_os(\n            &self,\n            file_name: &OsStr,\n            first_line: &str,\n        ) -> String {\n            let file_path = self.temp_dir.path().join(file_name);\n            {\n                let mut temp_file = File::create(&file_path).unwrap();\n                writeln!(temp_file, \"{first_line}\").unwrap();\n            }\n\n            let input = Input::ordinary_file(&file_path);\n            let dummy_stdin: &[u8] = &[];\n            let mut opened_input = input.open(dummy_stdin, None).unwrap();\n\n            self.get_syntax_name(None, None, &mut opened_input, &self.syntax_mapping)\n        }\n\n        fn syntax_for_file_with_content_os(&self, file_name: &OsStr, first_line: &str) -> String {\n            let file_path = self.temp_dir.path().join(file_name);\n            let input = Input::from_reader(Box::new(BufReader::new(first_line.as_bytes())))\n                .with_name(Some(&file_path));\n            let dummy_stdin: &[u8] = &[];\n            let mut opened_input = input.open(dummy_stdin, None).unwrap();\n\n            self.get_syntax_name(None, None, &mut opened_input, &self.syntax_mapping)\n        }\n\n        #[cfg(unix)]\n        fn syntax_for_file_os(&self, file_name: &OsStr) -> String {\n            self.syntax_for_file_with_content_os(file_name, \"\")\n        }\n\n        fn syntax_for_file_with_content(&self, file_name: &str, first_line: &str) -> String {\n            self.syntax_for_file_with_content_os(OsStr::new(file_name), first_line)\n        }\n\n        fn syntax_for_file(&self, file_name: &str) -> String {\n            self.syntax_for_file_with_content(file_name, \"\")\n        }\n\n        fn syntax_for_stdin_with_content(&self, file_name: &str, content: &[u8]) -> String {\n            let input = Input::stdin().with_name(Some(file_name));\n            let mut opened_input = input.open(content, None).unwrap();\n\n            self.get_syntax_name(None, None, &mut opened_input, &self.syntax_mapping)\n        }\n\n        fn syntax_is_same_for_inputkinds(&self, file_name: &str, content: &str) -> bool {\n            let as_file = self.syntax_for_real_file_with_content_os(file_name.as_ref(), content);\n            let as_reader = self.syntax_for_file_with_content_os(file_name.as_ref(), content);\n            let consistent = as_file == as_reader;\n            // TODO: Compare StdIn somehow?\n\n            if !consistent {\n                eprintln!(\n                    \"Inconsistent syntax detection:\\nFor File: {as_file}\\nFor Reader: {as_reader}\"\n                )\n            }\n\n            consistent\n        }\n    }\n\n    #[test]\n    fn syntax_detection_basic() {\n        let test = SyntaxDetectionTest::new();\n\n        assert_eq!(test.syntax_for_file(\"test.rs\"), \"Rust\");\n        assert_eq!(test.syntax_for_file(\"test.cpp\"), \"C++\");\n        assert_eq!(test.syntax_for_file(\"test.build\"), \"NAnt Build File\");\n        assert_eq!(\n            test.syntax_for_file(\"PKGBUILD\"),\n            \"Bourne Again Shell (bash)\"\n        );\n        assert_eq!(test.syntax_for_file(\".bashrc\"), \"Bourne Again Shell (bash)\");\n        assert_eq!(test.syntax_for_file(\"Makefile\"), \"Makefile\");\n    }\n\n    #[cfg(unix)]\n    #[test]\n    fn syntax_detection_invalid_utf8() {\n        use std::os::unix::ffi::OsStrExt;\n\n        let test = SyntaxDetectionTest::new();\n\n        assert_eq!(\n            test.syntax_for_file_os(OsStr::from_bytes(b\"invalid_\\xFEutf8_filename.rs\")),\n            \"Rust\"\n        );\n    }\n\n    #[test]\n    fn syntax_detection_same_for_inputkinds() {\n        let mut test = SyntaxDetectionTest::new();\n\n        test.syntax_mapping\n            .insert(\"*.myext\", MappingTarget::MapTo(\"C\"))\n            .ok();\n        test.syntax_mapping\n            .insert(\"MY_FILE\", MappingTarget::MapTo(\"Markdown\"))\n            .ok();\n\n        assert!(test.syntax_is_same_for_inputkinds(\"Test.md\", \"\"));\n        assert!(test.syntax_is_same_for_inputkinds(\"Test.txt\", \"#!/bin/bash\"));\n        assert!(test.syntax_is_same_for_inputkinds(\".bashrc\", \"\"));\n        assert!(test.syntax_is_same_for_inputkinds(\"test.h\", \"\"));\n        assert!(test.syntax_is_same_for_inputkinds(\"test.js\", \"#!/bin/bash\"));\n        assert!(test.syntax_is_same_for_inputkinds(\"test.myext\", \"\"));\n        assert!(test.syntax_is_same_for_inputkinds(\"MY_FILE\", \"\"));\n        assert!(test.syntax_is_same_for_inputkinds(\"MY_FILE\", \"<?php\"));\n    }\n\n    #[test]\n    fn syntax_detection_well_defined_mapping_for_duplicate_extensions() {\n        let test = SyntaxDetectionTest::new();\n\n        assert_eq!(test.syntax_for_file(\"test.h\"), \"C++\");\n        assert_eq!(test.syntax_for_file(\"test.sass\"), \"Sass\");\n        assert_eq!(test.syntax_for_file(\"test.js\"), \"JavaScript (Babel)\");\n        assert_eq!(test.syntax_for_file(\"test.fs\"), \"F#\");\n        assert_eq!(test.syntax_for_file(\"test.v\"), \"Verilog\");\n    }\n\n    #[test]\n    fn syntax_detection_first_line() {\n        let test = SyntaxDetectionTest::new();\n\n        assert_eq!(\n            test.syntax_for_file_with_content(\"my_script\", \"#!/bin/bash\"),\n            \"Bourne Again Shell (bash)\"\n        );\n        assert_eq!(\n            test.syntax_for_file_with_content(\"build\", \"#!/bin/bash\"),\n            \"Bourne Again Shell (bash)\"\n        );\n        assert_eq!(\n            test.syntax_for_file_with_content(\"my_script\", \"<?php\"),\n            \"PHP\"\n        );\n    }\n\n    #[test]\n    fn syntax_detection_first_line_with_utf8_bom() {\n        let test = SyntaxDetectionTest::new();\n\n        // Test that XML files are detected correctly even with UTF-8 BOM\n        // The BOM should be stripped before first-line syntax detection\n        let xml_with_bom = \"\\u{feff}<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?>\";\n        assert_eq!(\n            test.syntax_for_file_with_content(\"unknown_file\", xml_with_bom),\n            \"XML\"\n        );\n\n        // Test the specific .csproj case mentioned in the issue\n        // Even if .csproj has extension mapping, this tests first-line fallback\n        let csproj_content_with_bom = \"\\u{feff}<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?>\\n<Project ToolsVersion=\\\"15.0\\\" xmlns=\\\"http://schemas.microsoft.com/developer/msbuild/2003\\\">\";\n        assert_eq!(\n            test.syntax_for_file_with_content(\"test.csproj\", csproj_content_with_bom),\n            \"XML\"\n        );\n\n        // Test that shell scripts are detected correctly even with UTF-8 BOM\n        let script_with_bom = \"\\u{feff}#!/bin/bash\";\n        assert_eq!(\n            test.syntax_for_file_with_content(\"unknown_script\", script_with_bom),\n            \"Bourne Again Shell (bash)\"\n        );\n\n        // Test that PHP files are detected correctly even with UTF-8 BOM\n        let php_with_bom = \"\\u{feff}<?php\";\n        assert_eq!(\n            test.syntax_for_file_with_content(\"unknown_php\", php_with_bom),\n            \"PHP\"\n        );\n    }\n\n    #[test]\n    fn syntax_detection_with_custom_mapping() {\n        let mut test = SyntaxDetectionTest::new();\n\n        assert_eq!(test.syntax_for_file(\"test.h\"), \"C++\");\n        test.syntax_mapping\n            .insert(\"*.h\", MappingTarget::MapTo(\"C\"))\n            .ok();\n        assert_eq!(test.syntax_for_file(\"test.h\"), \"C\");\n    }\n\n    #[test]\n    fn syntax_detection_with_extension_mapping_to_unknown() {\n        let mut test = SyntaxDetectionTest::new();\n\n        // Normally, a CMakeLists.txt file shall use the CMake syntax, even if it is\n        // a bash script in disguise\n        assert_eq!(\n            test.syntax_for_file_with_content(\"CMakeLists.txt\", \"#!/bin/bash\"),\n            \"CMake\"\n        );\n\n        // Other .txt files shall use the Plain Text syntax\n        assert_eq!(\n            test.syntax_for_file_with_content(\"some-other.txt\", \"#!/bin/bash\"),\n            \"Plain Text\"\n        );\n\n        // If we setup MapExtensionToUnknown on *.txt, the match on the full\n        // file name of \"CMakeLists.txt\" shall have higher prio, and CMake shall\n        // still be used for it\n        test.syntax_mapping\n            .insert(\"*.txt\", MappingTarget::MapExtensionToUnknown)\n            .ok();\n        assert_eq!(\n            test.syntax_for_file_with_content(\"CMakeLists.txt\", \"#!/bin/bash\"),\n            \"CMake\"\n        );\n\n        // However, for *other* files with a .txt extension, first-line fallback\n        // shall now be used\n        assert_eq!(\n            test.syntax_for_file_with_content(\"some-other.txt\", \"#!/bin/bash\"),\n            \"Bourne Again Shell (bash)\"\n        );\n    }\n\n    #[test]\n    fn syntax_detection_is_case_insensitive() {\n        let mut test = SyntaxDetectionTest::new();\n\n        assert_eq!(test.syntax_for_file(\"README.md\"), \"Markdown\");\n        assert_eq!(test.syntax_for_file(\"README.mD\"), \"Markdown\");\n        assert_eq!(test.syntax_for_file(\"README.Md\"), \"Markdown\");\n        assert_eq!(test.syntax_for_file(\"README.MD\"), \"Markdown\");\n\n        // Adding a mapping for \"MD\" in addition to \"md\" should not break the mapping\n        test.syntax_mapping\n            .insert(\"*.MD\", MappingTarget::MapTo(\"Markdown\"))\n            .ok();\n\n        assert_eq!(test.syntax_for_file(\"README.md\"), \"Markdown\");\n        assert_eq!(test.syntax_for_file(\"README.mD\"), \"Markdown\");\n        assert_eq!(test.syntax_for_file(\"README.Md\"), \"Markdown\");\n        assert_eq!(test.syntax_for_file(\"README.MD\"), \"Markdown\");\n    }\n\n    #[test]\n    fn syntax_detection_stdin_filename() {\n        let test = SyntaxDetectionTest::new();\n\n        // from file extension\n        assert_eq!(test.syntax_for_stdin_with_content(\"test.cpp\", b\"a\"), \"C++\");\n        // from first line (fallback)\n        assert_eq!(\n            test.syntax_for_stdin_with_content(\"my_script\", b\"#!/bin/bash\"),\n            \"Bourne Again Shell (bash)\"\n        );\n    }\n\n    #[cfg(feature = \"build-assets\")]\n    #[test]\n    fn syntax_detection_hidden_file_extensions() {\n        let source_dir = TempDir::new().expect(\"creation of temporary source directory\");\n        let cache_dir = TempDir::new().expect(\"creation of temporary cache directory\");\n        let syntax_dir = source_dir.path().join(\"syntaxes\");\n\n        std::fs::create_dir_all(&syntax_dir).expect(\"creation of syntax directory succeeds\");\n        std::fs::write(\n            syntax_dir.join(\"HiddenFileExtension.sublime-syntax\"),\n            r#\"%YAML 1.2\n---\nname: Hidden File Extension\nhidden_file_extensions:\n  - testrc\nscope: source.hiddenfileextension\n\ncontexts:\n  main:\n    - match: .\n      scope: source.hiddenfileextension\n\"#,\n        )\n        .expect(\"custom syntax can be written\");\n\n        build(\n            source_dir.path(),\n            false,\n            false,\n            cache_dir.path(),\n            env!(\"CARGO_PKG_VERSION\"),\n        )\n        .expect(\"custom assets can be built\");\n\n        let test = SyntaxDetectionTest {\n            assets: HighlightingAssets::from_cache(cache_dir.path())\n                .expect(\"custom syntax cache can be loaded\"),\n            syntax_mapping: SyntaxMapping::new(),\n            temp_dir: TempDir::new().expect(\"creation of temporary directory\"),\n        };\n\n        assert_eq!(test.syntax_for_file(\".testrc\"), \"Hidden File Extension\");\n        assert_eq!(\n            test.syntax_for_stdin_with_content(\".testrc\", b\"\"),\n            \"Hidden File Extension\"\n        );\n        assert!(test.syntax_is_same_for_inputkinds(\".testrc\", \"\"));\n    }\n\n    #[cfg(unix)]\n    #[test]\n    fn syntax_detection_for_symlinked_file() {\n        use std::os::unix::fs::symlink;\n\n        let test = SyntaxDetectionTest::new();\n        let file_path = test.temp_dir.path().join(\"my_ssh_config_filename\");\n        {\n            File::create(&file_path).unwrap();\n        }\n        let file_path_symlink = test.temp_dir.path().join(\".ssh\").join(\"config\");\n\n        std::fs::create_dir(test.temp_dir.path().join(\".ssh\"))\n            .expect(\"creation of directory succeeds\");\n        symlink(&file_path, &file_path_symlink).expect(\"creation of symbolic link succeeds\");\n\n        let input = Input::ordinary_file(&file_path_symlink);\n        let dummy_stdin: &[u8] = &[];\n        let mut opened_input = input.open(dummy_stdin, None).unwrap();\n\n        assert_eq!(\n            test.get_syntax_name(None, None, &mut opened_input, &test.syntax_mapping),\n            \"SSH Config\"\n        );\n    }\n\n    #[cfg(unix)]\n    #[test]\n    fn syntax_detection_for_symlinked_file_by_target_extension() {\n        use std::os::unix::fs::symlink;\n\n        let test = SyntaxDetectionTest::new();\n\n        let formula_dir = test.temp_dir.path().join(\"Formula\");\n        std::fs::create_dir(&formula_dir).unwrap();\n        let target = formula_dir.join(\"zero-install.rb\");\n        File::create(&target).unwrap();\n\n        let aliases_dir = test.temp_dir.path().join(\"Aliases\");\n        std::fs::create_dir(&aliases_dir).unwrap();\n        let link = aliases_dir.join(\"0install\");\n        symlink(&target, &link).unwrap();\n\n        let input = Input::ordinary_file(&link);\n        let dummy_stdin: &[u8] = &[];\n        let mut opened_input = input.open(dummy_stdin, None).unwrap();\n\n        assert_eq!(\n            test.get_syntax_name(None, None, &mut opened_input, &test.syntax_mapping),\n            \"Ruby\"\n        );\n    }\n}\n"
  },
  {
    "path": "src/bin/bat/app.rs",
    "content": "use std::collections::HashSet;\nuse std::env;\nuse std::io::IsTerminal;\nuse std::path::{Path, PathBuf};\nuse std::str::FromStr;\nuse std::thread::available_parallelism;\n\nuse crate::{\n    clap_app,\n    config::{get_args_from_config_file, get_args_from_env_opts_var, get_args_from_env_vars},\n};\nuse bat::style::StyleComponentList;\nuse bat::theme::{theme, ThemeName, ThemeOptions, ThemePreference};\nuse bat::BinaryBehavior;\nuse bat::StripAnsiMode;\nuse clap::ArgMatches;\n\nuse console::Term;\n\nuse crate::input::{new_file_input, new_stdin_input};\nuse bat::{\n    bat_warning,\n    config::{Config, VisibleLines},\n    error::*,\n    input::Input,\n    line_range::{HighlightedLineRanges, LineRange, LineRanges},\n    style::{StyleComponent, StyleComponents},\n    MappingTarget, NonprintableNotation, PagingMode, SyntaxMapping, WrappingMode,\n};\n\nfn is_truecolor_terminal() -> bool {\n    env::var(\"COLORTERM\")\n        .map(|colorterm| colorterm == \"truecolor\" || colorterm == \"24bit\")\n        .unwrap_or(false)\n}\n\npub fn env_no_color() -> bool {\n    env::var_os(\"NO_COLOR\").is_some_and(|x| !x.is_empty())\n}\n\nenum HelpType {\n    Short,\n    Long,\n}\n\npub struct App {\n    pub matches: ArgMatches,\n    interactive_output: bool,\n    /// True if -n / --number was passed on the command line\n    /// (not from config file or environment variables).\n    /// This is used to honor the flag when piping output, similar to `cat -n`.\n    number_from_cli: bool,\n}\n\nimpl App {\n    pub fn new() -> Result<Self> {\n        #[cfg(windows)]\n        let _ = nu_ansi_term::enable_ansi_support();\n\n        let interactive_output = std::io::stdout().is_terminal();\n\n        // Check if the -n / --number option was passed on the command line\n        // (before merging with config file and environment variables).\n        // This is needed to honor the -n flag when piping output, similar to `cat -n`.\n        // We need to handle both standalone (-n, --number) and combined short flags (-pn, -An, etc.)\n        // Note: We only check if -n appears and is not overridden by -p in the same combined flag.\n        // For combined flags like -np, -p comes after -n and overrides it, so we don't count it.\n        // For combined flags like -pn, -n comes after -p and takes effect.\n        let number_from_cli = wild::args_os().any(|arg| {\n            let arg_str = arg.to_string_lossy();\n            if arg_str == \"-n\" || arg_str == \"--number\" {\n                return true;\n            }\n            // Handle combined short flags\n            // Only count -n if it's the LAST flag in the combined form (so -p doesn't override it)\n            // or if -p is not present in the combined form\n            if arg_str.starts_with('-') && !arg_str.starts_with(\"--\") && arg_str.len() > 2 {\n                let chars: Vec<char> = arg_str.chars().skip(1).collect();\n                let n_pos = chars.iter().position(|&c| c == 'n');\n                let p_pos = chars.iter().position(|&c| c == 'p');\n                // -n is in the combined flag and either:\n                // - -p is not present, OR\n                // - -n comes after -p (so -n takes effect)\n                if let Some(n) = n_pos {\n                    if p_pos.is_none() || n > p_pos.unwrap() {\n                        return true;\n                    }\n                }\n            }\n            false\n        });\n\n        let matches = Self::matches(interactive_output)?;\n\n        if matches.get_flag(\"help\") {\n            let help_type = if wild::args_os().any(|arg| arg == \"--help\") {\n                HelpType::Long\n            } else {\n                HelpType::Short\n            };\n\n            let use_pager = match matches.get_one::<String>(\"paging\").map(|s| s.as_str()) {\n                Some(\"never\") => false,\n                _ => !matches.get_flag(\"no-paging\"),\n            };\n\n            let use_color = match matches.get_one::<String>(\"color\").map(|s| s.as_str()) {\n                Some(\"always\") => true,\n                Some(\"never\") => false,\n                _ => interactive_output, // auto: use color if interactive\n            };\n\n            let pager = matches.get_one::<String>(\"pager\").map(|s| s.as_str());\n            let theme_options = Self::theme_options_from_matches(&matches);\n            let use_custom_assets = !matches.get_flag(\"no-custom-assets\");\n\n            Self::display_help(\n                interactive_output,\n                help_type,\n                use_pager,\n                use_color,\n                pager,\n                theme_options,\n                use_custom_assets,\n            )?;\n            std::process::exit(0);\n        }\n\n        Ok(App {\n            matches,\n            interactive_output,\n            number_from_cli,\n        })\n    }\n\n    fn display_help(\n        interactive_output: bool,\n        help_type: HelpType,\n        use_pager: bool,\n        use_color: bool,\n        pager: Option<&str>,\n        theme_options: ThemeOptions,\n        use_custom_assets: bool,\n    ) -> Result<()> {\n        use crate::assets::assets_from_cache_or_binary;\n        use crate::directories::PROJECT_DIRS;\n        use bat::{\n            config::Config,\n            controller::Controller,\n            input::Input,\n            style::{StyleComponent, StyleComponents},\n            theme::theme,\n            PagingMode,\n        };\n\n        let mut cmd = clap_app::build_app(interactive_output);\n        let help_text = match help_type {\n            HelpType::Short => cmd.render_help().to_string(),\n            HelpType::Long => cmd.render_long_help().to_string(),\n        };\n\n        let inputs: Vec<Input> = vec![Input::from_reader(Box::new(help_text.as_bytes()))];\n\n        let paging_mode = if use_pager {\n            PagingMode::QuitIfOneScreen\n        } else {\n            PagingMode::Never\n        };\n\n        let help_config = Config {\n            style_components: StyleComponents::new(StyleComponent::Plain.components(false)),\n            paging_mode,\n            pager,\n            colored_output: use_color,\n            true_color: use_color,\n            language: if use_color { Some(\"help\") } else { None },\n            theme: theme(theme_options).to_string(),\n            ..Default::default()\n        };\n\n        let cache_dir = PROJECT_DIRS.cache_dir();\n        let assets = assets_from_cache_or_binary(use_custom_assets, cache_dir)?;\n        Controller::new(&help_config, &assets)\n            .run(inputs, None)\n            .ok();\n\n        Ok(())\n    }\n\n    /// Build argument list with env vars and CLI args (without config file)\n    fn build_args_without_config() -> Vec<std::ffi::OsString> {\n        let mut cli_args = wild::args_os();\n        let mut args = get_args_from_env_vars();\n\n        // Put the zero-th CLI argument (program name) first\n        args.insert(0, cli_args.next().unwrap());\n\n        // .. and the rest at the end\n        cli_args.for_each(|a| args.push(a));\n\n        args\n    }\n\n    fn matches(interactive_output: bool) -> Result<ArgMatches> {\n        // Check if we should skip config file processing for special arguments\n        // that don't require full application setup (version, diagnostic)\n        let should_skip_config = wild::args_os().any(|arg| {\n            matches!(\n                arg.to_str(),\n                Some(\"-V\" | \"--version\" | \"--diagnostic\" | \"--diagnostics\")\n            )\n        });\n\n        // Check if help was requested - help should read the config file but be\n        // forgiving of invalid arguments (so configured theme etc. can be used)\n        let help_requested =\n            wild::args_os().any(|arg| matches!(arg.to_str(), Some(\"-h\" | \"--help\")));\n\n        if wild::args_os().nth(1) == Some(\"cache\".into()) {\n            // Skip the config file and env vars\n            let args = wild::args_os().collect::<Vec<_>>();\n            return Ok(clap_app::build_app(interactive_output).get_matches_from(args));\n        }\n\n        if wild::args_os().any(|arg| arg == \"--no-config\") || should_skip_config {\n            // Skip the arguments in bats config file when --no-config is present\n            // or when user requests version or diagnostic information\n            let args = Self::build_args_without_config();\n            return Ok(clap_app::build_app(interactive_output).get_matches_from(args));\n        }\n\n        // Build arguments with config file\n        let mut cli_args = wild::args_os();\n\n        // Read arguments from bats config file\n        let config_args = match get_args_from_env_opts_var() {\n            Some(result) => result,\n            None => get_args_from_config_file(),\n        };\n\n        // For help, ignore config file parse errors (use empty config instead)\n        // For non-help, propagate the error\n        let mut args = if help_requested {\n            config_args.unwrap_or_default()\n        } else {\n            config_args.map_err(|_| \"Could not parse configuration file\")?\n        };\n\n        // Selected env vars supersede config vars\n        args.extend(get_args_from_env_vars());\n\n        // Put the zero-th CLI argument (program name) first\n        args.insert(0, cli_args.next().unwrap());\n\n        // .. and the rest at the end\n        cli_args.for_each(|a| args.push(a));\n\n        // For help, try parsing with config, and if clap fails (e.g., invalid\n        // argument in config), fall back to parsing without config file args\n        if help_requested {\n            let app = clap_app::build_app(interactive_output);\n            match app.try_get_matches_from(args) {\n                Ok(matches) => Ok(matches),\n                Err(_) => {\n                    // Config has invalid arguments, fall back to just env vars + CLI args\n                    let fallback_args = Self::build_args_without_config();\n                    Ok(clap_app::build_app(interactive_output).get_matches_from(fallback_args))\n                }\n            }\n        } else {\n            Ok(clap_app::build_app(interactive_output).get_matches_from(args))\n        }\n    }\n\n    pub fn config(&self, inputs: &[Input]) -> Result<Config<'_>> {\n        let style_components = self.style_components()?;\n\n        let extra_plain = self.matches.get_count(\"plain\") > 1;\n        let plain_last_index = self\n            .matches\n            .indices_of(\"plain\")\n            .and_then(Iterator::max)\n            .unwrap_or_default();\n        let paging_last_index = self\n            .matches\n            .indices_of(\"paging\")\n            .and_then(Iterator::max)\n            .unwrap_or_default();\n\n        let paging_mode = match self.matches.get_one::<String>(\"paging\").map(|s| s.as_str()) {\n            Some(\"always\") => {\n                // Disable paging if the second -p (or -pp) is specified after --paging=always\n                if extra_plain && plain_last_index > paging_last_index {\n                    PagingMode::Never\n                } else {\n                    PagingMode::Always\n                }\n            }\n            Some(\"never\") => PagingMode::Never,\n            Some(\"auto\") | None => {\n                // If we have -pp as an option when in auto mode, the pager should be disabled.\n                if extra_plain || self.matches.get_flag(\"no-paging\") {\n                    PagingMode::Never\n                } else if inputs.iter().any(Input::is_stdin)\n                    // ignore stdin when --list-themes is used because in that case no input will be read anyways\n                    && !self.matches.get_flag(\"list-themes\")\n                {\n                    // If we are reading from stdin, only enable paging if we write to an\n                    // interactive terminal and if we do not *read* from an interactive\n                    // terminal.\n                    if self.interactive_output && !std::io::stdin().is_terminal() {\n                        PagingMode::QuitIfOneScreen\n                    } else {\n                        PagingMode::Never\n                    }\n                } else if self.interactive_output {\n                    PagingMode::QuitIfOneScreen\n                } else {\n                    PagingMode::Never\n                }\n            }\n            _ => unreachable!(\"other values for --paging are not allowed\"),\n        };\n\n        let mut syntax_mapping = SyntaxMapping::new();\n        // start building glob matchers for builtin mappings immediately\n        // this is an appropriate approach because it's statistically likely that\n        // all the custom mappings need to be checked\n        if available_parallelism()?.get() > 1 {\n            syntax_mapping.start_offload_build_all();\n        }\n\n        if let Some(values) = self.matches.get_many::<String>(\"ignored-suffix\") {\n            for suffix in values {\n                syntax_mapping.insert_ignored_suffix(suffix);\n            }\n        }\n\n        if let Some(values) = self.matches.get_many::<String>(\"map-syntax\") {\n            // later args take precedence over earlier ones, hence `.rev()`\n            // see: https://github.com/sharkdp/bat/pull/2755#discussion_r1456416875\n            for from_to in values.rev() {\n                let parts: Vec<_> = from_to.split(':').collect();\n\n                if parts.len() != 2 {\n                    return Err(\"Invalid syntax mapping. The format of the -m/--map-syntax option is '<glob-pattern>:<syntax-name>'. For example: '*.cpp:C++'.\".into());\n                }\n\n                syntax_mapping.insert(parts[0], MappingTarget::MapTo(parts[1]))?;\n            }\n        }\n\n        let maybe_term_width = self\n            .matches\n            .get_one::<String>(\"terminal-width\")\n            .and_then(|w| {\n                if w.starts_with('+') || w.starts_with('-') {\n                    // Treat argument as a delta to the current terminal width\n                    w.parse().ok().map(|delta: i16| {\n                        let old_width: u16 = Term::stdout().size().1;\n                        let new_width: i32 = i32::from(old_width) + i32::from(delta);\n\n                        if new_width <= 0 {\n                            old_width as usize\n                        } else {\n                            new_width as usize\n                        }\n                    })\n                } else {\n                    w.parse().ok()\n                }\n            });\n\n        Ok(Config {\n            true_color: is_truecolor_terminal(),\n            language: self\n                .matches\n                .get_one::<String>(\"language\")\n                .map(|s| s.as_str())\n                .or_else(|| {\n                    if self.matches.get_flag(\"show-all\") {\n                        Some(\"show-nonprintable\")\n                    } else {\n                        None\n                    }\n                }),\n            fallback_syntax: self\n                .matches\n                .get_one::<String>(\"fallback-syntax\")\n                .map(|s| s.as_str()),\n            show_nonprintable: self.matches.get_flag(\"show-all\"),\n            nonprintable_notation: match self\n                .matches\n                .get_one::<String>(\"nonprintable-notation\")\n                .map(|s| s.as_str())\n            {\n                Some(\"unicode\") => NonprintableNotation::Unicode,\n                Some(\"caret\") => NonprintableNotation::Caret,\n                _ => unreachable!(\"other values for --nonprintable-notation are not allowed\"),\n            },\n            binary: match self.matches.get_one::<String>(\"binary\").map(|s| s.as_str()) {\n                Some(\"as-text\") => BinaryBehavior::AsText,\n                Some(\"no-printing\") => BinaryBehavior::NoPrinting,\n                _ => unreachable!(\"other values for --binary are not allowed\"),\n            },\n            wrapping_mode: {\n                if self.matches.get_flag(\"chop-long-lines\") {\n                    WrappingMode::NoWrapping(true)\n                } else {\n                    match self.matches.get_one::<String>(\"wrap\").map(|s| s.as_str()) {\n                        Some(\"character\") => WrappingMode::Character,\n                        Some(\"word\") => WrappingMode::Word,\n                        Some(\"never\") => WrappingMode::NoWrapping(true),\n                        Some(\"auto\") | None => {\n                            if self.interactive_output || maybe_term_width.is_some() {\n                                if style_components.plain() && maybe_term_width.is_none() {\n                                    WrappingMode::NoWrapping(false)\n                                } else {\n                                    WrappingMode::Character\n                                }\n                            } else {\n                                // We don't have the tty width when piping to another program.\n                                // There's no point in wrapping when this is the case.\n                                WrappingMode::NoWrapping(false)\n                            }\n                        }\n                        _ => unreachable!(\"other values for --wrap are not allowed\"),\n                    }\n                }\n            },\n            colored_output: self.matches.get_flag(\"force-colorization\")\n                || match self.matches.get_one::<String>(\"color\").map(|s| s.as_str()) {\n                    Some(\"always\") => true,\n                    Some(\"never\") => false,\n                    Some(\"auto\") => !env_no_color() && self.interactive_output,\n                    _ => unreachable!(\"other values for --color are not allowed\"),\n                },\n            paging_mode,\n            term_width: maybe_term_width.unwrap_or(Term::stdout().size().1 as usize),\n            loop_through: !(self.interactive_output\n                || self.matches.get_one::<String>(\"color\").map(|s| s.as_str()) == Some(\"always\")\n                || self\n                    .matches\n                    .get_one::<String>(\"decorations\")\n                    .map(|s| s.as_str())\n                    == Some(\"always\")\n                || self.matches.get_flag(\"force-colorization\")\n                || self.number_from_cli),\n            tab_width: self\n                .matches\n                .get_one::<String>(\"tabs\")\n                .map(String::from)\n                .and_then(|t| t.parse().ok())\n                .unwrap_or(\n                    if style_components.plain() && paging_mode == PagingMode::Never {\n                        0\n                    } else {\n                        4\n                    },\n                ),\n            strip_ansi: match self\n                .matches\n                .get_one::<String>(\"strip-ansi\")\n                .map(|s| s.as_str())\n            {\n                Some(\"never\") => StripAnsiMode::Never,\n                Some(\"always\") => StripAnsiMode::Always,\n                Some(\"auto\") => StripAnsiMode::Auto,\n                _ => unreachable!(\"other values for --strip-ansi are not allowed\"),\n            },\n            quiet_empty: self.matches.get_flag(\"quiet-empty\"),\n            unbuffered: self.matches.get_flag(\"unbuffered\"),\n            theme: theme(self.theme_options()).to_string(),\n            visible_lines: match self.matches.try_contains_id(\"diff\").unwrap_or_default()\n                && self.matches.get_flag(\"diff\")\n            {\n                #[cfg(feature = \"git\")]\n                true => VisibleLines::DiffContext(\n                    self.matches\n                        .get_one::<String>(\"diff-context\")\n                        .and_then(|t| t.parse().ok())\n                        .unwrap_or(2),\n                ),\n\n                _ => VisibleLines::Ranges(\n                    self.matches\n                        .get_many::<String>(\"line-range\")\n                        .map(|vs| vs.map(|s| LineRange::from(s.as_str())).collect())\n                        .transpose()?\n                        .map(LineRanges::from)\n                        .unwrap_or_default(),\n                ),\n            },\n            style_components,\n            syntax_mapping,\n            pager: self.matches.get_one::<String>(\"pager\").map(|s| s.as_str()),\n            use_italic_text: self\n                .matches\n                .get_one::<String>(\"italic-text\")\n                .map(|s| s.as_str())\n                == Some(\"always\"),\n            highlighted_lines: self\n                .matches\n                .get_many::<String>(\"highlight-line\")\n                .map(|ws| ws.map(|s| LineRange::from(s.as_str())).collect())\n                .transpose()?\n                .map(LineRanges::from)\n                .map(HighlightedLineRanges)\n                .unwrap_or_default(),\n            use_custom_assets: !self.matches.get_flag(\"no-custom-assets\"),\n            #[cfg(feature = \"lessopen\")]\n            use_lessopen: self.matches.get_flag(\"lessopen\"),\n            set_terminal_title: self.matches.get_flag(\"set-terminal-title\"),\n            squeeze_lines: if self.matches.get_flag(\"squeeze-blank\") {\n                Some(\n                    self.matches\n                        .get_one::<usize>(\"squeeze-limit\")\n                        .map(|limit| limit.to_owned())\n                        .unwrap_or(1),\n                )\n            } else {\n                None\n            },\n        })\n    }\n\n    pub fn inputs(&self) -> Result<Vec<Input<'_>>> {\n        let filenames: Option<Vec<&Path>> = self\n            .matches\n            .get_many::<PathBuf>(\"file-name\")\n            .map(|vs| vs.map(|p| p.as_path()).collect::<Vec<_>>());\n\n        let files: Option<Vec<&Path>> = self\n            .matches\n            .get_many::<PathBuf>(\"FILE\")\n            .map(|vs| vs.map(|p| p.as_path()).collect::<Vec<_>>());\n\n        // verify equal length of file-names and input FILEs\n        if filenames.is_some()\n            && files.is_some()\n            && filenames.as_ref().map(|v| v.len()) != files.as_ref().map(|v| v.len())\n        {\n            return Err(\"Must be one file name per input type.\".into());\n        }\n\n        let mut filenames_or_none: Box<dyn Iterator<Item = Option<&Path>>> = match filenames {\n            Some(filenames) => Box::new(filenames.into_iter().map(Some)),\n            None => Box::new(std::iter::repeat(None)),\n        };\n        if files.is_none() {\n            return Ok(vec![new_stdin_input(\n                filenames_or_none.next().unwrap_or(None),\n            )]);\n        }\n        let files_or_none: Box<dyn Iterator<Item = _>> = match files {\n            Some(ref files) => Box::new(files.iter().map(|name| Some(*name))),\n            None => Box::new(std::iter::repeat(None)),\n        };\n\n        let mut file_input = Vec::new();\n        for (filepath, provided_name) in files_or_none.zip(filenames_or_none) {\n            if let Some(filepath) = filepath {\n                if filepath.to_str().unwrap_or_default() == \"-\" {\n                    file_input.push(new_stdin_input(provided_name));\n                } else {\n                    file_input.push(new_file_input(filepath, provided_name));\n                }\n            }\n        }\n        Ok(file_input)\n    }\n\n    fn forced_style_components(&self) -> Option<StyleComponents> {\n        // No components if `--decorations=never``.\n        if self\n            .matches\n            .get_one::<String>(\"decorations\")\n            .map(|s| s.as_str())\n            == Some(\"never\")\n        {\n            return Some(StyleComponents(HashSet::new()));\n        }\n\n        // Only line numbers if `--number`.\n        if self.matches.get_flag(\"number\") {\n            return Some(StyleComponents(HashSet::from([\n                StyleComponent::LineNumbers,\n            ])));\n        }\n\n        // Plain if `--plain` is specified at least once.\n        if self.matches.get_count(\"plain\") > 0 {\n            return Some(StyleComponents(HashSet::from([StyleComponent::Plain])));\n        }\n\n        // Default behavior.\n        None\n    }\n\n    fn style_components(&self) -> Result<StyleComponents> {\n        let matches = &self.matches;\n        let mut styled_components = match self.forced_style_components() {\n            Some(forced_components) => forced_components,\n\n            // Parse the `--style` arguments and merge them.\n            None if matches.contains_id(\"style\") => {\n                let lists = matches\n                    .get_many::<String>(\"style\")\n                    .expect(\"styles present\")\n                    .map(|v| StyleComponentList::from_str(v))\n                    .collect::<Result<Vec<StyleComponentList>>>()?;\n\n                StyleComponentList::to_components(lists, self.interactive_output, true)\n            }\n\n            // Use the default.\n            None => StyleComponents(HashSet::from_iter(\n                StyleComponent::Default\n                    .components(self.interactive_output)\n                    .iter()\n                    .cloned(),\n            )),\n        };\n\n        // If `grid` is set, remove `rule` as it is a subset of `grid`, and print a warning.\n        if styled_components.grid() && styled_components.0.remove(&StyleComponent::Rule) {\n            bat_warning!(\"Style 'rule' is a subset of style 'grid', 'rule' will not be visible.\");\n        }\n\n        // Auto-disable line numbers in unbuffered mode to avoid confusion with partial lines\n        if self.matches.get_flag(\"unbuffered\") {\n            styled_components.0.remove(&StyleComponent::LineNumbers);\n        }\n\n        Ok(styled_components)\n    }\n\n    fn theme_options(&self) -> ThemeOptions {\n        Self::theme_options_from_matches(&self.matches)\n    }\n\n    fn theme_options_from_matches(matches: &ArgMatches) -> ThemeOptions {\n        let theme = matches\n            .get_one::<String>(\"theme\")\n            .map(|t| ThemePreference::from_str(t).unwrap())\n            .unwrap_or_default();\n        let theme_dark = matches\n            .get_one::<String>(\"theme-dark\")\n            .map(|t| ThemeName::from_str(t).unwrap());\n        let theme_light = matches\n            .get_one::<String>(\"theme-light\")\n            .map(|t| ThemeName::from_str(t).unwrap());\n        ThemeOptions {\n            theme,\n            theme_dark,\n            theme_light,\n        }\n    }\n}\n"
  },
  {
    "path": "src/bin/bat/assets.rs",
    "content": "use std::fs;\nuse std::io;\nuse std::path::Path;\nuse std::path::PathBuf;\n\nuse clap::crate_version;\n\nuse bat::assets::HighlightingAssets;\nuse bat::assets_metadata::AssetsMetadata;\nuse bat::error::*;\n\npub fn clear_assets(cache_dir: &Path) {\n    clear_asset(cache_dir.join(\"themes.bin\"), \"theme set cache\");\n    clear_asset(cache_dir.join(\"syntaxes.bin\"), \"syntax set cache\");\n    clear_asset(cache_dir.join(\"metadata.yaml\"), \"metadata file\");\n}\n\npub fn assets_from_cache_or_binary(\n    use_custom_assets: bool,\n    cache_dir: &Path,\n) -> Result<HighlightingAssets> {\n    if let Some(metadata) = AssetsMetadata::load_from_folder(cache_dir)? {\n        if !metadata.is_compatible_with(crate_version!()) {\n            return Err(format!(\n                \"The binary caches for the user-customized syntaxes and themes \\\n                 in '{}' are not compatible with this version of bat ({}). To solve this, \\\n                 either rebuild the cache (bat cache --build) or remove \\\n                 the custom syntaxes/themes (bat cache --clear).\\n\\\n                 For more information, see:\\n\\n  \\\n                 https://github.com/sharkdp/bat#adding-new-syntaxes--language-definitions\",\n                cache_dir.to_string_lossy(),\n                crate_version!()\n            )\n            .into());\n        }\n    }\n\n    let custom_assets = if use_custom_assets {\n        HighlightingAssets::from_cache(cache_dir).ok()\n    } else {\n        None\n    };\n    Ok(custom_assets.unwrap_or_else(HighlightingAssets::from_binary))\n}\n\nfn clear_asset(path: PathBuf, description: &str) {\n    print!(\"Clearing {description} ... \");\n    match fs::remove_file(&path) {\n        Err(err) if err.kind() == io::ErrorKind::NotFound => {\n            println!(\"skipped (not present)\");\n        }\n        Err(err) => {\n            println!(\"could not remove the cache file {path:?}: {err}\");\n        }\n        Ok(_) => println!(\"okay\"),\n    }\n}\n"
  },
  {
    "path": "src/bin/bat/clap_app.rs",
    "content": "use bat::style::StyleComponentList;\nuse clap::{crate_name, crate_version, value_parser, Arg, ArgAction, ColorChoice, Command};\nuse once_cell::sync::Lazy;\nuse std::env;\nuse std::path::{Path, PathBuf};\nuse std::str::FromStr;\n\nstatic VERSION: Lazy<String> = Lazy::new(|| {\n    #[cfg(feature = \"bugreport\")]\n    let git_version = bugreport::git_version!(fallback = \"\");\n    #[cfg(not(feature = \"bugreport\"))]\n    let git_version = \"\";\n\n    if git_version.is_empty() {\n        crate_version!().to_string()\n    } else {\n        format!(\"{} ({git_version})\", crate_version!())\n    }\n});\n\npub fn build_app(interactive_output: bool) -> Command {\n    let color_when = if interactive_output && !crate::app::env_no_color() {\n        ColorChoice::Auto\n    } else {\n        ColorChoice::Never\n    };\n\n    let mut app = Command::new(crate_name!())\n        .version(VERSION.as_str())\n        .color(color_when)\n        .hide_possible_values(true)\n        .args_conflicts_with_subcommands(true)\n        .allow_external_subcommands(true)\n        .disable_help_subcommand(true)\n        .disable_help_flag(true)\n        .disable_version_flag(true)\n        .max_term_width(100)\n        .about(\"A cat(1) clone with wings.\")\n        .long_about(\"A cat(1) clone with syntax highlighting and Git integration.\")\n        .arg(\n            Arg::new(\"FILE\")\n                .help(\"File(s) to print / concatenate. Use '-' for standard input.\")\n                .long_help(\n                    \"File(s) to print / concatenate. Use a dash ('-') or no argument at all \\\n                     to read from standard input.\",\n                )\n                .num_args(1..)\n                .value_parser(value_parser!(PathBuf)),\n        )\n        .arg(\n            Arg::new(\"show-all\")\n                .long(\"show-all\")\n                .alias(\"show-nonprintable\")\n                .short('A')\n                .action(ArgAction::SetTrue)\n                .conflicts_with(\"language\")\n                .help(\"Show non-printable characters (space, tab, newline, ..).\")\n                .long_help(\n                    \"Show non-printable characters like space, tab or newline. \\\n                     This option can also be used to print binary files. \\\n                     Use '--tabs' to control the width of the tab-placeholders.\",\n                ),\n        )\n        .arg(\n            Arg::new(\"nonprintable-notation\")\n                .long(\"nonprintable-notation\")\n                .action(ArgAction::Set)\n                .default_value(\"unicode\")\n                .value_parser([\"unicode\", \"caret\"])\n                .value_name(\"notation\")\n                .hide_default_value(true)\n                .help(\"Set notation for non-printable characters.\")\n                .long_help(\n                    \"Set notation for non-printable characters.\\n\\n\\\n                    Possible values:\\n  \\\n                    * unicode (␇, ␊, ␀, ..)\\n  \\\n                    * caret   (^G, ^J, ^@, ..)\",\n                ),\n        )\n        .arg(\n            Arg::new(\"binary\")\n                .long(\"binary\")\n                .action(ArgAction::Set)\n                .default_value(\"no-printing\")\n                .value_parser([\"no-printing\", \"as-text\"])\n                .value_name(\"behavior\")\n                .hide_default_value(true)\n                .help(\"How to treat binary content. (default: no-printing)\")\n                .long_help(\n                    \"How to treat binary content. (default: no-printing)\\n\\n\\\n                    Possible values:\\n  \\\n                    * no-printing: do not print any binary content\\n  \\\n                    * as-text: treat binary content as normal text\",\n                ),\n        )\n        .arg(\n            Arg::new(\"plain\")\n                .overrides_with(\"plain\")\n                .overrides_with(\"number\")\n                .short('p')\n                .long(\"plain\")\n                .action(ArgAction::Count)\n                .help(\"Show plain style (alias for '--style=plain').\")\n                .long_help(\n                    \"Only show plain style, no decorations. This is an alias for \\\n                     '--style=plain'. When '-p' is used twice ('-pp'), it also disables \\\n                     automatic paging (alias for '--style=plain --paging=never').\",\n                ),\n        )\n        .arg(\n            Arg::new(\"language\")\n                .short('l')\n                .long(\"language\")\n                .overrides_with(\"language\")\n                .help(\"Set the language for syntax highlighting.\")\n                .long_help(\n                    \"Explicitly set the language for syntax highlighting. The language can be \\\n                     specified as a name (like 'C++' or 'LaTeX') or possible file extension \\\n                     (like 'cpp', 'hpp' or 'md'). Use '--list-languages' to show all supported \\\n                     language names and file extensions.\",\n                ),\n        )\n        .arg(\n            Arg::new(\"fallback-syntax\")\n                .long(\"fallback-syntax\")\n                .visible_alias(\"fallback-language\")\n                .help(\"Set a fallback language for undetected syntaxes.\")\n                .long_help(\n                    \"Set a fallback language for syntax highlighting when auto-detection fails. \\\n                     Unlike '--language', this is only used when no syntax could be detected from \\\n                     filename, custom syntax mappings, or first-line detection.\",\n                ),\n        )\n        .arg(\n            Arg::new(\"highlight-line\")\n                .long(\"highlight-line\")\n                .short('H')\n                .action(ArgAction::Append)\n                .value_name(\"N:M\")\n                .help(\"Highlight lines N through M.\")\n                .long_help(\n                    \"Highlight the specified line ranges with a different background color \\\n                     For example:\\n  \\\n                     '--highlight-line 40' highlights line 40\\n  \\\n                     '--highlight-line 30:40' highlights lines 30 to 40\\n  \\\n                     '--highlight-line :40' highlights lines 1 to 40\\n  \\\n                     '--highlight-line 40:' highlights lines 40 to the end of the file\\n  \\\n                     '--highlight-line 30:+10' highlights lines 30 to 40\",\n                ),\n        )\n        .arg(\n            Arg::new(\"file-name\")\n                .long(\"file-name\")\n                .action(ArgAction::Append)\n                .value_name(\"name\")\n                .value_parser(value_parser!(PathBuf))\n                .help(\"Specify the name to display for a file.\")\n                .long_help(\n                    \"Specify the name to display for a file. Useful when piping \\\n                     data to bat from STDIN when bat does not otherwise know \\\n                     the filename. Note that the provided file name is also \\\n                     used for syntax detection.\",\n                ),\n        );\n\n    #[cfg(feature = \"git\")]\n    {\n        app = app\n                .arg(\n                    Arg::new(\"diff\")\n                        .long(\"diff\")\n                        .short('d')\n                        .action(ArgAction::SetTrue)\n                        .conflicts_with(\"line-range\")\n                        .help(\"Only show lines that have been added/removed/modified.\")\n                        .long_help(\n                            \"Only show lines that have been added/removed/modified with respect \\\n                     to the Git index. Use --diff-context=N to control how much context you want to see.\",\n                        ),\n                )\n                .arg(\n                    Arg::new(\"diff-context\")\n                        .long(\"diff-context\")\n                        .overrides_with(\"diff-context\")\n                        .value_name(\"N\")\n                        .value_parser(\n                            |n: &str| {\n                                n.parse::<usize>()\n                                    .map_err(|_| \"must be a number\")\n                                    .map(|_| n.to_owned()) // Convert to Result<String, &str>\n                                    .map_err(|e| e.to_string())\n                            }, // Convert to Result<(), String>\n                        )\n                        .hide_short_help(true)\n                        .long_help(\n                            \"Include N lines of context around added/removed/modified lines when using '--diff'.\",\n                        ),\n                )\n    }\n\n    app = app.arg(\n        Arg::new(\"tabs\")\n            .long(\"tabs\")\n            .overrides_with(\"tabs\")\n            .value_name(\"T\")\n            .value_parser(\n                |t: &str| {\n                    t.parse::<u32>()\n                        .map_err(|_t| \"must be a number\")\n                        .map(|_t| t.to_owned()) // Convert to Result<String, &str>\n                        .map_err(|e| e.to_string())\n                }, // Convert to Result<(), String>\n            )\n            .help(\"Set the tab width to T spaces.\")\n            .long_help(\n                \"Set the tab width to T spaces. Use a width of 0 to pass tabs through \\\n                     directly\",\n            ),\n    )\n        .arg(\n            Arg::new(\"wrap\")\n                .long(\"wrap\")\n                .overrides_with(\"wrap\")\n                .value_name(\"mode\")\n                .value_parser([\"auto\", \"never\", \"character\", \"word\"])\n                .default_value(\"auto\")\n                .hide_default_value(true)\n                .help(\"Specify the text-wrapping mode (*auto*, never, character, word).\")\n                .long_help(\"Specify the text-wrapping mode (*auto*, never, character, word). \\\n                           The '--terminal-width' option can be used in addition to \\\n                           control the output width.\"),\n        )\n        .arg(\n            Arg::new(\"chop-long-lines\")\n                .long(\"chop-long-lines\")\n                .short('S')\n                .action(ArgAction::SetTrue)\n                .help(\"Truncate all lines longer than screen width. Alias for '--wrap=never'.\"),\n        )\n        .arg(\n            Arg::new(\"terminal-width\")\n                .long(\"terminal-width\")\n                .value_name(\"width\")\n                .hide_short_help(true)\n                .allow_hyphen_values(true)\n                .value_parser(\n                    |t: &str| {\n                        let is_offset = t.starts_with('+') || t.starts_with('-');\n                        t.parse::<i32>()\n                            .map_err(|_e| \"must be an offset or number\")\n                            .and_then(|v| if v == 0 && !is_offset {\n                                Err(\"terminal width cannot be zero\")\n                            } else {\n                                Ok(t.to_owned())\n                            })\n                            .map_err(|e| e.to_string())\n                    })\n                .help(\n                    \"Explicitly set the width of the terminal instead of determining it \\\n                     automatically. If prefixed with '+' or '-', the value will be treated \\\n                     as an offset to the actual terminal width. See also: '--wrap'.\",\n                ),\n        )\n        .arg(\n            Arg::new(\"number\")\n                .long(\"number\")\n                .overrides_with(\"number\")\n                .short('n')\n                .action(ArgAction::SetTrue)\n                .help(\"Show line numbers (alias for '--style=numbers').\")\n                .long_help(\n                    \"Only show line numbers, no other decorations. This is an alias for \\\n                     '--style=numbers'\",\n                ),\n        )\n        .arg(\n            Arg::new(\"color\")\n                .long(\"color\")\n                .overrides_with(\"color\")\n                .value_name(\"when\")\n                .value_parser([\"auto\", \"never\", \"always\"])\n                .hide_default_value(true)\n                .default_value(\"auto\")\n                .help(\"When to use colors (*auto*, never, always).\")\n                .long_help(\n                    \"Specify when to use colored output. The automatic mode \\\n                     only enables colors if an interactive terminal is detected - \\\n                     colors are automatically disabled if the output goes to a pipe.\\n\\\n                     Possible values: *auto*, never, always.\",\n                ),\n        )\n        .arg(\n            Arg::new(\"italic-text\")\n                .long(\"italic-text\")\n                .value_name(\"when\")\n                .value_parser([\"always\", \"never\"])\n                .default_value(\"never\")\n                .hide_default_value(true)\n                .help(\"Use italics in output (always, *never*)\")\n                .long_help(\"Specify when to use ANSI sequences for italic text in the output. Possible values: always, *never*.\"),\n        )\n        .arg(\n            Arg::new(\"decorations\")\n                .long(\"decorations\")\n                .overrides_with(\"decorations\")\n                .value_name(\"when\")\n                .value_parser([\"auto\", \"never\", \"always\"])\n                .default_value(\"auto\")\n                .hide_default_value(true)\n                .help(\"When to show the decorations (*auto*, never, always).\")\n                .long_help(\n                    \"Specify when to use the decorations that have been specified \\\n                    via '--style'. The automatic mode only enables decorations if \\\n                    an interactive terminal is detected. The always mode will show \\\n                    decorations even when piping output. Possible values: *auto*, never, always.\",\n                )\n        )\n        .arg(\n            Arg::new(\"force-colorization\")\n                .long(\"force-colorization\")\n                .short('f')\n                .action(ArgAction::SetTrue)\n                .conflicts_with(\"color\")\n                .conflicts_with(\"decorations\")\n                .overrides_with(\"force-colorization\")\n                .hide_short_help(true)\n                .long_help(\"Alias for '--decorations=always --color=always'. This is useful \\\n                        if the output of bat is piped to another program, but you want \\\n                        to keep the colorization/decorations.\")\n        )\n        .arg(\n            Arg::new(\"paging\")\n                .long(\"paging\")\n                .overrides_with(\"paging\")\n                .overrides_with(\"no-paging\")\n                .value_name(\"when\")\n                .value_parser([\"auto\", \"never\", \"always\"])\n                .default_value(\"auto\")\n                .hide_default_value(true)\n                .help(\"Specify when to use the pager, or use `-P` to disable (*auto*, never, always).\")\n                .long_help(\n                    \"Specify when to use the pager. To disable the pager, use \\\n                    '--paging=never' or its alias,'-P'. To disable the pager permanently, \\\n                    set BAT_PAGING to 'never'. To control which pager is used, see the \\\n                    '--pager' option. Possible values: *auto*, never, always.\"\n                ),\n        )\n        .arg(\n            Arg::new(\"no-paging\")\n                .short('P')\n                .long(\"no-paging\")\n                .alias(\"no-pager\")\n                .action(ArgAction::SetTrue)\n                .overrides_with(\"no-paging\")\n                .hide(true)\n                .hide_short_help(true)\n                .help(\"Alias for '--paging=never'\")\n            )\n        .arg(\n            Arg::new(\"pager\")\n                .long(\"pager\")\n                .overrides_with(\"pager\")\n                .value_name(\"command\")\n                .hide_short_help(true)\n                .help(\"Determine which pager to use.\")\n                .long_help(\n                    \"Determine which pager is used. This option will override the \\\n                    PAGER and BAT_PAGER environment variables. The default pager is 'less'. \\\n                    If you provide '--pager=builtin', use the built-in 'minus' pager. \\\n                    To control when the pager is used, see the '--paging' option. \\\n                    Example: '--pager \\\"less -RF\\\"'.\"\n                ),\n        )\n        .arg(\n            Arg::new(\"map-syntax\")\n                .short('m')\n                .long(\"map-syntax\")\n                .action(ArgAction::Append)\n                .value_name(\"glob:syntax\")\n                .help(\"Use the specified syntax for files matching the glob pattern ('*.cpp:C++').\")\n                .long_help(\n                    \"Map a glob pattern to an existing syntax name. The glob pattern is matched \\\n                     on the full path and the filename. For example, to highlight *.build files \\\n                     with the Python syntax, use -m '*.build:Python'. To highlight files named \\\n                     '.myignore' with the Git Ignore syntax, use -m '.myignore:Git Ignore'. Note \\\n                     that the right-hand side is the *name* of the syntax, not a file extension.\",\n                )\n        )\n        .arg(\n            Arg::new(\"ignored-suffix\")\n                .action(ArgAction::Append)\n                .long(\"ignored-suffix\")\n                .hide_short_help(true)\n                .help(\n                    \"Ignore extension. For example:\\n  \\\n                    'bat --ignored-suffix \\\".dev\\\" my_file.json.dev' will use JSON syntax, and ignore '.dev'\"\n                )\n        )\n        .arg(\n            Arg::new(\"theme\")\n                .long(\"theme\")\n                .overrides_with(\"theme\")\n                .help(\"Set the color theme for syntax highlighting.\")\n                .long_help(\n                    \"Set the theme for syntax highlighting. Use '--list-themes' to \\\n                     see all available themes. To set a default theme, add the \\\n                     '--theme=\\\"...\\\"' option to the configuration file or export the \\\n                     BAT_THEME environment variable (e.g.: export \\\n                     BAT_THEME=\\\"...\\\").\\n\\n\\\n                     Special values:\\n\\n  \\\n                     * auto: Picks a dark or light theme depending on the terminal's colors (default).\\n          \\\n                     Use '--theme-light' and '--theme-dark' to customize the selected theme.\\n    \\\n                     * auto:always: Detect the terminal's colors even when the output is redirected.\\n    \\\n                     * auto:system: Detect the color scheme from the system-wide preference (macOS only).\\n  \\\n                     * dark: Use the dark theme specified by '--theme-dark'.\\n  \\\n                     * light: Use the light theme specified by '--theme-light'.\",\n                ),\n        )\n        .arg(\n            Arg::new(\"theme-light\")\n                .long(\"theme-light\")\n                .overrides_with(\"theme-light\")\n                .value_name(\"theme\")\n                .help(\"Sets the color theme for syntax highlighting used for light backgrounds.\")\n                .long_help(\n                    \"Sets the theme name for syntax highlighting used when the terminal uses a light background. \\\n                    Use '--list-themes' to see all available themes. To set a default theme, add the \\\n                    '--theme-light=\\\"...\\\" option to the configuration file or export the BAT_THEME_LIGHT \\\n                    environment variable (e.g. export BAT_THEME_LIGHT=\\\"...\\\").\"),\n        )\n        .arg(\n            Arg::new(\"theme-dark\")\n                .long(\"theme-dark\")\n                .overrides_with(\"theme-dark\")\n                .value_name(\"theme\")\n                .help(\"Sets the color theme for syntax highlighting used for dark backgrounds.\")\n                .long_help(\n                    \"Sets the theme name for syntax highlighting used when the terminal uses a dark background. \\\n                    Use '--list-themes' to see all available themes. To set a default theme, add the \\\n                    '--theme-dark=\\\"...\\\" option to the configuration file or export the BAT_THEME_DARK \\\n                    environment variable (e.g. export BAT_THEME_DARK=\\\"...\\\").\"),\n        )\n        .arg(\n            Arg::new(\"list-themes\")\n                .long(\"list-themes\")\n                .action(ArgAction::SetTrue)\n                .help(\"Display all supported highlighting themes.\")\n                .long_help(\"Display a list of supported themes for syntax highlighting.\"),\n        )\n        .arg(\n            Arg::new(\"squeeze-blank\")\n                .long(\"squeeze-blank\")\n                .short('s')\n                .action(ArgAction::SetTrue)\n                .help(\"Squeeze consecutive empty lines.\")\n                .long_help(\"Squeeze consecutive empty lines into a single empty line.\")\n        )\n        .arg(\n            Arg::new(\"squeeze-limit\")\n                .long(\"squeeze-limit\")\n                .value_parser(|s: &str| s.parse::<usize>().map_err(|_| \"Requires a non-negative number\".to_owned()))\n                .long_help(\"Set the maximum number of consecutive empty lines to be printed.\")\n                .hide_short_help(true)\n        )\n        .arg(\n            Arg::new(\"strip-ansi\")\n                .long(\"strip-ansi\")\n                .overrides_with(\"strip-ansi\")\n                .value_name(\"when\")\n                .value_parser([\"auto\", \"always\", \"never\"])\n                .default_value(\"never\")\n                .hide_default_value(true)\n                .help(\"Strip colors from the input (auto, always, *never*)\")\n                .long_help(\"Specify when to strip ANSI escape sequences from the input. \\\n                The automatic mode will remove escape sequences unless the syntax highlighting \\\n                language is plain text. Possible values: auto, always, *never*.\")\n                .hide_short_help(true)\n        )\n        .arg(\n            Arg::new(\"style\")\n                .long(\"style\")\n                .action(ArgAction::Append)\n                .value_name(\"components\")\n                // Cannot use claps built in validation because we have to turn off clap's delimiters\n                .value_parser(|val: &str| {\n                    match StyleComponentList::from_str(val) {\n                        Err(err) => Err(err),\n                        Ok(_) => Ok(val.to_owned()),\n                    }\n                })\n                .help(\n                    \"Comma-separated list of style elements to display \\\n                     (*default*, auto, full, plain, changes, header, header-filename, header-filesize, grid, rule, numbers, snip).\",\n                )\n                .long_help(\n                    \"Configure which elements (line numbers, file headers, grid \\\n                     borders, Git modifications, ..) to display in addition to the \\\n                     file contents. The argument is a comma-separated list of \\\n                     components to display (e.g. 'numbers,changes,grid') or a \\\n                     pre-defined style ('full'). To set a default style, add the \\\n                     '--style=\\\"..\\\"' option to the configuration file or export the \\\n                     BAT_STYLE environment variable (e.g.: export BAT_STYLE=\\\"..\\\").\\n\\n\\\n                     When styles are specified in multiple places, the \\\"nearest\\\" set \\\n                     of styles take precedence. The command-line arguments are the highest \\\n                     priority, followed by the BAT_STYLE environment variable, and then \\\n                     the configuration file. If any set of styles consists entirely of \\\n                     components prefixed with \\\"+\\\" or \\\"-\\\", it will modify the \\\n                     previous set of styles instead of replacing them.\\n\\n\\\n                     By default, the following components are enabled:\\n  \\\n                        changes, grid, header-filename, numbers, snip\\n\\n\\\n                     Possible values:\\n\\n  \\\n                     * default: enables recommended style components (default).\\n  \\\n                     * full: enables all available components.\\n  \\\n                     * auto: same as 'default', unless the output is piped.\\n  \\\n                     * plain: disables all available components.\\n  \\\n                     * changes: show Git modification markers.\\n  \\\n                     * header: alias for 'header-filename'.\\n  \\\n                     * header-filename: show filenames before the content.\\n  \\\n                     * header-filesize: show file sizes before the content.\\n  \\\n                     * grid: vertical/horizontal lines to separate side bar\\n          \\\n                       and the header from the content.\\n  \\\n                     * rule: horizontal lines to delimit files.\\n  \\\n                     * numbers: show line numbers in the side bar.\\n  \\\n                     * snip: draw separation lines between distinct line ranges.\",\n                ),\n        )\n        .arg(\n            Arg::new(\"line-range\")\n                .long(\"line-range\")\n                .short('r')\n                .action(ArgAction::Append)\n                .value_name(\"N:M\")\n                .allow_hyphen_values(true)\n                .help(\"Only print the lines from N to M.\")\n                .long_help(\n                    \"Only print the specified range of lines for each file. \\\n                     For example:\\n  \\\n                     '--line-range 30:40' prints lines 30 to 40\\n  \\\n                     '--line-range :40' prints lines 1 to 40\\n  \\\n                     '--line-range 40:' prints lines 40 to the end of the file\\n  \\\n                     '--line-range 40' only prints line 40\\n  \\\n                     '--line-range -10:' prints the last 10 lines\\n  \\\n                     '--line-range 30:+10' prints lines 30 to 40\\n  \\\n                     '--line-range 35::5' prints lines 30 to 40 (line 35 with 5 lines of context)\\n  \\\n                     '--line-range 30:40:2' prints lines 28 to 42 (range 30-40 with 2 lines of context)\",\n                ),\n        )\n        .arg(\n            Arg::new(\"list-languages\")\n                .long(\"list-languages\")\n                .short('L')\n                .action(ArgAction::SetTrue)\n                .conflicts_with(\"list-themes\")\n                .help(\"Display all supported languages.\")\n                .long_help(\"Display a list of supported languages for syntax highlighting.\"),\n        )\n        .arg(\n            Arg::new(\"unbuffered\")\n                .short('u')\n                .long(\"unbuffered\")\n                .action(ArgAction::SetTrue)\n                .help(\"Enable unbuffered input reading for streaming use cases.\")\n                .long_help(\n                    \"Enable unbuffered input reading. When this flag is set, bat will \\\n                     display data as soon as it is available, without waiting for a \\\n                     complete line. This is useful for streaming use cases like \\\n                     'tail -f logfile | bat -u --paging=never'. Note that line numbers \\\n                     are automatically disabled in unbuffered mode, and syntax \\\n                     highlighting may be imperfect on partial lines.\",\n                ),\n        )\n        .arg(\n            Arg::new(\"no-config\")\n                .long(\"no-config\")\n                .action(ArgAction::SetTrue)\n                .hide(true)\n                .help(\"Do not use the configuration file\"),\n        )\n        .arg(\n            Arg::new(\"no-custom-assets\")\n                .long(\"no-custom-assets\")\n                .action(ArgAction::SetTrue)\n                .hide(true)\n                .help(\"Do not load custom assets\"),\n        );\n\n    #[cfg(feature = \"application\")]\n    {\n        app = app.arg(\n            Arg::new(\"completion\")\n            .long(\"completion\")\n            .value_name(\"SHELL\")\n            .value_parser([\"bash\", \"fish\", \"ps1\", \"zsh\"])\n            .help(\"Show shell completion for a certain shell. [possible values: bash, fish, zsh, ps1]\"),\n        );\n    }\n\n    #[cfg(feature = \"lessopen\")]\n    {\n        app = app\n            .arg(\n                Arg::new(\"lessopen\")\n                    .long(\"lessopen\")\n                    .action(ArgAction::SetTrue)\n                    .help(\"Enable the $LESSOPEN preprocessor\"),\n            )\n            .arg(\n                Arg::new(\"no-lessopen\")\n                    .long(\"no-lessopen\")\n                    .action(ArgAction::SetTrue)\n                    .overrides_with(\"lessopen\")\n                    .hide(true)\n                    .help(\"Disable the $LESSOPEN preprocessor if enabled (overrides --lessopen)\"),\n            )\n    }\n\n    app = app\n        .arg(\n            Arg::new(\"config-file\")\n                .long(\"config-file\")\n                .action(ArgAction::SetTrue)\n                .conflicts_with(\"list-languages\")\n                .conflicts_with(\"list-themes\")\n                .hide(true)\n                .help(\"Show path to the configuration file.\"),\n        )\n        .arg(\n            Arg::new(\"generate-config-file\")\n                .long(\"generate-config-file\")\n                .action(ArgAction::SetTrue)\n                .conflicts_with(\"list-languages\")\n                .conflicts_with(\"list-themes\")\n                .hide(true)\n                .help(\"Generates a default configuration file.\"),\n        )\n        .arg(\n            Arg::new(\"config-dir\")\n                .long(\"config-dir\")\n                .action(ArgAction::SetTrue)\n                .hide(true)\n                .help(\"Show bat's configuration directory.\"),\n        )\n        .arg(\n            Arg::new(\"cache-dir\")\n                .long(\"cache-dir\")\n                .action(ArgAction::SetTrue)\n                .hide(true)\n                .help(\"Show bat's cache directory.\"),\n        )\n        .arg(\n            Arg::new(\"diagnostic\")\n                .long(\"diagnostic\")\n                .alias(\"diagnostics\")\n                .action(ArgAction::SetTrue)\n                .hide_short_help(true)\n                .help(\"Show diagnostic information for bug reports.\"),\n        )\n        .arg(\n            Arg::new(\"quiet-empty\")\n                .long(\"quiet-empty\")\n                .short('E')\n                .action(ArgAction::SetTrue)\n                .help(\"Produce no output when the input is empty.\")\n                .long_help(\n                    \"When this flag is set, bat will produce no output at all when \\\n                     the input is empty. This is useful when piping commands that may \\\n                     produce empty output, like 'git diff'.\",\n                ),\n        )\n        .arg(\n            Arg::new(\"acknowledgements\")\n                .long(\"acknowledgements\")\n                .action(ArgAction::SetTrue)\n                .hide_short_help(true)\n                .help(\"Show acknowledgements.\"),\n        )\n        .arg(\n            Arg::new(\"set-terminal-title\")\n                .long(\"set-terminal-title\")\n                .action(ArgAction::SetTrue)\n                .hide_short_help(true)\n                .help(\"Sets terminal title to filenames when using a pager.\"),\n        )\n        .arg(\n            Arg::new(\"help\")\n                .short('h')\n                .long(\"help\")\n                .action(ArgAction::SetTrue)\n                .help(\"Print help (see more with '--help')\")\n                .long_help(\"Print help (see a summary with '-h')\"),\n        )\n        .arg(\n            Arg::new(\"version\")\n                .long(\"version\")\n                .short('V')\n                .action(ArgAction::Version)\n                .help(\"Print version\"),\n        );\n\n    // Check if the current directory contains a file name cache. Otherwise,\n    // enable the 'bat cache' subcommand.\n    if Path::new(\"cache\").exists() {\n        app\n    } else {\n        app.subcommand(\n            Command::new(\"cache\")\n                .hide(true)\n                .about(\"Modify the syntax-definition and theme cache\")\n                .arg_required_else_help(true)\n                .arg(\n                    Arg::new(\"help\")\n                        .short('h')\n                        .long(\"help\")\n                        .action(ArgAction::Help)\n                        .help(\"Print help\"),\n                )\n                .arg(\n                    Arg::new(\"build\")\n                        .long(\"build\")\n                        .short('b')\n                        .action(ArgAction::SetTrue)\n                        .conflicts_with(\"clear\")\n                        .help(\"Initialize (or update) the syntax/theme cache.\")\n                        .long_help(\n                            \"Initialize (or update) the syntax/theme cache by loading from \\\n                             the source directory (default: the configuration directory).\",\n                        ),\n                )\n                .arg(\n                    Arg::new(\"clear\")\n                        .long(\"clear\")\n                        .short('c')\n                        .action(ArgAction::SetTrue)\n                        .conflicts_with(\"build\")\n                        .help(\"Remove the cached syntax definitions and themes.\"),\n                )\n                .arg(\n                    Arg::new(\"source\")\n                        .long(\"source\")\n                        .requires(\"build\")\n                        .value_name(\"dir\")\n                        .help(\"Use a different directory to load syntaxes and themes from.\"),\n                )\n                .arg(\n                    Arg::new(\"target\")\n                        .long(\"target\")\n                        .requires(\"build\")\n                        .value_name(\"dir\")\n                        .help(\n                            \"Use a different directory to store the cached syntax and theme set.\",\n                        ),\n                )\n                .arg(\n                    Arg::new(\"blank\")\n                        .long(\"blank\")\n                        .action(ArgAction::SetTrue)\n                        .requires(\"build\")\n                        .help(\n                            \"Create completely new syntax and theme sets \\\n                             (instead of appending to the default sets).\",\n                        ),\n                )\n                .arg(\n                    Arg::new(\"acknowledgements\")\n                        .long(\"acknowledgements\")\n                        .action(ArgAction::SetTrue)\n                        .requires(\"build\")\n                        .help(\"Build acknowledgements.bin.\"),\n                ),\n        )\n        .after_long_help(\n            \"You can use 'bat cache' to customize syntaxes and themes. \\\n            See 'bat cache --help' for more information\",\n        )\n    }\n}\n\n#[test]\nfn verify_app() {\n    build_app(false).debug_assert();\n}\n"
  },
  {
    "path": "src/bin/bat/completions.rs",
    "content": "use std::env;\n\npub const BASH_COMPLETION: &str = include_str!(env!(\"BAT_GENERATED_COMPLETION_BASH\"));\npub const FISH_COMPLETION: &str = include_str!(env!(\"BAT_GENERATED_COMPLETION_FISH\"));\npub const PS1_COMPLETION: &str = include_str!(env!(\"BAT_GENERATED_COMPLETION_PS1\"));\npub const ZSH_COMPLETION: &str = include_str!(env!(\"BAT_GENERATED_COMPLETION_ZSH\"));\n"
  },
  {
    "path": "src/bin/bat/config.rs",
    "content": "use std::env;\nuse std::ffi::OsString;\nuse std::fs;\nuse std::io::{self, Write};\nuse std::path::{Path, PathBuf};\n\nuse crate::directories::PROJECT_DIRS;\n\n#[cfg(not(target_os = \"windows\"))]\nconst DEFAULT_SYSTEM_CONFIG_PREFIX: &str = \"/etc\";\n\n#[cfg(target_os = \"windows\")]\nconst DEFAULT_SYSTEM_CONFIG_PREFIX: &str = \"C:\\\\ProgramData\";\n\npub fn system_config_file() -> PathBuf {\n    let folder = option_env!(\"BAT_SYSTEM_CONFIG_PREFIX\").unwrap_or(DEFAULT_SYSTEM_CONFIG_PREFIX);\n    let mut path = PathBuf::from(folder);\n\n    path.push(\"bat\");\n    path.push(\"config\");\n\n    path\n}\n\npub fn config_file() -> PathBuf {\n    env::var(\"BAT_CONFIG_PATH\")\n        .ok()\n        .map(PathBuf::from)\n        .unwrap_or_else(|| PROJECT_DIRS.config_dir().join(\"config\"))\n}\n\npub fn generate_config_file() -> bat::error::Result<()> {\n    let config_file = config_file();\n    if config_file.is_file() {\n        println!(\n            \"A config file already exists at: {}\",\n            config_file.to_string_lossy()\n        );\n\n        print!(\"Overwrite? (y/N): \");\n        io::stdout().flush()?;\n        let mut decision = String::new();\n        io::stdin().read_line(&mut decision)?;\n\n        if !decision.trim().eq_ignore_ascii_case(\"Y\") {\n            return Ok(());\n        }\n    } else {\n        let config_dir = config_file.parent();\n        match config_dir {\n            Some(path) => fs::create_dir_all(path)?,\n            None => {\n                return Err(format!(\n                    \"Unable to write config file to: {}\",\n                    config_file.to_string_lossy()\n                )\n                .into());\n            }\n        }\n    }\n\n    let default_config = r#\"# This is `bat`s configuration file. Each line either contains a comment or\n# a command-line option that you want to pass to `bat` by default. You can\n# run `bat --help` to get a list of all possible configuration options.\n\n# Specify desired highlighting theme (e.g. \"TwoDark\"). Run `bat --list-themes`\n# for a list of all available themes\n#--theme=\"TwoDark\"\n\n# Enable this to use italic text on the terminal. This is not supported on all\n# terminal emulators (like tmux, by default):\n#--italic-text=always\n\n# Uncomment the following line to disable automatic paging:\n#--paging=never\n\n# Uncomment the following line if you are using less version >= 551 and want to\n# enable mouse scrolling support in `bat` when running inside tmux. This might\n# disable text selection, unless you press shift.\n#--pager=\"less --RAW-CONTROL-CHARS --quit-if-one-screen --mouse\"\n\n# Syntax mappings: map a certain filename pattern to a language.\n#   Example 1: use the C++ syntax for Arduino .ino files\n#   Example 2: Use \".gitignore\"-style highlighting for \".ignore\" files\n#--map-syntax \"*.ino:C++\"\n#--map-syntax \".ignore:Git Ignore\"\n\"#;\n\n    fs::write(&config_file, default_config).map_err(|e| {\n        format!(\n            \"Failed to create config file at '{}': {e}\",\n            config_file.to_string_lossy(),\n        )\n    })?;\n\n    println!(\n        \"Success! Config file written to {}\",\n        config_file.to_string_lossy()\n    );\n\n    Ok(())\n}\n\npub fn get_args_from_config_file() -> Result<Vec<OsString>, shell_words::ParseError> {\n    let mut config = String::new();\n\n    let system_config = system_config_file();\n    let user_config = config_file();\n\n    if let Ok(c) = fs::read_to_string(&system_config) {\n        config.push_str(&c);\n        config.push('\\n');\n    }\n\n    // Skip the user config if it resolves to the same file as the system config,\n    // which can happen when BAT_CONFIG_DIR is set to e.g. \"/etc/bat\". See #3589.\n    if !same_file(&system_config, &user_config) {\n        if let Ok(c) = fs::read_to_string(&user_config) {\n            config.push_str(&c);\n        }\n    }\n\n    get_args_from_str(&config)\n}\n\nfn same_file(a: &Path, b: &Path) -> bool {\n    match (fs::canonicalize(a), fs::canonicalize(b)) {\n        (Ok(a), Ok(b)) => a == b,\n        _ => a == b,\n    }\n}\n\npub fn get_args_from_env_opts_var() -> Option<Result<Vec<OsString>, shell_words::ParseError>> {\n    env::var(\"BAT_OPTS\").ok().map(|s| get_args_from_str(&s))\n}\n\nfn get_args_from_str(content: &str) -> Result<Vec<OsString>, shell_words::ParseError> {\n    let args_per_line = content\n        .split('\\n')\n        .map(|line| line.trim())\n        .filter(|line| !line.is_empty())\n        .filter(|line| !line.starts_with('#'))\n        .map(shell_words::split)\n        .collect::<Result<Vec<_>, _>>()?;\n\n    Ok(args_per_line\n        .iter()\n        .flatten()\n        .map(|line| line.into())\n        .collect())\n}\n\npub fn get_args_from_env_vars() -> Vec<OsString> {\n    [\n        (\"--tabs\", \"BAT_TABS\"),\n        (\"--theme\", bat::theme::env::BAT_THEME),\n        (\"--theme-dark\", bat::theme::env::BAT_THEME_DARK),\n        (\"--theme-light\", bat::theme::env::BAT_THEME_LIGHT),\n        (\"--pager\", \"BAT_PAGER\"),\n        (\"--paging\", \"BAT_PAGING\"),\n        (\"--style\", \"BAT_STYLE\"),\n    ]\n    .iter()\n    .filter_map(|(flag, key)| {\n        env::var(key)\n            .ok()\n            .map(|var| [flag.to_string(), var].join(\"=\"))\n    })\n    .map(|a| a.into())\n    .collect()\n}\n\n#[test]\nfn empty() {\n    let args = get_args_from_str(\"\").unwrap();\n    assert!(args.is_empty());\n}\n\n#[test]\nfn single() {\n    assert_eq!(vec![\"--plain\"], get_args_from_str(\"--plain\").unwrap());\n}\n\n#[test]\nfn multiple() {\n    assert_eq!(\n        vec![\"--plain\", \"--language=cpp\"],\n        get_args_from_str(\"--plain --language=cpp\").unwrap()\n    );\n}\n\n#[test]\nfn quotes() {\n    assert_eq!(\n        vec![\"--theme\", \"Sublime Snazzy\"],\n        get_args_from_str(\"--theme \\\"Sublime Snazzy\\\"\").unwrap()\n    );\n}\n\n#[test]\nfn multi_line() {\n    let config = \"\n    -p\n    --style numbers,changes\n\n    --color=always\n    \";\n    assert_eq!(\n        vec![\"-p\", \"--style\", \"numbers,changes\", \"--color=always\"],\n        get_args_from_str(config).unwrap()\n    );\n}\n\n#[test]\nfn comments() {\n    let config = \"\n    # plain style\n    -p\n\n    # show line numbers and Git modifications\n    --style numbers,changes\n\n    # Always show ANSI colors\n    --color=always\n    \";\n    assert_eq!(\n        vec![\"-p\", \"--style\", \"numbers,changes\", \"--color=always\"],\n        get_args_from_str(config).unwrap()\n    );\n}\n\n#[test]\nfn same_file_identical_paths() {\n    let dir = tempfile::tempdir().unwrap();\n    let file = dir.path().join(\"config\");\n    fs::write(&file, \"\").unwrap();\n    assert!(same_file(&file, &file));\n}\n\n#[test]\nfn same_file_different_paths() {\n    let dir = tempfile::tempdir().unwrap();\n    let a = dir.path().join(\"a\");\n    let b = dir.path().join(\"b\");\n    fs::write(&a, \"\").unwrap();\n    fs::write(&b, \"\").unwrap();\n    assert!(!same_file(&a, &b));\n}\n\n#[test]\nfn same_file_nonexistent() {\n    let dir = tempfile::tempdir().unwrap();\n    let a = dir.path().join(\"a\");\n    let b = dir.path().join(\"b\");\n    assert!(!same_file(&a, &b));\n}\n\n#[cfg(unix)]\n#[test]\nfn same_file_via_symlink() {\n    let dir = tempfile::tempdir().unwrap();\n    let original = dir.path().join(\"config\");\n    let link = dir.path().join(\"link\");\n    fs::write(&original, \"\").unwrap();\n    std::os::unix::fs::symlink(&original, &link).unwrap();\n    assert!(same_file(&original, &link));\n}\n"
  },
  {
    "path": "src/bin/bat/directories.rs",
    "content": "use std::env;\nuse std::path::{Path, PathBuf};\n\nuse etcetera::BaseStrategy;\nuse once_cell::sync::Lazy;\n\n/// Wrapper for 'etcetera' that checks BAT_CACHE_PATH and BAT_CONFIG_DIR and falls back to the\n/// Windows known folder locations on Windows & the XDG Base Directory Specification everywhere else.\npub struct BatProjectDirs {\n    cache_dir: PathBuf,\n    config_dir: PathBuf,\n}\n\nimpl BatProjectDirs {\n    fn new() -> Option<BatProjectDirs> {\n        let basedirs = etcetera::choose_base_strategy().ok()?;\n\n        // Checks whether or not `$BAT_CACHE_PATH` exists. If it doesn't, set the cache dir to our\n        // system's default cache home.\n        let cache_dir = if let Some(cache_dir) = env::var_os(\"BAT_CACHE_PATH\").map(PathBuf::from) {\n            cache_dir\n        } else {\n            basedirs.cache_dir().join(\"bat\")\n        };\n\n        // Checks whether or not `$BAT_CONFIG_DIR` exists. If it doesn't, set the config dir to our\n        // system's default configuration home.\n        let config_dir = if let Some(config_dir) = env::var_os(\"BAT_CONFIG_DIR\").map(PathBuf::from)\n        {\n            config_dir\n        } else {\n            basedirs.config_dir().join(\"bat\")\n        };\n\n        Some(BatProjectDirs {\n            cache_dir,\n            config_dir,\n        })\n    }\n\n    pub fn cache_dir(&self) -> &Path {\n        &self.cache_dir\n    }\n\n    pub fn config_dir(&self) -> &Path {\n        &self.config_dir\n    }\n}\n\npub static PROJECT_DIRS: Lazy<BatProjectDirs> =\n    Lazy::new(|| BatProjectDirs::new().expect(\"Could not get home directory\"));\n"
  },
  {
    "path": "src/bin/bat/input.rs",
    "content": "use bat::input::Input;\nuse std::path::Path;\n\npub fn new_file_input<'a>(file: &'a Path, name: Option<&'a Path>) -> Input<'a> {\n    named(Input::ordinary_file(file), name.or(Some(file)))\n}\n\npub fn new_stdin_input(name: Option<&Path>) -> Input<'_> {\n    named(Input::stdin(), name)\n}\n\nfn named<'a>(input: Input<'a>, name: Option<&Path>) -> Input<'a> {\n    if let Some(provided_name) = name {\n        let mut input = input.with_name(Some(provided_name));\n        input.description_mut().set_kind(Some(\"File\".to_owned()));\n        input\n    } else {\n        input\n    }\n}\n"
  },
  {
    "path": "src/bin/bat/main.rs",
    "content": "#![deny(unsafe_code)]\n\nmod app;\nmod assets;\nmod clap_app;\n#[cfg(feature = \"application\")]\nmod completions;\nmod config;\nmod directories;\nmod input;\n\nuse std::collections::{HashMap, HashSet};\nuse std::fmt::Write as _;\nuse std::io;\nuse std::io::{BufReader, Write};\nuse std::path::Path;\nuse std::process;\n\nuse bat::output::{OutputHandle, OutputType};\nuse bat::theme::DetectColorScheme;\nuse nu_ansi_term::Color::Green;\nuse nu_ansi_term::Style;\n\nuse crate::{\n    app::App,\n    config::{config_file, generate_config_file},\n};\n\n#[cfg(feature = \"bugreport\")]\nuse crate::config::system_config_file;\n\nuse assets::{assets_from_cache_or_binary, clear_assets};\nuse directories::PROJECT_DIRS;\nuse globset::GlobMatcher;\n\nuse bat::{\n    config::Config,\n    controller::Controller,\n    error::*,\n    input::Input,\n    style::{StyleComponent, StyleComponents},\n    theme::{color_scheme, default_theme, ColorScheme},\n    MappingTarget, PagingMode,\n};\n\nconst THEME_PREVIEW_DATA: &[u8] = include_bytes!(\"../../../assets/theme_preview.rs\");\n\n#[cfg(feature = \"build-assets\")]\nfn build_assets(matches: &clap::ArgMatches, config_dir: &Path, cache_dir: &Path) -> Result<()> {\n    let source_dir = matches\n        .get_one::<String>(\"source\")\n        .map(Path::new)\n        .unwrap_or_else(|| config_dir);\n\n    bat::assets::build(\n        source_dir,\n        !matches.get_flag(\"blank\"),\n        matches.get_flag(\"acknowledgements\"),\n        cache_dir,\n        clap::crate_version!(),\n    )\n}\n\nfn run_cache_subcommand(\n    matches: &clap::ArgMatches,\n    #[cfg(feature = \"build-assets\")] config_dir: &Path,\n    default_cache_dir: &Path,\n) -> Result<()> {\n    let cache_dir = matches\n        .get_one::<String>(\"target\")\n        .map(Path::new)\n        .unwrap_or_else(|| default_cache_dir);\n\n    if matches.get_flag(\"build\") {\n        #[cfg(feature = \"build-assets\")]\n        build_assets(matches, config_dir, cache_dir)?;\n        #[cfg(not(feature = \"build-assets\"))]\n        println!(\"bat has been built without the 'build-assets' feature. The 'cache --build' option is not available.\");\n    } else if matches.get_flag(\"clear\") {\n        clear_assets(cache_dir);\n    }\n\n    Ok(())\n}\n\nfn get_syntax_mapping_to_paths<'r, 't, I>(mappings: I) -> HashMap<&'t str, Vec<String>>\nwhere\n    I: IntoIterator<Item = (&'r GlobMatcher, &'r MappingTarget<'t>)>,\n    't: 'r, // target text outlives rule\n{\n    let mut map = HashMap::new();\n    for mapping in mappings {\n        if let (matcher, MappingTarget::MapTo(s)) = mapping {\n            let globs = map.entry(*s).or_insert_with(Vec::new);\n            globs.push(matcher.glob().glob().into());\n        }\n    }\n    map\n}\n\npub fn get_languages(config: &Config, cache_dir: &Path) -> Result<String> {\n    let mut result: String = String::new();\n\n    let assets = assets_from_cache_or_binary(config.use_custom_assets, cache_dir)?;\n    let mut languages = assets\n        .get_syntaxes()?\n        .iter()\n        .filter(|syntax| !syntax.hidden && !syntax.file_extensions.is_empty())\n        .cloned()\n        .collect::<Vec<_>>();\n\n    // Handling of file-extension conflicts, see issue #1076\n    for lang in &mut languages {\n        let lang_name = lang.name.clone();\n        lang.file_extensions.retain(|extension| {\n            // The 'extension' variable is not certainly a real extension.\n            //\n            // Skip if 'extension' starts with '.', likely a hidden file like '.vimrc'\n            // Also skip if the 'extension' contains another real extension, likely\n            // that is a full match file name like 'CMakeLists.txt' and 'Cargo.lock'\n            if extension.starts_with('.') || Path::new(extension).extension().is_some() {\n                return true;\n            }\n\n            let test_file = Path::new(\"test\").with_extension(extension);\n            let syntax_in_set = assets.get_syntax_for_path(test_file, &config.syntax_mapping);\n            matches!(syntax_in_set, Ok(syntax_in_set) if syntax_in_set.syntax.name == lang_name)\n        });\n    }\n\n    languages.sort_by_key(|lang| lang.name.to_uppercase());\n\n    let configured_languages = get_syntax_mapping_to_paths(config.syntax_mapping.all_mappings());\n\n    for lang in &mut languages {\n        if let Some(additional_paths) = configured_languages.get(lang.name.as_str()) {\n            lang.file_extensions\n                .extend(additional_paths.iter().cloned());\n        }\n    }\n\n    if config.loop_through {\n        for lang in languages {\n            writeln!(result, \"{}:{}\", lang.name, lang.file_extensions.join(\",\")).ok();\n        }\n    } else {\n        let longest = languages\n            .iter()\n            .map(|syntax| syntax.name.len())\n            .max()\n            .unwrap_or(32); // Fallback width if they have no language definitions.\n\n        let comma_separator = \", \";\n        let separator = \" \";\n        // Line-wrapping for the possible file extension overflow.\n        let desired_width = config.term_width - longest - separator.len();\n\n        let style = if config.colored_output {\n            Green.normal()\n        } else {\n            Style::default()\n        };\n\n        for lang in languages {\n            write!(result, \"{:width$}{separator}\", lang.name, width = longest).ok();\n\n            // Number of characters on this line so far, wrap before `desired_width`\n            let mut num_chars = 0;\n\n            let mut extension = lang.file_extensions.iter().peekable();\n            while let Some(word) = extension.next() {\n                // If we can't fit this word in, then create a line break and align it in.\n                let new_chars = word.len() + comma_separator.len();\n                if num_chars + new_chars >= desired_width {\n                    num_chars = 0;\n                    write!(result, \"\\n{:width$}{separator}\", \"\", width = longest).ok();\n                }\n\n                num_chars += new_chars;\n                write!(result, \"{}\", style.paint(&word[..])).ok();\n                if extension.peek().is_some() {\n                    result += comma_separator;\n                }\n            }\n            result += \"\\n\";\n        }\n    }\n\n    Ok(result)\n}\n\nfn theme_preview_file<'a>() -> Input<'a> {\n    Input::from_reader(Box::new(BufReader::new(THEME_PREVIEW_DATA)))\n}\n\npub fn list_themes(\n    cfg: &Config,\n    config_dir: &Path,\n    cache_dir: &Path,\n    detect_color_scheme: DetectColorScheme,\n) -> Result<()> {\n    let assets = assets_from_cache_or_binary(cfg.use_custom_assets, cache_dir)?;\n    let mut config = cfg.clone();\n    let mut style = HashSet::new();\n    style.insert(StyleComponent::Plain);\n    config.language = Some(\"Rust\");\n    config.style_components = StyleComponents(style);\n\n    let default_theme_name = default_theme(color_scheme(detect_color_scheme).unwrap_or_default());\n    let mut buf = String::new();\n    let mut handle = OutputHandle::FmtWrite(&mut buf);\n\n    for theme in assets.themes() {\n        let default_theme_info = if default_theme_name == theme {\n            \" (default)\"\n        } else if default_theme(ColorScheme::Dark) == theme {\n            \" (default dark)\"\n        } else if default_theme(ColorScheme::Light) == theme {\n            \" (default light)\"\n        } else {\n            \"\"\n        };\n\n        if config.colored_output {\n            handle.write_fmt(format_args!(\n                \"{}{default_theme_info}\\n\\n\",\n                Style::new().bold().paint(theme.to_string()),\n            ))?;\n            config.theme = theme.to_string();\n            Controller::new(&config, &assets)\n                .run(vec![theme_preview_file()], Some(&mut handle))\n                .ok();\n            handle.write_fmt(format_args!(\"\\n\"))?;\n        } else if config.loop_through {\n            handle.write_fmt(format_args!(\"{theme}\\n\"))?;\n        } else {\n            handle.write_fmt(format_args!(\"{theme}{default_theme_info}\\n\"))?;\n        }\n    }\n\n    if config.colored_output {\n        handle.write_fmt(format_args!(\n            \"Further themes can be installed to '{}', \\\n            and are added to the cache with `bat cache --build`. \\\n            For more information, see:\\n\\n  \\\n            https://github.com/sharkdp/bat#adding-new-themes\",\n            config_dir.join(\"themes\").to_string_lossy()\n        ))?;\n    }\n\n    let mut output_type =\n        OutputType::from_mode(config.paging_mode, config.wrapping_mode, config.pager)?;\n    let mut writer = output_type.handle()?;\n    writer.write_fmt(format_args!(\"{buf}\"))?;\n\n    Ok(())\n}\n\nfn set_terminal_title_to(new_terminal_title: String) {\n    let osc_command_for_setting_terminal_title = \"\\x1b]0;\";\n    let osc_end_command = \"\\x07\";\n    print!(\"{osc_command_for_setting_terminal_title}{new_terminal_title}{osc_end_command}\");\n    io::stdout().flush().unwrap();\n}\n\nfn get_new_terminal_title(inputs: &Vec<Input>) -> String {\n    let mut new_terminal_title = \"bat: \".to_string();\n    for (index, input) in inputs.iter().enumerate() {\n        new_terminal_title += input.description().title();\n        if index < inputs.len() - 1 {\n            new_terminal_title += \", \";\n        }\n    }\n    new_terminal_title\n}\n\nfn run_controller(inputs: Vec<Input>, config: &Config, cache_dir: &Path) -> Result<bool> {\n    let assets = assets_from_cache_or_binary(config.use_custom_assets, cache_dir)?;\n    let controller = Controller::new(config, &assets);\n    if config.paging_mode != PagingMode::Never && config.set_terminal_title {\n        set_terminal_title_to(get_new_terminal_title(&inputs));\n    }\n    controller.run(inputs, None)\n}\n\n#[cfg(feature = \"bugreport\")]\nfn invoke_bugreport(app: &App, cache_dir: &Path) {\n    use bugreport::{bugreport, collector::*, format::Markdown};\n    let pager = bat::config::get_pager_executable(\n        app.matches.get_one::<String>(\"pager\").map(|s| s.as_str()),\n    )\n    .unwrap_or_else(|| \"less\".to_owned()); // FIXME: Avoid non-canonical path to \"less\".\n\n    let mut custom_assets_metadata = cache_dir.to_path_buf();\n    custom_assets_metadata.push(\"metadata.yaml\");\n\n    let mut report = bugreport!()\n        .info(SoftwareVersion::default())\n        .info(OperatingSystem::default())\n        .info(CommandLine::default())\n        .info(EnvironmentVariables::list(&[\n            \"BAT_CACHE_PATH\",\n            \"BAT_CONFIG_PATH\",\n            \"BAT_OPTS\",\n            \"BAT_PAGER\",\n            \"BAT_PAGING\",\n            \"BAT_STYLE\",\n            \"BAT_TABS\",\n            \"BAT_THEME\",\n            \"COLORTERM\",\n            \"LANG\",\n            \"LC_ALL\",\n            \"LESS\",\n            \"MANPAGER\",\n            \"NO_COLOR\",\n            \"PAGER\",\n            \"SHELL\",\n            \"TERM\",\n            \"XDG_CACHE_HOME\",\n            \"XDG_CONFIG_HOME\",\n        ]))\n        .info(FileContent::new(\"System Config file\", system_config_file()))\n        .info(FileContent::new(\"Config file\", config_file()))\n        .info(FileContent::new(\n            \"Custom assets metadata\",\n            custom_assets_metadata,\n        ))\n        .info(DirectoryEntries::new(\"Custom assets\", cache_dir))\n        .info(CompileTimeInformation::default());\n\n    #[cfg(feature = \"paging\")]\n    if let Ok(resolved_path) = grep_cli::resolve_binary(pager) {\n        report = report.info(CommandOutput::new(\n            \"Less version\",\n            resolved_path,\n            &[\"--version\"],\n        ))\n    };\n\n    report.print::<Markdown>();\n}\n\n/// Returns `Err(..)` upon fatal errors. Otherwise, returns `Ok(true)` on full success and\n/// `Ok(false)` if any intermediate errors occurred (were printed).\nfn run() -> Result<bool> {\n    let app = App::new()?;\n    let config_dir = PROJECT_DIRS.config_dir();\n    let cache_dir = PROJECT_DIRS.cache_dir();\n\n    if app.matches.get_flag(\"diagnostic\") {\n        #[cfg(feature = \"bugreport\")]\n        invoke_bugreport(&app, cache_dir);\n        #[cfg(not(feature = \"bugreport\"))]\n        println!(\"bat has been built without the 'bugreport' feature. The '--diagnostic' option is not available.\");\n        return Ok(true);\n    }\n\n    #[cfg(feature = \"application\")]\n    if let Some(shell) = app.matches.get_one::<String>(\"completion\") {\n        match shell.as_str() {\n            \"bash\" => println!(\"{}\", completions::BASH_COMPLETION),\n            \"fish\" => println!(\"{}\", completions::FISH_COMPLETION),\n            \"ps1\" => println!(\"{}\", completions::PS1_COMPLETION),\n            \"zsh\" => println!(\"{}\", completions::ZSH_COMPLETION),\n            _ => unreachable!(\"No completion for shell '{shell}' available.\"),\n        }\n        return Ok(true);\n    }\n\n    match app.matches.subcommand() {\n        Some((\"cache\", cache_matches)) => {\n            // If there is a file named 'cache' in the current working directory,\n            // arguments for subcommand 'cache' are not mandatory.\n            // If there are non-zero arguments, execute the subcommand cache, else, open the file cache.\n            if cache_matches.args_present() {\n                run_cache_subcommand(\n                    cache_matches,\n                    #[cfg(feature = \"build-assets\")]\n                    config_dir,\n                    cache_dir,\n                )?;\n                Ok(true)\n            } else {\n                let inputs = vec![Input::ordinary_file(\"cache\")];\n                let config = app.config(&inputs)?;\n\n                run_controller(inputs, &config, cache_dir)\n            }\n        }\n        _ => {\n            let inputs = app.inputs()?;\n            let config = app.config(&inputs)?;\n\n            if app.matches.get_flag(\"list-languages\") {\n                let languages: String = get_languages(&config, cache_dir)?;\n                let inputs: Vec<Input> = vec![Input::from_reader(Box::new(languages.as_bytes()))];\n                let plain_config = Config {\n                    style_components: StyleComponents::new(StyleComponent::Plain.components(false)),\n                    paging_mode: PagingMode::QuitIfOneScreen,\n                    ..Default::default()\n                };\n                run_controller(inputs, &plain_config, cache_dir)\n            } else if app.matches.get_flag(\"list-themes\") {\n                list_themes(&config, config_dir, cache_dir, DetectColorScheme::default())?;\n                Ok(true)\n            } else if app.matches.get_flag(\"config-file\") {\n                println!(\"{}\", config_file().to_string_lossy());\n                Ok(true)\n            } else if app.matches.get_flag(\"generate-config-file\") {\n                generate_config_file()?;\n                Ok(true)\n            } else if app.matches.get_flag(\"config-dir\") {\n                writeln!(io::stdout(), \"{}\", config_dir.to_string_lossy())?;\n                Ok(true)\n            } else if app.matches.get_flag(\"cache-dir\") {\n                writeln!(io::stdout(), \"{}\", cache_dir.to_string_lossy())?;\n                Ok(true)\n            } else if app.matches.get_flag(\"acknowledgements\") {\n                writeln!(io::stdout(), \"{}\", bat::assets::get_acknowledgements())?;\n                Ok(true)\n            } else {\n                run_controller(inputs, &config, cache_dir)\n            }\n        }\n    }\n}\n\nfn main() {\n    let result = run();\n\n    match result {\n        Err(error) => {\n            let stderr = std::io::stderr();\n            default_error_handler(&error, &mut stderr.lock());\n            process::exit(1);\n        }\n        Ok(false) => {\n            process::exit(1);\n        }\n        Ok(true) => {\n            process::exit(0);\n        }\n    }\n}\n"
  },
  {
    "path": "src/config.rs",
    "content": "use crate::line_range::{HighlightedLineRanges, LineRanges};\nuse crate::nonprintable_notation::{BinaryBehavior, NonprintableNotation};\n#[cfg(feature = \"paging\")]\nuse crate::paging::PagingMode;\nuse crate::style::StyleComponents;\nuse crate::syntax_mapping::SyntaxMapping;\nuse crate::wrapping::WrappingMode;\nuse crate::StripAnsiMode;\n\n#[derive(Debug, Clone)]\npub enum VisibleLines {\n    /// Show all lines which are included in the line ranges\n    Ranges(LineRanges),\n\n    #[cfg(feature = \"git\")]\n    /// Only show lines surrounding added/deleted/modified lines\n    DiffContext(usize),\n}\n\nimpl VisibleLines {\n    pub fn diff_mode(&self) -> bool {\n        match self {\n            Self::Ranges(_) => false,\n            #[cfg(feature = \"git\")]\n            Self::DiffContext(_) => true,\n        }\n    }\n}\n\nimpl Default for VisibleLines {\n    fn default() -> Self {\n        VisibleLines::Ranges(LineRanges::default())\n    }\n}\n\n#[derive(Debug, Clone, Default)]\npub struct Config<'a> {\n    /// The explicitly configured language, if any\n    pub language: Option<&'a str>,\n\n    /// The fallback syntax used when auto-detection fails\n    pub fallback_syntax: Option<&'a str>,\n\n    /// Whether or not to show/replace non-printable characters like space, tab and newline.\n    pub show_nonprintable: bool,\n\n    /// The configured notation for non-printable characters\n    pub nonprintable_notation: NonprintableNotation,\n\n    /// How to treat binary content\n    pub binary: BinaryBehavior,\n\n    /// The character width of the terminal\n    pub term_width: usize,\n\n    /// The width of tab characters.\n    /// Currently, a value of 0 will cause tabs to be passed through without expanding them.\n    pub tab_width: usize,\n\n    /// Whether or not to simply loop through all input (`cat` mode)\n    pub loop_through: bool,\n\n    /// Whether or not the output should be colorized\n    pub colored_output: bool,\n\n    /// Whether or not the output terminal supports true color\n    pub true_color: bool,\n\n    /// Style elements (grid, line numbers, ...)\n    pub style_components: StyleComponents,\n\n    /// If and how text should be wrapped\n    pub wrapping_mode: WrappingMode,\n\n    /// Pager or STDOUT\n    #[cfg(feature = \"paging\")]\n    pub paging_mode: PagingMode,\n\n    /// Specifies which lines should be printed\n    pub visible_lines: VisibleLines,\n\n    /// The syntax highlighting theme\n    pub theme: String,\n\n    /// File extension/name mappings\n    pub syntax_mapping: SyntaxMapping<'a>,\n\n    /// Command to start the pager\n    pub pager: Option<&'a str>,\n\n    /// Whether or not to use ANSI italics\n    pub use_italic_text: bool,\n\n    /// Ranges of lines which should be highlighted with a special background color\n    pub highlighted_lines: HighlightedLineRanges,\n\n    /// Whether or not to allow custom assets. If this is false or if custom assets (a.k.a.\n    /// cached assets) are not available, assets from the binary will be used instead.\n    pub use_custom_assets: bool,\n\n    // Whether or not to use $LESSOPEN if set\n    #[cfg(feature = \"lessopen\")]\n    pub use_lessopen: bool,\n\n    // Whether or not to set terminal title when using a pager\n    pub set_terminal_title: bool,\n\n    /// The maximum number of consecutive empty lines to display\n    pub squeeze_lines: Option<usize>,\n\n    // Whether or not to strip ANSI escape codes from the input\n    pub strip_ansi: StripAnsiMode,\n\n    /// Whether or not to produce no output when input is empty\n    pub quiet_empty: bool,\n\n    /// Whether or not to use unbuffered input reading for streaming use cases\n    pub unbuffered: bool,\n}\n\n#[cfg(all(feature = \"minimal-application\", feature = \"paging\"))]\npub fn get_pager_executable(config_pager: Option<&str>) -> Option<String> {\n    crate::pager::get_pager(config_pager)\n        .ok()\n        .flatten()\n        .and_then(|pager| {\n            if pager.kind != crate::pager::PagerKind::Builtin {\n                Some(pager.bin)\n            } else {\n                None\n            }\n        })\n}\n\n#[test]\nfn default_config_should_include_all_lines() {\n    use crate::line_range::MaxBufferedLineNumber;\n    use crate::line_range::RangeCheckResult;\n\n    assert_eq!(\n        LineRanges::default().check(17, MaxBufferedLineNumber::Tentative(17)),\n        RangeCheckResult::InRange\n    );\n}\n\n#[test]\nfn default_config_should_highlight_no_lines() {\n    use crate::line_range::MaxBufferedLineNumber;\n    use crate::line_range::RangeCheckResult;\n\n    assert_ne!(\n        Config::default()\n            .highlighted_lines\n            .0\n            .check(17, MaxBufferedLineNumber::Tentative(17)),\n        RangeCheckResult::InRange\n    );\n}\n\n#[cfg(all(feature = \"minimal-application\", feature = \"paging\"))]\n#[test]\nfn get_pager_executable_with_config_pager_less() {\n    let result = get_pager_executable(Some(\"less\"));\n    assert_eq!(result, Some(\"less\".to_string()));\n}\n\n#[cfg(all(feature = \"minimal-application\", feature = \"paging\"))]\n#[test]\nfn get_pager_executable_with_config_pager_builtin() {\n    let result = get_pager_executable(Some(\"builtin\"));\n    assert_eq!(result, None);\n}\n\n#[cfg(all(feature = \"minimal-application\", feature = \"paging\"))]\n#[test]\nfn get_pager_executable_with_config_pager_more() {\n    let result = get_pager_executable(Some(\"more\"));\n    assert_eq!(result, Some(\"more\".to_string()));\n}\n\n#[cfg(all(feature = \"minimal-application\", feature = \"paging\"))]\n#[test]\nfn get_pager_executable_with_bat_pager() {\n    std::env::set_var(\"BAT_PAGER\", \"most\");\n    let result = get_pager_executable(None);\n    assert_eq!(result, Some(\"most\".to_string()));\n    std::env::remove_var(\"BAT_PAGER\");\n}\n\n#[cfg(all(feature = \"minimal-application\", feature = \"paging\"))]\n#[test]\nfn get_pager_executable_with_pager_more_switches_to_less() {\n    std::env::set_var(\"PAGER\", \"more\");\n    let result = get_pager_executable(None);\n    assert_eq!(result, Some(\"less\".to_string()));\n    std::env::remove_var(\"PAGER\");\n}\n\n#[cfg(all(feature = \"minimal-application\", feature = \"paging\"))]\n#[test]\nfn get_pager_executable_default() {\n    // Ensure no env vars\n    std::env::remove_var(\"BAT_PAGER\");\n    std::env::remove_var(\"PAGER\");\n    let result = get_pager_executable(None);\n    assert_eq!(result, Some(\"less\".to_string()));\n}\n\n#[cfg(all(feature = \"minimal-application\", feature = \"paging\"))]\n#[test]\nfn get_pager_executable_name_ignoring_arguments() {\n    let result = get_pager_executable(Some(\"foo --bar\"));\n    assert_eq!(result, Some(\"foo\".to_string()));\n}\n\n#[cfg(all(feature = \"minimal-application\", feature = \"paging\"))]\n#[test]\nfn get_pager_executable_name_ignoring_path() {\n    let result = get_pager_executable(Some(\"/bin/foo test\"));\n    assert_eq!(result, Some(\"/bin/foo\".to_string()));\n}\n\n#[cfg(all(feature = \"minimal-application\", feature = \"paging\"))]\n#[test]\nfn get_pager_executable_invalid_command() {\n    let result = get_pager_executable(Some(\"invalid ' command\"));\n    assert_eq!(result, None);\n}\n\n#[cfg(all(feature = \"minimal-application\", feature = \"paging\"))]\n#[test]\nfn get_pager_executable_empty_config() {\n    let result = get_pager_executable(Some(\"\"));\n    assert_eq!(result, None);\n}\n"
  },
  {
    "path": "src/controller.rs",
    "content": "use crate::assets::HighlightingAssets;\nuse crate::config::{Config, VisibleLines};\n#[cfg(feature = \"git\")]\nuse crate::diff::{get_git_diff, LineChanges};\nuse crate::error::*;\nuse crate::input::{Input, InputReader, OpenedInput};\n#[cfg(feature = \"lessopen\")]\nuse crate::lessopen::LessOpenPreprocessor;\n#[cfg(feature = \"git\")]\nuse crate::line_range::LineRange;\nuse crate::line_range::{LineRanges, MaxBufferedLineNumber, RangeCheckResult};\nuse crate::output::{OutputHandle, OutputType};\n#[cfg(feature = \"paging\")]\nuse crate::paging::PagingMode;\nuse crate::printer::{InteractivePrinter, Printer, SimplePrinter};\nuse std::collections::VecDeque;\nuse std::io::{self, BufRead, Write};\nuse std::mem;\n\nuse clircle::{Clircle, Identifier};\n\npub struct Controller<'a> {\n    config: &'a Config<'a>,\n    assets: &'a HighlightingAssets,\n    #[cfg(feature = \"lessopen\")]\n    preprocessor: Option<LessOpenPreprocessor>,\n}\n\nimpl Controller<'_> {\n    pub fn new<'a>(config: &'a Config, assets: &'a HighlightingAssets) -> Controller<'a> {\n        Controller {\n            config,\n            assets,\n            #[cfg(feature = \"lessopen\")]\n            preprocessor: LessOpenPreprocessor::new().ok(),\n        }\n    }\n\n    pub fn run(\n        &self,\n        inputs: Vec<Input>,\n        output_handle: Option<&mut OutputHandle<'_>>,\n    ) -> Result<bool> {\n        self.run_with_error_handler(inputs, output_handle, default_error_handler)\n    }\n\n    pub fn run_with_error_handler(\n        &self,\n        inputs: Vec<Input>,\n        output_handle: Option<&mut OutputHandle<'_>>,\n        mut handle_error: impl FnMut(&Error, &mut dyn Write),\n    ) -> Result<bool> {\n        // only create our own OutputType if no output handle was provided.\n        #[allow(unused_mut)]\n        let mut output_type_opt: Option<OutputType> = None;\n\n        #[cfg(feature = \"paging\")]\n        if output_handle.is_none() {\n            use crate::input::InputKind;\n            use std::path::Path;\n\n            // Do not launch the pager if NONE of the input files exist\n            let mut paging_mode = self.config.paging_mode;\n            if self.config.paging_mode != PagingMode::Never {\n                let call_pager = inputs.iter().any(|input| {\n                    if let InputKind::OrdinaryFile(ref path) = input.kind {\n                        Path::new(path).exists()\n                    } else {\n                        true\n                    }\n                });\n                if !call_pager {\n                    paging_mode = PagingMode::Never;\n                }\n            }\n\n            let wrapping_mode = self.config.wrapping_mode;\n\n            output_type_opt = Some(OutputType::from_mode(\n                paging_mode,\n                wrapping_mode,\n                self.config.pager,\n            )?);\n        }\n\n        #[cfg(not(feature = \"paging\"))]\n        if output_handle.is_none() {\n            output_type_opt = Some(OutputType::stdout());\n        }\n\n        let attached_to_pager = match (&output_handle, &output_type_opt) {\n            (Some(_), _) => true,\n            (None, Some(ot)) => ot.is_pager(),\n            (None, None) => false,\n        };\n\n        let stdout_identifier = if cfg!(windows) || attached_to_pager {\n            None\n        } else {\n            clircle::Identifier::stdout()\n        };\n\n        let mut writer = match (output_handle, &mut output_type_opt) {\n            (Some(OutputHandle::FmtWrite(w)), _) => OutputHandle::FmtWrite(w),\n            (Some(OutputHandle::IoWrite(w)), _) => OutputHandle::IoWrite(w),\n            (None, Some(ot)) => ot.handle()?,\n            (None, None) => unreachable!(\"No output handle and no output type available\"),\n        };\n        let mut no_errors: bool = true;\n        let stderr = io::stderr();\n\n        for (index, input) in inputs.into_iter().enumerate() {\n            let identifier = stdout_identifier.as_ref();\n            let is_first = index == 0;\n            let result = if input.is_stdin() {\n                self.print_input(input, &mut writer, io::stdin().lock(), identifier, is_first)\n            } else {\n                // Use dummy stdin since stdin is actually not used (#1902)\n                self.print_input(input, &mut writer, io::empty(), identifier, is_first)\n            };\n            if let Err(error) = result {\n                match writer {\n                    // It doesn't make much sense to send errors straight to stderr if the user\n                    // provided their own buffer, so we just return it.\n                    OutputHandle::FmtWrite(_) => return Err(error),\n                    OutputHandle::IoWrite(ref mut writer) => {\n                        if attached_to_pager {\n                            handle_error(&error, writer);\n                        } else {\n                            handle_error(&error, &mut stderr.lock());\n                        }\n                    }\n                }\n                no_errors = false;\n            }\n        }\n\n        Ok(no_errors)\n    }\n\n    fn print_input<R: BufRead>(\n        &self,\n        input: Input,\n        writer: &mut OutputHandle,\n        stdin: R,\n        stdout_identifier: Option<&Identifier>,\n        is_first: bool,\n    ) -> Result<()> {\n        let mut opened_input = {\n            #[cfg(feature = \"lessopen\")]\n            match self.preprocessor {\n                Some(ref preprocessor) if self.config.use_lessopen => {\n                    preprocessor.open(input, stdin, stdout_identifier)?\n                }\n                _ => input.open(stdin, stdout_identifier)?,\n            }\n\n            #[cfg(not(feature = \"lessopen\"))]\n            input.open(stdin, stdout_identifier)?\n        };\n        opened_input.reader.unbuffered = self.config.unbuffered;\n        #[cfg(feature = \"git\")]\n        let line_changes = if self.config.visible_lines.diff_mode()\n            || (!self.config.loop_through && self.config.style_components.changes())\n        {\n            match opened_input.kind {\n                crate::input::OpenedInputKind::OrdinaryFile(ref path) => {\n                    let diff = get_git_diff(path);\n\n                    // Skip files without Git modifications\n                    if self.config.visible_lines.diff_mode()\n                        && diff\n                            .as_ref()\n                            .map(|changes| changes.is_empty())\n                            .unwrap_or(false)\n                    {\n                        return Ok(());\n                    }\n\n                    diff\n                }\n                _ if self.config.visible_lines.diff_mode() => {\n                    // Skip non-file inputs in diff mode\n                    return Ok(());\n                }\n                _ => None,\n            }\n        } else {\n            None\n        };\n\n        let mut printer: Box<dyn Printer> = if self.config.loop_through {\n            Box::new(SimplePrinter::new(self.config))\n        } else {\n            Box::new(InteractivePrinter::new(\n                self.config,\n                self.assets,\n                &mut opened_input,\n                #[cfg(feature = \"git\")]\n                &line_changes,\n            )?)\n        };\n\n        self.print_file(\n            &mut *printer,\n            writer,\n            &mut opened_input,\n            !is_first,\n            #[cfg(feature = \"git\")]\n            &line_changes,\n        )\n    }\n\n    fn print_file(\n        &self,\n        printer: &mut dyn Printer,\n        writer: &mut OutputHandle,\n        input: &mut OpenedInput,\n        add_header_padding: bool,\n        #[cfg(feature = \"git\")] line_changes: &Option<LineChanges>,\n    ) -> Result<()> {\n        if !input.reader.first_line.is_empty() || self.config.style_components.header() {\n            printer.print_header(writer, input, add_header_padding)?;\n        }\n\n        if !input.reader.first_line.is_empty() {\n            let line_ranges = match self.config.visible_lines {\n                VisibleLines::Ranges(ref line_ranges) => line_ranges.clone(),\n                #[cfg(feature = \"git\")]\n                VisibleLines::DiffContext(context) => {\n                    let mut line_ranges: Vec<LineRange> = vec![];\n\n                    if let Some(line_changes) = line_changes {\n                        for &line in line_changes.keys() {\n                            let line = line as usize;\n                            line_ranges\n                                .push(LineRange::new(line.saturating_sub(context), line + context));\n                        }\n                    }\n\n                    LineRanges::from(line_ranges)\n                }\n            };\n\n            self.print_file_ranges(printer, writer, &mut input.reader, &line_ranges)?;\n        }\n        printer.print_footer(writer, input)?;\n\n        Ok(())\n    }\n\n    fn print_file_ranges(\n        &self,\n        printer: &mut dyn Printer,\n        writer: &mut OutputHandle,\n        reader: &mut InputReader,\n        line_ranges: &LineRanges,\n    ) -> Result<()> {\n        let mut current_line_buffer: Vec<u8> = Vec::new();\n        let mut current_line_number: usize = 1;\n        // Buffer needs to be 1 greater than the offset to have a look-ahead line for EOF\n        let buffer_size: usize = line_ranges.largest_offset_from_end() + 1;\n        // Buffers multiple line data and line number\n        let mut buffered_lines: VecDeque<(Vec<u8>, usize)> = VecDeque::with_capacity(buffer_size);\n\n        let mut reached_eof: bool = false;\n        let mut first_range: bool = true;\n        let mut mid_range: bool = false;\n\n        let style_snip = self.config.style_components.snip();\n\n        loop {\n            if reached_eof && buffered_lines.is_empty() {\n                // Done processing all lines\n                break;\n            }\n            if !reached_eof {\n                if reader.read_line(&mut current_line_buffer)? {\n                    // Fill the buffer\n                    buffered_lines\n                        .push_back((mem::take(&mut current_line_buffer), current_line_number));\n                    current_line_number += 1;\n                } else {\n                    // No more data to read\n                    reached_eof = true;\n                }\n            }\n\n            if buffered_lines.len() < buffer_size && !reached_eof {\n                // The buffer needs to be completely filled first\n                continue;\n            }\n\n            let Some((line, line_nr)) = buffered_lines.pop_front() else {\n                break;\n            };\n\n            // Determine if the last line number in the buffer is the last line of the file or\n            // just a line somewhere in the file\n            let max_buffered_line_number = buffered_lines\n                .back()\n                .map(|(_, max_line_number)| {\n                    if reached_eof {\n                        MaxBufferedLineNumber::Final(*max_line_number)\n                    } else {\n                        MaxBufferedLineNumber::Tentative(*max_line_number)\n                    }\n                })\n                .unwrap_or(MaxBufferedLineNumber::Final(line_nr));\n\n            match line_ranges.check(line_nr, max_buffered_line_number) {\n                RangeCheckResult::BeforeOrBetweenRanges => {\n                    // Call the printer in case we need to call the syntax highlighter\n                    // for this line. However, set `out_of_range` to `true`.\n                    printer.print_line(true, writer, line_nr, &line, max_buffered_line_number)?;\n                    mid_range = false;\n                }\n\n                RangeCheckResult::InRange => {\n                    if style_snip {\n                        if first_range {\n                            first_range = false;\n                            mid_range = true;\n                        } else if !mid_range {\n                            mid_range = true;\n                            printer.print_snip(writer)?;\n                        }\n                    }\n\n                    printer.print_line(false, writer, line_nr, &line, max_buffered_line_number)?;\n                    if self.config.unbuffered {\n                        writer.flush()?;\n                    }\n                }\n                RangeCheckResult::AfterLastRange => {\n                    break;\n                }\n            }\n        }\n        Ok(())\n    }\n}\n"
  },
  {
    "path": "src/decorations.rs",
    "content": "#[cfg(feature = \"git\")]\nuse crate::diff::LineChange;\nuse crate::printer::{Colors, InteractivePrinter};\nuse nu_ansi_term::Style;\n\n#[derive(Debug, Clone)]\npub(crate) struct DecorationText {\n    pub width: usize,\n    pub text: String,\n}\n\npub(crate) trait Decoration {\n    fn generate(\n        &self,\n        line_number: usize,\n        continuation: bool,\n        printer: &InteractivePrinter,\n    ) -> DecorationText;\n    fn width(&self) -> usize;\n}\n\npub(crate) struct LineNumberDecoration {\n    color: Style,\n    cached_wrap: DecorationText,\n    cached_wrap_invalid_at: usize,\n}\n\nimpl LineNumberDecoration {\n    pub(crate) fn new(colors: &Colors) -> Self {\n        LineNumberDecoration {\n            color: colors.line_number,\n            cached_wrap_invalid_at: 10000,\n            cached_wrap: DecorationText {\n                text: colors.line_number.paint(\" \".repeat(4)).to_string(),\n                width: 4,\n            },\n        }\n    }\n}\n\nimpl Decoration for LineNumberDecoration {\n    fn generate(\n        &self,\n        line_number: usize,\n        continuation: bool,\n        _printer: &InteractivePrinter,\n    ) -> DecorationText {\n        if continuation {\n            if line_number >= self.cached_wrap_invalid_at {\n                let new_width = self.cached_wrap.width + 1;\n                return DecorationText {\n                    text: self.color.paint(\" \".repeat(new_width)).to_string(),\n                    width: new_width,\n                };\n            }\n\n            self.cached_wrap.clone()\n        } else {\n            let plain: String = format!(\"{line_number:4}\");\n            DecorationText {\n                width: plain.len(),\n                text: self.color.paint(plain).to_string(),\n            }\n        }\n    }\n\n    fn width(&self) -> usize {\n        4\n    }\n}\n\n#[cfg(feature = \"git\")]\npub(crate) struct LineChangesDecoration {\n    cached_none: DecorationText,\n    cached_added: DecorationText,\n    cached_removed_above: DecorationText,\n    cached_removed_below: DecorationText,\n    cached_modified: DecorationText,\n}\n\n#[cfg(feature = \"git\")]\nimpl LineChangesDecoration {\n    #[inline]\n    fn generate_cached(style: Style, text: &str) -> DecorationText {\n        DecorationText {\n            text: style.paint(text).to_string(),\n            width: text.chars().count(),\n        }\n    }\n\n    pub(crate) fn new(colors: &Colors) -> Self {\n        LineChangesDecoration {\n            cached_none: Self::generate_cached(Style::default(), \" \"),\n            cached_added: Self::generate_cached(colors.git_added, \"+\"),\n            cached_removed_above: Self::generate_cached(colors.git_removed, \"‾\"),\n            cached_removed_below: Self::generate_cached(colors.git_removed, \"_\"),\n            cached_modified: Self::generate_cached(colors.git_modified, \"~\"),\n        }\n    }\n}\n\n#[cfg(feature = \"git\")]\nimpl Decoration for LineChangesDecoration {\n    fn generate(\n        &self,\n        line_number: usize,\n        continuation: bool,\n        printer: &InteractivePrinter,\n    ) -> DecorationText {\n        if !continuation {\n            if let Some(ref changes) = printer.line_changes {\n                return match changes.get(&(line_number as u32)) {\n                    Some(&LineChange::Added) => self.cached_added.clone(),\n                    Some(&LineChange::RemovedAbove) => self.cached_removed_above.clone(),\n                    Some(&LineChange::RemovedBelow) => self.cached_removed_below.clone(),\n                    Some(&LineChange::Modified) => self.cached_modified.clone(),\n                    _ => self.cached_none.clone(),\n                };\n            }\n        }\n\n        self.cached_none.clone()\n    }\n\n    fn width(&self) -> usize {\n        self.cached_none.width\n    }\n}\n\npub(crate) struct GridBorderDecoration {\n    cached: DecorationText,\n}\n\nimpl GridBorderDecoration {\n    pub(crate) fn new(colors: &Colors) -> Self {\n        GridBorderDecoration {\n            cached: DecorationText {\n                text: colors.grid.paint(\"│\").to_string(),\n                width: 1,\n            },\n        }\n    }\n}\n\nimpl Decoration for GridBorderDecoration {\n    fn generate(\n        &self,\n        _line_number: usize,\n        _continuation: bool,\n        _printer: &InteractivePrinter,\n    ) -> DecorationText {\n        self.cached.clone()\n    }\n\n    fn width(&self) -> usize {\n        self.cached.width\n    }\n}\n"
  },
  {
    "path": "src/diff.rs",
    "content": "#![cfg(feature = \"git\")]\n\nuse std::collections::HashMap;\nuse std::fs;\nuse std::path::Path;\n\nuse git2::{DiffOptions, IntoCString, Repository};\n\n#[derive(Copy, Clone, Debug)]\npub enum LineChange {\n    Added,\n    RemovedAbove,\n    RemovedBelow,\n    Modified,\n}\n\npub type LineChanges = HashMap<u32, LineChange>;\n\npub fn get_git_diff(filename: &Path) -> Option<LineChanges> {\n    let repo = Repository::discover(filename).ok()?;\n\n    let repo_path_absolute = fs::canonicalize(repo.workdir()?).ok()?;\n\n    let filepath_absolute = fs::canonicalize(filename).ok()?;\n    let filepath_relative_to_repo = filepath_absolute.strip_prefix(&repo_path_absolute).ok()?;\n\n    let mut diff_options = DiffOptions::new();\n    let pathspec = filepath_relative_to_repo.into_c_string().ok()?;\n    diff_options.pathspec(pathspec);\n    diff_options.context_lines(0);\n\n    let diff = repo\n        .diff_index_to_workdir(None, Some(&mut diff_options))\n        .ok()?;\n\n    let mut line_changes: LineChanges = HashMap::new();\n\n    let mark_section =\n        |line_changes: &mut LineChanges, start: u32, end: i32, change: LineChange| {\n            for line in start..=end as u32 {\n                line_changes.insert(line, change);\n            }\n        };\n\n    let _ = diff.foreach(\n        &mut |_, _| true,\n        None,\n        Some(&mut |delta, hunk| {\n            let path = delta.new_file().path().unwrap_or_else(|| Path::new(\"\"));\n\n            if filepath_relative_to_repo != path {\n                return false;\n            }\n\n            let old_lines = hunk.old_lines();\n            let new_start = hunk.new_start();\n            let new_lines = hunk.new_lines();\n            let new_end = (new_start + new_lines) as i32 - 1;\n\n            if old_lines == 0 && new_lines > 0 {\n                mark_section(&mut line_changes, new_start, new_end, LineChange::Added);\n            } else if new_lines == 0 && old_lines > 0 {\n                if new_start == 0 {\n                    mark_section(&mut line_changes, 1, 1, LineChange::RemovedAbove);\n                } else {\n                    mark_section(\n                        &mut line_changes,\n                        new_start,\n                        new_start as i32,\n                        LineChange::RemovedBelow,\n                    );\n                }\n            } else {\n                mark_section(&mut line_changes, new_start, new_end, LineChange::Modified);\n            }\n\n            true\n        }),\n        None,\n    );\n\n    Some(line_changes)\n}\n"
  },
  {
    "path": "src/error.rs",
    "content": "use std::io::Write;\nuse thiserror::Error;\n\n#[derive(Error, Debug)]\n#[non_exhaustive]\npub enum Error {\n    #[error(transparent)]\n    Io(#[from] ::std::io::Error),\n    #[error(transparent)]\n    Fmt(#[from] ::std::fmt::Error),\n    #[error(transparent)]\n    SyntectError(#[from] ::syntect::Error),\n    #[error(transparent)]\n    SyntectLoadingError(#[from] ::syntect::LoadingError),\n    #[error(transparent)]\n    ParseIntError(#[from] ::std::num::ParseIntError),\n    #[error(transparent)]\n    GlobParsingError(#[from] ::globset::Error),\n    #[error(transparent)]\n    SerdeYamlError(#[from] ::serde_yaml::Error),\n    #[error(\"unable to detect syntax for {0}\")]\n    UndetectedSyntax(String),\n    #[error(\"unknown syntax: '{0}'\")]\n    UnknownSyntax(String),\n    #[error(\"Unknown style '{0}'\")]\n    UnknownStyle(String),\n    #[error(\"Use of bat as a pager is disallowed in order to avoid infinite recursion problems\")]\n    InvalidPagerValueBat,\n    #[error(\"{0}\")]\n    Msg(String),\n    #[cfg(feature = \"paging\")]\n    #[error(transparent)]\n    MinusError(#[from] ::minus::MinusError),\n    #[cfg(feature = \"lessopen\")]\n    #[error(transparent)]\n    VarError(#[from] ::std::env::VarError),\n    #[cfg(feature = \"lessopen\")]\n    #[error(transparent)]\n    CommandParseError(#[from] ::shell_words::ParseError),\n}\n\nimpl From<&'static str> for Error {\n    fn from(s: &'static str) -> Self {\n        Error::Msg(s.to_owned())\n    }\n}\n\nimpl From<String> for Error {\n    fn from(s: String) -> Self {\n        Error::Msg(s)\n    }\n}\n\npub type Result<T> = std::result::Result<T, Error>;\n\npub fn default_error_handler(error: &Error, output: &mut dyn Write) {\n    use nu_ansi_term::Color::Red;\n\n    match error {\n        Error::Io(ref io_error) if io_error.kind() == ::std::io::ErrorKind::BrokenPipe => {\n            ::std::process::exit(0);\n        }\n        Error::SerdeYamlError(_) => {\n            writeln!(\n                output,\n                \"{}: Error while parsing metadata.yaml file: {error}\",\n                Red.paint(\"[bat error]\"),\n            )\n            .ok();\n        }\n        _ => {\n            writeln!(\n                &mut std::io::stderr().lock(),\n                \"{}: {error}\",\n                Red.paint(\"[bat error]\"),\n            )\n            .ok();\n        }\n    };\n}\n"
  },
  {
    "path": "src/input.rs",
    "content": "use std::convert::TryFrom;\nuse std::fs;\nuse std::fs::File;\nuse std::io::{self, BufRead, BufReader, Read};\nuse std::path::{Path, PathBuf};\n\nuse clircle::{Clircle, Identifier};\nuse content_inspector::{self, ContentType};\n\nuse crate::error::*;\n\n/// A description of an Input source.\n/// This tells bat how to refer to the input.\n#[derive(Clone)]\npub struct InputDescription {\n    pub(crate) name: String,\n\n    /// The input title.\n    /// This replaces the name if provided.\n    title: Option<String>,\n\n    /// The input kind.\n    kind: Option<String>,\n\n    /// A summary description of the input.\n    /// Defaults to \"{kind} '{name}'\"\n    summary: Option<String>,\n}\n\nimpl InputDescription {\n    /// Creates a description for an input.\n    pub fn new(name: impl Into<String>) -> Self {\n        InputDescription {\n            name: name.into(),\n            title: None,\n            kind: None,\n            summary: None,\n        }\n    }\n\n    pub fn set_kind(&mut self, kind: Option<String>) {\n        self.kind = kind;\n    }\n\n    pub fn set_summary(&mut self, summary: Option<String>) {\n        self.summary = summary;\n    }\n\n    pub fn set_title(&mut self, title: Option<String>) {\n        self.title = title;\n    }\n\n    pub fn title(&self) -> &String {\n        match &self.title {\n            Some(title) => title,\n            None => &self.name,\n        }\n    }\n\n    pub fn kind(&self) -> Option<&String> {\n        self.kind.as_ref()\n    }\n\n    pub fn summary(&self) -> String {\n        self.summary.clone().unwrap_or_else(|| match &self.kind {\n            None => self.name.clone(),\n            Some(kind) => format!(\"{} '{}'\", kind.to_lowercase(), self.name),\n        })\n    }\n}\n\npub(crate) enum InputKind<'a> {\n    OrdinaryFile(PathBuf),\n    StdIn,\n    CustomReader(Box<dyn Read + 'a>),\n}\n\nimpl InputKind<'_> {\n    pub fn description(&self) -> InputDescription {\n        match self {\n            InputKind::OrdinaryFile(ref path) => InputDescription::new(path.to_string_lossy()),\n            InputKind::StdIn => InputDescription::new(\"STDIN\"),\n            InputKind::CustomReader(_) => InputDescription::new(\"READER\"),\n        }\n    }\n}\n\n#[derive(Clone, Default)]\npub(crate) struct InputMetadata {\n    pub(crate) user_provided_name: Option<PathBuf>,\n    pub(crate) size: Option<u64>,\n}\n\npub struct Input<'a> {\n    pub(crate) kind: InputKind<'a>,\n    pub(crate) metadata: InputMetadata,\n    pub(crate) description: InputDescription,\n}\n\npub(crate) enum OpenedInputKind {\n    OrdinaryFile(PathBuf),\n    StdIn,\n    CustomReader,\n}\n\npub(crate) struct OpenedInput<'a> {\n    pub(crate) kind: OpenedInputKind,\n    pub(crate) metadata: InputMetadata,\n    pub(crate) reader: InputReader<'a>,\n    pub(crate) description: InputDescription,\n}\n\nimpl OpenedInput<'_> {\n    /// Get the path of the file:\n    /// If this was set by the metadata, that will take priority.\n    /// If it wasn't, it will use the real file path (if available).\n    pub(crate) fn path(&self) -> Option<&PathBuf> {\n        self.metadata\n            .user_provided_name\n            .as_ref()\n            .or(match self.kind {\n                OpenedInputKind::OrdinaryFile(ref path) => Some(path),\n                _ => None,\n            })\n    }\n}\n\nimpl<'a> Input<'a> {\n    pub fn ordinary_file(path: impl AsRef<Path>) -> Self {\n        Self::_ordinary_file(path.as_ref())\n    }\n\n    fn _ordinary_file(path: &Path) -> Self {\n        let kind = InputKind::OrdinaryFile(path.to_path_buf());\n        let metadata = InputMetadata {\n            size: fs::metadata(path).map(|m| m.len()).ok(),\n            ..InputMetadata::default()\n        };\n\n        Input {\n            description: kind.description(),\n            metadata,\n            kind,\n        }\n    }\n\n    pub fn stdin() -> Self {\n        let kind = InputKind::StdIn;\n        Input {\n            description: kind.description(),\n            metadata: InputMetadata::default(),\n            kind,\n        }\n    }\n\n    pub fn from_reader(reader: Box<dyn Read + 'a>) -> Self {\n        let kind = InputKind::CustomReader(reader);\n        Input {\n            description: kind.description(),\n            metadata: InputMetadata::default(),\n            kind,\n        }\n    }\n\n    pub fn is_stdin(&self) -> bool {\n        matches!(self.kind, InputKind::StdIn)\n    }\n\n    pub fn with_name(self, provided_name: Option<impl AsRef<Path>>) -> Self {\n        self._with_name(provided_name.as_ref().map(|it| it.as_ref()))\n    }\n\n    fn _with_name(mut self, provided_name: Option<&Path>) -> Self {\n        if let Some(name) = provided_name {\n            self.description.name = name.to_string_lossy().to_string()\n        }\n\n        self.metadata.user_provided_name = provided_name.map(|n| n.to_owned());\n        self\n    }\n\n    pub fn description(&self) -> &InputDescription {\n        &self.description\n    }\n\n    pub fn description_mut(&mut self) -> &mut InputDescription {\n        &mut self.description\n    }\n\n    pub(crate) fn open<R: BufRead + 'a>(\n        self,\n        stdin: R,\n        stdout_identifier: Option<&Identifier>,\n    ) -> Result<OpenedInput<'a>> {\n        let description = self.description().clone();\n        match self.kind {\n            InputKind::StdIn => {\n                if let Some(stdout) = stdout_identifier {\n                    let input_identifier = Identifier::try_from(clircle::Stdio::Stdin)\n                        .map_err(|e| format!(\"Stdin: Error identifying file: {e}\"))?;\n                    if stdout.surely_conflicts_with(&input_identifier) {\n                        return Err(\"IO circle detected. The input from stdin is also an output. Aborting to avoid infinite loop.\".into());\n                    }\n                }\n\n                Ok(OpenedInput {\n                    kind: OpenedInputKind::StdIn,\n                    description,\n                    metadata: self.metadata,\n                    reader: InputReader::new(stdin),\n                })\n            }\n\n            InputKind::OrdinaryFile(path) => Ok(OpenedInput {\n                kind: OpenedInputKind::OrdinaryFile(path.clone()),\n                description,\n                metadata: self.metadata,\n                reader: {\n                    let mut file = File::open(&path)\n                        .map_err(|e| format!(\"'{}': {e}\", path.to_string_lossy()))?;\n                    if file.metadata()?.is_dir() {\n                        return Err(format!(\"'{}' is a directory.\", path.to_string_lossy()).into());\n                    }\n\n                    if let Some(stdout) = stdout_identifier {\n                        let input_identifier = Identifier::try_from(file).map_err(|e| {\n                            format!(\"{}: Error identifying file: {e}\", path.to_string_lossy())\n                        })?;\n                        if stdout.surely_conflicts_with(&input_identifier) {\n                            return Err(format!(\n                                \"IO circle detected. The input from '{}' is also an output. Aborting to avoid infinite loop.\",\n                                path.to_string_lossy()\n                            )\n                            .into());\n                        }\n                        file = input_identifier.into_inner().expect(\"The file was lost in the clircle::Identifier, this should not have happened...\");\n                    }\n\n                    InputReader::new(BufReader::new(file))\n                },\n            }),\n            InputKind::CustomReader(reader) => Ok(OpenedInput {\n                description,\n                kind: OpenedInputKind::CustomReader,\n                metadata: self.metadata,\n                reader: InputReader::new(BufReader::new(reader)),\n            }),\n        }\n    }\n}\n\npub(crate) struct InputReader<'a> {\n    inner: Box<dyn BufRead + 'a>,\n    pub(crate) first_line: Vec<u8>,\n    pub(crate) content_type: Option<ContentType>,\n    pub(crate) unbuffered: bool,\n}\n\nimpl<'a> InputReader<'a> {\n    pub(crate) fn new<R: BufRead + 'a>(mut reader: R) -> InputReader<'a> {\n        let mut first_line = vec![];\n        reader.read_until(b'\\n', &mut first_line).ok();\n\n        let content_type = if first_line.is_empty() {\n            None\n        } else {\n            Some(content_inspector::inspect(&first_line[..]))\n        };\n\n        if content_type == Some(ContentType::UTF_16LE) {\n            read_utf16_line(&mut reader, &mut first_line, 0x00, 0x0A).ok();\n        } else if content_type == Some(ContentType::UTF_16BE) {\n            read_utf16_line(&mut reader, &mut first_line, 0x0A, 0x00).ok();\n        }\n\n        InputReader {\n            inner: Box::new(reader),\n            first_line,\n            content_type,\n            unbuffered: false,\n        }\n    }\n\n    pub(crate) fn read_line(&mut self, buf: &mut Vec<u8>) -> io::Result<bool> {\n        if !self.first_line.is_empty() {\n            buf.append(&mut self.first_line);\n            return Ok(true);\n        }\n\n        if self.content_type == Some(ContentType::UTF_16LE) {\n            return read_utf16_line(&mut self.inner, buf, 0x00, 0x0A);\n        }\n        if self.content_type == Some(ContentType::UTF_16BE) {\n            return read_utf16_line(&mut self.inner, buf, 0x0A, 0x00);\n        }\n\n        if self.unbuffered {\n            return self.read_line_unbuffered(buf);\n        }\n\n        let res = self.inner.read_until(b'\\n', buf).map(|size| size > 0)?;\n        Ok(res)\n    }\n\n    fn read_line_unbuffered(&mut self, buf: &mut Vec<u8>) -> io::Result<bool> {\n        let available = self.inner.fill_buf()?;\n        if available.is_empty() {\n            return Ok(!buf.is_empty());\n        }\n        if let Some(pos) = available.iter().position(|&b| b == b'\\n') {\n            buf.extend_from_slice(&available[..=pos]);\n            self.inner.consume(pos + 1);\n        } else {\n            let len = available.len();\n            buf.extend_from_slice(available);\n            self.inner.consume(len);\n        }\n        Ok(true)\n    }\n}\n\nfn read_utf16_line<R: BufRead>(\n    reader: &mut R,\n    buf: &mut Vec<u8>,\n    read_until_char: u8,\n    preceded_by_char: u8,\n) -> io::Result<bool> {\n    loop {\n        let mut temp = Vec::new();\n        let n = reader.read_until(read_until_char, &mut temp)?;\n        if n == 0 {\n            // EOF reached\n            break;\n        }\n        buf.extend_from_slice(&temp);\n        if buf.len() >= 2\n            && buf[buf.len() - 2] == preceded_by_char\n            && buf[buf.len() - 1] == read_until_char\n        {\n            // end of line found\n            break;\n        }\n        // end of line not found, keep going\n    }\n    Ok(!buf.is_empty())\n}\n\n#[test]\nfn basic() {\n    let content = b\"#!/bin/bash\\necho hello\";\n    let mut reader = InputReader::new(&content[..]);\n\n    assert_eq!(b\"#!/bin/bash\\n\", &reader.first_line[..]);\n\n    let mut buffer = vec![];\n\n    let res = reader.read_line(&mut buffer);\n    assert!(res.is_ok());\n    assert!(res.unwrap());\n    assert_eq!(b\"#!/bin/bash\\n\", &buffer[..]);\n\n    buffer.clear();\n\n    let res = reader.read_line(&mut buffer);\n    assert!(res.is_ok());\n    assert!(res.unwrap());\n    assert_eq!(b\"echo hello\", &buffer[..]);\n\n    buffer.clear();\n\n    let res = reader.read_line(&mut buffer);\n    assert!(res.is_ok());\n    assert!(!res.unwrap());\n    assert!(buffer.is_empty());\n}\n\n#[test]\nfn utf16le() {\n    let content = b\"\\xFF\\xFE\\x73\\x00\\x0A\\x00\\x64\\x00\";\n    let mut reader = InputReader::new(&content[..]);\n\n    assert_eq!(b\"\\xFF\\xFE\\x73\\x00\\x0A\\x00\", &reader.first_line[..]);\n\n    let mut buffer = vec![];\n\n    let res = reader.read_line(&mut buffer);\n    assert!(res.is_ok());\n    assert!(res.unwrap());\n    assert_eq!(b\"\\xFF\\xFE\\x73\\x00\\x0A\\x00\", &buffer[..]);\n\n    buffer.clear();\n\n    let res = reader.read_line(&mut buffer);\n    assert!(res.is_ok());\n    assert!(res.unwrap());\n    assert_eq!(b\"\\x64\\x00\", &buffer[..]);\n\n    buffer.clear();\n\n    let res = reader.read_line(&mut buffer);\n    assert!(res.is_ok());\n    assert!(!res.unwrap());\n    assert!(buffer.is_empty());\n}\n\n#[test]\nfn unbuffered_returns_partial_data() {\n    use std::io::Cursor;\n\n    let content = b\"first line\\npartial\";\n    let mut reader = InputReader::new(Cursor::new(&content[..]));\n    reader.unbuffered = true;\n\n    // First call returns first_line (buffered during new())\n    let mut buffer = vec![];\n    let res = reader.read_line(&mut buffer);\n    assert!(res.is_ok());\n    assert!(res.unwrap());\n    assert_eq!(b\"first line\\n\", &buffer[..]);\n\n    // Subsequent calls use unbuffered reading\n    buffer.clear();\n    let res = reader.read_line(&mut buffer);\n    assert!(res.is_ok());\n    assert!(res.unwrap());\n    assert_eq!(b\"partial\", &buffer[..]);\n\n    // EOF\n    buffer.clear();\n    let res = reader.read_line(&mut buffer);\n    assert!(res.is_ok());\n    assert!(!res.unwrap());\n    assert!(buffer.is_empty());\n}\n\n#[test]\nfn unbuffered_returns_complete_lines() {\n    use std::io::Cursor;\n\n    let content = b\"line1\\nline2\\n\";\n    let mut reader = InputReader::new(Cursor::new(&content[..]));\n    reader.unbuffered = true;\n\n    // First call returns first_line\n    let mut buffer = vec![];\n    let res = reader.read_line(&mut buffer);\n    assert!(res.is_ok());\n    assert!(res.unwrap());\n    assert_eq!(b\"line1\\n\", &buffer[..]);\n\n    // Second call returns line2 (complete line with newline)\n    buffer.clear();\n    let res = reader.read_line(&mut buffer);\n    assert!(res.is_ok());\n    assert!(res.unwrap());\n    assert_eq!(b\"line2\\n\", &buffer[..]);\n\n    // EOF\n    buffer.clear();\n    let res = reader.read_line(&mut buffer);\n    assert!(res.is_ok());\n    assert!(!res.unwrap());\n    assert!(buffer.is_empty());\n}\n\n#[test]\nfn unbuffered_eof_handling() {\n    use std::io::Cursor;\n\n    let content = b\"only line\\n\";\n    let mut reader = InputReader::new(Cursor::new(&content[..]));\n    reader.unbuffered = true;\n\n    // First call returns first_line\n    let mut buffer = vec![];\n    let res = reader.read_line(&mut buffer);\n    assert!(res.is_ok());\n    assert!(res.unwrap());\n    assert_eq!(b\"only line\\n\", &buffer[..]);\n\n    // EOF - empty buffer returns false\n    buffer.clear();\n    let res = reader.read_line(&mut buffer);\n    assert!(res.is_ok());\n    assert!(!res.unwrap());\n    assert!(buffer.is_empty());\n}\n\n#[test]\nfn utf16le_issue3367() {\n    let content = b\"\\xFF\\xFE\\x0A\\x4E\\x00\\x4E\\x0A\\x4F\\x00\\x52\\x0A\\x00\\\n        \\x6F\\x00\\x20\\x00\\x62\\x00\\x61\\x00\\x72\\x00\\x0A\\x00\\\n        \\x68\\x00\\x65\\x00\\x6C\\x00\\x6C\\x00\\x6F\\x00\\x20\\x00\\x77\\x00\\x6F\\x00\\x72\\x00\\x6C\\x00\\x64\\x00\";\n    let mut reader = InputReader::new(&content[..]);\n\n    assert_eq!(\n        b\"\\xFF\\xFE\\x0A\\x4E\\x00\\x4E\\x0A\\x4F\\x00\\x52\\x0A\\x00\",\n        &reader.first_line[..]\n    );\n\n    let mut buffer = vec![];\n\n    let res = reader.read_line(&mut buffer);\n    assert!(res.is_ok());\n    assert!(res.unwrap());\n    assert_eq!(\n        b\"\\xFF\\xFE\\x0A\\x4E\\x00\\x4E\\x0A\\x4F\\x00\\x52\\x0A\\x00\",\n        &buffer[..]\n    );\n\n    buffer.clear();\n\n    let res = reader.read_line(&mut buffer);\n    assert!(res.is_ok());\n    assert!(res.unwrap());\n    assert_eq!(\n        b\"\\x6F\\x00\\x20\\x00\\x62\\x00\\x61\\x00\\x72\\x00\\x0A\\x00\",\n        &buffer[..]\n    );\n\n    buffer.clear();\n\n    let res = reader.read_line(&mut buffer);\n    assert!(res.is_ok());\n    assert!(res.unwrap());\n    assert_eq!(\n        b\"\\x68\\x00\\x65\\x00\\x6C\\x00\\x6C\\x00\\x6F\\x00\\x20\\x00\\x77\\x00\\x6F\\x00\\x72\\x00\\x6C\\x00\\x64\\x00\",\n        &buffer[..]\n    );\n\n    buffer.clear();\n\n    let res = reader.read_line(&mut buffer);\n    assert!(res.is_ok());\n    assert!(!res.unwrap());\n    assert!(buffer.is_empty());\n}\n"
  },
  {
    "path": "src/less.rs",
    "content": "#![cfg(feature = \"paging\")]\n\nuse std::ffi::OsStr;\nuse std::process::Command;\n\n#[derive(Debug, PartialEq, Eq)]\npub enum LessVersion {\n    Less(usize),\n    BusyBox,\n}\n\npub fn retrieve_less_version(less_path: &dyn AsRef<OsStr>) -> Option<LessVersion> {\n    let resolved_path = grep_cli::resolve_binary(less_path.as_ref()).ok()?;\n\n    let cmd = Command::new(resolved_path).arg(\"--version\").output().ok()?;\n    if cmd.status.success() {\n        parse_less_version(&cmd.stdout)\n    } else {\n        parse_less_version_busybox(&cmd.stderr)\n    }\n}\n\nfn parse_less_version(output: &[u8]) -> Option<LessVersion> {\n    if !output.starts_with(b\"less \") {\n        return None;\n    }\n\n    let version = std::str::from_utf8(&output[5..]).ok()?;\n    let end = version.find(|c: char| !c.is_ascii_digit())?;\n    Some(LessVersion::Less(version[..end].parse::<usize>().ok()?))\n}\n\nfn parse_less_version_busybox(output: &[u8]) -> Option<LessVersion> {\n    match std::str::from_utf8(output) {\n        Ok(version) if version.contains(\"BusyBox \") => Some(LessVersion::BusyBox),\n        _ => None,\n    }\n}\n\n#[test]\nfn test_parse_less_version_487() {\n    let output = b\"less 487 (GNU regular expressions)\nCopyright (C) 1984-2016  Mark Nudelman\n\nless comes with NO WARRANTY, to the extent permitted by law.\nFor information about the terms of redistribution,\nsee the file named README in the less distribution.\nHomepage: http://www.greenwoodsoftware.com/less\";\n\n    assert_eq!(Some(LessVersion::Less(487)), parse_less_version(output));\n}\n\n#[test]\nfn test_parse_less_version_529() {\n    let output = b\"less 529 (Spencer V8 regular expressions)\nCopyright (C) 1984-2017  Mark Nudelman\n\nless comes with NO WARRANTY, to the extent permitted by law.\nFor information about the terms of redistribution,\nsee the file named README in the less distribution.\nHomepage: http://www.greenwoodsoftware.com/less\";\n\n    assert_eq!(Some(LessVersion::Less(529)), parse_less_version(output));\n}\n\n#[test]\nfn test_parse_less_version_551() {\n    let output = b\"less 551 (PCRE regular expressions)\nCopyright (C) 1984-2019  Mark Nudelman\n\nless comes with NO WARRANTY, to the extent permitted by law.\nFor information about the terms of redistribution,\nsee the file named README in the less distribution.\nHome page: http://www.greenwoodsoftware.com/less\";\n\n    assert_eq!(Some(LessVersion::Less(551)), parse_less_version(output));\n}\n\n#[test]\nfn test_parse_less_version_581_2() {\n    let output = b\"less 581.2 (PCRE2 regular expressions)\nCopyright (C) 1984-2021  Mark Nudelman\n\nless comes with NO WARRANTY, to the extent permitted by law.\nFor information about the terms of redistribution,\nsee the file named README in the less distribution.\nHome page: https://greenwoodsoftware.com/less\";\n\n    assert_eq!(Some(LessVersion::Less(581)), parse_less_version(output));\n}\n\n#[test]\nfn test_parse_less_version_wrong_program() {\n    let output = b\"more from util-linux 2.34\";\n\n    assert_eq!(None, parse_less_version(output));\n    assert_eq!(None, parse_less_version_busybox(output));\n}\n\n#[test]\nfn test_parse_less_version_busybox() {\n    let output = b\"pkg/less: unrecognized option '--version'\nBusyBox v1.35.0 (2022-04-21 10:38:11 EDT) multi-call binary.\n\nUsage: less [-EFIMmNSRh~] [FILE]...\n\nView FILE (or stdin) one screenful at a time\n\n        -E      Quit once the end of a file is reached\n        -F      Quit if entire file fits on first screen\n        -I      Ignore case in all searches\n        -M,-m   Display status line with line numbers\n                and percentage through the file\n        -N      Prefix line number to each line\n        -S      Truncate long lines\n        -R      Remove color escape codes in input\n        -~      Suppress ~s displayed past EOF\";\n\n    assert_eq!(\n        Some(LessVersion::BusyBox),\n        parse_less_version_busybox(output)\n    );\n}\n\n#[test]\nfn test_parse_less_version_invalid_utf_8() {\n    let output = b\"\\xff\";\n\n    assert_eq!(None, parse_less_version(output));\n    assert_eq!(None, parse_less_version_busybox(output));\n}\n"
  },
  {
    "path": "src/lessopen.rs",
    "content": "use std::convert::TryFrom;\nuse std::env;\nuse std::fs::File;\nuse std::io::{BufRead, BufReader, Cursor, Read};\nuse std::path::PathBuf;\nuse std::process::{ExitStatus, Stdio};\n\nuse clircle::{Clircle, Identifier};\nuse execute::{shell, Execute};\n\nuse crate::error::Result;\nuse crate::{\n    bat_warning,\n    input::{Input, InputKind, InputReader, OpenedInput, OpenedInputKind},\n};\n\n/// Preprocess files and/or stdin using $LESSOPEN and $LESSCLOSE\npub(crate) struct LessOpenPreprocessor {\n    lessopen: String,\n    lessclose: Option<String>,\n    kind: LessOpenKind,\n    /// Whether or not data piped via stdin is to be preprocessed\n    preprocess_stdin: bool,\n}\n\nenum LessOpenKind {\n    Piped,\n    PipedIgnoreExitCode,\n    TempFile,\n}\n\nimpl LessOpenPreprocessor {\n    /// Create a new instance of LessOpenPreprocessor\n    /// Will return Ok if and only if $LESSOPEN is set and contains exactly one %s\n    pub(crate) fn new() -> Result<LessOpenPreprocessor> {\n        let lessopen = env::var(\"LESSOPEN\")?;\n\n        // Ignore $LESSOPEN if it does not contains exactly one %s\n        // Note that $LESSCLOSE has no such requirement\n        if lessopen.match_indices(\"%s\").count() != 1 {\n            let error_msg = \"LESSOPEN ignored: must contain exactly one %s\";\n            bat_warning!(\"{error_msg}\");\n            return Err(error_msg.into());\n        }\n\n        // \"||\" means pipe directly to bat without making a temporary file\n        // Also, if preprocessor output is empty and exit code is zero, use the empty output\n        // Otherwise, if output is empty and exit code is nonzero, use original file contents\n        let (kind, lessopen) = if lessopen.starts_with(\"||\") {\n            (LessOpenKind::Piped, lessopen.chars().skip(2).collect())\n        // \"|\" means pipe as above, but ignore exit code and always use preprocessor output even if empty\n        } else if lessopen.starts_with('|') {\n            (\n                LessOpenKind::PipedIgnoreExitCode,\n                lessopen.chars().skip(1).collect(),\n            )\n        // If neither appear, write output to a temporary file and read from that\n        } else {\n            (LessOpenKind::TempFile, lessopen)\n        };\n\n        // \"-\" means that stdin is preprocessed along with files and may appear alongside \"|\" and \"||\"\n        let (stdin, lessopen) = if lessopen.starts_with('-') {\n            (true, lessopen.chars().skip(1).collect())\n        } else {\n            (false, lessopen)\n        };\n\n        Ok(Self {\n            lessopen,\n            lessclose: env::var(\"LESSCLOSE\").ok(),\n            kind,\n            preprocess_stdin: stdin,\n        })\n    }\n\n    pub(crate) fn open<'a, R: BufRead + 'a>(\n        &self,\n        input: Input<'a>,\n        mut stdin: R,\n        stdout_identifier: Option<&Identifier>,\n    ) -> Result<OpenedInput<'a>> {\n        let (lessopen_stdout, path_str, kind) = match input.kind {\n            InputKind::OrdinaryFile(ref path) => {\n                let path_str = match path.to_str() {\n                    Some(str) => str,\n                    None => return input.open(stdin, stdout_identifier),\n                };\n\n                let mut lessopen_command = shell(self.lessopen.replacen(\"%s\", path_str, 1));\n                lessopen_command.stdout(Stdio::piped());\n\n                let lessopen_output = match lessopen_command.execute_output() {\n                    Ok(output) => output,\n                    Err(_) => return input.open(stdin, stdout_identifier),\n                };\n\n                if self.fall_back_to_original_file(&lessopen_output.stdout, lessopen_output.status)\n                {\n                    return input.open(stdin, stdout_identifier);\n                }\n\n                (\n                    lessopen_output.stdout,\n                    path_str.to_string(),\n                    OpenedInputKind::OrdinaryFile(path.to_path_buf()),\n                )\n            }\n            InputKind::StdIn => {\n                if self.preprocess_stdin {\n                    if let Some(stdout) = stdout_identifier {\n                        let input_identifier = Identifier::try_from(clircle::Stdio::Stdin)\n                            .map_err(|e| format!(\"Stdin: Error identifying file: {e}\"))?;\n                        if stdout.surely_conflicts_with(&input_identifier) {\n                            return Err(\"IO circle detected. The input from stdin is also an output. Aborting to avoid infinite loop.\".into());\n                        }\n                    }\n\n                    // stdin isn't Clone or AsRef<[u8]>, so move it into a cloneable buffer\n                    // so the data can be used multiple times if necessary\n                    // NOTE: stdin will be empty from this point onwards\n                    let mut stdin_buffer = Vec::new();\n                    stdin.read_to_end(&mut stdin_buffer)?;\n\n                    let mut lessopen_command = shell(self.lessopen.replacen(\"%s\", \"-\", 1));\n                    lessopen_command.stdout(Stdio::piped());\n\n                    let lessopen_output = match lessopen_command.execute_input_output(&stdin_buffer)\n                    {\n                        Ok(output) => output,\n                        Err(_) => {\n                            return input.open(Cursor::new(stdin_buffer), stdout_identifier);\n                        }\n                    };\n\n                    if self\n                        .fall_back_to_original_file(&lessopen_output.stdout, lessopen_output.status)\n                    {\n                        return input.open(Cursor::new(stdin_buffer), stdout_identifier);\n                    }\n\n                    (\n                        lessopen_output.stdout,\n                        \"-\".to_string(),\n                        OpenedInputKind::StdIn,\n                    )\n                } else {\n                    return input.open(stdin, stdout_identifier);\n                }\n            }\n            InputKind::CustomReader(_) => {\n                return input.open(stdin, stdout_identifier);\n            }\n        };\n\n        Ok(OpenedInput {\n            kind,\n            reader: InputReader::new(BufReader::new(\n                if matches!(self.kind, LessOpenKind::TempFile) {\n                    let lessopen_string = match String::from_utf8(lessopen_stdout) {\n                        Ok(string) => string,\n                        Err(_) => {\n                            return input.open(stdin, stdout_identifier);\n                        }\n                    };\n                    // Remove newline at end of temporary file path returned by $LESSOPEN\n                    let stdout = match lessopen_string.strip_suffix(\"\\n\") {\n                        Some(stripped) => stripped.to_owned(),\n                        None => lessopen_string,\n                    };\n\n                    let file = match File::open(PathBuf::from(&stdout)) {\n                        Ok(file) => file,\n                        Err(_) => {\n                            return input.open(stdin, stdout_identifier);\n                        }\n                    };\n\n                    Preprocessed {\n                        kind: PreprocessedKind::TempFile(file),\n                        lessclose: self\n                            .lessclose\n                            .as_ref()\n                            .map(|s| s.replacen(\"%s\", &path_str, 1).replacen(\"%s\", &stdout, 1)),\n                    }\n                } else {\n                    Preprocessed {\n                        kind: PreprocessedKind::Piped(Cursor::new(lessopen_stdout)),\n                        lessclose: self\n                            .lessclose\n                            .as_ref()\n                            .map(|s| s.replacen(\"%s\", &path_str, 1).replacen(\"%s\", \"-\", 1)),\n                    }\n                },\n            )),\n            metadata: input.metadata,\n            description: input.description,\n        })\n    }\n\n    fn fall_back_to_original_file(&self, lessopen_stdout: &[u8], exit_code: ExitStatus) -> bool {\n        lessopen_stdout.is_empty()\n            && (!exit_code.success() || matches!(self.kind, LessOpenKind::PipedIgnoreExitCode))\n    }\n\n    #[cfg(test)]\n    /// For testing purposes only\n    /// Create an instance of LessOpenPreprocessor with specified valued for $LESSOPEN and $LESSCLOSE\n    fn mock_new(lessopen: Option<&str>, lessclose: Option<&str>) -> Result<LessOpenPreprocessor> {\n        if let Some(command) = lessopen {\n            env::set_var(\"LESSOPEN\", command)\n        } else {\n            env::remove_var(\"LESSOPEN\")\n        }\n\n        if let Some(command) = lessclose {\n            env::set_var(\"LESSCLOSE\", command)\n        } else {\n            env::remove_var(\"LESSCLOSE\")\n        }\n\n        Self::new()\n    }\n}\n\nenum PreprocessedKind {\n    Piped(Cursor<Vec<u8>>),\n    TempFile(File),\n}\n\nimpl Read for PreprocessedKind {\n    fn read(&mut self, buf: &mut [u8]) -> std::result::Result<usize, std::io::Error> {\n        match self {\n            PreprocessedKind::Piped(data) => data.read(buf),\n            PreprocessedKind::TempFile(data) => data.read(buf),\n        }\n    }\n}\n\npub struct Preprocessed {\n    kind: PreprocessedKind,\n    lessclose: Option<String>,\n}\n\nimpl Read for Preprocessed {\n    fn read(&mut self, buf: &mut [u8]) -> std::result::Result<usize, std::io::Error> {\n        self.kind.read(buf)\n    }\n}\n\nimpl Drop for Preprocessed {\n    fn drop(&mut self) {\n        if let Some(lessclose) = self.lessclose.clone() {\n            let mut lessclose_command = shell(lessclose);\n\n            let lessclose_output = match lessclose_command.execute_output() {\n                Ok(output) => output,\n                Err(_) => {\n                    bat_warning!(\"failed to run $LESSCLOSE to clean up temporary file\");\n                    return;\n                }\n            };\n\n            if lessclose_output.status.success() {\n                bat_warning!(\"$LESSCLOSE exited with nonzero exit code\",)\n            };\n        }\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    // All tests here are serial because they all involve reading and writing environment variables\n    // Running them in parallel causes these tests and some others to randomly fail\n    use serial_test::serial;\n\n    use super::*;\n\n    /// Reset environment variables after each test as a precaution\n    fn reset_env_vars() {\n        env::remove_var(\"LESSOPEN\");\n        env::remove_var(\"LESSCLOSE\");\n    }\n\n    #[test]\n    #[serial]\n    fn test_just_lessopen() -> Result<()> {\n        let preprocessor = LessOpenPreprocessor::mock_new(Some(\"|batpipe %s\"), None)?;\n\n        assert_eq!(preprocessor.lessopen, \"batpipe %s\");\n        assert!(preprocessor.lessclose.is_none());\n\n        reset_env_vars();\n\n        Ok(())\n    }\n\n    #[test]\n    #[serial]\n    fn test_just_lessclose() -> Result<()> {\n        let preprocessor = LessOpenPreprocessor::mock_new(None, Some(\"lessclose.sh %s %s\"));\n\n        assert!(preprocessor.is_err());\n\n        reset_env_vars();\n\n        Ok(())\n    }\n\n    #[test]\n    #[serial]\n    fn test_both_lessopen_and_lessclose() -> Result<()> {\n        let preprocessor =\n            LessOpenPreprocessor::mock_new(Some(\"lessopen.sh %s\"), Some(\"lessclose.sh %s %s\"))?;\n\n        assert_eq!(preprocessor.lessopen, \"lessopen.sh %s\");\n        assert_eq!(preprocessor.lessclose.unwrap(), \"lessclose.sh %s %s\");\n\n        reset_env_vars();\n\n        Ok(())\n    }\n\n    #[test]\n    #[serial]\n    fn test_lessopen_prefixes() -> Result<()> {\n        let preprocessor = LessOpenPreprocessor::mock_new(Some(\"batpipe %s\"), None)?;\n\n        assert_eq!(preprocessor.lessopen, \"batpipe %s\");\n        assert!(matches!(preprocessor.kind, LessOpenKind::TempFile));\n        assert!(!preprocessor.preprocess_stdin);\n\n        let preprocessor = LessOpenPreprocessor::mock_new(Some(\"|batpipe %s\"), None)?;\n\n        assert_eq!(preprocessor.lessopen, \"batpipe %s\");\n        assert!(matches!(\n            preprocessor.kind,\n            LessOpenKind::PipedIgnoreExitCode\n        ));\n        assert!(!preprocessor.preprocess_stdin);\n\n        let preprocessor = LessOpenPreprocessor::mock_new(Some(\"||batpipe %s\"), None)?;\n\n        assert_eq!(preprocessor.lessopen, \"batpipe %s\");\n        assert!(matches!(preprocessor.kind, LessOpenKind::Piped));\n        assert!(!preprocessor.preprocess_stdin);\n\n        let preprocessor = LessOpenPreprocessor::mock_new(Some(\"-batpipe %s\"), None)?;\n\n        assert_eq!(preprocessor.lessopen, \"batpipe %s\");\n        assert!(matches!(preprocessor.kind, LessOpenKind::TempFile));\n        assert!(preprocessor.preprocess_stdin);\n\n        let preprocessor = LessOpenPreprocessor::mock_new(Some(\"|-batpipe %s\"), None)?;\n\n        assert_eq!(preprocessor.lessopen, \"batpipe %s\");\n        assert!(matches!(\n            preprocessor.kind,\n            LessOpenKind::PipedIgnoreExitCode\n        ));\n        assert!(preprocessor.preprocess_stdin);\n\n        let preprocessor = LessOpenPreprocessor::mock_new(Some(\"||-batpipe %s\"), None)?;\n\n        assert_eq!(preprocessor.lessopen, \"batpipe %s\");\n        assert!(matches!(preprocessor.kind, LessOpenKind::Piped));\n        assert!(preprocessor.preprocess_stdin);\n\n        reset_env_vars();\n\n        Ok(())\n    }\n\n    #[test]\n    #[serial]\n    fn replace_part_of_argument() -> Result<()> {\n        let preprocessor =\n            LessOpenPreprocessor::mock_new(Some(\"|echo File:%s\"), Some(\"echo File:%s Temp:%s\"))?;\n\n        assert_eq!(preprocessor.lessopen, \"echo File:%s\");\n        assert_eq!(preprocessor.lessclose.unwrap(), \"echo File:%s Temp:%s\");\n\n        reset_env_vars();\n\n        Ok(())\n    }\n}\n"
  },
  {
    "path": "src/lib.rs",
    "content": "//! `bat` is a library to print syntax highlighted content.\n//!\n//! The main struct of this crate is `PrettyPrinter` which can be used to\n//! configure and run the syntax highlighting.\n//!\n//! If you need more control, you can also use the structs in the submodules\n//! (start with `controller::Controller`), but note that the API of these\n//! internal modules is much more likely to change. Some or all of these\n//! modules might be removed in the future.\n//!\n//! \"Hello world\" example:\n//! ```\n//! use bat::PrettyPrinter;\n//!\n//! PrettyPrinter::new()\n//!     .input_from_bytes(b\"<span style=\\\"color: #ff00cc\\\">Hello world!</span>\\n\")\n//!     .language(\"html\")\n//!     .print()\n//!     .unwrap();\n//! ```\n\n#![deny(unsafe_code)]\n\nmod macros;\n\npub mod assets;\npub mod assets_metadata {\n    pub use super::assets::assets_metadata::*;\n}\npub mod config;\npub mod controller;\nmod decorations;\nmod diff;\npub mod error;\npub mod input;\nmod less;\n#[cfg(feature = \"lessopen\")]\nmod lessopen;\npub mod line_range;\npub(crate) mod nonprintable_notation;\npub mod output;\n#[cfg(feature = \"paging\")]\nmod pager;\n#[cfg(feature = \"paging\")]\npub(crate) mod paging;\nmod preprocessor;\nmod pretty_printer;\npub(crate) mod printer;\npub mod style;\npub(crate) mod syntax_mapping;\nmod terminal;\npub mod theme;\nmod vscreen;\npub(crate) mod wrapping;\n\npub use nonprintable_notation::{BinaryBehavior, NonprintableNotation};\npub use preprocessor::StripAnsiMode;\npub use pretty_printer::{Input, PrettyPrinter, Syntax};\npub use syntax_mapping::{MappingTarget, SyntaxMapping};\npub use wrapping::WrappingMode;\n\n#[cfg(feature = \"paging\")]\npub use paging::PagingMode;\n"
  },
  {
    "path": "src/line_range.rs",
    "content": "use crate::error::*;\nuse itertools::{Itertools, MinMaxResult};\n\n#[derive(Debug, Copy, Clone)]\npub struct LineRange {\n    lower: RangeBound,\n    upper: RangeBound,\n}\n\n/// Defines a boundary for a range\n#[derive(Debug, Copy, Clone, Eq, PartialEq)]\npub(crate) enum RangeBound {\n    // An absolute line number marking the boundary of a range\n    Absolute(usize),\n    // A relative (implicitly negative) offset from the end of the file as a boundary\n    OffsetFromEnd(usize),\n}\n\nimpl Default for LineRange {\n    fn default() -> LineRange {\n        LineRange {\n            lower: RangeBound::Absolute(usize::MIN),\n            upper: RangeBound::Absolute(usize::MAX),\n        }\n    }\n}\n\nimpl LineRange {\n    pub fn new(from: usize, to: usize) -> Self {\n        LineRange {\n            lower: RangeBound::Absolute(from),\n            upper: RangeBound::Absolute(to),\n        }\n    }\n\n    pub fn from(range_raw: &str) -> Result<LineRange> {\n        LineRange::parse_range(range_raw)\n    }\n\n    fn parse_range(range_raw: &str) -> Result<LineRange> {\n        let mut new_range = LineRange::default();\n        let mut raw_range_iter = range_raw.bytes();\n        let first_byte = raw_range_iter.next().ok_or(\"Empty line range\")?;\n\n        if first_byte == b':' {\n            if raw_range_iter.next() == Some(b'-') {\n                // E.g. ':-3'\n                let value = range_raw[2..].parse()?;\n                new_range.upper = RangeBound::OffsetFromEnd(value);\n            } else {\n                let value = range_raw[1..].parse()?;\n                new_range.upper = RangeBound::Absolute(value);\n            }\n            return Ok(new_range);\n        } else if range_raw.bytes().last().ok_or(\"Empty line range\")? == b':' {\n            if first_byte == b'-' {\n                // E.g. '-3:'\n                let value = range_raw[1..range_raw.len() - 1].parse()?;\n                new_range.lower = RangeBound::OffsetFromEnd(value);\n            } else {\n                let value = range_raw[..range_raw.len() - 1].parse()?;\n                new_range.lower = RangeBound::Absolute(value);\n            }\n            return Ok(new_range);\n        }\n\n        let line_numbers: Vec<&str> = range_raw.split(':').collect();\n        match line_numbers.len() {\n            1 => {\n                new_range.lower = RangeBound::Absolute(line_numbers[0].parse()?);\n                new_range.upper = new_range.lower;\n                Ok(new_range)\n            }\n            2 => {\n                let mut lower_absolute_bound: usize = line_numbers[0].parse()?;\n                let first_byte = line_numbers[1].bytes().next();\n\n                let upper_absolute_bound = if first_byte == Some(b'+') {\n                    let more_lines = &line_numbers[1][1..]\n                        .parse()\n                        .map_err(|_| \"Invalid character after +\")?;\n                    lower_absolute_bound.saturating_add(*more_lines)\n                } else if first_byte == Some(b'-') {\n                    // this will prevent values like \"-+5\" even though \"+5\" is valid integer\n                    if line_numbers[1][1..].bytes().next() == Some(b'+') {\n                        return Err(\"Invalid character after -\".into());\n                    }\n                    let prior_lines = &line_numbers[1][1..]\n                        .parse()\n                        .map_err(|_| \"Invalid character after -\")?;\n                    let prev_lower = lower_absolute_bound;\n                    lower_absolute_bound = lower_absolute_bound.saturating_sub(*prior_lines);\n                    prev_lower\n                } else {\n                    line_numbers[1].parse()?\n                };\n                new_range.lower = RangeBound::Absolute(lower_absolute_bound);\n                new_range.upper = RangeBound::Absolute(upper_absolute_bound);\n                Ok(new_range)\n            }\n            3 => {\n                // Handle context syntax: N::C or N:M:C\n                if line_numbers[1].is_empty() {\n                    // Format: N::C - single line with context\n                    let line_number: usize = line_numbers[0].parse()\n                        .map_err(|_| \"Invalid line number in N::C format\")?;\n                    let context: usize = line_numbers[2].parse()\n                        .map_err(|_| \"Invalid context number in N::C format\")?;\n\n                    new_range.lower = RangeBound::Absolute(line_number.saturating_sub(context));\n                    new_range.upper = RangeBound::Absolute(line_number.saturating_add(context));\n                } else {\n                    // Format: N:M:C - range with context\n                    let start_line: usize = line_numbers[0].parse()\n                        .map_err(|_| \"Invalid start line number in N:M:C format\")?;\n                    let end_line: usize = line_numbers[1].parse()\n                        .map_err(|_| \"Invalid end line number in N:M:C format\")?;\n                    let context: usize = line_numbers[2].parse()\n                        .map_err(|_| \"Invalid context number in N:M:C format\")?;\n\n                    new_range.lower = RangeBound::Absolute(start_line.saturating_sub(context));\n                    new_range.upper = RangeBound::Absolute(end_line.saturating_add(context));\n                }\n                Ok(new_range)\n            }\n            _ => Err(\n                \"Line range contained too many ':' characters. Expected format: 'N', 'N:M', 'N::C', or 'N:M:C'\"\n                    .into(),\n            ),\n        }\n    }\n\n    /// Checks if a line number is inside the range.\n    /// For ranges with relative offsets range bounds `max_buffered_line_number` is necessary\n    /// to convert the offset to an absolute value.\n    pub(crate) fn is_inside(\n        &self,\n        line: usize,\n        max_buffered_line_number: MaxBufferedLineNumber,\n    ) -> bool {\n        match (self.lower, self.upper, max_buffered_line_number) {\n            (RangeBound::Absolute(lower), RangeBound::Absolute(upper), _) => {\n                lower <= line && line <= upper\n            }\n            (\n                RangeBound::Absolute(lower),\n                RangeBound::OffsetFromEnd(offset),\n                MaxBufferedLineNumber::Final(last_line_number),\n            ) => lower <= line && line <= last_line_number.saturating_sub(offset),\n            (\n                RangeBound::Absolute(lower),\n                RangeBound::OffsetFromEnd(_),\n                MaxBufferedLineNumber::Tentative(_),\n            ) => {\n                // We don't know the final line number yet, so the assumption is that the line is\n                // still far enough away from the upper end of the range\n                lower <= line\n            }\n            (\n                RangeBound::OffsetFromEnd(offset),\n                RangeBound::Absolute(upper),\n                MaxBufferedLineNumber::Final(last_line_number),\n            ) => last_line_number.saturating_sub(offset) <= line && line <= upper,\n            (\n                RangeBound::OffsetFromEnd(_),\n                RangeBound::Absolute(_),\n                MaxBufferedLineNumber::Tentative(_),\n            ) => {\n                // We don't know the final line number yet, so the assumption is that the line is\n                // still too far away from the having reached the lower end of the range\n                false\n            }\n            (\n                RangeBound::OffsetFromEnd(lower),\n                RangeBound::OffsetFromEnd(upper),\n                MaxBufferedLineNumber::Final(last_line_number),\n            ) => {\n                last_line_number.saturating_sub(lower) <= line\n                    && line <= last_line_number.saturating_sub(upper)\n            }\n            (\n                RangeBound::OffsetFromEnd(_),\n                RangeBound::OffsetFromEnd(_),\n                MaxBufferedLineNumber::Tentative(_),\n            ) => {\n                // We don't know the final line number yet, so the assumption is that we're still\n                // too far away from the having reached the lower end of the range\n                false\n            }\n        }\n    }\n}\n\n#[test]\nfn test_parse_full() {\n    let range = LineRange::from(\"40:50\").expect(\"Shouldn't fail on test!\");\n    assert_eq!(RangeBound::Absolute(40), range.lower);\n    assert_eq!(RangeBound::Absolute(50), range.upper);\n}\n\n#[test]\nfn test_parse_partial_min() {\n    let range = LineRange::from(\":50\").expect(\"Shouldn't fail on test!\");\n    assert_eq!(RangeBound::Absolute(usize::MIN), range.lower);\n    assert_eq!(RangeBound::Absolute(50), range.upper);\n}\n\n#[test]\nfn test_parse_partial_relative_negative_from_back() {\n    let range = LineRange::from(\":-5\").expect(\"Shouldn't fail on test!\");\n    assert_eq!(RangeBound::Absolute(usize::MIN), range.lower);\n    assert_eq!(RangeBound::OffsetFromEnd(5), range.upper);\n}\n\n#[test]\nfn test_parse_relative_negative_from_back_partial() {\n    let range = LineRange::from(\"-5:\").expect(\"Shouldn't fail on test!\");\n    assert_eq!(RangeBound::OffsetFromEnd(5), range.lower);\n    assert_eq!(RangeBound::Absolute(usize::MAX), range.upper);\n}\n\n#[test]\nfn test_parse_partial_max() {\n    let range = LineRange::from(\"40:\").expect(\"Shouldn't fail on test!\");\n    assert_eq!(RangeBound::Absolute(40), range.lower);\n    assert_eq!(RangeBound::Absolute(usize::MAX), range.upper);\n}\n\n#[test]\nfn test_parse_single() {\n    let range = LineRange::from(\"40\").expect(\"Shouldn't fail on test!\");\n    assert_eq!(RangeBound::Absolute(40), range.lower);\n    assert_eq!(RangeBound::Absolute(40), range.upper);\n}\n\n#[test]\nfn test_parse_fail() {\n    // Test 4+ colon parts should still fail\n    let range = LineRange::from(\"40:50:80:90\");\n    assert!(range.is_err());\n    // Test invalid formats that should still fail\n    let range = LineRange::from(\"-2:5\");\n    assert!(range.is_err());\n    let range = LineRange::from(\":40:\");\n    assert!(range.is_err());\n    // Test completely malformed input\n    let range = LineRange::from(\"abc:def\");\n    assert!(range.is_err());\n}\n\n#[test]\nfn test_parse_plus() {\n    let range = LineRange::from(\"40:+10\").expect(\"Shouldn't fail on test!\");\n    assert_eq!(RangeBound::Absolute(40), range.lower);\n    assert_eq!(RangeBound::Absolute(50), range.upper);\n}\n\n#[test]\nfn test_parse_plus_overflow() {\n    let range = LineRange::from(&format!(\"{}:+1\", usize::MAX)).expect(\"Shouldn't fail on test!\");\n    assert_eq!(RangeBound::Absolute(usize::MAX), range.lower);\n    assert_eq!(RangeBound::Absolute(usize::MAX), range.upper);\n}\n\n#[test]\nfn test_parse_plus_fail() {\n    let range = LineRange::from(\"40:+z\");\n    assert!(range.is_err());\n    let range = LineRange::from(\"40:+-10\");\n    assert!(range.is_err());\n    let range = LineRange::from(\"40:+\");\n    assert!(range.is_err());\n}\n\n#[test]\nfn test_parse_minus_success() {\n    let range = LineRange::from(\"40:-10\").expect(\"Shouldn't fail on test!\");\n    assert_eq!(RangeBound::Absolute(30), range.lower);\n    assert_eq!(RangeBound::Absolute(40), range.upper);\n}\n\n#[test]\nfn test_parse_minus_edge_cases_success() {\n    let range = LineRange::from(\"5:-4\").expect(\"Shouldn't fail on test!\");\n    assert_eq!(RangeBound::Absolute(1), range.lower);\n    assert_eq!(RangeBound::Absolute(5), range.upper);\n    let range = LineRange::from(\"5:-5\").expect(\"Shouldn't fail on test!\");\n    assert_eq!(RangeBound::Absolute(0), range.lower);\n    assert_eq!(RangeBound::Absolute(5), range.upper);\n    let range = LineRange::from(\"5:-100\").expect(\"Shouldn't fail on test!\");\n    assert_eq!(RangeBound::Absolute(0), range.lower);\n    assert_eq!(RangeBound::Absolute(5), range.upper);\n}\n\n#[test]\nfn test_parse_minus_fail() {\n    let range = LineRange::from(\"40:-z\");\n    assert!(range.is_err());\n    let range = LineRange::from(\"40:-+10\");\n    assert!(range.is_err());\n    let range = LineRange::from(\"40:-\");\n    assert!(range.is_err());\n}\n\n#[test]\nfn test_parse_context_single_line() {\n    let range = LineRange::from(\"35::5\").expect(\"Shouldn't fail on test!\");\n    assert_eq!(RangeBound::Absolute(30), range.lower);\n    assert_eq!(RangeBound::Absolute(40), range.upper);\n}\n\n#[test]\nfn test_parse_context_range() {\n    let range = LineRange::from(\"30:40:2\").expect(\"Shouldn't fail on test!\");\n    assert_eq!(RangeBound::Absolute(28), range.lower);\n    assert_eq!(RangeBound::Absolute(42), range.upper);\n\n    // Test the case that used to fail but should now work\n    let range = LineRange::from(\"40:50:80\").expect(\"Shouldn't fail on test!\");\n    assert_eq!(RangeBound::Absolute(0), range.lower); // 40 - 80 = 0 (saturated)\n    assert_eq!(RangeBound::Absolute(130), range.upper); // 50 + 80 = 130\n}\n\n#[test]\nfn test_parse_context_edge_cases() {\n    // Test with small line numbers that would underflow\n    let range = LineRange::from(\"5::10\").expect(\"Shouldn't fail on test!\");\n    assert_eq!(RangeBound::Absolute(0), range.lower);\n    assert_eq!(RangeBound::Absolute(15), range.upper);\n\n    // Test with zero context\n    let range = LineRange::from(\"50::0\").expect(\"Shouldn't fail on test!\");\n    assert_eq!(RangeBound::Absolute(50), range.lower);\n    assert_eq!(RangeBound::Absolute(50), range.upper);\n\n    // Test range with zero context\n    let range = LineRange::from(\"30:40:0\").expect(\"Shouldn't fail on test!\");\n    assert_eq!(RangeBound::Absolute(30), range.lower);\n    assert_eq!(RangeBound::Absolute(40), range.upper);\n}\n\n#[test]\nfn test_parse_context_fail() {\n    let range = LineRange::from(\"40::z\");\n    assert!(range.is_err());\n    let range = LineRange::from(\"::5\");\n    assert!(range.is_err());\n    let range = LineRange::from(\"40::\");\n    assert!(range.is_err());\n    let range = LineRange::from(\"30:40:z\");\n    assert!(range.is_err());\n    let range = LineRange::from(\"30::40:5\");\n    assert!(range.is_err());\n}\n\n#[derive(Copy, Clone, Debug, PartialEq, Eq)]\npub enum RangeCheckResult {\n    // Within one of the given ranges\n    InRange,\n\n    // Before the first range or within two ranges\n    BeforeOrBetweenRanges,\n\n    // Line number is outside of all ranges and larger than the last range.\n    AfterLastRange,\n}\n\n/// Represents the maximum line number in the buffer when reading a file.\n#[derive(Debug, Copy, Clone, Eq, PartialEq)]\npub(crate) enum MaxBufferedLineNumber {\n    // The currently known maximum line number, may not be the final line number\n    Tentative(usize),\n    // The final line number, when EOF has been reached\n    Final(usize),\n}\n\n#[derive(Debug, Clone)]\npub struct LineRanges {\n    ranges: Vec<LineRange>,\n    // The largest absolute upper line number of all ranges\n    largest_absolute_upper_bound: usize,\n    // The smallest relative offset from the end of all ranges\n    smallest_offset_from_end: usize,\n    // The largest relative offset from the end of all ranges\n    largest_offset_from_end: usize,\n}\n\nimpl LineRanges {\n    pub fn none() -> LineRanges {\n        LineRanges::from(vec![])\n    }\n\n    pub fn all() -> LineRanges {\n        LineRanges::from(vec![LineRange::default()])\n    }\n\n    pub fn from(ranges: Vec<LineRange>) -> LineRanges {\n        let largest_absolute_upper_bound = ranges\n            .iter()\n            .filter_map(|r| match r.upper {\n                RangeBound::Absolute(upper) => Some(upper),\n                _ => None,\n            })\n            .max()\n            .unwrap_or(usize::MAX);\n\n        let offsets_min_max = ranges\n            .iter()\n            .flat_map(|r| [r.lower, r.upper])\n            .filter_map(|r| match r {\n                RangeBound::OffsetFromEnd(offset) => Some(offset),\n                _ => None,\n            })\n            .minmax();\n\n        let (smallest_offset_from_end, largest_offset_from_end) = match offsets_min_max {\n            MinMaxResult::NoElements => (usize::MIN, usize::MIN),\n            MinMaxResult::OneElement(offset) => (offset, offset),\n            MinMaxResult::MinMax(min, max) => (min, max),\n        };\n\n        LineRanges {\n            ranges,\n            largest_absolute_upper_bound,\n            smallest_offset_from_end,\n            largest_offset_from_end,\n        }\n    }\n\n    pub(crate) fn check(\n        &self,\n        line: usize,\n        max_buffered_line_number: MaxBufferedLineNumber,\n    ) -> RangeCheckResult {\n        if self\n            .ranges\n            .iter()\n            .any(|r| r.is_inside(line, max_buffered_line_number))\n        {\n            RangeCheckResult::InRange\n        } else if matches!(max_buffered_line_number, MaxBufferedLineNumber::Final(final_line_number) if line > final_line_number.saturating_sub(self.smallest_offset_from_end))\n        {\n            RangeCheckResult::AfterLastRange\n        } else if line < self.largest_absolute_upper_bound {\n            RangeCheckResult::BeforeOrBetweenRanges\n        } else {\n            RangeCheckResult::AfterLastRange\n        }\n    }\n\n    pub(crate) fn largest_offset_from_end(&self) -> usize {\n        self.largest_offset_from_end\n    }\n}\n\nimpl Default for LineRanges {\n    fn default() -> Self {\n        Self::all()\n    }\n}\n\n#[derive(Debug, Clone)]\npub struct HighlightedLineRanges(pub LineRanges);\n\nimpl Default for HighlightedLineRanges {\n    fn default() -> Self {\n        HighlightedLineRanges(LineRanges::none())\n    }\n}\n\n#[cfg(test)]\nfn ranges(rs: &[&str]) -> LineRanges {\n    LineRanges::from(rs.iter().map(|r| LineRange::from(r).unwrap()).collect())\n}\n\n#[test]\nfn test_ranges_simple() {\n    let ranges = ranges(&[\"3:8\"]);\n\n    assert_eq!(\n        RangeCheckResult::BeforeOrBetweenRanges,\n        ranges.check(2, MaxBufferedLineNumber::Tentative(2))\n    );\n    assert_eq!(\n        RangeCheckResult::InRange,\n        ranges.check(5, MaxBufferedLineNumber::Tentative(5))\n    );\n    assert_eq!(\n        RangeCheckResult::AfterLastRange,\n        ranges.check(9, MaxBufferedLineNumber::Tentative(9))\n    );\n}\n\n#[test]\nfn test_ranges_advanced() {\n    let ranges = ranges(&[\"3:8\", \"11:20\", \"25:30\"]);\n\n    assert_eq!(\n        RangeCheckResult::BeforeOrBetweenRanges,\n        ranges.check(2, MaxBufferedLineNumber::Tentative(2))\n    );\n    assert_eq!(\n        RangeCheckResult::InRange,\n        ranges.check(5, MaxBufferedLineNumber::Tentative(5))\n    );\n    assert_eq!(\n        RangeCheckResult::BeforeOrBetweenRanges,\n        ranges.check(9, MaxBufferedLineNumber::Tentative(9))\n    );\n    assert_eq!(\n        RangeCheckResult::InRange,\n        ranges.check(11, MaxBufferedLineNumber::Tentative(11))\n    );\n    assert_eq!(\n        RangeCheckResult::BeforeOrBetweenRanges,\n        ranges.check(22, MaxBufferedLineNumber::Tentative(22))\n    );\n    assert_eq!(\n        RangeCheckResult::InRange,\n        ranges.check(28, MaxBufferedLineNumber::Tentative(28))\n    );\n    assert_eq!(\n        RangeCheckResult::AfterLastRange,\n        ranges.check(31, MaxBufferedLineNumber::Tentative(31))\n    );\n}\n\n#[test]\nfn test_ranges_open_low() {\n    let ranges = ranges(&[\"3:8\", \":5\"]);\n\n    assert_eq!(\n        RangeCheckResult::InRange,\n        ranges.check(1, MaxBufferedLineNumber::Tentative(1))\n    );\n    assert_eq!(\n        RangeCheckResult::InRange,\n        ranges.check(3, MaxBufferedLineNumber::Tentative(3))\n    );\n    assert_eq!(\n        RangeCheckResult::InRange,\n        ranges.check(7, MaxBufferedLineNumber::Tentative(7))\n    );\n    assert_eq!(\n        RangeCheckResult::AfterLastRange,\n        ranges.check(9, MaxBufferedLineNumber::Tentative(9))\n    );\n}\n\n#[test]\nfn test_ranges_open_high() {\n    let ranges = ranges(&[\"3:\", \"2:5\"]);\n    assert_eq!(\n        RangeCheckResult::BeforeOrBetweenRanges,\n        ranges.check(1, MaxBufferedLineNumber::Tentative(1))\n    );\n\n    assert_eq!(\n        RangeCheckResult::BeforeOrBetweenRanges,\n        ranges.check(1, MaxBufferedLineNumber::Final(10))\n    );\n    assert_eq!(\n        RangeCheckResult::InRange,\n        ranges.check(2, MaxBufferedLineNumber::Final(10))\n    );\n    assert_eq!(\n        RangeCheckResult::InRange,\n        ranges.check(9, MaxBufferedLineNumber::Final(10))\n    );\n    assert_eq!(\n        RangeCheckResult::InRange,\n        ranges.check(10, MaxBufferedLineNumber::Final(10))\n    );\n    assert_eq!(\n        RangeCheckResult::InRange,\n        ranges.check(3, MaxBufferedLineNumber::Tentative(3))\n    );\n    assert_eq!(\n        RangeCheckResult::InRange,\n        ranges.check(5, MaxBufferedLineNumber::Tentative(5))\n    );\n    assert_eq!(\n        RangeCheckResult::InRange,\n        ranges.check(9, MaxBufferedLineNumber::Tentative(9))\n    );\n}\n\n#[test]\nfn test_ranges_open_up_to_3_from_end() {\n    let ranges = ranges(&[\":-3\"]);\n    assert_eq!(\n        RangeCheckResult::InRange,\n        ranges.check(1, MaxBufferedLineNumber::Tentative(1))\n    );\n    assert_eq!(\n        RangeCheckResult::InRange,\n        ranges.check(3, MaxBufferedLineNumber::Tentative(3))\n    );\n    assert_eq!(\n        RangeCheckResult::InRange,\n        ranges.check(5, MaxBufferedLineNumber::Tentative(8))\n    );\n    assert_eq!(\n        RangeCheckResult::InRange,\n        ranges.check(1, MaxBufferedLineNumber::Final(6))\n    );\n    assert_eq!(\n        RangeCheckResult::InRange,\n        ranges.check(2, MaxBufferedLineNumber::Final(6))\n    );\n    assert_eq!(\n        RangeCheckResult::InRange,\n        ranges.check(3, MaxBufferedLineNumber::Final(6))\n    );\n    assert_eq!(\n        RangeCheckResult::AfterLastRange,\n        ranges.check(4, MaxBufferedLineNumber::Final(6))\n    );\n    assert_eq!(\n        RangeCheckResult::AfterLastRange,\n        ranges.check(5, MaxBufferedLineNumber::Final(6))\n    );\n    assert_eq!(\n        RangeCheckResult::AfterLastRange,\n        ranges.check(6, MaxBufferedLineNumber::Final(6))\n    );\n}\n\n#[test]\nfn test_ranges_multiple_negative_from_back() {\n    let ranges = ranges(&[\":-3\", \":-9\"]);\n    assert_eq!(\n        RangeCheckResult::InRange,\n        ranges.check(1, MaxBufferedLineNumber::Tentative(1))\n    );\n    assert_eq!(\n        RangeCheckResult::InRange,\n        ranges.check(3, MaxBufferedLineNumber::Tentative(3))\n    );\n    assert_eq!(\n        RangeCheckResult::InRange,\n        ranges.check(5, MaxBufferedLineNumber::Tentative(14))\n    );\n    assert_eq!(\n        RangeCheckResult::InRange,\n        ranges.check(1, MaxBufferedLineNumber::Final(16))\n    );\n    assert_eq!(\n        RangeCheckResult::InRange,\n        ranges.check(7, MaxBufferedLineNumber::Final(16))\n    );\n    assert_eq!(\n        RangeCheckResult::InRange,\n        ranges.check(13, MaxBufferedLineNumber::Final(16))\n    );\n    assert_eq!(\n        RangeCheckResult::AfterLastRange,\n        ranges.check(14, MaxBufferedLineNumber::Final(16))\n    );\n    assert_eq!(\n        RangeCheckResult::AfterLastRange,\n        ranges.check(16, MaxBufferedLineNumber::Final(16))\n    );\n}\n\n#[test]\nfn test_ranges_3_from_back_up_to_end() {\n    let ranges = ranges(&[\"-3:\"]);\n\n    assert_eq!(\n        RangeCheckResult::BeforeOrBetweenRanges,\n        ranges.check(1, MaxBufferedLineNumber::Tentative(1))\n    );\n    assert_eq!(\n        RangeCheckResult::BeforeOrBetweenRanges,\n        ranges.check(3, MaxBufferedLineNumber::Tentative(3))\n    );\n    assert_eq!(\n        RangeCheckResult::BeforeOrBetweenRanges,\n        ranges.check(5, MaxBufferedLineNumber::Tentative(8))\n    );\n    assert_eq!(\n        RangeCheckResult::BeforeOrBetweenRanges,\n        ranges.check(1, MaxBufferedLineNumber::Final(5))\n    );\n    assert_eq!(\n        RangeCheckResult::InRange,\n        ranges.check(2, MaxBufferedLineNumber::Final(5))\n    );\n    assert_eq!(\n        RangeCheckResult::InRange,\n        ranges.check(3, MaxBufferedLineNumber::Final(5))\n    );\n    assert_eq!(\n        RangeCheckResult::InRange,\n        ranges.check(4, MaxBufferedLineNumber::Final(5))\n    );\n    assert_eq!(\n        RangeCheckResult::InRange,\n        ranges.check(5, MaxBufferedLineNumber::Final(5))\n    );\n}\n\n#[test]\nfn test_ranges_multiple_negative_offsets_to_end() {\n    let ranges = ranges(&[\"-3:\", \"-12:\"]);\n    assert_eq!(\n        RangeCheckResult::BeforeOrBetweenRanges,\n        ranges.check(5, MaxBufferedLineNumber::Tentative(8))\n    );\n    assert_eq!(\n        RangeCheckResult::BeforeOrBetweenRanges,\n        ranges.check(5, MaxBufferedLineNumber::Tentative(17))\n    );\n    assert_eq!(\n        RangeCheckResult::InRange,\n        ranges.check(8, MaxBufferedLineNumber::Final(20))\n    );\n    assert_eq!(\n        RangeCheckResult::InRange,\n        ranges.check(9, MaxBufferedLineNumber::Final(20))\n    );\n}\n\n#[test]\nfn test_ranges_absolute_bound_and_offset() {\n    let ranges = ranges(&[\"5:\", \":-2\"]);\n    assert_eq!(\n        RangeCheckResult::InRange,\n        ranges.check(4, MaxBufferedLineNumber::Tentative(6))\n    );\n    assert_eq!(\n        RangeCheckResult::InRange,\n        ranges.check(5, MaxBufferedLineNumber::Tentative(7))\n    );\n    assert_eq!(\n        RangeCheckResult::InRange,\n        ranges.check(8, MaxBufferedLineNumber::Final(10))\n    );\n    assert_eq!(\n        RangeCheckResult::InRange,\n        ranges.check(9, MaxBufferedLineNumber::Final(10))\n    );\n    assert_eq!(\n        RangeCheckResult::InRange,\n        ranges.check(10, MaxBufferedLineNumber::Final(10))\n    );\n}\n\n#[test]\nfn test_ranges_all() {\n    let ranges = LineRanges::all();\n\n    assert_eq!(\n        RangeCheckResult::InRange,\n        ranges.check(1, MaxBufferedLineNumber::Tentative(1))\n    );\n}\n\n#[test]\nfn test_ranges_none() {\n    let ranges = LineRanges::none();\n\n    assert_ne!(\n        RangeCheckResult::InRange,\n        ranges.check(1, MaxBufferedLineNumber::Tentative(1))\n    );\n}\n"
  },
  {
    "path": "src/macros.rs",
    "content": "#[macro_export]\nmacro_rules! bat_warning {\n    ($($arg:tt)*) => ({\n        use nu_ansi_term::Color::Yellow;\n        eprintln!(\"{}: {}\", Yellow.paint(\"[bat warning]\"), format!($($arg)*));\n    })\n}\n"
  },
  {
    "path": "src/nonprintable_notation.rs",
    "content": "/// How to print non-printable characters with\n/// [crate::config::Config::show_nonprintable]\n#[derive(Debug, Default, Clone, Copy, PartialEq, Eq)]\n#[non_exhaustive]\npub enum NonprintableNotation {\n    /// Use caret notation (^G, ^J, ^@, ..)\n    Caret,\n\n    /// Use unicode notation (␇, ␊, ␀, ..)\n    #[default]\n    Unicode,\n}\n\n/// How to treat binary content\n#[derive(Debug, Default, Clone, Copy, PartialEq, Eq)]\n#[non_exhaustive]\npub enum BinaryBehavior {\n    /// Do not print any binary content\n    #[default]\n    NoPrinting,\n\n    /// Treat binary content as normal text\n    AsText,\n}\n"
  },
  {
    "path": "src/output.rs",
    "content": "use std::fmt;\nuse std::io;\n#[cfg(feature = \"paging\")]\nuse std::process::Child;\n#[cfg(feature = \"paging\")]\nuse std::thread::{spawn, JoinHandle};\n\nuse crate::error::*;\n#[cfg(feature = \"paging\")]\nuse crate::less::{retrieve_less_version, LessVersion};\n#[cfg(feature = \"paging\")]\nuse crate::paging::PagingMode;\n#[cfg(feature = \"paging\")]\nuse crate::wrapping::WrappingMode;\n\n#[cfg(feature = \"paging\")]\npub struct BuiltinPager {\n    pager: minus::Pager,\n    handle: Option<JoinHandle<Result<()>>>,\n}\n\n#[cfg(feature = \"paging\")]\nimpl BuiltinPager {\n    fn new() -> Self {\n        let pager = minus::Pager::new();\n        let handle = {\n            let pager = pager.clone();\n            Some(spawn(move || {\n                minus::dynamic_paging(pager).map_err(Error::from)\n            }))\n        };\n        Self { pager, handle }\n    }\n}\n\n#[cfg(feature = \"paging\")]\nimpl std::fmt::Debug for BuiltinPager {\n    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {\n        f.debug_struct(\"BuiltinPager\")\n            //.field(\"pager\", &self.pager) /// minus::Pager doesn't implement fmt::Debug\n            .field(\"handle\", &self.handle)\n            .finish()\n    }\n}\n\n#[cfg(feature = \"paging\")]\n#[derive(Debug, PartialEq)]\nenum SingleScreenAction {\n    Quit,\n    Nothing,\n}\n\n#[derive(Debug)]\npub enum OutputType {\n    #[cfg(feature = \"paging\")]\n    Pager(Child),\n    #[cfg(feature = \"paging\")]\n    BuiltinPager(BuiltinPager),\n    Stdout(io::Stdout),\n}\n\nimpl OutputType {\n    #[cfg(feature = \"paging\")]\n    pub fn from_mode(\n        paging_mode: PagingMode,\n        wrapping_mode: WrappingMode,\n        pager: Option<&str>,\n    ) -> Result<Self> {\n        use self::PagingMode::*;\n        Ok(match paging_mode {\n            Always => OutputType::try_pager(SingleScreenAction::Nothing, wrapping_mode, pager)?,\n            QuitIfOneScreen => {\n                OutputType::try_pager(SingleScreenAction::Quit, wrapping_mode, pager)?\n            }\n            _ => OutputType::stdout(),\n        })\n    }\n\n    /// Try to launch the pager. Fall back to stdout in case of errors.\n    #[cfg(feature = \"paging\")]\n    fn try_pager(\n        single_screen_action: SingleScreenAction,\n        wrapping_mode: WrappingMode,\n        pager_from_config: Option<&str>,\n    ) -> Result<Self> {\n        use crate::pager::{self, PagerKind, PagerSource};\n        use std::process::{Command, Stdio};\n\n        let pager_opt =\n            pager::get_pager(pager_from_config).map_err(|_| \"Could not parse pager command.\")?;\n\n        let pager = match pager_opt {\n            Some(pager) => pager,\n            None => return Ok(OutputType::stdout()),\n        };\n\n        if pager.kind == PagerKind::Bat {\n            return Err(Error::InvalidPagerValueBat);\n        }\n\n        if pager.kind == PagerKind::Builtin {\n            return Ok(OutputType::BuiltinPager(BuiltinPager::new()));\n        }\n\n        let resolved_path = match grep_cli::resolve_binary(&pager.bin) {\n            Ok(path) => path,\n            Err(_) => {\n                crate::bat_warning!(\n                    \"Pager '{}' not found, outputting to stdout instead\",\n                    pager.bin\n                );\n                return Ok(OutputType::stdout());\n            }\n        };\n\n        let mut p = Command::new(resolved_path);\n        let args = pager.args;\n\n        if pager.kind == PagerKind::Less {\n            // less needs to be called with the '-R' option in order to properly interpret the\n            // ANSI color sequences printed by bat. If someone has set PAGER=\"less -F\", we\n            // therefore need to overwrite the arguments and add '-R'.\n            //\n            // We only do this for PAGER (as it is not specific to 'bat'), not for BAT_PAGER\n            // or bats '--pager' command line option.\n            let replace_arguments_to_less = pager.source == PagerSource::EnvVarPager;\n\n            if args.is_empty() || replace_arguments_to_less {\n                p.arg(\"-R\"); // Short version of --RAW-CONTROL-CHARS for maximum compatibility\n                if single_screen_action == SingleScreenAction::Quit {\n                    p.arg(\"-F\"); // Short version of --quit-if-one-screen for compatibility\n                }\n\n                if wrapping_mode == WrappingMode::NoWrapping(true) {\n                    p.arg(\"-S\"); // Short version of --chop-long-lines for compatibility\n                }\n\n                let less_version = retrieve_less_version(&pager.bin);\n\n                // Ensures that 'less' quits together with 'bat'\n                // The BusyBox version of less does not support -K\n                if less_version != Some(LessVersion::BusyBox) {\n                    p.arg(\"-K\"); // Short version of '--quit-on-intr'\n                }\n\n                // Passing '--no-init' fixes a bug with '--quit-if-one-screen' in older\n                // versions of 'less'. Unfortunately, it also breaks mouse-wheel support.\n                //\n                // See: http://www.greenwoodsoftware.com/less/news.530.html\n                //\n                // For newer versions (530 or 558 on Windows), we omit '--no-init' as it\n                // is not needed anymore.\n                if single_screen_action == SingleScreenAction::Quit {\n                    match less_version {\n                        None => {\n                            p.arg(\"--no-init\");\n                        }\n                        Some(LessVersion::Less(version))\n                            if (version < 530 || (cfg!(windows) && version < 558)) =>\n                        {\n                            p.arg(\"--no-init\");\n                        }\n                        _ => {}\n                    }\n                }\n            } else {\n                p.args(args);\n            }\n            p.env(\"LESSCHARSET\", \"UTF-8\");\n\n            #[cfg(feature = \"lessopen\")]\n            // Ensures that 'less' does not preprocess input again if '$LESSOPEN' is set.\n            p.arg(\"--no-lessopen\");\n        } else {\n            p.args(args);\n        };\n\n        Ok(p.stdin(Stdio::piped())\n            .spawn()\n            .map(OutputType::Pager)\n            .unwrap_or_else(|_| {\n                crate::bat_warning!(\n                    \"Pager '{}' not found, outputting to stdout instead\",\n                    &pager.bin\n                );\n                OutputType::stdout()\n            }))\n    }\n\n    pub(crate) fn stdout() -> Self {\n        OutputType::Stdout(io::stdout())\n    }\n\n    #[cfg(feature = \"paging\")]\n    pub(crate) fn is_pager(&self) -> bool {\n        matches!(self, OutputType::Pager(_) | OutputType::BuiltinPager(_))\n    }\n\n    #[cfg(not(feature = \"paging\"))]\n    pub(crate) fn is_pager(&self) -> bool {\n        false\n    }\n\n    pub fn handle<'a>(&'a mut self) -> Result<OutputHandle<'a>> {\n        Ok(match *self {\n            #[cfg(feature = \"paging\")]\n            OutputType::Pager(ref mut command) => OutputHandle::IoWrite(\n                command\n                    .stdin\n                    .as_mut()\n                    .ok_or(\"Could not open stdin for pager\")?,\n            ),\n            #[cfg(feature = \"paging\")]\n            OutputType::BuiltinPager(ref mut pager) => OutputHandle::FmtWrite(&mut pager.pager),\n            OutputType::Stdout(ref mut handle) => OutputHandle::IoWrite(handle),\n        })\n    }\n}\n\n#[cfg(feature = \"paging\")]\nimpl Drop for OutputType {\n    fn drop(&mut self) {\n        match *self {\n            OutputType::Pager(ref mut command) => {\n                let _ = command.wait();\n            }\n            OutputType::BuiltinPager(ref mut pager) => {\n                if let Some(handle) = pager.handle.take() {\n                    let _ = handle.join();\n                }\n            }\n            OutputType::Stdout(_) => (),\n        }\n    }\n}\n\npub enum OutputHandle<'a> {\n    IoWrite(&'a mut dyn io::Write),\n    FmtWrite(&'a mut dyn fmt::Write),\n}\n\nimpl OutputHandle<'_> {\n    pub fn write_fmt(&mut self, args: fmt::Arguments<'_>) -> Result<()> {\n        match self {\n            Self::IoWrite(handle) => handle.write_fmt(args).map_err(Into::into),\n            Self::FmtWrite(handle) => handle.write_fmt(args).map_err(Into::into),\n        }\n    }\n\n    pub fn flush(&mut self) -> Result<()> {\n        match self {\n            Self::IoWrite(handle) => handle.flush().map_err(Into::into),\n            Self::FmtWrite(_) => Ok(()),\n        }\n    }\n}\n"
  },
  {
    "path": "src/pager.rs",
    "content": "use shell_words::ParseError;\nuse std::env;\n\n/// If we use a pager, this enum tells us from where we were told to use it.\n#[derive(Debug, PartialEq)]\npub(crate) enum PagerSource {\n    /// From --config\n    Config,\n\n    /// From the env var BAT_PAGER\n    EnvVarBatPager,\n\n    /// From the env var PAGER\n    EnvVarPager,\n\n    /// No pager was specified, default is used\n    Default,\n}\n\n/// We know about some pagers, for example 'less'. This is a list of all pagers we know about\n#[derive(Debug, PartialEq)]\npub(crate) enum PagerKind {\n    /// bat\n    Bat,\n\n    /// less\n    Less,\n\n    /// more\n    More,\n\n    /// most\n    Most,\n\n    /// builtin\n    Builtin,\n\n    /// A pager we don't know about\n    Unknown,\n}\n\nimpl PagerKind {\n    fn from_bin(bin: &str) -> PagerKind {\n        use std::path::Path;\n\n        if bin == \"builtin\" {\n            return PagerKind::Builtin;\n        }\n\n        // Set to `less` by default on most Linux distros.\n        let pager_bin = Path::new(bin).file_stem();\n\n        // The name of the current running binary. Normally `bat` but sometimes\n        // `batcat` for compatibility reasons.\n        let current_bin = env::args_os().next();\n\n        // Check if the current running binary is set to be our pager.\n        let is_current_bin_pager = current_bin\n            .map(|s| Path::new(&s).file_stem() == pager_bin)\n            .unwrap_or(false);\n\n        match pager_bin.map(|s| s.to_string_lossy()).as_deref() {\n            Some(\"less\") => PagerKind::Less,\n            Some(\"more\") => PagerKind::More,\n            Some(\"most\") => PagerKind::Most,\n            _ if is_current_bin_pager => PagerKind::Bat,\n            _ => PagerKind::Unknown,\n        }\n    }\n}\n\n/// A pager such as 'less', and from where we got it.\n#[derive(Debug)]\npub(crate) struct Pager {\n    /// The pager binary\n    pub bin: String,\n\n    /// The pager binary arguments (that we might tweak)\n    pub args: Vec<String>,\n\n    /// What pager this is\n    pub kind: PagerKind,\n\n    /// From where this pager comes\n    pub source: PagerSource,\n}\n\nimpl Pager {\n    fn new(bin: &str, args: &[String], kind: PagerKind, source: PagerSource) -> Pager {\n        Pager {\n            bin: String::from(bin),\n            args: args.to_vec(),\n            kind,\n            source,\n        }\n    }\n}\n\n/// Returns what pager to use, after looking at both config and environment variables.\npub(crate) fn get_pager(config_pager: Option<&str>) -> Result<Option<Pager>, ParseError> {\n    let bat_pager = env::var(\"BAT_PAGER\");\n    let pager = env::var(\"PAGER\");\n\n    let (cmd, source) = match (config_pager, &bat_pager, &pager) {\n        (Some(config_pager), _, _) => (config_pager, PagerSource::Config),\n        (_, Ok(bat_pager), _) => (bat_pager.as_str(), PagerSource::EnvVarBatPager),\n        (_, _, Ok(pager)) => (pager.as_str(), PagerSource::EnvVarPager),\n        _ => (\"less\", PagerSource::Default),\n    };\n\n    let parts = shell_words::split(cmd)?;\n    match parts.split_first() {\n        Some((bin, args)) => {\n            let kind = PagerKind::from_bin(bin);\n\n            let use_less_instead = if source == PagerSource::EnvVarPager {\n                // 'more' and 'most' do not supports colors; automatically use\n                // 'less' instead if the problematic pager came from the\n                // generic PAGER env var.\n                // If PAGER=bat, silently use 'less' instead to prevent\n                // recursion.\n                // Never silently use 'less' if BAT_PAGER or --pager has been\n                // specified.\n                matches!(kind, PagerKind::More | PagerKind::Most | PagerKind::Bat)\n            } else {\n                false\n            };\n\n            Ok(Some(if use_less_instead {\n                let no_args = vec![];\n                Pager::new(\"less\", &no_args, PagerKind::Less, PagerSource::EnvVarPager)\n            } else {\n                Pager::new(bin, args, kind, source)\n            }))\n        }\n        None => Ok(None),\n    }\n}\n"
  },
  {
    "path": "src/paging.rs",
    "content": "#[derive(Debug, Default, Clone, Copy, PartialEq, Eq)]\npub enum PagingMode {\n    Always,\n    QuitIfOneScreen,\n    #[default]\n    Never,\n}\n"
  },
  {
    "path": "src/preprocessor.rs",
    "content": "use std::fmt::Write;\n\nuse crate::{\n    nonprintable_notation::NonprintableNotation,\n    vscreen::{EscapeSequenceOffsets, EscapeSequenceOffsetsIterator},\n};\n\n/// Expand tabs like an ANSI-enabled expand(1).\npub fn expand_tabs(line: &str, width: usize, cursor: &mut usize) -> String {\n    let mut buffer = String::with_capacity(line.len() * 2);\n\n    for seq in EscapeSequenceOffsetsIterator::new(line) {\n        match seq {\n            EscapeSequenceOffsets::Text { .. } => {\n                let mut text = &line[seq.index_of_start()..seq.index_past_end()];\n                while let Some(index) = text.find('\\t') {\n                    // Add previous text.\n                    if index > 0 {\n                        *cursor += index;\n                        buffer.push_str(&text[0..index]);\n                    }\n\n                    // Add tab.\n                    let spaces = width - (*cursor % width);\n                    *cursor += spaces;\n                    buffer.push_str(&\" \".repeat(spaces));\n\n                    // Next.\n                    text = &text[index + 1..text.len()];\n                }\n\n                *cursor += text.len();\n                buffer.push_str(text);\n            }\n            _ => {\n                // Copy the ANSI escape sequence.\n                buffer.push_str(&line[seq.index_of_start()..seq.index_past_end()])\n            }\n        }\n    }\n\n    buffer\n}\n\nfn try_parse_utf8_char(input: &[u8]) -> Option<(char, usize)> {\n    let str_from_utf8 = |seq| std::str::from_utf8(seq).ok();\n\n    let decoded = input\n        .get(0..1)\n        .and_then(str_from_utf8)\n        .map(|c| (c, 1))\n        .or_else(|| input.get(0..2).and_then(str_from_utf8).map(|c| (c, 2)))\n        .or_else(|| input.get(0..3).and_then(str_from_utf8).map(|c| (c, 3)))\n        .or_else(|| input.get(0..4).and_then(str_from_utf8).map(|c| (c, 4)));\n\n    decoded.map(|(seq, n)| (seq.chars().next().unwrap(), n))\n}\n\npub fn replace_nonprintable(\n    input: &[u8],\n    tab_width: usize,\n    nonprintable_notation: NonprintableNotation,\n) -> String {\n    let mut output = String::new();\n\n    let tab_width = if tab_width == 0 { 4 } else { tab_width };\n\n    let mut idx = 0;\n    let mut line_idx = 0;\n    let len = input.len();\n    while idx < len {\n        if let Some((chr, skip_ahead)) = try_parse_utf8_char(&input[idx..]) {\n            idx += skip_ahead;\n            line_idx += 1;\n\n            match chr {\n                // space\n                ' ' => output.push('·'),\n                // tab\n                '\\t' => {\n                    let tab_stop = tab_width - ((line_idx - 1) % tab_width);\n                    line_idx = 0;\n                    if tab_stop == 1 {\n                        output.push('↹');\n                    } else {\n                        output.push('├');\n                        output.push_str(&\"─\".repeat(tab_stop - 2));\n                        output.push('┤');\n                    }\n                }\n                // line feed\n                '\\x0A' => {\n                    output.push_str(match nonprintable_notation {\n                        NonprintableNotation::Caret => \"^J\\x0A\",\n                        NonprintableNotation::Unicode => \"␊\\x0A\",\n                    });\n                    line_idx = 0;\n                }\n                // ASCII control characters\n                '\\x00'..='\\x1F' => {\n                    let c = u32::from(chr);\n\n                    match nonprintable_notation {\n                        NonprintableNotation::Caret => {\n                            let caret_character = char::from_u32(0x40 + c).unwrap();\n                            write!(output, \"^{caret_character}\").ok();\n                        }\n\n                        NonprintableNotation::Unicode => {\n                            let replacement_symbol = char::from_u32(0x2400 + c).unwrap();\n                            output.push(replacement_symbol)\n                        }\n                    }\n                }\n                // delete\n                '\\x7F' => match nonprintable_notation {\n                    NonprintableNotation::Caret => output.push_str(\"^?\"),\n                    NonprintableNotation::Unicode => output.push('\\u{2421}'),\n                },\n                // printable ASCII\n                c if c.is_ascii_alphanumeric()\n                    || c.is_ascii_punctuation()\n                    || c.is_ascii_graphic() =>\n                {\n                    output.push(c)\n                }\n                // everything else\n                c => output.push_str(&c.escape_unicode().collect::<String>()),\n            }\n        } else {\n            write!(output, \"\\\\x{:02X}\", input[idx]).ok();\n            idx += 1;\n        }\n    }\n\n    output\n}\n\n/// Strips ANSI escape sequences from the input.\npub fn strip_ansi(line: &str) -> String {\n    let mut buffer = String::with_capacity(line.len());\n\n    for seq in EscapeSequenceOffsetsIterator::new(line) {\n        if let EscapeSequenceOffsets::Text { .. } = seq {\n            buffer.push_str(&line[seq.index_of_start()..seq.index_past_end()]);\n        }\n    }\n\n    buffer\n}\n\n/// Strips overstrike sequences (backspace formatting) from input.\n///\n/// Overstrike formatting is used by man pages and some help output:\n/// - Bold: `X\\x08X` (character, backspace, same character)\n/// - Underline: `_\\x08X` (underscore, backspace, character)\n///\n/// This function removes these sequences, keeping only the visible character.\n/// `first_backspace` is the position of the first backspace in the line.\npub fn strip_overstrike(line: &str, first_backspace: usize) -> String {\n    let mut output = String::with_capacity(line.len());\n    output.push_str(&line[..first_backspace]);\n    output.pop();\n\n    let mut remaining = &line[first_backspace + 1..];\n\n    loop {\n        if let Some(pos) = remaining.find('\\x08') {\n            output.push_str(&remaining[..pos]);\n            output.pop();\n            remaining = &remaining[pos + 1..];\n        } else {\n            output.push_str(remaining);\n            break;\n        }\n    }\n\n    output\n}\n\n#[derive(Debug, PartialEq, Clone, Copy, Default)]\npub enum StripAnsiMode {\n    #[default]\n    Never,\n    Always,\n    Auto,\n}\n\n#[test]\nfn test_try_parse_utf8_char() {\n    assert_eq!(try_parse_utf8_char(&[0x20]), Some((' ', 1)));\n    assert_eq!(try_parse_utf8_char(&[0x20, 0x20]), Some((' ', 1)));\n    assert_eq!(try_parse_utf8_char(&[0x20, 0xef]), Some((' ', 1)));\n\n    assert_eq!(try_parse_utf8_char(&[0x00]), Some(('\\x00', 1)));\n    assert_eq!(try_parse_utf8_char(&[0x1b]), Some(('\\x1b', 1)));\n\n    assert_eq!(try_parse_utf8_char(&[0xc3, 0xa4]), Some(('ä', 2)));\n    assert_eq!(try_parse_utf8_char(&[0xc3, 0xa4, 0xef]), Some(('ä', 2)));\n    assert_eq!(try_parse_utf8_char(&[0xc3, 0xa4, 0x20]), Some(('ä', 2)));\n\n    assert_eq!(try_parse_utf8_char(&[0xe2, 0x82, 0xac]), Some(('€', 3)));\n    assert_eq!(\n        try_parse_utf8_char(&[0xe2, 0x82, 0xac, 0xef]),\n        Some(('€', 3))\n    );\n    assert_eq!(\n        try_parse_utf8_char(&[0xe2, 0x82, 0xac, 0x20]),\n        Some(('€', 3))\n    );\n\n    assert_eq!(try_parse_utf8_char(&[0xe2, 0x88, 0xb0]), Some(('∰', 3)));\n\n    assert_eq!(\n        try_parse_utf8_char(&[0xf0, 0x9f, 0x8c, 0x82]),\n        Some(('🌂', 4))\n    );\n    assert_eq!(\n        try_parse_utf8_char(&[0xf0, 0x9f, 0x8c, 0x82, 0xef]),\n        Some(('🌂', 4))\n    );\n    assert_eq!(\n        try_parse_utf8_char(&[0xf0, 0x9f, 0x8c, 0x82, 0x20]),\n        Some(('🌂', 4))\n    );\n\n    assert_eq!(try_parse_utf8_char(&[]), None);\n    assert_eq!(try_parse_utf8_char(&[0xef]), None);\n    assert_eq!(try_parse_utf8_char(&[0xef, 0x20]), None);\n    assert_eq!(try_parse_utf8_char(&[0xf0, 0xf0]), None);\n}\n\n#[test]\nfn test_strip_ansi() {\n    // The sequence detection is covered by the tests in the vscreen module.\n    assert_eq!(strip_ansi(\"no ansi\"), \"no ansi\");\n    assert_eq!(strip_ansi(\"\\x1B[33mone\"), \"one\");\n    assert_eq!(\n        strip_ansi(\"\\x1B]1\\x07multiple\\x1B[J sequences\"),\n        \"multiple sequences\"\n    );\n}\n\n#[test]\nfn test_strip_overstrike() {\n    // Bold: X\\x08X (same char repeated)\n    assert_eq!(strip_overstrike(\"H\\x08Hello\", 1), \"Hello\");\n\n    // Underline: _\\x08X (underscore before char)\n    assert_eq!(strip_overstrike(\"_\\x08Hello\", 1), \"Hello\");\n\n    // Multiple overstrike sequences\n    assert_eq!(strip_overstrike(\"B\\x08Bo\\x08ol\\x08ld\\x08d\", 1), \"Bold\");\n\n    // Backspace at start of line (nothing to pop)\n    assert_eq!(strip_overstrike(\"\\x08Hello\", 0), \"Hello\");\n\n    // Multiple consecutive backspaces\n    assert_eq!(strip_overstrike(\"ABC\\x08\\x08\\x08XYZ\", 3), \"XYZ\");\n\n    // Unicode with overstrike\n    assert_eq!(strip_overstrike(\"ä\\x08äöü\", 2), \"äöü\");\n}\n"
  },
  {
    "path": "src/pretty_printer.rs",
    "content": "use std::io::Read;\nuse std::path::Path;\n\nuse console::Term;\n\nuse crate::{\n    assets::HighlightingAssets,\n    config::{Config, VisibleLines},\n    controller::Controller,\n    error::Result,\n    input,\n    line_range::{HighlightedLineRanges, LineRange, LineRanges},\n    output::OutputHandle,\n    style::StyleComponent,\n    StripAnsiMode, SyntaxMapping, WrappingMode,\n};\n\n#[cfg(feature = \"paging\")]\nuse crate::paging::PagingMode;\n\n#[derive(Default)]\nstruct ActiveStyleComponents {\n    header_filename: bool,\n    #[cfg(feature = \"git\")]\n    vcs_modification_markers: bool,\n    grid: bool,\n    rule: bool,\n    line_numbers: bool,\n    snip: bool,\n}\n\n#[non_exhaustive]\npub struct Syntax {\n    pub name: String,\n    pub file_extensions: Vec<String>,\n}\n\npub struct PrettyPrinter<'a> {\n    inputs: Vec<Input<'a>>,\n    config: Config<'a>,\n    assets: HighlightingAssets,\n\n    highlighted_lines: Vec<LineRange>,\n    term_width: Option<usize>,\n    active_style_components: ActiveStyleComponents,\n}\n\nimpl<'a> PrettyPrinter<'a> {\n    pub fn new() -> Self {\n        let config = Config {\n            colored_output: true,\n            true_color: true,\n            ..Default::default()\n        };\n\n        PrettyPrinter {\n            inputs: vec![],\n            config,\n            assets: HighlightingAssets::from_binary(),\n\n            highlighted_lines: vec![],\n            term_width: None,\n            active_style_components: ActiveStyleComponents::default(),\n        }\n    }\n\n    /// Add an input which should be pretty-printed\n    pub fn input(&mut self, input: Input<'a>) -> &mut Self {\n        self.inputs.push(input);\n        self\n    }\n\n    /// Adds multiple inputs which should be pretty-printed\n    pub fn inputs(&mut self, inputs: impl IntoIterator<Item = Input<'a>>) -> &mut Self {\n        for input in inputs {\n            self.inputs.push(input);\n        }\n        self\n    }\n\n    /// Add a file which should be pretty-printed\n    pub fn input_file(&mut self, path: impl AsRef<Path>) -> &mut Self {\n        self.input(Input::from_file(path).kind(\"File\"))\n    }\n\n    /// Add multiple files which should be pretty-printed\n    pub fn input_files<I, P>(&mut self, paths: I) -> &mut Self\n    where\n        I: IntoIterator<Item = P>,\n        P: AsRef<Path>,\n    {\n        self.inputs(paths.into_iter().map(Input::from_file))\n    }\n\n    /// Add STDIN as an input\n    pub fn input_stdin(&mut self) -> &mut Self {\n        self.inputs.push(Input::from_stdin());\n        self\n    }\n\n    /// Add a byte string as an input\n    pub fn input_from_bytes(&mut self, content: &'a [u8]) -> &mut Self {\n        self.input_from_reader(content)\n    }\n\n    /// Add a custom reader as an input\n    pub fn input_from_reader<R: Read + 'a>(&mut self, reader: R) -> &mut Self {\n        self.inputs.push(Input::from_reader(reader));\n        self\n    }\n\n    /// Specify the syntax file which should be used (default: auto-detect)\n    pub fn language(&mut self, language: &'a str) -> &mut Self {\n        self.config.language = Some(language);\n        self\n    }\n\n    /// The character width of the terminal (default: autodetect)\n    pub fn term_width(&mut self, width: usize) -> &mut Self {\n        self.term_width = Some(width);\n        self\n    }\n\n    /// The width of tab characters (default: None - do not turn tabs to spaces)\n    pub fn tab_width(&mut self, tab_width: Option<usize>) -> &mut Self {\n        self.config.tab_width = tab_width.unwrap_or(0);\n        self\n    }\n\n    /// Whether or not the output should be colorized (default: true)\n    pub fn colored_output(&mut self, yes: bool) -> &mut Self {\n        self.config.colored_output = yes;\n        self\n    }\n\n    /// Whether or not to output 24bit colors (default: true)\n    pub fn true_color(&mut self, yes: bool) -> &mut Self {\n        self.config.true_color = yes;\n        self\n    }\n\n    /// Whether to show a header with the file name\n    pub fn header(&mut self, yes: bool) -> &mut Self {\n        self.active_style_components.header_filename = yes;\n        self\n    }\n\n    /// Whether to show line numbers\n    pub fn line_numbers(&mut self, yes: bool) -> &mut Self {\n        self.active_style_components.line_numbers = yes;\n        self\n    }\n\n    /// Whether to paint a grid, separating line numbers, git changes and the code\n    pub fn grid(&mut self, yes: bool) -> &mut Self {\n        self.active_style_components.grid = yes;\n        self\n    }\n\n    /// Whether to paint a horizontal rule to delimit files\n    pub fn rule(&mut self, yes: bool) -> &mut Self {\n        self.active_style_components.rule = yes;\n        self\n    }\n\n    /// Whether to show modification markers for VCS changes. This has no effect if\n    /// the `git` feature is not activated.\n    #[cfg(feature = \"git\")]\n    pub fn vcs_modification_markers(&mut self, yes: bool) -> &mut Self {\n        self.active_style_components.vcs_modification_markers = yes;\n        self\n    }\n\n    /// Whether to print binary content or nonprintable characters (default: no)\n    pub fn show_nonprintable(&mut self, yes: bool) -> &mut Self {\n        self.config.show_nonprintable = yes;\n        self\n    }\n\n    /// Whether to show \"snip\" markers between visible line ranges (default: no)\n    pub fn snip(&mut self, yes: bool) -> &mut Self {\n        self.active_style_components.snip = yes;\n        self\n    }\n\n    /// Whether to remove ANSI escape sequences from the input (default: never)\n    ///\n    /// If `Auto` is used, escape sequences will only be removed when the input\n    /// is not plain text.\n    pub fn strip_ansi(&mut self, mode: StripAnsiMode) -> &mut Self {\n        self.config.strip_ansi = mode;\n        self\n    }\n\n    /// Text wrapping mode (default: do not wrap)\n    pub fn wrapping_mode(&mut self, mode: WrappingMode) -> &mut Self {\n        self.config.wrapping_mode = mode;\n        self\n    }\n\n    /// Whether or not to use ANSI italics (default: off)\n    pub fn use_italics(&mut self, yes: bool) -> &mut Self {\n        self.config.use_italic_text = yes;\n        self\n    }\n\n    /// If and how to use a pager (default: no paging)\n    #[cfg(feature = \"paging\")]\n    pub fn paging_mode(&mut self, mode: PagingMode) -> &mut Self {\n        self.config.paging_mode = mode;\n        self\n    }\n\n    /// Specify the command to start the pager (default: use \"less\")\n    #[cfg(feature = \"paging\")]\n    pub fn pager(&mut self, cmd: &'a str) -> &mut Self {\n        self.config.pager = Some(cmd);\n        self\n    }\n\n    /// Specify the lines that should be printed (default: all)\n    pub fn line_ranges(&mut self, ranges: LineRanges) -> &mut Self {\n        self.config.visible_lines = VisibleLines::Ranges(ranges);\n        self\n    }\n\n    /// Specify a line that should be highlighted (default: none).\n    /// This can be called multiple times to highlight more than one\n    /// line. See also: highlight_range.\n    pub fn highlight(&mut self, line: usize) -> &mut Self {\n        self.highlighted_lines.push(LineRange::new(line, line));\n        self\n    }\n\n    /// Specify a range of lines that should be highlighted (default: none).\n    /// This can be called multiple times to highlight more than one range\n    /// of lines.\n    pub fn highlight_range(&mut self, from: usize, to: usize) -> &mut Self {\n        self.highlighted_lines.push(LineRange::new(from, to));\n        self\n    }\n\n    /// Specify the maximum number of consecutive empty lines to print.\n    pub fn squeeze_empty_lines(&mut self, maximum: Option<usize>) -> &mut Self {\n        self.config.squeeze_lines = maximum;\n        self\n    }\n\n    /// Specify the highlighting theme.\n    /// You can use [`crate::theme::theme`] to pick a theme based on user preferences\n    /// and the terminal's background color.\n    pub fn theme(&mut self, theme: impl AsRef<str>) -> &mut Self {\n        self.config.theme = theme.as_ref().to_owned();\n        self\n    }\n\n    /// Specify custom file extension / file name to syntax mappings\n    pub fn syntax_mapping(&mut self, mapping: SyntaxMapping<'a>) -> &mut Self {\n        self.config.syntax_mapping = mapping;\n        self\n    }\n\n    pub fn themes(&self) -> impl Iterator<Item = &str> {\n        self.assets.themes()\n    }\n\n    pub fn syntaxes(&self) -> impl Iterator<Item = Syntax> + '_ {\n        // We always use assets from the binary, which are guaranteed to always\n        // be valid, so get_syntaxes() can never fail here\n        self.assets\n            .get_syntaxes()\n            .unwrap()\n            .iter()\n            .filter(|s| !s.hidden)\n            .map(|s| Syntax {\n                name: s.name.clone(),\n                file_extensions: s.file_extensions.clone(),\n            })\n    }\n\n    /// Pretty-print all specified inputs. This method will \"use\" all stored inputs.\n    /// If you want to call 'print' multiple times, you have to call the appropriate\n    /// input_* methods again.\n    pub fn print(&mut self) -> Result<bool> {\n        self.print_with_writer(None::<&mut dyn std::fmt::Write>)\n    }\n\n    /// Pretty-print all specified inputs to a specified writer.\n    pub fn print_with_writer<W: std::fmt::Write>(&mut self, writer: Option<W>) -> Result<bool> {\n        let highlight_lines = std::mem::take(&mut self.highlighted_lines);\n        self.config.highlighted_lines = HighlightedLineRanges(LineRanges::from(highlight_lines));\n        self.config.term_width = self\n            .term_width\n            .unwrap_or_else(|| Term::stdout().size().1 as usize);\n\n        self.config.style_components.clear();\n        if self.active_style_components.grid {\n            self.config.style_components.insert(StyleComponent::Grid);\n        }\n        if self.active_style_components.rule {\n            self.config.style_components.insert(StyleComponent::Rule);\n        }\n        if self.active_style_components.header_filename {\n            self.config\n                .style_components\n                .insert(StyleComponent::HeaderFilename);\n        }\n        if self.active_style_components.line_numbers {\n            self.config\n                .style_components\n                .insert(StyleComponent::LineNumbers);\n        }\n        if self.active_style_components.snip {\n            self.config.style_components.insert(StyleComponent::Snip);\n        }\n        #[cfg(feature = \"git\")]\n        if self.active_style_components.vcs_modification_markers {\n            self.config.style_components.insert(StyleComponent::Changes);\n        }\n\n        // Collect the inputs to print\n        let inputs = std::mem::take(&mut self.inputs);\n\n        // Run the controller\n        let controller = Controller::new(&self.config, &self.assets);\n\n        // If writer is provided, pass it to the controller, otherwise pass None\n        if let Some(mut w) = writer {\n            controller.run(\n                inputs.into_iter().map(|i| i.into()).collect(),\n                Some(&mut OutputHandle::FmtWrite(&mut w)),\n            )\n        } else {\n            controller.run(inputs.into_iter().map(|i| i.into()).collect(), None)\n        }\n    }\n}\n\nimpl Default for PrettyPrinter<'_> {\n    fn default() -> Self {\n        Self::new()\n    }\n}\n\n/// An input source for the pretty printer.\npub struct Input<'a> {\n    input: input::Input<'a>,\n}\n\nimpl<'a> Input<'a> {\n    /// A new input from a reader.\n    pub fn from_reader<R: Read + 'a>(reader: R) -> Self {\n        input::Input::from_reader(Box::new(reader)).into()\n    }\n\n    /// A new input from a file.\n    pub fn from_file(path: impl AsRef<Path>) -> Self {\n        input::Input::ordinary_file(path).into()\n    }\n\n    /// A new input from bytes.\n    pub fn from_bytes(bytes: &'a [u8]) -> Self {\n        Input::from_reader(bytes)\n    }\n\n    /// A new input from STDIN.\n    pub fn from_stdin() -> Self {\n        input::Input::stdin().into()\n    }\n\n    /// The filename of the input.\n    /// This affects syntax detection and changes the default header title.\n    pub fn name(mut self, name: impl AsRef<Path>) -> Self {\n        self.input = self.input.with_name(Some(name));\n        self\n    }\n\n    /// The description for the type of input (e.g. \"File\")\n    pub fn kind(mut self, kind: impl Into<String>) -> Self {\n        let kind = kind.into();\n        self.input\n            .description_mut()\n            .set_kind(if kind.is_empty() { None } else { Some(kind) });\n        self\n    }\n\n    /// The title for the input (e.g. \"Descriptive title\")\n    /// This defaults to the file name.\n    pub fn title(mut self, title: impl Into<String>) -> Self {\n        self.input.description_mut().set_title(Some(title.into()));\n        self\n    }\n}\n\nimpl<'a> From<input::Input<'a>> for Input<'a> {\n    fn from(input: input::Input<'a>) -> Self {\n        Self { input }\n    }\n}\n\nimpl<'a> From<Input<'a>> for input::Input<'a> {\n    fn from(Input { input }: Input<'a>) -> Self {\n        input\n    }\n}\n"
  },
  {
    "path": "src/printer.rs",
    "content": "use std::vec::Vec;\n\nuse nu_ansi_term::Color::{Fixed, Green, Red, Yellow};\nuse nu_ansi_term::Style;\n\nuse bytesize::ByteSize;\n\nuse syntect::easy::HighlightLines;\nuse syntect::highlighting::Color;\nuse syntect::highlighting::FontStyle;\nuse syntect::highlighting::Theme;\nuse syntect::parsing::SyntaxSet;\n\nuse content_inspector::ContentType;\n\nuse encoding_rs::{UTF_16BE, UTF_16LE};\n\nuse unicode_segmentation::UnicodeSegmentation;\nuse unicode_width::UnicodeWidthChar;\n\nuse crate::assets::{HighlightingAssets, SyntaxReferenceInSet};\nuse crate::config::Config;\n#[cfg(feature = \"git\")]\nuse crate::decorations::LineChangesDecoration;\nuse crate::decorations::{Decoration, GridBorderDecoration, LineNumberDecoration};\n#[cfg(feature = \"git\")]\nuse crate::diff::LineChanges;\nuse crate::error::*;\nuse crate::input::OpenedInput;\nuse crate::line_range::{MaxBufferedLineNumber, RangeCheckResult};\nuse crate::output::OutputHandle;\nuse crate::preprocessor::{expand_tabs, replace_nonprintable, strip_ansi, strip_overstrike};\nuse crate::style::StyleComponent;\nuse crate::terminal::{as_terminal_escaped, to_ansi_color};\nuse crate::vscreen::{AnsiStyle, EscapeSequence, EscapeSequenceIterator};\nuse crate::wrapping::WrappingMode;\nuse crate::BinaryBehavior;\nuse crate::StripAnsiMode;\n\nconst ANSI_UNDERLINE_ENABLE: EscapeSequence = EscapeSequence::CSI {\n    raw_sequence: \"\\x1B[4m\",\n    parameters: \"4\",\n    intermediates: \"\",\n    final_byte: \"m\",\n};\n\nconst ANSI_UNDERLINE_DISABLE: EscapeSequence = EscapeSequence::CSI {\n    raw_sequence: \"\\x1B[24m\",\n    parameters: \"24\",\n    intermediates: \"\",\n    final_byte: \"m\",\n};\n\nconst EMPTY_SYNTECT_STYLE: syntect::highlighting::Style = syntect::highlighting::Style {\n    foreground: Color {\n        r: 127,\n        g: 127,\n        b: 127,\n        a: 255,\n    },\n    background: Color {\n        r: 127,\n        g: 127,\n        b: 127,\n        a: 255,\n    },\n    font_style: FontStyle::empty(),\n};\n\npub(crate) trait Printer {\n    fn print_header(\n        &mut self,\n        handle: &mut OutputHandle,\n        input: &OpenedInput,\n        add_header_padding: bool,\n    ) -> Result<()>;\n    fn print_footer(&mut self, handle: &mut OutputHandle, input: &OpenedInput) -> Result<()>;\n\n    fn print_snip(&mut self, handle: &mut OutputHandle) -> Result<()>;\n\n    fn print_line(\n        &mut self,\n        out_of_range: bool,\n        handle: &mut OutputHandle,\n        line_number: usize,\n        line_buffer: &[u8],\n        max_buffered_line_number: MaxBufferedLineNumber,\n    ) -> Result<()>;\n}\n\npub struct SimplePrinter<'a> {\n    config: &'a Config<'a>,\n    consecutive_empty_lines: usize,\n}\n\nimpl<'a> SimplePrinter<'a> {\n    pub fn new(config: &'a Config) -> Self {\n        SimplePrinter {\n            config,\n            consecutive_empty_lines: 0,\n        }\n    }\n}\n\nimpl Printer for SimplePrinter<'_> {\n    fn print_header(\n        &mut self,\n        _handle: &mut OutputHandle,\n        _input: &OpenedInput,\n        _add_header_padding: bool,\n    ) -> Result<()> {\n        Ok(())\n    }\n\n    fn print_footer(&mut self, _handle: &mut OutputHandle, _input: &OpenedInput) -> Result<()> {\n        Ok(())\n    }\n\n    fn print_snip(&mut self, _handle: &mut OutputHandle) -> Result<()> {\n        Ok(())\n    }\n\n    fn print_line(\n        &mut self,\n        out_of_range: bool,\n        handle: &mut OutputHandle,\n        _line_number: usize,\n        line_buffer: &[u8],\n        _max_buffered_line_number: MaxBufferedLineNumber,\n    ) -> Result<()> {\n        // Skip squeezed lines.\n        if let Some(squeeze_limit) = self.config.squeeze_lines {\n            if String::from_utf8_lossy(line_buffer)\n                .trim_end_matches(['\\r', '\\n'])\n                .is_empty()\n            {\n                self.consecutive_empty_lines += 1;\n                if self.consecutive_empty_lines > squeeze_limit {\n                    return Ok(());\n                }\n            } else {\n                self.consecutive_empty_lines = 0;\n            }\n        }\n\n        if !out_of_range {\n            if self.config.show_nonprintable {\n                let line = replace_nonprintable(\n                    line_buffer,\n                    self.config.tab_width,\n                    self.config.nonprintable_notation,\n                );\n                write!(handle, \"{line}\")?;\n            } else {\n                match handle {\n                    OutputHandle::IoWrite(handle) => handle.write_all(line_buffer)?,\n                    OutputHandle::FmtWrite(handle) => {\n                        write!(\n                            handle,\n                            \"{}\",\n                            std::str::from_utf8(line_buffer).map_err(|_| Error::Msg(\n                                \"encountered invalid utf8 while printing to non-io buffer\"\n                                    .to_string()\n                            ))?\n                        )?;\n                    }\n                }\n            };\n        }\n        Ok(())\n    }\n}\n\nstruct HighlighterFromSet<'a> {\n    highlighter: HighlightLines<'a>,\n    syntax_set: &'a SyntaxSet,\n}\n\nimpl<'a> HighlighterFromSet<'a> {\n    fn new(syntax_in_set: SyntaxReferenceInSet<'a>, theme: &'a Theme) -> Self {\n        Self {\n            highlighter: HighlightLines::new(syntax_in_set.syntax, theme),\n            syntax_set: syntax_in_set.syntax_set,\n        }\n    }\n}\n\npub(crate) struct InteractivePrinter<'a> {\n    colors: Colors,\n    config: &'a Config<'a>,\n    decorations: Vec<Box<dyn Decoration>>,\n    panel_width: usize,\n    ansi_style: AnsiStyle,\n    content_type: Option<ContentType>,\n    #[cfg(feature = \"git\")]\n    pub line_changes: &'a Option<LineChanges>,\n    highlighter_from_set: Option<HighlighterFromSet<'a>>,\n    background_color_highlight: Option<Color>,\n    consecutive_empty_lines: usize,\n    strip_ansi: bool,\n    strip_overstrike: bool,\n}\n\nimpl<'a> InteractivePrinter<'a> {\n    pub(crate) fn new(\n        config: &'a Config,\n        assets: &'a HighlightingAssets,\n        input: &mut OpenedInput,\n        #[cfg(feature = \"git\")] line_changes: &'a Option<LineChanges>,\n    ) -> Result<Self> {\n        let theme = assets.get_theme(&config.theme);\n\n        let background_color_highlight = theme.settings.line_highlight;\n\n        let colors = if config.colored_output {\n            Colors::colored(theme, config.true_color)\n        } else {\n            Colors::plain()\n        };\n\n        // Create decorations.\n        let mut decorations: Vec<Box<dyn Decoration>> = Vec::new();\n\n        if config.style_components.numbers() {\n            decorations.push(Box::new(LineNumberDecoration::new(&colors)));\n        }\n\n        #[cfg(feature = \"git\")]\n        {\n            if config.style_components.changes()\n                && line_changes.as_ref().is_some_and(|c| !c.is_empty())\n            {\n                decorations.push(Box::new(LineChangesDecoration::new(&colors)));\n            }\n        }\n\n        let mut panel_width: usize =\n            decorations.len() + decorations.iter().fold(0, |a, x| a + x.width());\n\n        // The grid border decoration isn't added until after the panel_width calculation, since the\n        // print_horizontal_line, print_header, and print_footer functions all assume the panel\n        // width is without the grid border.\n        if config.style_components.grid() && !decorations.is_empty() {\n            decorations.push(Box::new(GridBorderDecoration::new(&colors)));\n        }\n\n        // Disable the panel if the terminal is too small (i.e. can't fit 5 characters with the\n        // panel showing).\n        if config.term_width\n            < (decorations.len() + decorations.iter().fold(0, |a, x| a + x.width())) + 5\n        {\n            decorations.clear();\n            panel_width = 0;\n        }\n\n        // Get the highlighter for the output.\n        let is_printing_binary = input\n            .reader\n            .content_type\n            .is_some_and(|c| c.is_binary() && !config.show_nonprintable);\n\n        let needs_to_match_syntax = (!is_printing_binary\n            || matches!(config.binary, BinaryBehavior::AsText))\n            && (config.colored_output || config.strip_ansi == StripAnsiMode::Auto);\n\n        let (is_plain_text, strip_overstrike, highlighter_from_set) = if needs_to_match_syntax {\n            // Determine the type of syntax for highlighting\n            const PLAIN_TEXT_SYNTAX: &str = \"Plain Text\";\n            const MANPAGE_SYNTAX: &str = \"Manpage\";\n            const COMMAND_HELP_SYNTAX: &str = \"Command Help\";\n            match assets.get_syntax(\n                config.language,\n                config.fallback_syntax,\n                input,\n                &config.syntax_mapping,\n            ) {\n                Ok(syntax_in_set) => (\n                    syntax_in_set.syntax.name == PLAIN_TEXT_SYNTAX,\n                    syntax_in_set.syntax.name == MANPAGE_SYNTAX\n                        || syntax_in_set.syntax.name == COMMAND_HELP_SYNTAX,\n                    Some(HighlighterFromSet::new(syntax_in_set, theme)),\n                ),\n\n                Err(Error::UndetectedSyntax(_)) => (\n                    true,\n                    false,\n                    Some(\n                        assets\n                            .find_syntax_by_name(PLAIN_TEXT_SYNTAX)?\n                            .map(|s| HighlighterFromSet::new(s, theme))\n                            .expect(\"A plain text syntax is available\"),\n                    ),\n                ),\n\n                Err(e) => return Err(e),\n            }\n        } else {\n            (false, false, None)\n        };\n\n        // Determine when to strip ANSI sequences\n        let strip_ansi = match config.strip_ansi {\n            _ if config.show_nonprintable => false,\n            StripAnsiMode::Always => true,\n            StripAnsiMode::Auto if is_plain_text => false, // Plain text may already contain escape sequences.\n            StripAnsiMode::Auto => true,\n            _ => false,\n        };\n\n        Ok(InteractivePrinter {\n            panel_width,\n            colors,\n            config,\n            decorations,\n            content_type: input.reader.content_type,\n            ansi_style: AnsiStyle::new(),\n            #[cfg(feature = \"git\")]\n            line_changes,\n            highlighter_from_set,\n            background_color_highlight,\n            consecutive_empty_lines: 0,\n            strip_ansi,\n            strip_overstrike,\n        })\n    }\n\n    fn print_horizontal_line_term(\n        &mut self,\n        handle: &mut OutputHandle,\n        style: Style,\n    ) -> Result<()> {\n        writeln!(\n            handle,\n            \"{}\",\n            style.paint(\"─\".repeat(self.config.term_width))\n        )?;\n        Ok(())\n    }\n\n    fn print_horizontal_line(&mut self, handle: &mut OutputHandle, grid_char: char) -> Result<()> {\n        if self.panel_width == 0 {\n            self.print_horizontal_line_term(handle, self.colors.grid)?;\n        } else {\n            let hline = \"─\".repeat(self.config.term_width - (self.panel_width + 1));\n            let hline = format!(\"{}{grid_char}{hline}\", \"─\".repeat(self.panel_width));\n            writeln!(handle, \"{}\", self.colors.grid.paint(hline))?;\n        }\n\n        Ok(())\n    }\n\n    fn create_fake_panel(&self, text: &str) -> String {\n        if self.panel_width == 0 {\n            return \"\".to_string();\n        }\n\n        let text_truncated: String = text.chars().take(self.panel_width - 1).collect();\n        let text_filled: String = format!(\n            \"{text_truncated}{}\",\n            \" \".repeat(self.panel_width - 1 - text_truncated.len())\n        );\n        if self.config.style_components.grid() {\n            format!(\"{text_filled} │ \")\n        } else {\n            text_filled\n        }\n    }\n\n    fn get_header_component_indent_length(&self) -> usize {\n        if self.config.style_components.grid() && self.panel_width > 0 {\n            self.panel_width + 2\n        } else {\n            self.panel_width\n        }\n    }\n\n    fn print_header_component_indent(&mut self, handle: &mut OutputHandle) -> Result<()> {\n        if self.config.style_components.grid() {\n            write!(\n                handle,\n                \"{}{}\",\n                \" \".repeat(self.panel_width),\n                self.colors\n                    .grid\n                    .paint(if self.panel_width > 0 { \"│ \" } else { \"\" }),\n            )\n        } else {\n            write!(handle, \"{}\", \" \".repeat(self.panel_width))\n        }\n    }\n\n    fn print_header_component_with_indent(\n        &mut self,\n        handle: &mut OutputHandle,\n        content: &str,\n    ) -> Result<()> {\n        self.print_header_component_indent(handle)?;\n        writeln!(handle, \"{content}\")\n    }\n\n    fn print_header_multiline_component(\n        &mut self,\n        handle: &mut OutputHandle,\n        content: &str,\n    ) -> Result<()> {\n        let content_width = self.config.term_width - self.get_header_component_indent_length();\n        if content.chars().count() <= content_width {\n            return self.print_header_component_with_indent(handle, content);\n        }\n\n        let mut content_graphemes: Vec<&str> = content.graphemes(true).collect();\n        while content_graphemes.len() > content_width {\n            let (content_line, remaining) = content_graphemes.split_at(content_width);\n            self.print_header_component_with_indent(handle, content_line.join(\"\").as_str())?;\n            content_graphemes = remaining.to_vec();\n        }\n        self.print_header_component_with_indent(handle, content_graphemes.join(\"\").as_str())\n    }\n\n    fn highlight_regions_for_line<'b>(\n        &mut self,\n        line: &'b str,\n    ) -> Result<Vec<(syntect::highlighting::Style, &'b str)>> {\n        let highlighter_from_set = match self.highlighter_from_set {\n            Some(ref mut highlighter_from_set) => highlighter_from_set,\n            _ => return Ok(vec![(EMPTY_SYNTECT_STYLE, line)]),\n        };\n\n        // skip syntax highlighting on long lines\n        let too_long = line.len() > 1024 * 16;\n\n        let for_highlighting: &str = if too_long { \"\\n\" } else { line };\n\n        let mut highlighted_line = highlighter_from_set\n            .highlighter\n            .highlight_line(for_highlighting, highlighter_from_set.syntax_set)?;\n\n        if too_long {\n            highlighted_line[0].1 = line;\n        }\n\n        Ok(highlighted_line)\n    }\n\n    fn preprocess(&self, text: &str, cursor: &mut usize) -> String {\n        if self.config.tab_width > 0 {\n            return expand_tabs(text, self.config.tab_width, cursor);\n        }\n\n        *cursor += text.len();\n        text.to_string()\n    }\n}\n\nimpl Printer for InteractivePrinter<'_> {\n    fn print_header(\n        &mut self,\n        handle: &mut OutputHandle,\n        input: &OpenedInput,\n        add_header_padding: bool,\n    ) -> Result<()> {\n        // If input is empty and quiet_empty is enabled, skip all output\n        if self.content_type.is_none() && self.config.quiet_empty {\n            return Ok(());\n        }\n\n        if add_header_padding && self.config.style_components.rule() {\n            self.print_horizontal_line_term(handle, self.colors.rule)?;\n        }\n\n        if !self.config.style_components.header() {\n            if Some(ContentType::BINARY) == self.content_type\n                && !self.config.show_nonprintable\n                && !matches!(self.config.binary, BinaryBehavior::AsText)\n            {\n                writeln!(\n                    handle,\n                    \"{}: Binary content from {} will not be printed to the terminal \\\n                     (but will be present if the output of 'bat' is piped). You can use 'bat -A' \\\n                     to show the binary file contents.\",\n                    Yellow.paint(\"[bat warning]\"),\n                    input.description.summary(),\n                )?;\n            } else if self.config.style_components.grid() {\n                self.print_horizontal_line(handle, '┬')?;\n            }\n            return Ok(());\n        }\n\n        let mode = match self.content_type {\n            Some(ContentType::BINARY) => \"   <BINARY>\",\n            Some(ContentType::UTF_16LE) => \"   <UTF-16LE>\",\n            Some(ContentType::UTF_16BE) => \"   <UTF-16BE>\",\n            None => \"   <EMPTY>\",\n            _ => \"\",\n        };\n\n        let description = &input.description;\n        let metadata = &input.metadata;\n\n        // We use this iterator to have a deterministic order for\n        // header components. HashSet has arbitrary order, but Vec is ordered.\n        let header_components: Vec<StyleComponent> = [\n            (\n                StyleComponent::HeaderFilename,\n                self.config.style_components.header_filename(),\n            ),\n            (\n                StyleComponent::HeaderFilesize,\n                self.config.style_components.header_filesize(),\n            ),\n        ]\n        .iter()\n        .filter(|(_, is_enabled)| *is_enabled)\n        .map(|(component, _)| *component)\n        .collect();\n\n        // Print the cornering grid before the first header component\n        if self.config.style_components.grid() {\n            self.print_horizontal_line(handle, '┬')?;\n        } else {\n            // Only pad space between files, if we haven't already drawn a horizontal rule\n            if add_header_padding && !self.config.style_components.rule() {\n                writeln!(handle)?;\n            }\n        }\n\n        header_components\n            .iter()\n            .try_for_each(|component| match component {\n                StyleComponent::HeaderFilename => {\n                    let header_filename = format!(\n                        \"{}{}{mode}\",\n                        description\n                            .kind()\n                            .map(|kind| format!(\"{kind}: \"))\n                            .unwrap_or_else(|| \"\".into()),\n                        self.colors.header_value.paint(description.title()),\n                    );\n                    self.print_header_multiline_component(handle, &header_filename)\n                }\n                StyleComponent::HeaderFilesize => {\n                    let bsize = metadata\n                        .size\n                        .map(|s| format!(\"{}\", ByteSize(s)))\n                        .unwrap_or_else(|| \"-\".into());\n                    let header_filesize =\n                        format!(\"Size: {}\", self.colors.header_value.paint(bsize));\n                    self.print_header_multiline_component(handle, &header_filesize)\n                }\n                _ => Ok(()),\n            })?;\n\n        if self.config.style_components.grid() {\n            if self.content_type.is_some_and(|c| c.is_text())\n                || self.config.show_nonprintable\n                || matches!(self.config.binary, BinaryBehavior::AsText)\n            {\n                self.print_horizontal_line(handle, '┼')?;\n            } else {\n                self.print_horizontal_line(handle, '┴')?;\n            }\n        }\n\n        Ok(())\n    }\n\n    fn print_footer(&mut self, handle: &mut OutputHandle, _input: &OpenedInput) -> Result<()> {\n        // If input is empty and quiet_empty is enabled, skip footer\n        if self.content_type.is_none() && self.config.quiet_empty {\n            return Ok(());\n        }\n\n        if self.config.style_components.grid()\n            && (self.content_type.is_some_and(|c| c.is_text())\n                || self.config.show_nonprintable\n                || matches!(self.config.binary, BinaryBehavior::AsText))\n        {\n            self.print_horizontal_line(handle, '┴')\n        } else {\n            Ok(())\n        }\n    }\n\n    fn print_snip(&mut self, handle: &mut OutputHandle) -> Result<()> {\n        let panel = self.create_fake_panel(\" ...\");\n        let panel_count = panel.chars().count();\n\n        let title = \"8<\";\n        let title_count = title.chars().count();\n\n        let snip_left = \"─ \".repeat((self.config.term_width - panel_count - (title_count / 2)) / 4);\n        let snip_left_count = snip_left.chars().count(); // Can't use .len() with Unicode.\n\n        let snip_right =\n            \" ─\".repeat((self.config.term_width - panel_count - snip_left_count - title_count) / 2);\n\n        writeln!(\n            handle,\n            \"{}\",\n            self.colors\n                .grid\n                .paint(format!(\"{panel}{snip_left}{title}{snip_right}\"))\n        )?;\n\n        Ok(())\n    }\n\n    fn print_line(\n        &mut self,\n        out_of_range: bool,\n        handle: &mut OutputHandle,\n        line_number: usize,\n        line_buffer: &[u8],\n        max_buffered_line_number: MaxBufferedLineNumber,\n    ) -> Result<()> {\n        let line = if self.config.show_nonprintable {\n            replace_nonprintable(\n                line_buffer,\n                self.config.tab_width,\n                self.config.nonprintable_notation,\n            )\n            .into()\n        } else {\n            let mut line = match self.content_type {\n                Some(ContentType::BINARY) | None\n                    if !matches!(self.config.binary, BinaryBehavior::AsText) =>\n                {\n                    return Ok(());\n                }\n                Some(ContentType::UTF_16LE) => UTF_16LE.decode_with_bom_removal(line_buffer).0,\n                Some(ContentType::UTF_16BE) => UTF_16BE.decode_with_bom_removal(line_buffer).0,\n                _ => {\n                    let line = String::from_utf8_lossy(line_buffer);\n                    if line_number == 1 {\n                        match line.strip_prefix('\\u{feff}') {\n                            Some(stripped) => stripped.to_string().into(),\n                            None => line,\n                        }\n                    } else {\n                        line\n                    }\n                }\n            };\n\n            if self.strip_overstrike {\n                if let Some(pos) = line.find('\\x08') {\n                    line = strip_overstrike(&line, pos).into();\n                }\n            }\n\n            // If ANSI escape sequences are supposed to be stripped, do it before syntax highlighting.\n            if self.strip_ansi {\n                line = strip_ansi(&line).into()\n            }\n\n            line\n        };\n\n        let regions = self.highlight_regions_for_line(&line)?;\n        if out_of_range {\n            return Ok(());\n        }\n\n        // Skip squeezed lines.\n        if let Some(squeeze_limit) = self.config.squeeze_lines {\n            if line.trim_end_matches(['\\r', '\\n']).is_empty() {\n                self.consecutive_empty_lines += 1;\n                if self.consecutive_empty_lines > squeeze_limit {\n                    return Ok(());\n                }\n            } else {\n                self.consecutive_empty_lines = 0;\n            }\n        }\n\n        let mut cursor: usize = 0;\n        let mut cursor_max: usize = self.config.term_width;\n        let mut cursor_total: usize = 0;\n        let mut panel_wrap: Option<String> = None;\n\n        // Line highlighting\n        let highlight_this_line = self\n            .config\n            .highlighted_lines\n            .0\n            .check(line_number, max_buffered_line_number)\n            == RangeCheckResult::InRange;\n\n        if highlight_this_line && self.config.theme == \"ansi\" {\n            self.ansi_style.update(ANSI_UNDERLINE_ENABLE);\n        }\n\n        let background_color = self\n            .background_color_highlight\n            .filter(|_| highlight_this_line);\n\n        // Line decorations.\n        if self.panel_width > 0 {\n            let decorations = self\n                .decorations\n                .iter()\n                .map(|d| d.generate(line_number, false, self));\n\n            for deco in decorations {\n                write!(handle, \"{} \", deco.text)?;\n                cursor_max -= deco.width + 1;\n            }\n        }\n\n        // Line contents.\n        if matches!(self.config.wrapping_mode, WrappingMode::NoWrapping(_)) {\n            let true_color = self.config.true_color;\n            let colored_output = self.config.colored_output;\n            let italics = self.config.use_italic_text;\n\n            for &(style, region) in &regions {\n                let ansi_iterator = EscapeSequenceIterator::new(region);\n                for chunk in ansi_iterator {\n                    match chunk {\n                        // Regular text.\n                        EscapeSequence::Text(text) => {\n                            let text = self.preprocess(text, &mut cursor_total);\n                            let text_trimmed = text.trim_end_matches(['\\r', '\\n']);\n\n                            write!(\n                                handle,\n                                \"{}{}\",\n                                as_terminal_escaped(\n                                    style,\n                                    &format!(\"{}{text_trimmed}\", self.ansi_style),\n                                    true_color,\n                                    colored_output,\n                                    italics,\n                                    background_color\n                                ),\n                                self.ansi_style.to_reset_sequence(),\n                            )?;\n\n                            // Pad the rest of the line.\n                            if text.len() != text_trimmed.len() {\n                                if let Some(background_color) = background_color {\n                                    let ansi_style = Style {\n                                        background: to_ansi_color(background_color, true_color),\n                                        ..Default::default()\n                                    };\n\n                                    let width = if cursor_total <= cursor_max {\n                                        cursor_max - cursor_total + 1\n                                    } else {\n                                        0\n                                    };\n                                    write!(handle, \"{}\", ansi_style.paint(\" \".repeat(width)))?;\n                                }\n                                write!(handle, \"{}\", &text[text_trimmed.len()..])?;\n                            }\n                        }\n\n                        // ANSI escape passthrough.\n                        _ => {\n                            write!(handle, \"{}\", chunk.raw())?;\n                            self.ansi_style.update(chunk);\n                        }\n                    }\n                }\n            }\n\n            if !self.config.style_components.plain() && line.bytes().next_back() != Some(b'\\n') {\n                writeln!(handle)?;\n            }\n        } else {\n            for &(style, region) in &regions {\n                let ansi_iterator = EscapeSequenceIterator::new(region);\n                for chunk in ansi_iterator {\n                    match chunk {\n                        // Regular text.\n                        EscapeSequence::Text(text) => {\n                            let text = self\n                                .preprocess(text.trim_end_matches(['\\r', '\\n']), &mut cursor_total);\n\n                            let mut max_width = cursor_max - cursor;\n\n                            // line buffer (avoid calling write! for every character)\n                            let mut line_buf = String::with_capacity(max_width * 4);\n\n                            // Displayed width of line_buf\n                            let mut current_width = 0;\n\n                            let word_wrap = matches!(self.config.wrapping_mode, WrappingMode::Word);\n\n                            // For word wrapping, track last whitespace position.\n                            let mut last_ws_idx: Option<usize> = None;\n\n                            for c in text.chars() {\n                                // calculate the displayed width for next character\n                                let cw = c.width().unwrap_or(0);\n                                current_width += cw;\n\n                                // Track whitespace positions for word wrapping.\n                                if word_wrap && c.is_whitespace() {\n                                    last_ws_idx = Some(line_buf.len());\n                                }\n\n                                // if next character cannot be printed on this line,\n                                // flush the buffer.\n                                if current_width > max_width {\n                                    // Generate wrap padding if not already generated.\n                                    if panel_wrap.is_none() {\n                                        panel_wrap = if self.panel_width > 0 {\n                                            Some(format!(\n                                                \"{} \",\n                                                self.decorations\n                                                    .iter()\n                                                    .map(|d| d\n                                                        .generate(line_number, true, self)\n                                                        .text)\n                                                    .collect::<Vec<String>>()\n                                                    .join(\" \")\n                                            ))\n                                        } else {\n                                            Some(\"\".to_string())\n                                        }\n                                    }\n\n                                    // Determine the break point and remainder\n                                    // for word wrapping.\n                                    let (emit_end, rest_start) = if word_wrap {\n                                        if let Some(ws_idx) = last_ws_idx {\n                                            // Skip the whitespace character itself\n                                            // and carry the rest to the next line.\n                                            let rs = ws_idx\n                                                + line_buf[ws_idx..]\n                                                    .chars()\n                                                    .next()\n                                                    .map(|ch| ch.len_utf8())\n                                                    .unwrap_or(0);\n                                            (ws_idx, Some(rs))\n                                        } else {\n                                            (line_buf.len(), None)\n                                        }\n                                    } else {\n                                        (line_buf.len(), None)\n                                    };\n\n                                    // It wraps.\n                                    write!(\n                                        handle,\n                                        \"{}{}\\n{}\",\n                                        as_terminal_escaped(\n                                            style,\n                                            &format!(\n                                                \"{}{}\",\n                                                self.ansi_style,\n                                                &line_buf[..emit_end]\n                                            ),\n                                            self.config.true_color,\n                                            self.config.colored_output,\n                                            self.config.use_italic_text,\n                                            background_color\n                                        ),\n                                        self.ansi_style.to_reset_sequence(),\n                                        panel_wrap.clone().unwrap()\n                                    )?;\n\n                                    cursor = 0;\n                                    max_width = cursor_max;\n\n                                    if let Some(rs) = rest_start {\n                                        // Word wrap: carry remainder to next line.\n                                        let remainder = line_buf[rs..].to_string();\n                                        let rem_width: usize = remainder\n                                            .chars()\n                                            .map(|ch| ch.width().unwrap_or(0))\n                                            .sum();\n                                        line_buf.clear();\n                                        line_buf.push_str(&remainder);\n                                        current_width = rem_width + cw;\n                                    } else {\n                                        line_buf.clear();\n                                        current_width = cw;\n                                    }\n                                    last_ws_idx = None;\n                                }\n\n                                line_buf.push(c);\n                            }\n\n                            // flush the buffer\n                            cursor += current_width;\n                            write!(\n                                handle,\n                                \"{}\",\n                                as_terminal_escaped(\n                                    style,\n                                    &format!(\"{}{line_buf}\", self.ansi_style),\n                                    self.config.true_color,\n                                    self.config.colored_output,\n                                    self.config.use_italic_text,\n                                    background_color\n                                )\n                            )?;\n                        }\n\n                        // ANSI escape passthrough.\n                        _ => {\n                            write!(handle, \"{}\", chunk.raw())?;\n                            self.ansi_style.update(chunk);\n                        }\n                    }\n                }\n            }\n\n            if let Some(background_color) = background_color {\n                let ansi_style = Style {\n                    background: to_ansi_color(background_color, self.config.true_color),\n                    ..Default::default()\n                };\n\n                write!(\n                    handle,\n                    \"{}\",\n                    ansi_style.paint(\" \".repeat(cursor_max - cursor))\n                )?;\n            }\n            writeln!(handle)?;\n        }\n\n        if highlight_this_line && self.config.theme == \"ansi\" {\n            write!(handle, \"{}\", ANSI_UNDERLINE_DISABLE.raw())?;\n            self.ansi_style.update(ANSI_UNDERLINE_DISABLE);\n        }\n\n        Ok(())\n    }\n}\n\nconst DEFAULT_GUTTER_COLOR: u8 = 238;\n\n#[derive(Debug, Default)]\npub struct Colors {\n    pub grid: Style,\n    pub rule: Style,\n    pub header_value: Style,\n    pub git_added: Style,\n    pub git_removed: Style,\n    pub git_modified: Style,\n    pub line_number: Style,\n}\n\nimpl Colors {\n    fn plain() -> Self {\n        Colors::default()\n    }\n\n    fn colored(theme: &Theme, true_color: bool) -> Self {\n        let gutter_style = Style {\n            foreground: match theme.settings.gutter_foreground {\n                // If the theme provides a gutter foreground color, use it.\n                // Note: It might be the special value #00000001, in which case\n                // to_ansi_color returns None and we use an empty Style\n                // (resulting in the terminal's default foreground color).\n                Some(c) => to_ansi_color(c, true_color),\n                // Otherwise, use a specific fallback color.\n                None => Some(Fixed(DEFAULT_GUTTER_COLOR)),\n            },\n            ..Style::default()\n        };\n\n        Colors {\n            grid: gutter_style,\n            rule: gutter_style,\n            header_value: Style::new().bold(),\n            git_added: Green.normal(),\n            git_removed: Red.normal(),\n            git_modified: Yellow.normal(),\n            line_number: gutter_style,\n        }\n    }\n}\n"
  },
  {
    "path": "src/style.rs",
    "content": "use std::collections::HashSet;\nuse std::str::FromStr;\n\nuse crate::error::*;\n\n#[non_exhaustive]\n#[derive(Debug, Eq, PartialEq, Copy, Clone, Hash)]\npub enum StyleComponent {\n    Auto,\n    #[cfg(feature = \"git\")]\n    Changes,\n    Grid,\n    Rule,\n    Header,\n    HeaderFilename,\n    HeaderFilesize,\n    LineNumbers,\n    Snip,\n    Full,\n    Default,\n    Plain,\n}\n\nimpl StyleComponent {\n    pub fn components(self, interactive_terminal: bool) -> &'static [StyleComponent] {\n        match self {\n            StyleComponent::Auto => {\n                if interactive_terminal {\n                    StyleComponent::Default.components(interactive_terminal)\n                } else {\n                    StyleComponent::Plain.components(interactive_terminal)\n                }\n            }\n            #[cfg(feature = \"git\")]\n            StyleComponent::Changes => &[StyleComponent::Changes],\n            StyleComponent::Grid => &[StyleComponent::Grid],\n            StyleComponent::Rule => &[StyleComponent::Rule],\n            StyleComponent::Header => &[StyleComponent::HeaderFilename],\n            StyleComponent::HeaderFilename => &[StyleComponent::HeaderFilename],\n            StyleComponent::HeaderFilesize => &[StyleComponent::HeaderFilesize],\n            StyleComponent::LineNumbers => &[StyleComponent::LineNumbers],\n            StyleComponent::Snip => &[StyleComponent::Snip],\n            StyleComponent::Full => &[\n                #[cfg(feature = \"git\")]\n                StyleComponent::Changes,\n                StyleComponent::Grid,\n                StyleComponent::HeaderFilename,\n                StyleComponent::HeaderFilesize,\n                StyleComponent::LineNumbers,\n                StyleComponent::Snip,\n            ],\n            StyleComponent::Default => &[\n                #[cfg(feature = \"git\")]\n                StyleComponent::Changes,\n                StyleComponent::Grid,\n                StyleComponent::HeaderFilename,\n                StyleComponent::LineNumbers,\n                StyleComponent::Snip,\n            ],\n            StyleComponent::Plain => &[],\n        }\n    }\n}\n\nimpl FromStr for StyleComponent {\n    type Err = Error;\n\n    fn from_str(s: &str) -> Result<Self> {\n        match s {\n            \"auto\" => Ok(StyleComponent::Auto),\n            #[cfg(feature = \"git\")]\n            \"changes\" => Ok(StyleComponent::Changes),\n            \"grid\" => Ok(StyleComponent::Grid),\n            \"rule\" => Ok(StyleComponent::Rule),\n            \"header\" => Ok(StyleComponent::Header),\n            \"header-filename\" => Ok(StyleComponent::HeaderFilename),\n            \"header-filesize\" => Ok(StyleComponent::HeaderFilesize),\n            \"numbers\" => Ok(StyleComponent::LineNumbers),\n            \"snip\" => Ok(StyleComponent::Snip),\n            \"full\" => Ok(StyleComponent::Full),\n            \"default\" => Ok(StyleComponent::Default),\n            \"plain\" => Ok(StyleComponent::Plain),\n            _ => Err(format!(\"Unknown style '{s}'\").into()),\n        }\n    }\n}\n\n#[derive(Debug, Clone, Default)]\npub struct StyleComponents(pub HashSet<StyleComponent>);\n\nimpl StyleComponents {\n    pub fn new(components: &[StyleComponent]) -> StyleComponents {\n        StyleComponents(components.iter().cloned().collect())\n    }\n\n    #[cfg(feature = \"git\")]\n    pub fn changes(&self) -> bool {\n        self.0.contains(&StyleComponent::Changes)\n    }\n\n    pub fn grid(&self) -> bool {\n        self.0.contains(&StyleComponent::Grid)\n    }\n\n    pub fn rule(&self) -> bool {\n        self.0.contains(&StyleComponent::Rule)\n    }\n\n    pub fn header(&self) -> bool {\n        self.header_filename() || self.header_filesize()\n    }\n\n    pub fn header_filename(&self) -> bool {\n        self.0.contains(&StyleComponent::HeaderFilename)\n    }\n\n    pub fn header_filesize(&self) -> bool {\n        self.0.contains(&StyleComponent::HeaderFilesize)\n    }\n\n    pub fn numbers(&self) -> bool {\n        self.0.contains(&StyleComponent::LineNumbers)\n    }\n\n    pub fn snip(&self) -> bool {\n        self.0.contains(&StyleComponent::Snip)\n    }\n\n    pub fn plain(&self) -> bool {\n        self.0.iter().all(|c| c == &StyleComponent::Plain)\n    }\n\n    pub fn insert(&mut self, component: StyleComponent) {\n        self.0.insert(component);\n    }\n\n    pub fn clear(&mut self) {\n        self.0.clear();\n    }\n}\n\n#[derive(Debug, PartialEq)]\nenum ComponentAction {\n    Override,\n    Add,\n    Remove,\n}\n\nimpl ComponentAction {\n    fn extract_from_str(string: &str) -> (ComponentAction, &str) {\n        match string.chars().next() {\n            Some('-') => (ComponentAction::Remove, string.strip_prefix('-').unwrap()),\n            Some('+') => (ComponentAction::Add, string.strip_prefix('+').unwrap()),\n            _ => (ComponentAction::Override, string),\n        }\n    }\n}\n\n/// A list of [StyleComponent] that can be parsed from a string.\npub struct StyleComponentList(Vec<(ComponentAction, StyleComponent)>);\n\nimpl StyleComponentList {\n    fn expand_into(&self, components: &mut HashSet<StyleComponent>, interactive_terminal: bool) {\n        for (action, component) in self.0.iter() {\n            let subcomponents = component.components(interactive_terminal);\n\n            use ComponentAction::*;\n            match action {\n                Override | Add => components.extend(subcomponents),\n                Remove => components.retain(|c| !subcomponents.contains(c)),\n            }\n        }\n    }\n\n    /// Returns `true` if any component in the list was not prefixed with `+` or `-`.\n    fn contains_override(&self) -> bool {\n        self.0.iter().any(|(a, _)| *a == ComponentAction::Override)\n    }\n\n    /// Combines multiple [StyleComponentList]s into a single [StyleComponents] set.\n    ///\n    /// ## Precedence\n    /// The most recent list will take precedence and override all previous lists\n    /// unless it only contains components prefixed with `-` or `+`. When this\n    /// happens, the list's components will be merged into the previous list.\n    ///\n    /// ## Example\n    /// ```text\n    /// [numbers,grid] + [header,changes]  -> [header,changes]\n    /// [numbers,grid] + [+header,-grid]   -> [numbers,header]\n    /// ```\n    ///\n    /// ## Parameters\n    ///  - `with_default`: If true, the styles lists will build upon the StyleComponent::Auto style.\n    pub fn to_components(\n        lists: impl IntoIterator<Item = StyleComponentList>,\n        interactive_terminal: bool,\n        with_default: bool,\n    ) -> StyleComponents {\n        let mut components: HashSet<StyleComponent> = HashSet::new();\n        if with_default {\n            components.extend(StyleComponent::Auto.components(interactive_terminal))\n        }\n\n        StyleComponents(lists.into_iter().fold(components, |mut components, list| {\n            if list.contains_override() {\n                components.clear();\n            }\n\n            list.expand_into(&mut components, interactive_terminal);\n            components\n        }))\n    }\n}\n\nimpl Default for StyleComponentList {\n    fn default() -> Self {\n        StyleComponentList(vec![(ComponentAction::Override, StyleComponent::Default)])\n    }\n}\n\nimpl FromStr for StyleComponentList {\n    type Err = Error;\n\n    fn from_str(s: &str) -> Result<Self> {\n        Ok(StyleComponentList(\n            s.split(\",\")\n                .map(ComponentAction::extract_from_str) // If the component starts with \"-\", it's meant to be removed\n                .map(|(a, s)| Ok((a, StyleComponent::from_str(s)?)))\n                .collect::<Result<Vec<(ComponentAction, StyleComponent)>>>()?,\n        ))\n    }\n}\n\n#[cfg(test)]\nmod test {\n    use std::collections::HashSet;\n    use std::str::FromStr;\n\n    use super::ComponentAction::*;\n    use super::StyleComponent;\n    use super::StyleComponent::*;\n    use super::StyleComponentList;\n\n    #[test]\n    pub fn style_component_list_parse() {\n        assert_eq!(\n            StyleComponentList::from_str(\"grid,+numbers,snip,-snip,header\")\n                .expect(\"no error\")\n                .0,\n            vec![\n                (Override, Grid),\n                (Add, LineNumbers),\n                (Override, Snip),\n                (Remove, Snip),\n                (Override, Header),\n            ]\n        );\n\n        assert!(StyleComponentList::from_str(\"not-a-component\").is_err());\n        assert!(StyleComponentList::from_str(\"grid,not-a-component\").is_err());\n        assert!(StyleComponentList::from_str(\"numbers,-not-a-component\").is_err());\n    }\n\n    #[test]\n    pub fn style_component_list_to_components() {\n        assert_eq!(\n            StyleComponentList::to_components(\n                vec![StyleComponentList::from_str(\"grid,numbers\").expect(\"no error\")],\n                false,\n                false\n            )\n            .0,\n            HashSet::from([Grid, LineNumbers])\n        );\n    }\n\n    #[test]\n    pub fn style_component_list_to_components_removes_negated() {\n        assert_eq!(\n            StyleComponentList::to_components(\n                vec![StyleComponentList::from_str(\"grid,numbers,-grid\").expect(\"no error\")],\n                false,\n                false\n            )\n            .0,\n            HashSet::from([LineNumbers])\n        );\n    }\n\n    #[test]\n    pub fn style_component_list_to_components_expands_subcomponents() {\n        assert_eq!(\n            StyleComponentList::to_components(\n                vec![StyleComponentList::from_str(\"full\").expect(\"no error\")],\n                false,\n                false\n            )\n            .0,\n            HashSet::from_iter(Full.components(true).to_owned())\n        );\n    }\n\n    #[test]\n    pub fn style_component_list_expand_negates_subcomponents() {\n        assert!(!StyleComponentList::to_components(\n            vec![StyleComponentList::from_str(\"full,-numbers\").expect(\"no error\")],\n            true,\n            false\n        )\n        .numbers());\n    }\n\n    #[test]\n    pub fn style_component_list_to_components_precedence_overrides_previous_lists() {\n        assert_eq!(\n            StyleComponentList::to_components(\n                vec![\n                    StyleComponentList::from_str(\"grid\").expect(\"no error\"),\n                    StyleComponentList::from_str(\"numbers\").expect(\"no error\"),\n                ],\n                false,\n                false\n            )\n            .0,\n            HashSet::from([LineNumbers])\n        );\n    }\n\n    #[test]\n    pub fn style_component_list_to_components_precedence_merges_previous_lists() {\n        assert_eq!(\n            StyleComponentList::to_components(\n                vec![\n                    StyleComponentList::from_str(\"grid,header\").expect(\"no error\"),\n                    StyleComponentList::from_str(\"-grid\").expect(\"no error\"),\n                    StyleComponentList::from_str(\"+numbers\").expect(\"no error\"),\n                ],\n                false,\n                false\n            )\n            .0,\n            HashSet::from([HeaderFilename, LineNumbers])\n        );\n    }\n\n    #[test]\n    pub fn style_component_list_default_builds_on_auto() {\n        assert_eq!(\n            StyleComponentList::to_components(\n                vec![StyleComponentList::from_str(\"-numbers\").expect(\"no error\"),],\n                true,\n                true\n            )\n            .0,\n            {\n                let mut expected: HashSet<StyleComponent> = HashSet::new();\n                expected.extend(Auto.components(true));\n                expected.remove(&LineNumbers);\n                expected\n            }\n        );\n    }\n}\n"
  },
  {
    "path": "src/syntax_mapping/builtin.rs",
    "content": "use std::env;\n\nuse globset::GlobMatcher;\nuse once_cell::sync::Lazy;\n\nuse crate::syntax_mapping::{make_glob_matcher, MappingTarget};\n\n// Static syntax mappings generated from /src/syntax_mapping/builtins/ by the\n// build script (/build/syntax_mapping.rs).\ninclude!(concat!(\n    env!(\"OUT_DIR\"),\n    \"/codegen_static_syntax_mappings.rs\"\n));\n\n// The defined matcher strings are analysed at compile time and converted into\n// lazily-compiled `GlobMatcher`s. This is so that the string searches are moved\n// from run time to compile time, thus improving startup performance.\n//\n// To any future maintainer (including possibly myself) wondering why there is\n// not a `BuiltinMatcher` enum that looks like this:\n//\n// ```\n// enum BuiltinMatcher {\n//     Fixed(&'static str),\n//     Dynamic(Lazy<Option<String>>),\n// }\n// ```\n//\n// Because there was. I tried it and threw it out.\n//\n// Naively looking at the problem from a distance, this may seem like a good\n// design (strongly typed etc. etc.). It would also save on compiled size by\n// extracting out common behaviour into functions. But while actually\n// implementing the lazy matcher compilation logic, I realised that it's most\n// convenient for `BUILTIN_MAPPINGS` to have the following type:\n//\n// `[(Lazy<Option<GlobMatcher>>, MappingTarget); N]`\n//\n// The benefit for this is that operations like listing all builtin mappings\n// would be effectively memoised. The caller would not have to compile another\n// `GlobMatcher` for rules that they have previously visited.\n//\n// Unfortunately, this means we are going to have to store a distinct closure\n// for each rule anyway, which makes a `BuiltinMatcher` enum a pointless layer\n// of indirection.\n//\n// In the current implementation, the closure within each generated rule simply\n// calls either `build_matcher_fixed` or `build_matcher_dynamic`, depending on\n// whether the defined matcher contains dynamic segments or not.\n\n/// Compile a fixed glob string into a glob matcher.\n///\n/// A failure to compile is a fatal error.\n///\n/// Used internally by `Lazy<Option<GlobMatcher>>`'s lazy evaluation closure.\nfn build_matcher_fixed(from: &str) -> GlobMatcher {\n    make_glob_matcher(from).expect(\"A builtin fixed glob matcher failed to compile\")\n}\n\n/// Join a list of matcher segments to create a glob string, replacing all\n/// environment variables, then compile to a glob matcher.\n///\n/// Returns `None` if any replacement fails, or if the joined glob string fails\n/// to compile.\n///\n/// Used internally by `Lazy<Option<GlobMatcher>>`'s lazy evaluation closure.\nfn build_matcher_dynamic(segs: &[MatcherSegment]) -> Option<GlobMatcher> {\n    // join segments\n    let mut buf = String::new();\n    for seg in segs {\n        match seg {\n            MatcherSegment::Text(s) => buf.push_str(s),\n            MatcherSegment::Env(var) => {\n                let replaced = env::var(var).ok()?;\n                buf.push_str(&replaced);\n            }\n        }\n    }\n    // compile glob matcher\n    let matcher = make_glob_matcher(&buf).ok()?;\n    Some(matcher)\n}\n\n/// A segment of a dynamic builtin matcher.\n///\n/// Used internally by `Lazy<Option<GlobMatcher>>`'s lazy evaluation closure.\n#[derive(Clone, Debug)]\nenum MatcherSegment {\n    Text(&'static str),\n    Env(&'static str),\n}\n"
  },
  {
    "path": "src/syntax_mapping/builtins/README.md",
    "content": "# `/src/syntax_mapping/builtins`\n\nThe files in this directory define path/name-based syntax mappings, which amend\nand take precedence over the extension/content-based syntax mappings provided by\n[syntect](https://github.com/trishume/syntect).\n\n## File organisation\n\nEach TOML file should describe the syntax mappings of a single application, or\notherwise a set of logically-related rules.\n\nWhat defines \"a single application\" here is deliberately vague, since the\nfile-splitting is purely for maintainability reasons. (Technically, we could\njust as well use a single TOML file.) So just use common sense.\n\nTOML files should reside in the corresponding subdirectory of the platform(s)\nthat they intend to target. At compile time, the build script will go through\neach subdirectory that is applicable to the compilation target, collect the\nsyntax mappings defined by all TOML files, and embed them into the binary.\n\n## File syntax\n\nEach TOML file should contain a single section named `mappings`, with each of\nits keys being a language identifier (first column of `bat -L`; also referred to\nas \"target\").\n\nThe value of each key should be an array of strings, with each item being a glob\nmatcher. We will call each of these items a \"rule\".\n\nFor example, if `foo-application` uses both TOML and YAML configuration files,\nwe could write something like this:\n\n```toml\n# 30-foo-application.toml\n[mappings]\n\"TOML\" = [\n    # rules for TOML syntax go here\n    \"/usr/share/foo-application/toml-config/*.conf\",\n    \"/etc/foo-application/toml-config/*.conf\",\n]\n\"YAML\" = [\n    # rules for YAML syntax go here\n    # ...\n]\n```\n\n### Dynamic environment variable replacement\n\nIn additional to the standard glob matcher syntax, rules also support dynamic\nreplacement of environment variables at runtime. This allows us to concisely\nhandle things like [XDG](https://specifications.freedesktop.org/basedir-spec/latest/).\n\nAll environment variables intended to be replaced at runtime must be enclosed in\n`${}`, for example `\"/foo/*/${YOUR_ENV}-suffix/*.log\"`. Note that this is the\n**only** admissible syntax; other variable substitution syntaxes are not\nsupported and will either cause a compile time error, or be treated as plain\ntext.\n\nFor example, if `foo-application` also supports per-user configuration files, we\ncould write something like this:\n\n```toml\n# 30-foo-application.toml\n[mappings]\n\"TOML\" = [\n    # rules for TOML syntax go here\n    \"/usr/share/foo-application/toml-config/*.conf\",\n    \"/etc/foo-application/toml-config/*.conf\",\n    \"${XDG_CONFIG_HOME}/foo-application/toml-config/*.conf\",\n    \"${HOME}/.config/foo-application/toml-config/*.conf\",\n]\n\"YAML\" = [\n    # rules for YAML syntax go here\n    # ...\n]\n```\n\nIf any environment variable replacement in a rule fails (for example when a\nvariable is unset), or if the glob string after replacements is invalid, the\nentire rule will be ignored.\n\n### Explicitly mapping to unknown\n\nSometimes it may be necessary to \"unset\" a particular syntect mapping - perhaps\na syntax's matching rules are \"too greedy\", and is claiming files that it should\nnot. In this case, there are two special identifiers:\n`MappingTarget::MapToUnknown` and `MappingTarget::MapExtensionToUnknown`\n(corresponding to the two variants of the `syntax_mapping::MappingTarget` enum).\n\nAn example of this would be `*.conf` files in general. So we may write something\nlike this:\n\n```toml\n# 99-unset-ambiguous-extensions.toml\n[mappings]\n\"MappingTarget::MapExtensionToUnknown\" = [\n    \"*.conf\",\n]\n```\n\n## Ordering\n\nAt compile time, all TOML files applicable to the target are processed in\nlexicographical filename order. So `00-foo.toml` takes precedence over\n`10-bar.toml`, which takes precedence over `20-baz.toml`, and so on. Note that\n**only** the filenames of the TOML files are taken into account; the\nsubdirectories they are placed in have no influence on ordering.\n\nThis behaviour can be occasionally useful for creating high/low priority rules,\nsuch as in the aforementioned example of explicitly mapping `*.conf` files to\nunknown. Generally this should not be much of a concern though, since rules\nshould be written as specifically as possible for each application.\n\nRules within each TOML file are processed (and therefore matched) in the order\nin which they are defined. At runtime, the syntax selection algorithm will\nshort-circuit and return the target of the first matching rule.\n"
  },
  {
    "path": "src/syntax_mapping/builtins/bsd-family/.gitkeep",
    "content": ""
  },
  {
    "path": "src/syntax_mapping/builtins/bsd-family/50-os-release.toml",
    "content": "[mappings]\n\"Bourne Again Shell (bash)\" = [\"/etc/os-release\", \"/var/run/os-release\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/common/.gitkeep",
    "content": ""
  },
  {
    "path": "src/syntax_mapping/builtins/common/50-apache.toml",
    "content": "[mappings]\n\"Apache Conf\" = [\"httpd.conf\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/common/50-aws-credentials.toml",
    "content": "[mappings]\n\"INI\" = [\"**/.aws/credentials\", \"**/.aws/config\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/common/50-bat.toml",
    "content": "[mappings]\n\"Bourne Again Shell (bash)\" = [\"**/bat/config\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/common/50-citation.toml",
    "content": "[mappings]\n\"YAML\" = [\"CITATION.cff\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/common/50-container.toml",
    "content": "[mappings]\n\"Dockerfile\" = [\"Containerfile\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/common/50-cpp.toml",
    "content": "[mappings]\n\"C++\" = [\n    # probably better than the default Objective C mapping #877\n    \"*.h\",\n]\n\"YAML\" = [\".clang-format\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/common/50-diff.toml",
    "content": "# .debdiff is the extension used for diffs in Debian packaging\n[mappings]\n\"Diff\" = [\"*.debdiff\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/common/50-dotnet-xml.toml",
    "content": "[mappings]\n\"XML\" = [\"*.csproj\", \"*.vbproj\", \"*.props\", \"*.targets\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/common/50-f-sharp.toml",
    "content": "[mappings]\n\"F#\" = [\"*.fs\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/common/50-gcloud-cli-config.toml",
    "content": "[mappings]\n\"INI\" = [\".boto\", \"**/gcloud/configurations/config_*\"]\n\"Git Ignore\" = [\".gcloudignore\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/common/50-git.toml",
    "content": "# Global git config files rooted in `$XDG_CONFIG_HOME/git/` or `$HOME/.config/git/`\n# See e.g. https://git-scm.com/docs/git-config#FILES\n\n[mappings]\n\"Git Config\" = [\"${XDG_CONFIG_HOME}/git/config\", \"${HOME}/.config/git/config\"]\n\"Git Ignore\" = [\"${XDG_CONFIG_HOME}/git/ignore\", \"${HOME}/.config/git/ignore\"]\n\"Git Attributes\" = [\n    \"${XDG_CONFIG_HOME}/git/attributes\",\n    \"${HOME}/.config/git/attributes\",\n]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/common/50-json.toml",
    "content": "# JSON Lines is a simple variation of JSON #2535\n[mappings]\n\"JSON\" = [\"*.jsonl\", \"*.jsonc\", \"*.jsonld\", \"*.geojson\", \"*.ndjson\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/common/50-markdown.toml",
    "content": "[mappings]\n\"Markdown\" = [\"*.mkd\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/common/50-mill.toml",
    "content": "[mappings]\n\"Scala\" = [\"*.mill\"]"
  },
  {
    "path": "src/syntax_mapping/builtins/common/50-nginx.toml",
    "content": "[mappings]\n\"nginx\" = [\"nginx.conf\", \"mime.types\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/common/50-nix.toml",
    "content": "[mappings]\n\"JSON\" = [\"flake.lock\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/common/50-nmap.toml",
    "content": "[mappings]\n# See #2151, https://nmap.org/book/nse-language.html\n\"Lua\" = [\"*.nse\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/common/50-proxy-auto-config.toml",
    "content": "# 1515\n[mappings]\n\"JavaScript (Babel)\" = [\"*.pac\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/common/50-ron.toml",
    "content": "# Rusty Object Notation #2427\n[mappings]\n\"Rust\" = [\"*.ron\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/common/50-sarif.toml",
    "content": "# SARIF is a format for reporting static analysis results #2695\n[mappings]\n\"JSON\" = [\"*.sarif\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/common/50-ssh.toml",
    "content": "[mappings]\n\"SSH Config\" = [\"**/.ssh/config\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/common/90-ignore-files.toml",
    "content": "[mappings]\n\"Git Ignore\" = [\".?*ignore\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/common/99-unset-ambiguous-extensions.toml",
    "content": "[mappings]\n\"MappingTarget::MapExtensionToUnknown\" = [\n    # common extension used for all kinds of formats\n    \"*.conf\",\n]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/common/99-unset-ambiguous-filenames.toml",
    "content": "[mappings]\n\"MappingTarget::MapToUnknown\" = [\n    # \"NAnt Build File\" should only match *.build files, not files named \"build\"\n    \"build\",\n    # \"bin/rails\" scripts in a Ruby project misidentified as HTML (Rails) #1008\n    \"rails\",\n]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/common/xonsh.toml",
    "content": "# Xonsh shell (https://xon.sh/)\n[mappings]\n\"Python\" = [\"*.xsh\", \"*.xonshrc\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/linux/.gitkeep",
    "content": ""
  },
  {
    "path": "src/syntax_mapping/builtins/linux/50-containers.toml",
    "content": "# see https://github.com/containers/image/tree/main/docs\n[mappings]\n\"TOML\" = [\n    \"/usr/share/containers/**/*.conf\",\n    \"/etc/containers/**/*.conf\",\n    \"${HOME}/.config/containers/**/*.conf\",\n    \"${XDG_CONFIG_HOME}/containers/**/*.conf\",\n]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/linux/50-flatpak.toml",
    "content": "[mappings]\n\"INI\" = [\n    \"*.flatpakref\",\n    \"*.flatpakrepo\"\n]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/linux/50-kubernetes.toml",
    "content": "[mappings]\n\"YAML\" = [\"/etc/kubernetes/*.conf\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/linux/50-os-release.toml",
    "content": "[mappings]\n\"Bourne Again Shell (bash)\" = [\n    \"/etc/os-release\",\n    \"/usr/lib/os-release\",\n    \"/etc/initrd-release\",\n    \"/usr/lib/extension-release.d/extension-release.*\",\n]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/linux/50-pacman.toml",
    "content": "[mappings]\n\"INI\" = [\n    # config\n    \"/etc/pacman.conf\",\n    # hooks\n    \"/usr/share/libalpm/hooks/*.hook\",\n    \"/etc/pacman.d/hooks/*.hook\",\n]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/linux/50-paru.toml",
    "content": "# See https://github.com/Morganamilo/paru/blob/master/man/paru.conf.5\n[mappings]\n\"INI\" = [\n    \"${PARU_CONF}\",\n    \"paru.conf\",\n]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/linux/50-podman-quadlet.toml",
    "content": "# see `man quadlet`\n[mappings]\n\"INI\" = [\n    \"**/containers/systemd/**/*.{container,volume,network,kube,image,build,pod,artifact}\",\n]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/linux/50-systemd.toml",
    "content": "[mappings]\n\"INI\" = [\n    \"**/systemd/**/*.conf\",\n    \"**/systemd/**/*.example\",\n    \"*.automount\",\n    \"*.device\",\n    \"*.dnssd\",\n    \"*.link\",\n    \"*.mount\",\n    \"*.netdev\",\n    \"*.network\",\n    \"*.nspawn\",\n    \"*.path\",\n    \"*.service\",\n    \"*.scope\",\n    \"*.slice\",\n    \"*.socket\",\n    \"*.swap\",\n    \"*.target\",\n    \"*.timer\",\n]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/macos/.gitkeep",
    "content": ""
  },
  {
    "path": "src/syntax_mapping/builtins/unix-family/.gitkeep",
    "content": ""
  },
  {
    "path": "src/syntax_mapping/builtins/unix-family/50-apache.toml",
    "content": "[mappings]\n\"Apache Conf\" = [\"/etc/apache2/**/*.conf\", \"/etc/apache2/sites-*/**/*\", \"/etc/httpd/conf/**/*.conf\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/unix-family/50-certbot.toml",
    "content": "# See https://eff-certbot.readthedocs.io/en/stable/using.html#configuration-file\n[mappings]\n\"INI\" = [\"/etc/letsencrypt/renewal/*.conf\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/unix-family/50-fish-shell.toml",
    "content": "[mappings]\n\"YAML\" = [\"fish_history\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/unix-family/50-korn-shell.toml",
    "content": "# KornShell is backward-compatible with the Bourne shell #2633\n[mappings]\n\"Bourne Again Shell (bash)\" = [\n    \"*.ksh\",\n    \"*.kshrc\" \n]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/unix-family/50-mail-spool.toml",
    "content": "[mappings]\n\"Email\" = [\"/var/spool/mail/*\", \"/var/mail/*\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/unix-family/50-nginx.toml",
    "content": "[mappings]\n\"nginx\" = [\"/etc/nginx/**/*.conf\", \"/etc/nginx/sites-*/**/*\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/unix-family/50-shell.toml",
    "content": "[mappings]\n\"Bourne Again Shell (bash)\" = [\n    # used by lots of shells\n    \"/etc/profile\",\n\n    \"bashrc\",\n    \"*.bashrc\",\n    \"bash_profile\",\n    \"*.bash_profile\",\n    \"bash_login\",\n    \"*.bash_login\",\n    \"bash_logout\",\n    \"*.bash_logout\",\n\n    \"zshrc\",\n    \"*.zshrc\",\n    \"zprofile\",\n    \"*.zprofile\",\n    \"zlogin\",\n    \"*.zlogin\",\n    \"zlogout\",\n    \"*.zlogout\",\n    \"zshenv\",\n    \"*.zshenv\"\n]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/unix-family/50-syslog.toml",
    "content": "[mappings]\n\"Syslog\" = [\"/var/log/dmesg\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/unix-family/50-wireguard.toml",
    "content": "# see `man wg-quick`\n[mappings]\n\"INI\" = [\"/etc/wireguard/*.conf\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/windows/.gitkeep",
    "content": ""
  },
  {
    "path": "src/syntax_mapping/ignored_suffixes.rs",
    "content": "use std::ffi::OsStr;\nuse std::fmt::Debug;\nuse std::path::Path;\n\nuse crate::error::*;\n\n#[derive(Debug, Clone)]\npub struct IgnoredSuffixes<'a> {\n    values: Vec<&'a str>,\n}\n\nimpl Default for IgnoredSuffixes<'_> {\n    fn default() -> Self {\n        Self {\n            values: vec![\n                // Editor etc backups\n                \"~\",\n                \".bak\",\n                \".old\",\n                \".orig\",\n                // Debian and derivatives apt/dpkg/ucf backups\n                \".dpkg-dist\",\n                \".dpkg-new\",\n                \".dpkg-old\",\n                \".dpkg-tmp\",\n                \".ucf-dist\",\n                \".ucf-new\",\n                \".ucf-old\",\n                // Red Hat and derivatives rpm backups\n                \".rpmnew\",\n                \".rpmorig\",\n                \".rpmsave\",\n                // Build system input/template files\n                \".in\",\n            ],\n        }\n    }\n}\n\nimpl<'a> IgnoredSuffixes<'a> {\n    pub fn add_suffix(&mut self, suffix: &'a str) {\n        self.values.push(suffix)\n    }\n\n    pub fn strip_suffix(&self, file_name: &'a str) -> Option<&'a str> {\n        for suffix in self.values.iter() {\n            if let Some(stripped_file_name) = file_name.strip_suffix(suffix) {\n                return Some(stripped_file_name);\n            }\n        }\n        None\n    }\n\n    /// If we find an ignored suffix on the file name, e.g. '~', we strip it and\n    /// then try again without it.\n    pub fn try_with_stripped_suffix<T, F>(&self, file_name: &'a OsStr, func: F) -> Result<Option<T>>\n    where\n        F: Fn(&'a OsStr) -> Result<Option<T>>,\n    {\n        if let Some(file_str) = Path::new(file_name).to_str() {\n            if let Some(stripped_file_name) = self.strip_suffix(file_str) {\n                return func(OsStr::new(stripped_file_name));\n            }\n        }\n        Ok(None)\n    }\n}\n\n#[test]\nfn internal_suffixes() {\n    let ignored_suffixes = IgnoredSuffixes::default();\n\n    let file_names = ignored_suffixes\n        .values\n        .iter()\n        .map(|suffix| format!(\"test.json{suffix}\"));\n    for file_name_str in file_names {\n        let file_name = OsStr::new(&file_name_str);\n        let expected_stripped_file_name = OsStr::new(\"test.json\");\n        let stripped_file_name = ignored_suffixes\n            .try_with_stripped_suffix(file_name, |stripped_file_name| Ok(Some(stripped_file_name)));\n        assert_eq!(\n            expected_stripped_file_name,\n            stripped_file_name.unwrap().unwrap()\n        );\n    }\n}\n\n#[test]\nfn external_suffixes() {\n    let mut ignored_suffixes = IgnoredSuffixes::default();\n    ignored_suffixes.add_suffix(\".development\");\n    ignored_suffixes.add_suffix(\".production\");\n\n    let file_names = ignored_suffixes\n        .values\n        .iter()\n        .map(|suffix| format!(\"test.json{suffix}\"));\n    for file_name_str in file_names {\n        let file_name = OsStr::new(&file_name_str);\n        let expected_stripped_file_name = OsStr::new(\"test.json\");\n        let stripped_file_name = ignored_suffixes\n            .try_with_stripped_suffix(file_name, |stripped_file_name| Ok(Some(stripped_file_name)));\n        assert_eq!(\n            expected_stripped_file_name,\n            stripped_file_name.unwrap().unwrap()\n        );\n    }\n}\n"
  },
  {
    "path": "src/syntax_mapping.rs",
    "content": "use std::{\n    path::Path,\n    sync::{\n        atomic::{AtomicBool, Ordering},\n        Arc,\n    },\n    thread,\n};\n\nuse globset::{Candidate, GlobBuilder, GlobMatcher};\nuse once_cell::sync::Lazy;\n\nuse crate::error::Result;\nuse builtin::BUILTIN_MAPPINGS;\nuse ignored_suffixes::IgnoredSuffixes;\n\nmod builtin;\npub mod ignored_suffixes;\n\nfn make_glob_matcher(from: &str) -> Result<GlobMatcher> {\n    let matcher = GlobBuilder::new(from)\n        .case_insensitive(true)\n        .literal_separator(true)\n        .build()?\n        .compile_matcher();\n    Ok(matcher)\n}\n\n#[derive(Debug, Clone, Copy, PartialEq, Eq)]\n#[non_exhaustive]\npub enum MappingTarget<'a> {\n    /// For mapping a path to a specific syntax.\n    MapTo(&'a str),\n\n    /// For mapping a path (typically an extension-less file name) to an unknown\n    /// syntax. This typically means later using the contents of the first line\n    /// of the file to determine what syntax to use.\n    MapToUnknown,\n\n    /// For mapping a file extension (e.g. `*.conf`) to an unknown syntax. This\n    /// typically means later using the contents of the first line of the file\n    /// to determine what syntax to use. However, if a syntax handles a file\n    /// name that happens to have the given file extension (e.g. `resolv.conf`),\n    /// then that association will have higher precedence, and the mapping will\n    /// be ignored.\n    MapExtensionToUnknown,\n}\n\n#[derive(Debug, Clone, Default)]\npub struct SyntaxMapping<'a> {\n    /// User-defined mappings at run time.\n    ///\n    /// Rules in front have precedence.\n    custom_mappings: Vec<(GlobMatcher, MappingTarget<'a>)>,\n\n    pub(crate) ignored_suffixes: IgnoredSuffixes<'a>,\n\n    /// A flag to halt glob matcher building, which is offloaded to another thread.\n    ///\n    /// We have this so that we can signal the thread to halt early when appropriate.\n    halt_glob_build: Arc<AtomicBool>,\n}\n\nimpl Drop for SyntaxMapping<'_> {\n    fn drop(&mut self) {\n        // signal the offload thread to halt early\n        self.halt_glob_build.store(true, Ordering::Relaxed);\n    }\n}\n\nimpl<'a> SyntaxMapping<'a> {\n    pub fn new() -> SyntaxMapping<'a> {\n        Default::default()\n    }\n\n    /// Start a thread to build the glob matchers for all builtin mappings.\n    ///\n    /// The use of this function while not necessary, is useful to speed up startup\n    /// times by starting this work early in parallel.\n    ///\n    /// The thread halts if/when `halt_glob_build` is set to true.\n    pub fn start_offload_build_all(&self) {\n        let halt = Arc::clone(&self.halt_glob_build);\n        thread::spawn(move || {\n            for (matcher, _) in BUILTIN_MAPPINGS.iter() {\n                if halt.load(Ordering::Relaxed) {\n                    break;\n                }\n                Lazy::force(matcher);\n            }\n        });\n        // Note that this thread is not joined upon completion because there's\n        // no shared resources that need synchronization to be safely dropped.\n        // If we later add code into this thread that requires interesting\n        // resources (e.g. IO), it would be a good idea to store the handle\n        // and join it on drop.\n    }\n\n    pub fn insert(&mut self, from: &str, to: MappingTarget<'a>) -> Result<()> {\n        let matcher = make_glob_matcher(from)?;\n        self.custom_mappings.push((matcher, to));\n        Ok(())\n    }\n\n    /// Returns an iterator over all mappings. User-defined mappings are listed\n    /// before builtin mappings; mappings in front have higher precedence.\n    ///\n    /// Builtin mappings' `GlobMatcher`s are lazily compiled.\n    ///\n    /// Note that this function only returns mappings that are valid under the\n    /// current environment. For details see [`Self::builtin_mappings`].\n    pub fn all_mappings(&self) -> impl Iterator<Item = (&GlobMatcher, &MappingTarget<'a>)> {\n        self.custom_mappings()\n            .iter()\n            .map(|(matcher, target)| (matcher, target)) // as_ref\n            .chain(\n                // we need a map with a closure to \"do\" the lifetime variance\n                // see: https://discord.com/channels/273534239310479360/1120124565591425034/1170543402870382653\n                // also, clippy false positive:\n                // see: https://github.com/rust-lang/rust-clippy/issues/9280\n                #[allow(clippy::map_identity)]\n                self.builtin_mappings().map(|rule| rule),\n            )\n    }\n\n    /// Returns an iterator over all valid builtin mappings. Mappings in front\n    /// have higher precedence.\n    ///\n    /// The `GlabMatcher`s are lazily compiled.\n    ///\n    /// Mappings that are invalid under the current environment (i.e. rule\n    /// requires environment variable(s) that is unset, or the joined string\n    /// after variable(s) replacement is not a valid glob expression) are\n    /// ignored.\n    pub fn builtin_mappings(\n        &self,\n    ) -> impl Iterator<Item = (&'static GlobMatcher, &'static MappingTarget<'static>)> {\n        BUILTIN_MAPPINGS\n            .iter()\n            .filter_map(|(matcher, target)| matcher.as_ref().map(|glob| (glob, target)))\n    }\n\n    /// Returns all user-defined mappings.\n    pub fn custom_mappings(&self) -> &[(GlobMatcher, MappingTarget<'a>)] {\n        &self.custom_mappings\n    }\n\n    pub fn get_syntax_for(&self, path: impl AsRef<Path>) -> Option<MappingTarget<'a>> {\n        // Try matching on the file name as-is.\n        let candidate = Candidate::new(&path);\n        let candidate_filename = path.as_ref().file_name().map(Candidate::new);\n        for (glob, syntax) in self.all_mappings() {\n            if glob.is_match_candidate(&candidate)\n                || candidate_filename\n                    .as_ref()\n                    .is_some_and(|filename| glob.is_match_candidate(filename))\n            {\n                return Some(*syntax);\n            }\n        }\n        // Try matching on the file name after removing an ignored suffix.\n        let file_name = path.as_ref().file_name()?;\n        self.ignored_suffixes\n            .try_with_stripped_suffix(file_name, |stripped_file_name| {\n                Ok(self.get_syntax_for(stripped_file_name))\n            })\n            .ok()?\n    }\n\n    pub fn insert_ignored_suffix(&mut self, suffix: &'a str) {\n        self.ignored_suffixes.add_suffix(suffix);\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n\n    #[test]\n    fn builtin_mappings_work() {\n        let map = SyntaxMapping::new();\n\n        assert_eq!(\n            map.get_syntax_for(\"/path/to/build\"),\n            Some(MappingTarget::MapToUnknown)\n        );\n    }\n\n    #[test]\n    fn all_fixed_builtin_mappings_can_compile() {\n        let map = SyntaxMapping::new();\n\n        // collect call evaluates all lazy closures\n        // fixed builtin mappings will panic if they fail to compile\n        let _mappings = map.builtin_mappings().collect::<Vec<_>>();\n    }\n\n    #[test]\n    fn builtin_mappings_matcher_only_compile_once() {\n        let map = SyntaxMapping::new();\n\n        let two_iterations: Vec<_> = (0..2)\n            .map(|_| {\n                // addresses of every matcher\n                map.builtin_mappings()\n                    .map(|(matcher, _)| matcher as *const _ as usize)\n                    .collect::<Vec<_>>()\n            })\n            .collect();\n\n        // if the matchers are only compiled once, their address should remain the same\n        assert_eq!(two_iterations[0], two_iterations[1]);\n    }\n\n    #[test]\n    fn custom_mappings_work() {\n        let mut map = SyntaxMapping::new();\n        map.insert(\"/path/to/Cargo.lock\", MappingTarget::MapTo(\"TOML\"))\n            .ok();\n        map.insert(\"/path/to/.ignore\", MappingTarget::MapTo(\"Git Ignore\"))\n            .ok();\n\n        assert_eq!(\n            map.get_syntax_for(\"/path/to/Cargo.lock\"),\n            Some(MappingTarget::MapTo(\"TOML\"))\n        );\n        assert_eq!(map.get_syntax_for(\"/path/to/other.lock\"), None);\n\n        assert_eq!(\n            map.get_syntax_for(\"/path/to/.ignore\"),\n            Some(MappingTarget::MapTo(\"Git Ignore\"))\n        );\n    }\n\n    #[test]\n    fn custom_mappings_override_builtin() {\n        let mut map = SyntaxMapping::new();\n\n        assert_eq!(\n            map.get_syntax_for(\"/path/to/httpd.conf\"),\n            Some(MappingTarget::MapTo(\"Apache Conf\"))\n        );\n        map.insert(\"httpd.conf\", MappingTarget::MapTo(\"My Syntax\"))\n            .ok();\n        assert_eq!(\n            map.get_syntax_for(\"/path/to/httpd.conf\"),\n            Some(MappingTarget::MapTo(\"My Syntax\"))\n        );\n    }\n\n    #[test]\n    fn custom_mappings_precedence() {\n        let mut map = SyntaxMapping::new();\n\n        map.insert(\"/path/to/foo\", MappingTarget::MapTo(\"alpha\"))\n            .ok();\n        map.insert(\"/path/to/foo\", MappingTarget::MapTo(\"bravo\"))\n            .ok();\n        assert_eq!(\n            map.get_syntax_for(\"/path/to/foo\"),\n            Some(MappingTarget::MapTo(\"alpha\"))\n        );\n    }\n}\n"
  },
  {
    "path": "src/terminal.rs",
    "content": "use nu_ansi_term::Color::{self, Fixed, Rgb};\nuse nu_ansi_term::{self, Style};\n\nuse syntect::highlighting::{self, FontStyle};\n\npub fn to_ansi_color(color: highlighting::Color, true_color: bool) -> Option<nu_ansi_term::Color> {\n    if color.a == 0 {\n        // Themes can specify one of the user-configurable terminal colors by\n        // encoding them as #RRGGBBAA with AA set to 00 (transparent) and RR set\n        // to the 8-bit color palette number. The built-in themes ansi, base16,\n        // and base16-256 use this.\n        Some(match color.r {\n            // For the first 8 colors, use the Color enum to produce ANSI escape\n            // sequences using codes 30-37 (foreground) and 40-47 (background).\n            // For example, red foreground is \\x1b[31m. This works on terminals\n            // without 256-color support.\n            0x00 => Color::Black,\n            0x01 => Color::Red,\n            0x02 => Color::Green,\n            0x03 => Color::Yellow,\n            0x04 => Color::Blue,\n            0x05 => Color::Purple,\n            0x06 => Color::Cyan,\n            0x07 => Color::White,\n            // For all other colors, use Fixed to produce escape sequences using\n            // codes 38;5 (foreground) and 48;5 (background). For example,\n            // bright red foreground is \\x1b[38;5;9m. This only works on\n            // terminals with 256-color support.\n            //\n            // TODO: When ansi_term adds support for bright variants using codes\n            // 90-97 (foreground) and 100-107 (background), we should use those\n            // for values 0x08 to 0x0f and only use Fixed for 0x10 to 0xff.\n            n => Fixed(n),\n        })\n    } else if color.a == 1 {\n        // Themes can specify the terminal's default foreground/background color\n        // (i.e. no escape sequence) using the encoding #RRGGBBAA with AA set to\n        // 01. The built-in theme ansi uses this.\n        None\n    } else if true_color {\n        Some(Rgb(color.r, color.g, color.b))\n    } else {\n        Some(Fixed(ansi_colours::ansi256_from_rgb((\n            color.r, color.g, color.b,\n        ))))\n    }\n}\n\npub fn as_terminal_escaped(\n    style: highlighting::Style,\n    text: &str,\n    true_color: bool,\n    colored: bool,\n    italics: bool,\n    background_color: Option<highlighting::Color>,\n) -> String {\n    if text.is_empty() {\n        return text.to_string();\n    }\n\n    let mut style = if !colored {\n        Style::default()\n    } else {\n        let mut color = Style {\n            foreground: to_ansi_color(style.foreground, true_color),\n            ..Style::default()\n        };\n        if style.font_style.contains(FontStyle::BOLD) {\n            color = color.bold();\n        }\n        if style.font_style.contains(FontStyle::UNDERLINE) {\n            color = color.underline();\n        }\n        if italics && style.font_style.contains(FontStyle::ITALIC) {\n            color = color.italic();\n        }\n        color\n    };\n\n    style.background = background_color.and_then(|c| to_ansi_color(c, true_color));\n    style.paint(text).to_string()\n}\n"
  },
  {
    "path": "src/theme.rs",
    "content": "//! Utilities for choosing an appropriate theme for syntax highlighting.\n\nuse std::convert::Infallible;\nuse std::fmt;\nuse std::io::IsTerminal as _;\nuse std::str::FromStr;\n\n/// Environment variable names.\npub mod env {\n    /// See [`crate::theme::ThemeOptions::theme`].\n    pub const BAT_THEME: &str = \"BAT_THEME\";\n    /// See [`crate::theme::ThemeOptions::theme_dark`].\n    pub const BAT_THEME_DARK: &str = \"BAT_THEME_DARK\";\n    /// See [`crate::theme::ThemeOptions::theme_light`].\n    pub const BAT_THEME_LIGHT: &str = \"BAT_THEME_LIGHT\";\n}\n\n/// Chooses an appropriate theme or falls back to a default theme\n/// based on the user-provided options and the color scheme of the terminal.\n///\n/// Intentionally returns a [`ThemeResult`] instead of a simple string so\n/// that downstream consumers such as `delta` can easily apply their own\n/// default theme and can use the detected color scheme elsewhere.\npub fn theme(options: ThemeOptions) -> ThemeResult {\n    theme_impl(options, &TerminalColorSchemeDetector)\n}\n\n/// The default theme, suitable for the given color scheme.\n/// Use [`theme`] if you want to automatically detect the color scheme from the terminal.\npub const fn default_theme(color_scheme: ColorScheme) -> &'static str {\n    match color_scheme {\n        ColorScheme::Dark => \"Monokai Extended\",\n        ColorScheme::Light => \"Monokai Extended Light\",\n    }\n}\n\n/// Detects the color scheme from the terminal.\npub fn color_scheme(when: DetectColorScheme) -> Option<ColorScheme> {\n    color_scheme_impl(when, &TerminalColorSchemeDetector)\n}\n\n/// Options for configuring the theme used for syntax highlighting.\n/// Used together with [`theme`].\n#[derive(Debug, Clone, Default, PartialEq, Eq)]\npub struct ThemeOptions {\n    /// Configures how the theme is chosen. If set to a [`ThemePreference::Fixed`] value,\n    /// then the given theme is used regardless of the terminal's background color.\n    /// This corresponds with the `BAT_THEME` environment variable and the `--theme` option.\n    pub theme: ThemePreference,\n    /// The theme to use in case the terminal uses a dark background with light text.\n    /// This corresponds with the `BAT_THEME_DARK` environment variable and the `--theme-dark` option.\n    pub theme_dark: Option<ThemeName>,\n    /// The theme to use in case the terminal uses a light background with dark text.\n    /// This corresponds with the `BAT_THEME_LIGHT` environment variable and the `--theme-light` option.\n    pub theme_light: Option<ThemeName>,\n}\n\n/// What theme should `bat` use?\n///\n/// The easiest way to construct this is from a string:\n/// ```\n/// # use bat::theme::{ThemePreference, DetectColorScheme};\n/// let preference = ThemePreference::new(\"auto:system\");\n/// assert_eq!(ThemePreference::Auto(DetectColorScheme::System), preference);\n/// ```\n#[derive(Debug, Clone, PartialEq, Eq, Hash)]\npub enum ThemePreference {\n    /// Choose between [`ThemeOptions::theme_dark`] and [`ThemeOptions::theme_light`]\n    /// based on the terminal's color scheme.\n    Auto(DetectColorScheme),\n    /// Always use the same theme regardless of the terminal's color scheme.\n    Fixed(ThemeName),\n    /// Use a dark theme.\n    Dark,\n    /// Use a light theme.\n    Light,\n}\n\nimpl Default for ThemePreference {\n    fn default() -> Self {\n        ThemePreference::Auto(Default::default())\n    }\n}\n\nimpl ThemePreference {\n    /// Creates a theme preference from a string.\n    pub fn new(s: impl Into<String>) -> Self {\n        use ThemePreference::*;\n        let s = s.into();\n        match s.as_str() {\n            \"auto\" => Auto(Default::default()),\n            \"auto:always\" => Auto(DetectColorScheme::Always),\n            \"auto:system\" => Auto(DetectColorScheme::System),\n            \"dark\" => Dark,\n            \"light\" => Light,\n            _ => Fixed(ThemeName::new(s)),\n        }\n    }\n}\n\nimpl FromStr for ThemePreference {\n    type Err = Infallible;\n\n    fn from_str(s: &str) -> Result<Self, Self::Err> {\n        Ok(ThemePreference::new(s))\n    }\n}\n\nimpl fmt::Display for ThemePreference {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        use ThemePreference::*;\n        match self {\n            Auto(DetectColorScheme::Auto) => f.write_str(\"auto\"),\n            Auto(DetectColorScheme::Always) => f.write_str(\"auto:always\"),\n            Auto(DetectColorScheme::System) => f.write_str(\"auto:system\"),\n            Fixed(theme) => theme.fmt(f),\n            Dark => f.write_str(\"dark\"),\n            Light => f.write_str(\"light\"),\n        }\n    }\n}\n\n/// The name of a theme or the default theme.\n///\n/// ```\n/// # use bat::theme::ThemeName;\n/// assert_eq!(ThemeName::Default, ThemeName::new(\"default\"));\n/// assert_eq!(ThemeName::Named(\"example\".to_string()), ThemeName::new(\"example\"));\n/// ```\n#[derive(Debug, Clone, PartialEq, Eq, Hash)]\npub enum ThemeName {\n    Named(String),\n    Default,\n}\n\nimpl ThemeName {\n    /// Creates a theme name from a string.\n    pub fn new(s: impl Into<String>) -> Self {\n        let s = s.into();\n        if s == \"default\" {\n            ThemeName::Default\n        } else {\n            ThemeName::Named(s)\n        }\n    }\n}\n\nimpl FromStr for ThemeName {\n    type Err = Infallible;\n\n    fn from_str(s: &str) -> Result<Self, Self::Err> {\n        Ok(ThemeName::new(s))\n    }\n}\n\nimpl fmt::Display for ThemeName {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        match self {\n            ThemeName::Named(t) => f.write_str(t),\n            ThemeName::Default => f.write_str(\"default\"),\n        }\n    }\n}\n\n#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Hash)]\npub enum DetectColorScheme {\n    /// Only query the terminal for its colors when appropriate (i.e. when the output is not redirected).\n    #[default]\n    Auto,\n    /// Always query the terminal for its colors.\n    Always,\n    /// Detect the system-wide dark/light preference (macOS only).\n    System,\n}\n\n/// The color scheme used to pick a fitting theme. Defaults to [`ColorScheme::Dark`].\n#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Hash)]\npub enum ColorScheme {\n    #[default]\n    Dark,\n    Light,\n}\n\n/// The resolved theme and the color scheme as determined from\n/// the terminal, OS or fallback.\n#[derive(Debug, Clone, PartialEq, Eq)]\npub struct ThemeResult {\n    /// The theme selected according to the [`ThemeOptions`].\n    pub theme: ThemeName,\n    /// Either the user's chosen color scheme, the terminal's color scheme, the OS's\n    /// color scheme or `None` if the color scheme was not detected because the user chose a fixed theme.\n    pub color_scheme: Option<ColorScheme>,\n}\n\nimpl fmt::Display for ThemeResult {\n    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {\n        match &self.theme {\n            ThemeName::Named(name) => f.write_str(name),\n            ThemeName::Default => f.write_str(default_theme(self.color_scheme.unwrap_or_default())),\n        }\n    }\n}\n\nfn theme_impl(options: ThemeOptions, detector: &dyn ColorSchemeDetector) -> ThemeResult {\n    // Implementation note: This function is mostly pure (i.e. it has no side effects) for the sake of testing.\n    // All the side effects (e.g. querying the terminal for its colors) are performed in the detector.\n    match options.theme {\n        ThemePreference::Fixed(theme) => ThemeResult {\n            theme,\n            color_scheme: None,\n        },\n        ThemePreference::Dark => choose_theme_opt(Some(ColorScheme::Dark), options),\n        ThemePreference::Light => choose_theme_opt(Some(ColorScheme::Light), options),\n        ThemePreference::Auto(when) => choose_theme_opt(color_scheme_impl(when, detector), options),\n    }\n}\n\nfn choose_theme_opt(color_scheme: Option<ColorScheme>, options: ThemeOptions) -> ThemeResult {\n    ThemeResult {\n        color_scheme,\n        theme: color_scheme\n            .and_then(|c| choose_theme(options, c))\n            .unwrap_or(ThemeName::Default),\n    }\n}\n\nfn choose_theme(options: ThemeOptions, color_scheme: ColorScheme) -> Option<ThemeName> {\n    match color_scheme {\n        ColorScheme::Dark => options.theme_dark,\n        ColorScheme::Light => options.theme_light,\n    }\n}\n\nfn color_scheme_impl(\n    when: DetectColorScheme,\n    detector: &dyn ColorSchemeDetector,\n) -> Option<ColorScheme> {\n    let should_detect = match when {\n        DetectColorScheme::Auto => detector.should_detect(),\n        DetectColorScheme::Always => true,\n        DetectColorScheme::System => return color_scheme_from_system(),\n    };\n    should_detect.then(|| detector.detect()).flatten()\n}\n\ntrait ColorSchemeDetector {\n    fn should_detect(&self) -> bool;\n\n    fn detect(&self) -> Option<ColorScheme>;\n}\n\nstruct TerminalColorSchemeDetector;\n\nimpl ColorSchemeDetector for TerminalColorSchemeDetector {\n    fn should_detect(&self) -> bool {\n        // Querying the terminal for its colors via OSC 10 / OSC 11 requires \"exclusive\" access\n        // since we read/write from the terminal and enable/disable raw mode.\n        // This causes race conditions with pagers such as less when they are attached to the\n        // same terminal as us.\n        //\n        // This is usually only an issue when the output is manually piped to a pager.\n        // For example: `bat Cargo.toml | less`.\n        // Otherwise, if we start the pager ourselves, then there's no race condition\n        // since the pager is started *after* the color is detected.\n        std::io::stdout().is_terminal()\n    }\n\n    fn detect(&self) -> Option<ColorScheme> {\n        use terminal_colorsaurus::{theme_mode, QueryOptions, ThemeMode};\n        match theme_mode(QueryOptions::default()).ok()? {\n            ThemeMode::Dark => Some(ColorScheme::Dark),\n            ThemeMode::Light => Some(ColorScheme::Light),\n        }\n    }\n}\n\n#[cfg(not(target_os = \"macos\"))]\nfn color_scheme_from_system() -> Option<ColorScheme> {\n    crate::bat_warning!(\n        \"Theme 'auto:system' is only supported on macOS, \\\n        using default.\"\n    );\n    None\n}\n\n#[cfg(target_os = \"macos\")]\nfn color_scheme_from_system() -> Option<ColorScheme> {\n    const PREFERENCES_FILE: &str = \"Library/Preferences/.GlobalPreferences.plist\";\n    const STYLE_KEY: &str = \"AppleInterfaceStyle\";\n\n    let preferences_file = std::env::home_dir()\n        .map(|home| home.join(PREFERENCES_FILE))\n        .expect(\"Could not get home directory\");\n\n    match plist::Value::from_file(preferences_file).map(|file| file.into_dictionary()) {\n        Ok(Some(preferences)) => match preferences.get(STYLE_KEY).and_then(|val| val.as_string()) {\n            Some(\"Dark\") => Some(ColorScheme::Dark),\n            // If the key does not exist, then light theme is currently in use.\n            Some(_) | None => Some(ColorScheme::Light),\n        },\n        // Unreachable, in theory. All macOS users have a home directory and preferences file setup.\n        Ok(None) | Err(_) => None,\n    }\n}\n\n#[cfg(test)]\nimpl ColorSchemeDetector for Option<ColorScheme> {\n    fn should_detect(&self) -> bool {\n        true\n    }\n\n    fn detect(&self) -> Option<ColorScheme> {\n        *self\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::ColorScheme::*;\n    use super::*;\n    use std::cell::Cell;\n    use std::iter;\n\n    mod color_scheme_detection {\n        use super::*;\n\n        #[test]\n        fn not_called_for_dark_or_light() {\n            for theme in [ThemePreference::Dark, ThemePreference::Light] {\n                let detector = DetectorStub::should_detect(Some(Dark));\n                let options = ThemeOptions {\n                    theme,\n                    ..Default::default()\n                };\n                _ = theme_impl(options, &detector);\n                assert!(!detector.was_called.get());\n            }\n        }\n\n        #[test]\n        fn called_for_always() {\n            let detectors = [\n                DetectorStub::should_detect(Some(Dark)),\n                DetectorStub::should_not_detect(),\n            ];\n            for detector in detectors {\n                let options = ThemeOptions {\n                    theme: ThemePreference::Auto(DetectColorScheme::Always),\n                    ..Default::default()\n                };\n                _ = theme_impl(options, &detector);\n                assert!(detector.was_called.get());\n            }\n        }\n\n        #[test]\n        fn called_for_auto_if_should_detect() {\n            let detector = DetectorStub::should_detect(Some(Dark));\n            _ = theme_impl(ThemeOptions::default(), &detector);\n            assert!(detector.was_called.get());\n        }\n\n        #[test]\n        fn not_called_for_auto_if_not_should_detect() {\n            let detector = DetectorStub::should_not_detect();\n            _ = theme_impl(ThemeOptions::default(), &detector);\n            assert!(!detector.was_called.get());\n        }\n    }\n\n    mod precedence {\n        use super::*;\n\n        #[test]\n        fn theme_is_preferred_over_light_or_dark_themes() {\n            for color_scheme in optional(color_schemes()) {\n                for options in [\n                    ThemeOptions {\n                        theme: ThemePreference::Fixed(ThemeName::Named(\"Theme\".to_string())),\n                        ..Default::default()\n                    },\n                    ThemeOptions {\n                        theme: ThemePreference::Fixed(ThemeName::Named(\"Theme\".to_string())),\n                        theme_dark: Some(ThemeName::Named(\"Dark Theme\".to_string())),\n                        theme_light: Some(ThemeName::Named(\"Light Theme\".to_string())),\n                    },\n                ] {\n                    let detector = ConstantDetector(color_scheme);\n                    assert_eq!(\"Theme\", theme_impl(options, &detector).to_string());\n                }\n            }\n        }\n\n        #[test]\n        fn detector_is_not_called_if_theme_is_present() {\n            let options = ThemeOptions {\n                theme: ThemePreference::Fixed(ThemeName::Named(\"Theme\".to_string())),\n                ..Default::default()\n            };\n            let detector = DetectorStub::should_detect(Some(Dark));\n            _ = theme_impl(options, &detector);\n            assert!(!detector.was_called.get());\n        }\n    }\n\n    mod default_theme {\n        use super::*;\n\n        #[test]\n        fn default_dark_if_unable_to_detect_color_scheme() {\n            let detector = ConstantDetector(None);\n            assert_eq!(\n                default_theme(ColorScheme::Dark),\n                theme_impl(ThemeOptions::default(), &detector).to_string()\n            );\n        }\n\n        // For backwards compatibility, if the default theme is requested\n        // explicitly through BAT_THEME, we always pick the default dark theme.\n        #[test]\n        fn default_dark_if_requested_explicitly_through_theme() {\n            for color_scheme in optional(color_schemes()) {\n                let options = ThemeOptions {\n                    theme: ThemePreference::Fixed(ThemeName::Default),\n                    ..Default::default()\n                };\n                let detector = ConstantDetector(color_scheme);\n                assert_eq!(\n                    default_theme(ColorScheme::Dark),\n                    theme_impl(options, &detector).to_string()\n                );\n            }\n        }\n\n        #[test]\n        fn varies_depending_on_color_scheme() {\n            for color_scheme in color_schemes() {\n                for options in [\n                    ThemeOptions::default(),\n                    ThemeOptions {\n                        theme_dark: Some(ThemeName::Default),\n                        theme_light: Some(ThemeName::Default),\n                        ..Default::default()\n                    },\n                ] {\n                    let detector = ConstantDetector(Some(color_scheme));\n                    assert_eq!(\n                        default_theme(color_scheme),\n                        theme_impl(options, &detector).to_string()\n                    );\n                }\n            }\n        }\n    }\n\n    mod choosing {\n        use super::*;\n\n        #[test]\n        fn chooses_default_theme_if_unknown() {\n            let options = ThemeOptions {\n                theme_dark: Some(ThemeName::Named(\"Dark\".to_string())),\n                theme_light: Some(ThemeName::Named(\"Light\".to_string())),\n                ..Default::default()\n            };\n            let detector = ConstantDetector(None);\n            assert_eq!(\n                default_theme(ColorScheme::default()),\n                theme_impl(options, &detector).to_string()\n            );\n        }\n\n        #[test]\n        fn chooses_dark_theme_if_dark_or_unknown() {\n            let options = ThemeOptions {\n                theme_dark: Some(ThemeName::Named(\"Dark\".to_string())),\n                theme_light: Some(ThemeName::Named(\"Light\".to_string())),\n                ..Default::default()\n            };\n            let detector = ConstantDetector(Some(ColorScheme::Dark));\n            assert_eq!(\"Dark\", theme_impl(options, &detector).to_string());\n        }\n\n        #[test]\n        fn chooses_light_theme_if_light() {\n            let options = ThemeOptions {\n                theme_dark: Some(ThemeName::Named(\"Dark\".to_string())),\n                theme_light: Some(ThemeName::Named(\"Light\".to_string())),\n                ..Default::default()\n            };\n            let detector = ConstantDetector(Some(ColorScheme::Light));\n            assert_eq!(\"Light\", theme_impl(options, &detector).to_string());\n        }\n    }\n\n    mod theme_preference {\n        use super::*;\n\n        #[test]\n        fn values_roundtrip_via_display() {\n            let prefs = [\n                ThemePreference::Auto(DetectColorScheme::Auto),\n                ThemePreference::Auto(DetectColorScheme::Always),\n                ThemePreference::Auto(DetectColorScheme::System),\n                ThemePreference::Fixed(ThemeName::Default),\n                ThemePreference::Fixed(ThemeName::new(\"foo\")),\n                ThemePreference::Dark,\n                ThemePreference::Light,\n            ];\n            for pref in prefs {\n                assert_eq!(pref, ThemePreference::new(pref.to_string()));\n            }\n        }\n    }\n\n    struct DetectorStub {\n        should_detect: bool,\n        color_scheme: Option<ColorScheme>,\n        was_called: Cell<bool>,\n    }\n\n    impl DetectorStub {\n        fn should_detect(color_scheme: Option<ColorScheme>) -> Self {\n            DetectorStub {\n                should_detect: true,\n                color_scheme,\n                was_called: Cell::default(),\n            }\n        }\n\n        fn should_not_detect() -> Self {\n            DetectorStub {\n                should_detect: false,\n                color_scheme: None,\n                was_called: Cell::default(),\n            }\n        }\n    }\n\n    impl ColorSchemeDetector for DetectorStub {\n        fn should_detect(&self) -> bool {\n            self.should_detect\n        }\n\n        fn detect(&self) -> Option<ColorScheme> {\n            self.was_called.set(true);\n            self.color_scheme\n        }\n    }\n\n    struct ConstantDetector(Option<ColorScheme>);\n\n    impl ColorSchemeDetector for ConstantDetector {\n        fn should_detect(&self) -> bool {\n            true\n        }\n\n        fn detect(&self) -> Option<ColorScheme> {\n            self.0\n        }\n    }\n\n    fn optional<T>(value: impl Iterator<Item = T>) -> impl Iterator<Item = Option<T>> {\n        value.map(Some).chain(iter::once(None))\n    }\n\n    fn color_schemes() -> impl Iterator<Item = ColorScheme> {\n        [Dark, Light].into_iter()\n    }\n}\n"
  },
  {
    "path": "src/vscreen.rs",
    "content": "use std::{\n    fmt::{Display, Formatter},\n    iter::Peekable,\n    str::CharIndices,\n};\n\n// Wrapper to avoid unnecessary branching when input doesn't have ANSI escape sequences.\npub struct AnsiStyle {\n    attributes: Option<Attributes>,\n}\n\nimpl AnsiStyle {\n    pub fn new() -> Self {\n        AnsiStyle { attributes: None }\n    }\n\n    pub fn update(&mut self, sequence: EscapeSequence) -> bool {\n        match &mut self.attributes {\n            Some(a) => a.update(sequence),\n            None => {\n                self.attributes = Some(Attributes::new());\n                self.attributes.as_mut().unwrap().update(sequence)\n            }\n        }\n    }\n\n    pub fn to_reset_sequence(&self) -> String {\n        match self.attributes {\n            Some(ref a) => a.to_reset_sequence(),\n            None => String::new(),\n        }\n    }\n}\n\nimpl Display for AnsiStyle {\n    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {\n        match self.attributes {\n            Some(ref a) => a.fmt(f),\n            None => Ok(()),\n        }\n    }\n}\n\nstruct Attributes {\n    has_sgr_sequences: bool,\n\n    foreground: String,\n    background: String,\n    underlined: String,\n\n    /// The character set to use.\n    /// REGEX: `\\^[()][AB0-3]`\n    charset: String,\n\n    /// A buffer for unknown sequences.\n    unknown_buffer: String,\n\n    /// ON:  ^[1m\n    /// OFF: ^[22m\n    bold: String,\n\n    /// ON:  ^[2m\n    /// OFF: ^[22m\n    dim: String,\n\n    /// ON:  ^[4m\n    /// OFF: ^[24m\n    underline: String,\n\n    /// ON:  ^[3m\n    /// OFF: ^[23m\n    italic: String,\n\n    /// ON:  ^[9m\n    /// OFF: ^[29m\n    strike: String,\n\n    /// The hyperlink sequence.\n    /// FORMAT: \\x1B]8;{ID};{URL}\\e\\\\\n    ///\n    /// `\\e\\\\` may be replaced with BEL `\\x07`.\n    /// Setting both {ID} and {URL} to an empty string represents no hyperlink.\n    hyperlink: String,\n}\n\nimpl Attributes {\n    pub fn new() -> Self {\n        Attributes {\n            has_sgr_sequences: false,\n\n            foreground: \"\".to_owned(),\n            background: \"\".to_owned(),\n            underlined: \"\".to_owned(),\n            charset: \"\".to_owned(),\n            unknown_buffer: \"\".to_owned(),\n            bold: \"\".to_owned(),\n            dim: \"\".to_owned(),\n            underline: \"\".to_owned(),\n            italic: \"\".to_owned(),\n            strike: \"\".to_owned(),\n            hyperlink: \"\".to_owned(),\n        }\n    }\n\n    /// Update the attributes with an escape sequence.\n    /// Returns `false` if the sequence is unsupported.\n    pub fn update(&mut self, sequence: EscapeSequence) -> bool {\n        use EscapeSequence::*;\n        match sequence {\n            Text(_) => return false,\n            Unknown(_) => { /* defer to update_with_unsupported */ }\n            OSC {\n                raw_sequence,\n                command,\n                ..\n            } => {\n                if command.starts_with(\"8;\") {\n                    return self.update_with_hyperlink(raw_sequence);\n                }\n                /* defer to update_with_unsupported */\n            }\n            CSI {\n                final_byte,\n                parameters,\n                ..\n            } => {\n                match final_byte {\n                    \"m\" => return self.update_with_sgr(parameters),\n                    _ => {\n                        // NOTE(eth-p): We might want to ignore these, since they involve cursor or buffer manipulation.\n                        /* defer to update_with_unsupported */\n                    }\n                }\n            }\n            NF { nf_sequence, .. } => {\n                let mut iter = nf_sequence.chars();\n                match iter.next() {\n                    Some('(') => return self.update_with_charset('(', iter),\n                    Some(')') => return self.update_with_charset(')', iter),\n                    _ => { /* defer to update_with_unsupported */ }\n                }\n            }\n        }\n\n        self.update_with_unsupported(sequence.raw())\n    }\n\n    fn sgr_reset(&mut self) {\n        self.has_sgr_sequences = false;\n\n        self.foreground.clear();\n        self.background.clear();\n        self.underlined.clear();\n        self.bold.clear();\n        self.dim.clear();\n        self.underline.clear();\n        self.italic.clear();\n        self.strike.clear();\n    }\n\n    fn update_with_sgr(&mut self, parameters: &str) -> bool {\n        let mut iter = parameters\n            .split(';')\n            .map(|p| if p.is_empty() { \"0\" } else { p })\n            .map(|p| p.parse::<u16>())\n            .map(|p| p.unwrap_or(0)); // Treat errors as 0.\n\n        self.has_sgr_sequences = true;\n        while let Some(p) = iter.next() {\n            match p {\n                0 => self.sgr_reset(),\n                1 => self.bold = \"\\x1B[1m\".to_owned(),\n                2 => self.dim = \"\\x1B[2m\".to_owned(),\n                3 => self.italic = \"\\x1B[3m\".to_owned(),\n                4 => self.underline = \"\\x1B[4m\".to_owned(),\n                23 => self.italic.clear(),\n                24 => self.underline.clear(),\n                22 => {\n                    self.bold.clear();\n                    self.dim.clear();\n                }\n                30..=39 => self.foreground = Self::parse_color(p, &mut iter),\n                40..=49 => self.background = Self::parse_color(p, &mut iter),\n                58..=59 => self.underlined = Self::parse_color(p, &mut iter),\n                90..=97 => self.foreground = Self::parse_color(p, &mut iter),\n                100..=107 => self.background = Self::parse_color(p, &mut iter),\n                _ => {\n                    // Unsupported SGR sequence.\n                    // Be compatible and pretend one just wasn't was provided.\n                }\n            }\n        }\n\n        true\n    }\n\n    fn update_with_unsupported(&mut self, sequence: &str) -> bool {\n        self.unknown_buffer.push_str(sequence);\n        false\n    }\n\n    fn update_with_hyperlink(&mut self, sequence: &str) -> bool {\n        if sequence == \"8;;\" {\n            // Empty hyperlink ID and HREF -> end of hyperlink.\n            self.hyperlink.clear();\n        } else {\n            self.hyperlink.clear();\n            self.hyperlink.push_str(sequence);\n        }\n\n        true\n    }\n\n    fn update_with_charset(&mut self, kind: char, set: impl Iterator<Item = char>) -> bool {\n        self.charset = format!(\"\\x1B{kind}{}\", set.take(1).collect::<String>());\n        true\n    }\n\n    fn parse_color(color: u16, parameters: &mut dyn Iterator<Item = u16>) -> String {\n        match color % 10 {\n            8 => match parameters.next() {\n                Some(5) /* 256-color */ => format!(\"\\x1B[{color};5;{}m\", join(\";\", 1, parameters)),\n                Some(2) /* 24-bit color */ => format!(\"\\x1B[{color};2;{}m\", join(\";\", 3, parameters)),\n                Some(c) => format!(\"\\x1B[{color};{c}m\"),\n                _ => \"\".to_owned(),\n            },\n            9 => \"\".to_owned(),\n            _ => format!(\"\\x1B[{color}m\"),\n        }\n    }\n\n    /// Gets an ANSI escape sequence to reset all the known attributes.\n    pub fn to_reset_sequence(&self) -> String {\n        let mut buf = String::with_capacity(17);\n\n        // TODO: Enable me in a later pull request.\n        // if self.has_sgr_sequences {\n        //     buf.push_str(\"\\x1B[m\");\n        // }\n\n        if !self.hyperlink.is_empty() {\n            buf.push_str(\"\\x1B]8;;\\x1B\\\\\"); // Disable hyperlink.\n        }\n\n        // TODO: Enable me in a later pull request.\n        // if !self.charset.is_empty() {\n        //     // https://espterm.github.io/docs/VT100%20escape%20codes.html\n        //     buf.push_str(\"\\x1B(B\\x1B)B\"); // setusg0 and setusg1\n        // }\n\n        buf\n    }\n}\n\nimpl Display for Attributes {\n    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {\n        write!(\n            f,\n            \"{}{}{}{}{}{}{}{}{}{}\",\n            self.foreground,\n            self.background,\n            self.underlined,\n            self.charset,\n            self.bold,\n            self.dim,\n            self.underline,\n            self.italic,\n            self.strike,\n            self.hyperlink,\n        )\n    }\n}\n\nfn join(\n    delimiter: &str,\n    limit: usize,\n    iterator: &mut dyn Iterator<Item = impl ToString>,\n) -> String {\n    iterator\n        .take(limit)\n        .map(|i| i.to_string())\n        .collect::<Vec<String>>()\n        .join(delimiter)\n}\n\n/// A range of indices for a raw ANSI escape sequence.\n#[derive(Debug, PartialEq)]\npub enum EscapeSequenceOffsets {\n    Text {\n        start: usize,\n        end: usize,\n    },\n    Unknown {\n        start: usize,\n        end: usize,\n    },\n    #[allow(clippy::upper_case_acronyms)]\n    NF {\n        // https://en.wikipedia.org/wiki/ANSI_escape_code#nF_Escape_sequences\n        start_sequence: usize,\n        start: usize,\n        end: usize,\n    },\n    #[allow(clippy::upper_case_acronyms)]\n    OSC {\n        // https://en.wikipedia.org/wiki/ANSI_escape_code#OSC_(Operating_System_Command)_sequences\n        start_sequence: usize,\n        start_command: usize,\n        start_terminator: usize,\n        end: usize,\n    },\n    #[allow(clippy::upper_case_acronyms)]\n    CSI {\n        // https://en.wikipedia.org/wiki/ANSI_escape_code#CSI_(Control_Sequence_Introducer)_sequences\n        start_sequence: usize,\n        start_parameters: usize,\n        start_intermediates: usize,\n        start_final_byte: usize,\n        end: usize,\n    },\n}\n\nimpl EscapeSequenceOffsets {\n    /// Returns the byte-index of the first character in the escape sequence.\n    pub fn index_of_start(&self) -> usize {\n        use EscapeSequenceOffsets::*;\n        match self {\n            Text { start, .. } => *start,\n            Unknown { start, .. } => *start,\n            NF { start_sequence, .. } => *start_sequence,\n            OSC { start_sequence, .. } => *start_sequence,\n            CSI { start_sequence, .. } => *start_sequence,\n        }\n    }\n\n    /// Returns the byte-index past the last character in the escape sequence.\n    pub fn index_past_end(&self) -> usize {\n        use EscapeSequenceOffsets::*;\n        match self {\n            Text { end, .. } => *end,\n            Unknown { end, .. } => *end,\n            NF { end, .. } => *end,\n            OSC { end, .. } => *end,\n            CSI { end, .. } => *end,\n        }\n    }\n}\n\n/// An iterator over the offsets of ANSI/VT escape sequences within a string.\n///\n/// ## Example\n///\n/// ```ignore\n/// let iter = EscapeSequenceOffsetsIterator::new(\"\\x1B[33mThis is yellow text.\\x1B[m\");\n/// ```\npub struct EscapeSequenceOffsetsIterator<'a> {\n    text: &'a str,\n    chars: Peekable<CharIndices<'a>>,\n}\n\nimpl<'a> EscapeSequenceOffsetsIterator<'a> {\n    pub fn new(text: &'a str) -> EscapeSequenceOffsetsIterator<'a> {\n        EscapeSequenceOffsetsIterator {\n            text,\n            chars: text.char_indices().peekable(),\n        }\n    }\n\n    /// Takes values from the iterator while the predicate returns true.\n    /// If the predicate returns false, that value is left.\n    fn chars_take_while(&mut self, pred: impl Fn(char) -> bool) -> Option<(usize, usize)> {\n        self.chars.peek()?;\n\n        let start = self.chars.peek().unwrap().0;\n        let mut end: usize = start;\n        while let Some((i, c)) = self.chars.peek() {\n            if !pred(*c) {\n                break;\n            }\n\n            end = *i + c.len_utf8();\n            self.chars.next();\n        }\n\n        Some((start, end))\n    }\n\n    fn next_text(&mut self) -> Option<EscapeSequenceOffsets> {\n        self.chars_take_while(|c| c != '\\x1B')\n            .map(|(start, end)| EscapeSequenceOffsets::Text { start, end })\n    }\n\n    fn next_sequence(&mut self) -> Option<EscapeSequenceOffsets> {\n        let (start_sequence, c) = self.chars.next().expect(\"to not be finished\");\n        match self.chars.peek() {\n            None => Some(EscapeSequenceOffsets::Unknown {\n                start: start_sequence,\n                end: start_sequence + c.len_utf8(),\n            }),\n\n            Some((_, ']')) => self.next_osc(start_sequence),\n            Some((_, '[')) => self.next_csi(start_sequence),\n            Some((i, c)) => match c {\n                '\\x20'..='\\x2F' => self.next_nf(start_sequence),\n                c => Some(EscapeSequenceOffsets::Unknown {\n                    start: start_sequence,\n                    end: i + c.len_utf8(),\n                }),\n            },\n        }\n    }\n\n    fn next_osc(&mut self, start_sequence: usize) -> Option<EscapeSequenceOffsets> {\n        let (osc_open_index, osc_open_char) = self.chars.next().expect(\"to not be finished\");\n        debug_assert_eq!(osc_open_char, ']');\n\n        let mut start_terminator: usize;\n        let mut end_sequence: usize;\n\n        loop {\n            match self.chars_take_while(|c| !matches!(c, '\\x07' | '\\x1B')) {\n                None => {\n                    start_terminator = self.text.len();\n                    end_sequence = start_terminator;\n                    break;\n                }\n\n                Some((_, end)) => {\n                    start_terminator = end;\n                    end_sequence = end;\n                }\n            }\n\n            match self.chars.next() {\n                Some((ti, '\\x07')) => {\n                    end_sequence = ti + '\\x07'.len_utf8();\n                    break;\n                }\n\n                Some((ti, '\\x1B')) => {\n                    match self.chars.next() {\n                        Some((i, '\\\\')) => {\n                            end_sequence = i + '\\\\'.len_utf8();\n                            break;\n                        }\n\n                        None => {\n                            end_sequence = ti + '\\x1B'.len_utf8();\n                            break;\n                        }\n\n                        _ => {\n                            // Repeat, since `\\\\`(anything) isn't a valid ST.\n                        }\n                    }\n                }\n\n                None => {\n                    // Prematurely ends.\n                    break;\n                }\n\n                Some((_, tc)) => {\n                    panic!(\"this should not be reached: char {tc:?}\")\n                }\n            }\n        }\n\n        Some(EscapeSequenceOffsets::OSC {\n            start_sequence,\n            start_command: osc_open_index + osc_open_char.len_utf8(),\n            start_terminator,\n            end: end_sequence,\n        })\n    }\n\n    fn next_csi(&mut self, start_sequence: usize) -> Option<EscapeSequenceOffsets> {\n        let (csi_open_index, csi_open_char) = self.chars.next().expect(\"to not be finished\");\n        debug_assert_eq!(csi_open_char, '[');\n\n        let start_parameters: usize = csi_open_index + csi_open_char.len_utf8();\n\n        // Keep iterating while within the range of `0x30-0x3F`.\n        let mut start_intermediates: usize = start_parameters;\n        if let Some((_, end)) = self.chars_take_while(|c| matches!(c, '\\x30'..='\\x3F')) {\n            start_intermediates = end;\n        }\n\n        // Keep iterating while within the range of `0x20-0x2F`.\n        let mut start_final_byte: usize = start_intermediates;\n        if let Some((_, end)) = self.chars_take_while(|c| matches!(c, '\\x20'..='\\x2F')) {\n            start_final_byte = end;\n        }\n\n        // Take the last char.\n        let end_of_sequence = match self.chars.next() {\n            None => start_final_byte,\n            Some((i, c)) => i + c.len_utf8(),\n        };\n\n        Some(EscapeSequenceOffsets::CSI {\n            start_sequence,\n            start_parameters,\n            start_intermediates,\n            start_final_byte,\n            end: end_of_sequence,\n        })\n    }\n\n    fn next_nf(&mut self, start_sequence: usize) -> Option<EscapeSequenceOffsets> {\n        let (nf_open_index, nf_open_char) = self.chars.next().expect(\"to not be finished\");\n        debug_assert!(matches!(nf_open_char, '\\x20'..='\\x2F'));\n\n        let start: usize = nf_open_index;\n        let mut end: usize = start;\n\n        // Keep iterating while within the range of `0x20-0x2F`.\n        match self.chars_take_while(|c| matches!(c, '\\x20'..='\\x2F')) {\n            Some((_, i)) => end = i,\n            None => {\n                return Some(EscapeSequenceOffsets::NF {\n                    start_sequence,\n                    start,\n                    end,\n                })\n            }\n        }\n\n        // Get the final byte.\n        if let Some((i, c)) = self.chars.next() {\n            end = i + c.len_utf8()\n        }\n\n        Some(EscapeSequenceOffsets::NF {\n            start_sequence,\n            start,\n            end,\n        })\n    }\n}\n\nimpl Iterator for EscapeSequenceOffsetsIterator<'_> {\n    type Item = EscapeSequenceOffsets;\n    fn next(&mut self) -> Option<Self::Item> {\n        match self.chars.peek() {\n            Some((_, '\\x1B')) => self.next_sequence(),\n            Some((_, _)) => self.next_text(),\n            None => None,\n        }\n    }\n}\n\n/// An iterator over ANSI/VT escape sequences within a string.\n///\n/// ## Example\n///\n/// ```ignore\n/// let iter = EscapeSequenceIterator::new(\"\\x1B[33mThis is yellow text.\\x1B[m\");\n/// ```\npub struct EscapeSequenceIterator<'a> {\n    text: &'a str,\n    offset_iter: EscapeSequenceOffsetsIterator<'a>,\n}\n\nimpl<'a> EscapeSequenceIterator<'a> {\n    pub fn new(text: &'a str) -> EscapeSequenceIterator<'a> {\n        EscapeSequenceIterator {\n            text,\n            offset_iter: EscapeSequenceOffsetsIterator::new(text),\n        }\n    }\n}\n\nimpl<'a> Iterator for EscapeSequenceIterator<'a> {\n    type Item = EscapeSequence<'a>;\n    fn next(&mut self) -> Option<Self::Item> {\n        use EscapeSequenceOffsets::*;\n        self.offset_iter.next().map(|offsets| match offsets {\n            Unknown { start, end } => EscapeSequence::Unknown(&self.text[start..end]),\n            Text { start, end } => EscapeSequence::Text(&self.text[start..end]),\n            NF {\n                start_sequence,\n                start,\n                end,\n            } => EscapeSequence::NF {\n                raw_sequence: &self.text[start_sequence..end],\n                nf_sequence: &self.text[start..end],\n            },\n            OSC {\n                start_sequence,\n                start_command,\n                start_terminator,\n                end,\n            } => EscapeSequence::OSC {\n                raw_sequence: &self.text[start_sequence..end],\n                command: &self.text[start_command..start_terminator],\n                terminator: &self.text[start_terminator..end],\n            },\n            CSI {\n                start_sequence,\n                start_parameters,\n                start_intermediates,\n                start_final_byte,\n                end,\n            } => EscapeSequence::CSI {\n                raw_sequence: &self.text[start_sequence..end],\n                parameters: &self.text[start_parameters..start_intermediates],\n                intermediates: &self.text[start_intermediates..start_final_byte],\n                final_byte: &self.text[start_final_byte..end],\n            },\n        })\n    }\n}\n\n/// A parsed ANSI/VT100 escape sequence.\n#[derive(Debug, PartialEq)]\npub enum EscapeSequence<'a> {\n    Text(&'a str),\n    Unknown(&'a str),\n    #[allow(clippy::upper_case_acronyms)]\n    NF {\n        raw_sequence: &'a str,\n        nf_sequence: &'a str,\n    },\n    #[allow(clippy::upper_case_acronyms)]\n    OSC {\n        raw_sequence: &'a str,\n        command: &'a str,\n        terminator: &'a str,\n    },\n    #[allow(clippy::upper_case_acronyms)]\n    CSI {\n        raw_sequence: &'a str,\n        parameters: &'a str,\n        intermediates: &'a str,\n        final_byte: &'a str,\n    },\n}\n\nimpl<'a> EscapeSequence<'a> {\n    pub fn raw(&self) -> &'a str {\n        use EscapeSequence::*;\n        match *self {\n            Text(raw) => raw,\n            Unknown(raw) => raw,\n            NF { raw_sequence, .. } => raw_sequence,\n            OSC { raw_sequence, .. } => raw_sequence,\n            CSI { raw_sequence, .. } => raw_sequence,\n        }\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::vscreen::{\n        EscapeSequence, EscapeSequenceIterator, EscapeSequenceOffsets,\n        EscapeSequenceOffsetsIterator,\n    };\n\n    #[test]\n    fn test_escape_sequence_offsets_iterator_parses_text() {\n        let mut iter = EscapeSequenceOffsetsIterator::new(\"text\");\n        assert_eq!(\n            iter.next(),\n            Some(EscapeSequenceOffsets::Text { start: 0, end: 4 })\n        );\n    }\n\n    #[test]\n    fn test_escape_sequence_offsets_iterator_parses_text_stops_at_esc() {\n        let mut iter = EscapeSequenceOffsetsIterator::new(\"text\\x1B[ming\");\n        assert_eq!(\n            iter.next(),\n            Some(EscapeSequenceOffsets::Text { start: 0, end: 4 })\n        );\n    }\n\n    #[test]\n    fn test_escape_sequence_offsets_iterator_parses_osc_with_bel() {\n        let mut iter = EscapeSequenceOffsetsIterator::new(\"\\x1B]abc\\x07\");\n        assert_eq!(\n            iter.next(),\n            Some(EscapeSequenceOffsets::OSC {\n                start_sequence: 0,\n                start_command: 2,\n                start_terminator: 5,\n                end: 6,\n            })\n        );\n    }\n\n    #[test]\n    fn test_escape_sequence_offsets_iterator_parses_osc_with_st() {\n        let mut iter = EscapeSequenceOffsetsIterator::new(\"\\x1B]abc\\x1B\\\\\");\n        assert_eq!(\n            iter.next(),\n            Some(EscapeSequenceOffsets::OSC {\n                start_sequence: 0,\n                start_command: 2,\n                start_terminator: 5,\n                end: 7,\n            })\n        );\n    }\n\n    #[test]\n    fn test_escape_sequence_offsets_iterator_parses_osc_thats_broken() {\n        let mut iter = EscapeSequenceOffsetsIterator::new(\"\\x1B]ab\");\n        assert_eq!(\n            iter.next(),\n            Some(EscapeSequenceOffsets::OSC {\n                start_sequence: 0,\n                start_command: 2,\n                start_terminator: 4,\n                end: 4,\n            })\n        );\n    }\n\n    #[test]\n    fn test_escape_sequence_offsets_iterator_parses_csi() {\n        let mut iter = EscapeSequenceOffsetsIterator::new(\"\\x1B[m\");\n        assert_eq!(\n            iter.next(),\n            Some(EscapeSequenceOffsets::CSI {\n                start_sequence: 0,\n                start_parameters: 2,\n                start_intermediates: 2,\n                start_final_byte: 2,\n                end: 3\n            })\n        );\n    }\n\n    #[test]\n    fn test_escape_sequence_offsets_iterator_parses_csi_with_parameters() {\n        let mut iter = EscapeSequenceOffsetsIterator::new(\"\\x1B[1;34m\");\n        assert_eq!(\n            iter.next(),\n            Some(EscapeSequenceOffsets::CSI {\n                start_sequence: 0,\n                start_parameters: 2,\n                start_intermediates: 6,\n                start_final_byte: 6,\n                end: 7\n            })\n        );\n    }\n\n    #[test]\n    fn test_escape_sequence_offsets_iterator_parses_csi_with_intermediates() {\n        let mut iter = EscapeSequenceOffsetsIterator::new(\"\\x1B[$m\");\n        assert_eq!(\n            iter.next(),\n            Some(EscapeSequenceOffsets::CSI {\n                start_sequence: 0,\n                start_parameters: 2,\n                start_intermediates: 2,\n                start_final_byte: 3,\n                end: 4\n            })\n        );\n    }\n\n    #[test]\n    fn test_escape_sequence_offsets_iterator_parses_csi_with_parameters_and_intermediates() {\n        let mut iter = EscapeSequenceOffsetsIterator::new(\"\\x1B[1$m\");\n        assert_eq!(\n            iter.next(),\n            Some(EscapeSequenceOffsets::CSI {\n                start_sequence: 0,\n                start_parameters: 2,\n                start_intermediates: 3,\n                start_final_byte: 4,\n                end: 5\n            })\n        );\n    }\n\n    #[test]\n    fn test_escape_sequence_offsets_iterator_parses_csi_thats_broken() {\n        let mut iter = EscapeSequenceOffsetsIterator::new(\"\\x1B[\");\n        assert_eq!(\n            iter.next(),\n            Some(EscapeSequenceOffsets::CSI {\n                start_sequence: 0,\n                start_parameters: 2,\n                start_intermediates: 2,\n                start_final_byte: 2,\n                end: 2\n            })\n        );\n\n        let mut iter = EscapeSequenceOffsetsIterator::new(\"\\x1B[1\");\n        assert_eq!(\n            iter.next(),\n            Some(EscapeSequenceOffsets::CSI {\n                start_sequence: 0,\n                start_parameters: 2,\n                start_intermediates: 3,\n                start_final_byte: 3,\n                end: 3\n            })\n        );\n\n        let mut iter = EscapeSequenceOffsetsIterator::new(\"\\x1B[1$\");\n        assert_eq!(\n            iter.next(),\n            Some(EscapeSequenceOffsets::CSI {\n                start_sequence: 0,\n                start_parameters: 2,\n                start_intermediates: 3,\n                start_final_byte: 4,\n                end: 4\n            })\n        );\n    }\n\n    #[test]\n    fn test_escape_sequence_offsets_iterator_parses_nf() {\n        let mut iter = EscapeSequenceOffsetsIterator::new(\"\\x1B($0\");\n        assert_eq!(\n            iter.next(),\n            Some(EscapeSequenceOffsets::NF {\n                start_sequence: 0,\n                start: 1,\n                end: 4\n            })\n        );\n    }\n\n    #[test]\n    fn test_escape_sequence_offsets_iterator_parses_nf_thats_broken() {\n        let mut iter = EscapeSequenceOffsetsIterator::new(\"\\x1B(\");\n        assert_eq!(\n            iter.next(),\n            Some(EscapeSequenceOffsets::NF {\n                start_sequence: 0,\n                start: 1,\n                end: 1\n            })\n        );\n    }\n\n    #[test]\n    fn test_escape_sequence_offsets_iterator_iterates() {\n        let mut iter = EscapeSequenceOffsetsIterator::new(\"text\\x1B[33m\\x1B]OSC\\x07\\x1B(0\");\n        assert_eq!(\n            iter.next(),\n            Some(EscapeSequenceOffsets::Text { start: 0, end: 4 })\n        );\n        assert_eq!(\n            iter.next(),\n            Some(EscapeSequenceOffsets::CSI {\n                start_sequence: 4,\n                start_parameters: 6,\n                start_intermediates: 8,\n                start_final_byte: 8,\n                end: 9\n            })\n        );\n        assert_eq!(\n            iter.next(),\n            Some(EscapeSequenceOffsets::OSC {\n                start_sequence: 9,\n                start_command: 11,\n                start_terminator: 14,\n                end: 15\n            })\n        );\n        assert_eq!(\n            iter.next(),\n            Some(EscapeSequenceOffsets::NF {\n                start_sequence: 15,\n                start: 16,\n                end: 18\n            })\n        );\n        assert_eq!(iter.next(), None);\n    }\n\n    #[test]\n    fn test_escape_sequence_iterator_iterates() {\n        let mut iter = EscapeSequenceIterator::new(\"text\\x1B[33m\\x1B]OSC\\x07\\x1B]OSC\\x1B\\\\\\x1B(0\");\n        assert_eq!(iter.next(), Some(EscapeSequence::Text(\"text\")));\n        assert_eq!(\n            iter.next(),\n            Some(EscapeSequence::CSI {\n                raw_sequence: \"\\x1B[33m\",\n                parameters: \"33\",\n                intermediates: \"\",\n                final_byte: \"m\",\n            })\n        );\n        assert_eq!(\n            iter.next(),\n            Some(EscapeSequence::OSC {\n                raw_sequence: \"\\x1B]OSC\\x07\",\n                command: \"OSC\",\n                terminator: \"\\x07\",\n            })\n        );\n        assert_eq!(\n            iter.next(),\n            Some(EscapeSequence::OSC {\n                raw_sequence: \"\\x1B]OSC\\x1B\\\\\",\n                command: \"OSC\",\n                terminator: \"\\x1B\\\\\",\n            })\n        );\n        assert_eq!(\n            iter.next(),\n            Some(EscapeSequence::NF {\n                raw_sequence: \"\\x1B(0\",\n                nf_sequence: \"(0\",\n            })\n        );\n        assert_eq!(iter.next(), None);\n    }\n\n    #[test]\n    fn test_sgr_attributes_do_not_leak_into_wrong_field() {\n        let mut attrs = crate::vscreen::Attributes::new();\n\n        // Bold, Dim, Italic, Underline, Foreground, Background\n        attrs.update(EscapeSequence::CSI {\n            raw_sequence: \"\\x1B[1;2;3;4;31;41m\",\n            parameters: \"1;2;3;4;31;41\",\n            intermediates: \"\",\n            final_byte: \"m\",\n        });\n\n        assert_eq!(attrs.bold, \"\\x1B[1m\");\n        assert_eq!(attrs.dim, \"\\x1B[2m\");\n        assert_eq!(attrs.italic, \"\\x1B[3m\");\n        assert_eq!(attrs.underline, \"\\x1B[4m\");\n        assert_eq!(attrs.foreground, \"\\x1B[31m\");\n        assert_eq!(attrs.background, \"\\x1B[41m\");\n\n        // Bold, Bright Foreground, Bright Background\n        attrs.sgr_reset();\n        attrs.update(EscapeSequence::CSI {\n            raw_sequence: \"\\x1B[1;94;103m\",\n            parameters: \"1;94;103\",\n            intermediates: \"\",\n            final_byte: \"m\",\n        });\n\n        assert_eq!(attrs.bold, \"\\x1B[1m\");\n        assert_eq!(attrs.foreground, \"\\x1B[94m\");\n        assert_eq!(attrs.background, \"\\x1B[103m\");\n    }\n}\n"
  },
  {
    "path": "src/wrapping.rs",
    "content": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]\npub enum WrappingMode {\n    Character,\n    Word,\n    // The bool specifies whether wrapping has been explicitly disabled by the user via --wrap=never\n    NoWrapping(bool),\n}\n\nimpl Default for WrappingMode {\n    fn default() -> Self {\n        WrappingMode::NoWrapping(false)\n    }\n}\n"
  },
  {
    "path": "tests/.gitattributes",
    "content": "# force LF EOLs for test fixtures\nexamples/** text=auto eol=lf\nsnapshots/** text=auto eol=lf\nsyntax-tests/source/** text=auto eol=lf\nsyntax-tests/highlighted/** text=auto eol=lf\n\n# Linguist overrides\nbenchmarks/** linguist-vendored\nexamples/** linguist-vendored\nsnapshots/** linguist-vendored\nsyntax-tests/highlighted/** linguist-vendored\nsyntax-tests/source/** linguist-vendored\n"
  },
  {
    "path": "tests/assets.rs",
    "content": "use bat::assets::HighlightingAssets;\n\n/// This test ensures that we are not accidentally removing themes due to submodule updates.\n/// It is 'ignore'd by default because it requires themes.bin to be up-to-date.\n#[test]\n#[ignore]\nfn all_themes_are_present() {\n    let assets = HighlightingAssets::from_binary();\n\n    let mut themes: Vec<_> = assets.themes().collect();\n    themes.sort_unstable();\n\n    assert_eq!(\n        themes,\n        vec![\n            \"1337\",\n            \"Catppuccin Frappe\",\n            \"Catppuccin Latte\",\n            \"Catppuccin Macchiato\",\n            \"Catppuccin Mocha\",\n            \"Coldark-Cold\",\n            \"Coldark-Dark\",\n            \"DarkNeon\",\n            \"Dracula\",\n            \"GitHub\",\n            \"Monokai Extended\",\n            \"Monokai Extended Bright\",\n            \"Monokai Extended Light\",\n            \"Monokai Extended Origin\",\n            \"Nord\",\n            \"OneHalfDark\",\n            \"OneHalfLight\",\n            \"Solarized (dark)\",\n            \"Solarized (light)\",\n            \"Sublime Snazzy\",\n            \"TwoDark\",\n            \"ansi\",\n            \"base16\",\n            \"base16-256\",\n            \"gruvbox-dark\",\n            \"gruvbox-light\",\n            \"zenburn\"\n        ]\n    );\n}\n"
  },
  {
    "path": "tests/benchmarks/.gitignore",
    "content": "/benchmark-results\n"
  },
  {
    "path": "tests/benchmarks/.ignore",
    "content": "test-src/*\n"
  },
  {
    "path": "tests/benchmarks/highlighting-speed-src/grep-output-ansi-sequences.txt",
    "content": "\u001b[35m\u001b[K.github/ISSUE_TEMPLATE/syntax_request.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K3\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kabout: Request adding a new syntax to \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.\n\u001b[35m\u001b[K.github/ISSUE_TEMPLATE/syntax_request.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K14\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[KBat\u001b[m\u001b[K supports locally-installed language definitions. See the link below:\n\u001b[35m\u001b[K.github/ISSUE_TEMPLATE/syntax_request.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K16\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Khttps://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K#adding-new-syntaxes--language-definitions\n\u001b[35m\u001b[K.github/ISSUE_TEMPLATE/question.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K3\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kabout: Ask a question about '\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K'.\n\u001b[35m\u001b[K.github/ISSUE_TEMPLATE/bug_report.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K21\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K**How did you install `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`?**\n\u001b[35m\u001b[K.github/ISSUE_TEMPLATE/bug_report.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K27\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K**\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K version and environment**\n\u001b[35m\u001b[K.github/ISSUE_TEMPLATE/bug_report.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K31\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kin which you're running \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K. To do this, run the full `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` command that demonstrates\n\u001b[35m\u001b[K.github/ISSUE_TEMPLATE/bug_report.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K34\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K [other options and arguments…] --diagnostic\n\u001b[35m\u001b[K.github/ISSUE_TEMPLATE/bug_report.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K40\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KIf you are running \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K 0.17.1 or older (where --diagnostic is not available), please\n\u001b[35m\u001b[K.github/ISSUE_TEMPLATE/bug_report.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K43\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/blob/master/diagnostics/info.sh\n\u001b[35m\u001b[K.github/ISSUE_TEMPLATE/bug_report.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K46\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kare on Windows, please let us know your \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K version and your Windows version.\n\u001b[35m\u001b[K.github/workflows/CICD.yml\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K69\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    - name: Build and install \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[K.github/workflows/CICD.yml\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K76\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    - name: Build and install \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K with updated assets\n\u001b[35m\u001b[K.github/workflows/CICD.yml\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K94\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      run: \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --list-languages\n\u001b[35m\u001b[K.github/workflows/CICD.yml\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K96\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      run: \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --list-themes\n\u001b[35m\u001b[K.github/workflows/CICD.yml\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K235\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    - name: Run \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[K.github/workflows/CICD.yml\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K242\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    - name: Show diagnostics (\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --diagnostic)\n\u001b[35m\u001b[K.github/workflows/CICD.yml\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K302\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        cp 'target/${{ matrix.job.target }}/release/build/${{ env.PROJECT_NAME }}'-*/out/assets/manual/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.1 \"$ARCHIVE_DIR\"\n\u001b[35m\u001b[K.github/workflows/CICD.yml\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K308\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        cp 'target/${{ matrix.job.target }}/release/build/${{ env.PROJECT_NAME }}'-*/out/assets/completions/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.bash \"$ARCHIVE_DIR/autocomplete/${{ env.PROJECT_NAME }}.bash\"\n\u001b[35m\u001b[K.github/workflows/CICD.yml\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K309\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        cp 'target/${{ matrix.job.target }}/release/build/${{ env.PROJECT_NAME }}'-*/out/assets/completions/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.fish \"$ARCHIVE_DIR/autocomplete/${{ env.PROJECT_NAME }}.fish\"\n\u001b[35m\u001b[K.github/workflows/CICD.yml\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K310\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        cp 'target/${{ matrix.job.target }}/release/build/${{ env.PROJECT_NAME }}'-*/out/assets/completions/_\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.ps1 \"$ARCHIVE_DIR/autocomplete/_${{ env.PROJECT_NAME }}.ps1\"\n\u001b[35m\u001b[K.github/workflows/CICD.yml\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K311\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        cp 'target/${{ matrix.job.target }}/release/build/${{ env.PROJECT_NAME }}'-*/out/assets/completions/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.zsh \"$ARCHIVE_DIR/autocomplete/${{ env.PROJECT_NAME }}.zsh\"\n\u001b[35m\u001b[K.github/workflows/CICD.yml\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K355\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        install -Dm644 'target/${{ matrix.job.target }}/release/build/${{ env.PROJECT_NAME }}'-*/out/assets/manual/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.1 \"${DPKG_DIR}/usr/share/man/man1/${{ env.PROJECT_NAME }}.1\"\n\u001b[35m\u001b[K.github/workflows/CICD.yml\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K359\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        install -Dm644 'target/${{ matrix.job.target }}/release/build/${{ env.PROJECT_NAME }}'-*/out/assets/completions/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.bash \"${DPKG_DIR}/usr/share/bash-completion/completions/${{ env.PROJECT_NAME }}\"\n\u001b[35m\u001b[K.github/workflows/CICD.yml\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K360\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        install -Dm644 'target/${{ matrix.job.target }}/release/build/${{ env.PROJECT_NAME }}'-*/out/assets/completions/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.fish \"${DPKG_DIR}/usr/share/fish/vendor_completions.d/${{ env.PROJECT_NAME }}.fish\"\n\u001b[35m\u001b[K.github/workflows/CICD.yml\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K361\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        install -Dm644 'target/${{ matrix.job.target }}/release/build/${{ env.PROJECT_NAME }}'-*/out/assets/completions/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.zsh \"${DPKG_DIR}/usr/share/zsh/vendor-completions/_${{ env.PROJECT_NAME }}\"\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K2\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  <img src=\"doc/logo-header.svg\" alt=\"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K - a cat clone with wings\"><br>\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K3\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  <a href=\"https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/actions?query=workflow%3ACICD\"><img src=\"https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/workflows/CICD/badge.svg\" alt=\"Build Status\"></a>\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K4\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  <img src=\"https://img.shields.io/crates/l/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.svg\" alt=\"license\">\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K5\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  <a href=\"https://crates.io/crates/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\"><img src=\"https://img.shields.io/crates/v/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.svg?colorB=319e8c\" alt=\"Version info\"></a><br>\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K16\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  [<a href=\"https://github.com/chinanf-boy/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-zh\">中文</a>]\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K24\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` supports syntax highlighting for a large number of programming and markup\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K31\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` communicates with `git` to show modifications with respect to the index\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K45\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KBy default, `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` pipes its own output to a pager (e.g. `less`) if the output is too large for one screen.\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K46\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KIf you would rather `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` work like `cat` all the time (never page output), you can set `--paging=never` as an option, either on the command line or in your configuration file.\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K47\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KIf you intend to alias `cat` to `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` in your shell configuration, you can use `alias cat='\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --paging=never'` to preserve the default behavior.\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K51\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KEven with a pager set, you can still use `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` to concatenate files :wink:.\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K52\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KWhenever `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` detects a non-interactive terminal (i.e. when you pipe into another process or into a file), `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` will act as a drop-in replacement for `cat` and fall back to printing the plain file contents, regardless of the `--pager` option's value.\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K59\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K> \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K README.md\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K65\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K> \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K src/*.rs\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K73\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K> curl -s https://sh.rustup.rs | \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K79\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K> yaml2json .travis.yml | json_pp | \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K -l json\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K84\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K> \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K -A /etc/hosts\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K90\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K > note.md  # quickly create a new file\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K92\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K header.md content.md footer.md > document.md\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K94\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K -n main.rs  # show line numbers (only)\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K96\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K f - g  # output 'f', then stdin, then 'g'.\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K103\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KYou can use `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` as a previewer for [`fzf`](https://github.com/junegunn/fzf). To do this,\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K104\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kuse `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`s `--color=always` option to force colorized output. You can also use `--line-range`\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K108\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kfzf --preview '\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --color=always --style=numbers --line-range=:500 {}'\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K115\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KYou can use the `-exec` option of `find` to preview all search results with `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`:\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K118\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kfind … -exec \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K {} +\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K121\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KIf you happen to use [`fd`](https://github.com/sharkdp/fd), you can use the `-X`/`--exec-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch` option to do the same:\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K124\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kfd … -X \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K129\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KWith [`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kgrep`](https://github.com/eth-p/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-extras/blob/master/doc/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kgrep.md), `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` can be used as the printer for [`ripgrep`](https://github.com/BurntSushi/ripgrep) search results.\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K132\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kgrep needle src/\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K137\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` can be combined with `tail -f` to continuously monitor a given file with syntax highlighting.\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K140\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Ktail -f /var/log/pacman.log | \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --paging=never -l log\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K148\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KYou can combine `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` with `git show` to view an older version of a given file with proper syntax\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K152\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kgit show v0.6.0:src/main.rs | \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K -l rs\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K157\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KYou can combine `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` with `git diff` to view lines around code changes with proper syntax\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K160\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kdiff() {\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K161\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    git diff --name-only --diff-filter=d | xargs \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --diff\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K164\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KIf you prefer to use this as a separate tool, check out `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kdiff` in [`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-extras`](https://github.com/eth-p/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-extras).\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K170\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KThe line numbers and Git modification markers in the output of `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` can make it hard to copy\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K171\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kthe contents of a file. To prevent this, you can call `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` with the `-p`/`--plain` option or\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K174\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K main.cpp | xclip\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K176\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` will detect that the output is being redirected and print the plain file contents.\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K180\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` can be used as a colorizing pager for `man`, by setting the\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K184\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kexport MANPAGER=\"sh -c 'col -bx | \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K -l man -p'\"\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K187\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K(replace `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` with `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kcat` if you are on Debian or Ubuntu)\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K192\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KIf you prefer to have this bundled in a new command, you can also use [`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kman`](https://github.com/eth-p/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-extras/blob/master/doc/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kman.md).\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K196\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KAlso, note that this will [not work](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/issues/1145) with Mandocs `man` implementation.\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K200\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KThe [`pretty\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`](https://github.com/eth-p/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-extras/blob/master/doc/pretty\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.md) script is a wrapper that will format code and print it with `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`.\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K205\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[![Packaging status](https://repology.org/badge/vertical-allrepos/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-cat.svg)](https://repology.org/project/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-cat/versions)\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K210\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` is available on [Ubuntu since 20.04 (\"Focal\")](https://packages.ubuntu.com/search?keywords=\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K&exact=1) and [Debian since August 2021 (Debian 11 - \"Bullseye\")](https://packages.debian.org/bullseye/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K).\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K215\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Ksudo apt install \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K218\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K**Important**: If you install `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` this way, please note that the executable may be installed as `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kcat` instead of `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` (due to [a name\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K219\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kclash with another package](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/issues/982)). You can set up a `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K -> \u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kcat` symlink or alias to prevent any issues that may come up because of this and to be consistent with other distributions:\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K222\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kln -s /usr/bin/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kcat ~/.local/bin/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K229\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kthe most recent release of `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`, download the latest `.deb` package from the\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K230\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[release page](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/releases) and install it via:\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K233\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Ksudo dpkg -i \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_0.18.3_amd64.deb  # adapt version number and architecture\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K238\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KYou can install [the `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` package](https://pkgs.alpinelinux.org/packages?name=\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K)\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K242\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kapk add \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K247\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KYou can install [the `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` package](https://www.archlinux.org/packages/community/x86_64/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/)\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K251\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kpacman -S \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K256\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KYou can install [the `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` package](https://koji.fedoraproject.org/koji/packageinfo?packageID=27506) from the official [Fedora Modular](https://docs.fedoraproject.org/en-US/modularity/using-modules/) repository.\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K259\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kdnf install \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K264\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KYou can install [the `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` package](https://github.com/funtoo/dev-kit/tree/1.4-release/sys-apps/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K) from dev-kit.\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K267\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kemerge sys-apps/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K272\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KYou can install [the `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` package](https://packages.gentoo.org/packages/sys-apps/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K)\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K276\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kemerge sys-apps/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K281\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KYou can install `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` via xbps-install:\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K283\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kxbps-install -S \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K288\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KYou can install `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` via pkg:\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K290\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kpkg install \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K295\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KYou can install a precompiled [`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` package](https://www.freshports.org/textproc/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K) with pkg:\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K298\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kpkg install \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K304\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kcd /usr/ports/textproc/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K310\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KYou can install `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` package using [`pkg_add(1)`](https://man.openbsd.org/pkg_add.1):\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K313\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kpkg_add \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K318\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KYou can install `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` using the [nix package manager](https://nixos.org/nix):\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K321\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Knix-env -i \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K326\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KYou can install `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` with zypper:\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K329\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kzypper install \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K335\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KExisting packages may be available, but are not officially supported and may contain [issues](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/issues/1519).\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K339\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KYou can install `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` with [Homebrew on MacOS](https://formulae.brew.sh/formula/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K) or [Homebrew on Linux](https://formulae.brew.sh/formula-linux/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K):\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K342\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kbrew install \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K347\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KOr install `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` with [MacPorts](https://ports.macports.org/port/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/summary):\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K350\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kport install \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K355\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KThere are a few options to install `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` on Windows. Once you have installed `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`,\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K356\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Ktake a look at the [\"Using `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` on Windows\"](#using-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-on-windows) section.\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K364\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KYou can install `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` via [Chocolatey](https://chocolatey.org/packages/\u001b[1;33m\u001b[KBat\u001b[m\u001b[K):\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K366\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kchoco install \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K371\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KYou can install `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` via [scoop](https://scoop.sh/):\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K373\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kscoop install \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K378\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KYou can download prebuilt binaries from the [Release page](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/releases),\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K384\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KCheck out the [Release page](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/releases) for\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K385\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kprebuilt versions of `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` for many different architectures. Statically-linked\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K390\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KIf you want to build `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` from source, you need Rust 1.46 or\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K394\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kcargo install --locked \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K404\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KUse `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --list-themes` to get a list of all available themes for syntax\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K405\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Khighlighting. To select the `TwoDark` theme, call `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` with the\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K406\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`--theme=TwoDark` option or set the `\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_THEME` environment variable to\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K407\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`TwoDark`. Use `export \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_THEME=\"TwoDark\"` in your shell's startup file to\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K408\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kmake the change permanent. Alternatively, use `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`s\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K409\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[configuration file](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K#configuration-file).\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K414\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --list-themes | fzf --preview=\"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --theme={} --color=always /path/to/file\"\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K417\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` looks good on a dark background by default. However, if your terminal uses a\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K420\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K['Adding new themes' section below](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K#adding-new-themes).\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K424\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` has three themes that always use [8-bit colors](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors),\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K444\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KYou can use the `--style` option to control the appearance of `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`s output.\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K446\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kand line numbers but no grid and no file header. Set the `\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_STYLE` environment\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K447\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kvariable to make these changes permanent or use `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`s\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K448\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[configuration file](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K#configuration-file).\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K452\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KShould you find that a particular syntax is not available within `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`, you can follow these\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K453\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kinstructions to easily add new syntaxes to your current `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` installation.\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K455\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` uses the excellent [`syntect`](https://github.com/trishume/syntect/)\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K466\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K   mkdir -p \"$(\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --config-dir)/syntaxes\"\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K467\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K   cd \"$(\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --config-dir)/syntaxes\"\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K477\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K   \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K cache --build\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K480\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K3. Finally, use `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --list-languages` to check if the new languages are available.\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K485\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K   \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K cache --clear\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K488\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K4. If you think that a specific syntax should be included in `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` by default, please\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K490\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K   instructions [here](doc/assets.md): [Open Syntax Request](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/issues/new?labels=syntax-request&template=syntax_request.md).\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K498\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kmkdir -p \"$(\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --config-dir)/themes\"\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K499\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kcd \"$(\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --config-dir)/themes\"\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K505\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K cache --build\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K508\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KFinally, use `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --list-themes` to check if the new themes are available.\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K516\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K(use `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --list-languages` for an overview).\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K518\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KNote: You probably want to use this option as an entry in `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`s configuration file instead\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K539\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` uses the pager that is specified in the `PAGER` environment variable. If this variable is not\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K541\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`PAGER` variable or set the `\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER` environment variable to override what is specified in\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K544\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K**Note**: If `PAGER` is `more` or `most`, `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` will silently use `less` instead to ensure support for colors.\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K547\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`PAGER`/`\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER` variables:\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K550\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kexport \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER=\"less -RF\"\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K553\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KInstead of using environment variables, you can also use `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`s [configuration file](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K#configuration-file) to configure the pager (`--pager` option).\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K556\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` will pass the following command line options to the pager: `-R`/`--RAW-CONTROL-CHARS`,\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K572\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` expands tabs to 4 spaces by itself, not relying on the pager. To change this, simply add the\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K575\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K**Note**: Defining tab stops for the pager (via the `--pager` argument by `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`, or via the `LESS`\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K578\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Ksidebar. Calling `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` with `--tabs=0` will override it and let tabs be consumed by the pager.\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K582\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KIf you make use of the dark mode feature in macOS, you might want to configure `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` to use a different\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K587\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kalias cat=\"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --theme=\\$(defaults read -globalDomain AppleInterfaceStyle &> /dev/null && echo default || echo GitHub)\"\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K593\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` can also be customized with a configuration file. The location of the file is dependent\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K596\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --config-file\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K599\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KAlternatively, you can use the `\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CONFIG_PATH` environment variable to point `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` to a\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K602\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kexport \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CONFIG_PATH=\"/path/to/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.conf\"\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K607\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --generate-config-file\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K612\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KThe configuration file is a simple list of command line arguments. Use `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --help` to see a full list of possible options and values. In addition, you can add comments by prepending a line with the `#` character.\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K629\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K## Using `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` on Windows\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K631\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` mostly works out-of-the-box on Windows, but a few features may need extra configuration.\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K653\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kor by setting `\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER` to an empty string.\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K657\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` on Windows does not natively support Cygwin's unix-style paths (`/cygdrive/*`). When passed an absolute cygwin path as an argument, `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` will encounter the following error: `The system cannot find the path specified. (os error 3)`\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K662\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K() {\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K671\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    command \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K \"${args[@]}\"\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K679\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KIf an input file contains color codes or other ANSI escape sequences, `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` will have problems\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K682\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kpassing the `--color=never --wrap=never` options to `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`.\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K686\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` handles terminals *with* and *without* truecolor support. However, the colors in most syntax\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K694\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`24bit`. Otherwise, `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` will not be able to determine whether or not 24-bit escape sequences\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K699\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KPlease try a different theme (see `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --list-themes` for a list). The `OneHalfDark` and\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K704\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` natively supports UTF-8 as well as UTF-16. For every other file encoding, you may need to\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K709\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kiconv -f ISO-8859-1 -t UTF-8 my-file.php | \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K712\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kby `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`.\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K718\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kgit clone --recursive https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K721\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kcd \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K730\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K# Build a \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K binary with modified syntaxes and themes\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K735\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KIf you want to build an application that uses `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`s pretty-printing\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K736\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kfeatures as a library, check out the [the API documentation](https://docs.rs/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/).\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K738\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kwhen you depend on `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` as a library.\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K753\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KPlease contact [David Peter](https://david-peter.de/) via email if you want to report a vulnerability in `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`.\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K757\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` tries to achieve the following goals:\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K768\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KCopyright (c) 2018-2021 [\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-developers](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K).\n\u001b[35m\u001b[KREADME.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K770\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` is made available under the terms of either the MIT License or the Apache License 2.0, at your option.\n\u001b[35m\u001b[K.gitmodules\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K198\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\turl = https://github.com/ArmandPhilippot/coldark-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.gitmodules\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K202\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tbranch = \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-source\n\u001b[35m\u001b[Kexamples/list_syntaxes_and_themes.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K/// A simple program that prints its own source code using the \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K library\n\u001b[35m\u001b[Kexamples/list_syntaxes_and_themes.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K2\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kuse \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K::PrettyPrinter;\n\u001b[35m\u001b[Kexamples/inputs.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K3\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kuse \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K::{Input, PrettyPrinter};\n\u001b[35m\u001b[Kexamples/yaml.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K2\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kuse \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K::{Input, PrettyPrinter};\n\u001b[35m\u001b[Kexamples/advanced.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K/// A program that prints its own source code using the \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K library\n\u001b[35m\u001b[Kexamples/advanced.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K2\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kuse \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K::{PagingMode, PrettyPrinter, WrappingMode};\n\u001b[35m\u001b[Kexamples/cat.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K/// A very simple colorized `cat` clone, using `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` as a library.\n\u001b[35m\u001b[Kexamples/cat.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K2\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K/// See `src/bin/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` for the full `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` application.\n\u001b[35m\u001b[Kexamples/cat.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K3\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kuse \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K::PrettyPrinter;\n\u001b[35m\u001b[Kexamples/simple.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K/// A simple program that prints its own source code using the \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K library\n\u001b[35m\u001b[Kexamples/simple.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K2\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kuse \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K::PrettyPrinter;\n\u001b[35m\u001b[K.gitignore\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K5\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K/assets/completions/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.bash\n\u001b[35m\u001b[K.gitignore\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K6\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K/assets/completions/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.fish\n\u001b[35m\u001b[K.gitignore\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K7\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K/assets/completions/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.zsh\n\u001b[35m\u001b[K.gitignore\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K8\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K/assets/manual/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.1\n\u001b[35m\u001b[Ksrc/input.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K12\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K/// This tells \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K how to refer to the input.\n\u001b[35m\u001b[Ksrc/error.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K22\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    #[error(\"Use of \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K as a pager is disallowed in order to avoid infinite recursion problems\")]\n\u001b[35m\u001b[Ksrc/error.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K23\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    InvalidPagerValue\u001b[1;33m\u001b[KBat\u001b[m\u001b[K,\n\u001b[35m\u001b[Ksrc/error.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K53\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                Red.paint(\"[\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K error]\"),\n\u001b[35m\u001b[Ksrc/error.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K59\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            writeln!(output, \"{}: {}\", Red.paint(\"[\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K error]\"), error).ok();\n\u001b[35m\u001b[Ksrc/lib.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K//! `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` is a library to print syntax highlighted content.\n\u001b[35m\u001b[Ksrc/lib.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K13\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K//! use \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K::PrettyPrinter;\n\u001b[35m\u001b[Ksrc/macros.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K2\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kmacro_rules! \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_warning {\n\u001b[35m\u001b[Ksrc/macros.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K5\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        eprintln!(\"{}: {}\", Yellow.paint(\"[\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K warning]\"), format!($($arg)*));\n\u001b[35m\u001b[Ksrc/syntax_mapping.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K52\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                \"**/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/config\",\n\u001b[35m\u001b[Ksrc/pager.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K10\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    /// From the env var \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER\n\u001b[35m\u001b[Ksrc/pager.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K11\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    EnvVar\u001b[1;33m\u001b[KBat\u001b[m\u001b[KPager,\n\u001b[35m\u001b[Ksrc/pager.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K23\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    /// \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Ksrc/pager.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K24\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[KBat\u001b[m\u001b[K,\n\u001b[35m\u001b[Ksrc/pager.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K48\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            Some(\"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\") => PagerKind::\u001b[1;33m\u001b[KBat\u001b[m\u001b[K,\n\u001b[35m\u001b[Ksrc/pager.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K86\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    let \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_pager = env::var(\"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER\");\n\u001b[35m\u001b[Ksrc/pager.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K89\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    let (cmd, source) = match (config_pager, &\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_pager, &pager) {\n\u001b[35m\u001b[Ksrc/pager.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K91\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        (_, Ok(\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_pager), _) => (\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_pager.as_str(), PagerSource::EnvVar\u001b[1;33m\u001b[KBat\u001b[m\u001b[KPager),\n\u001b[35m\u001b[Ksrc/pager.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K105\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                // If PAGER=\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K, silently use 'less' instead to prevent\n\u001b[35m\u001b[Ksrc/pager.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K107\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                // Never silently use 'less' if \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER or --pager has been\n\u001b[35m\u001b[Ksrc/pager.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K109\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                matches!(kind, PagerKind::More | PagerKind::Most | PagerKind::\u001b[1;33m\u001b[KBat\u001b[m\u001b[K)\n\u001b[35m\u001b[Ksrc/assets.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K16\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kuse crate::{\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_warning, SyntaxMapping};\n\u001b[35m\u001b[Ksrc/assets.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K218\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_warning!(\"Theme '{}' is deprecated, using 'ansi' instead.\", theme);\n\u001b[35m\u001b[Ksrc/assets.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K222\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_warning!(\"Unknown theme '{}', using default.\", theme)\n\u001b[35m\u001b[Ksrc/printer.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K278\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                     (but will be present if the output of '\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K' is piped). You can use '\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K -A' \\\n\u001b[35m\u001b[Ksrc/printer.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K280\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                    Yellow.paint(\"[\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K warning]\"),\n\u001b[35m\u001b[Ksrc/output.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K62\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        if pager.kind == PagerKind::\u001b[1;33m\u001b[KBat\u001b[m\u001b[K {\n\u001b[35m\u001b[Ksrc/output.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K63\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            return Err(Error::InvalidPagerValue\u001b[1;33m\u001b[KBat\u001b[m\u001b[K);\n\u001b[35m\u001b[Ksrc/output.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K78\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            // ANSI color sequences printed by \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K. If someone has set PAGER=\"less -F\", we\n\u001b[35m\u001b[Ksrc/output.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K81\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            // We only do this for PAGER (as it is not specific to '\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K'), not for \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER\n\u001b[35m\u001b[Ksrc/output.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K82\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            // or \u001b[1;33m\u001b[Kbat\u001b[m\u001b[Ks '--pager' command line option.\n\u001b[35m\u001b[Ksrc/bin/bat/input.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kuse \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K::input::Input;\n\u001b[35m\u001b[Ksrc/bin/bat/config.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K10\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    env::var(\"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CONFIG_PATH\")\n\u001b[35m\u001b[Ksrc/bin/bat/config.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K16\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kpub fn generate_config_file() -> \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K::error::Result<()> {\n\u001b[35m\u001b[Ksrc/bin/bat/config.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K46\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    let default_config = r#\"# This is `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`s configuration file. Each line either contains a comment or\n\u001b[35m\u001b[Ksrc/bin/bat/config.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K47\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K# a command-line option that you want to pass to `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` by default. You can\n\u001b[35m\u001b[Ksrc/bin/bat/config.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K48\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K# run `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --help` to get a list of all possible configuration options.\n\u001b[35m\u001b[Ksrc/bin/bat/config.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K50\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K# Specify desired highlighting theme (e.g. \"TwoDark\"). Run `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --list-themes`\n\u001b[35m\u001b[Ksrc/bin/bat/config.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K62\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K# enable mouse scrolling support in `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` when running inside tmux. This might\n\u001b[35m\u001b[Ksrc/bin/bat/config.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K98\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    env::var(\"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_OPTS\").ok().map(|s| get_args_from_str(&s))\n\u001b[35m\u001b[Ksrc/bin/bat/directories.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K7\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K/// The `XDG_CACHE_HOME` environment variable is checked first. `\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CONFIG_DIR`\n\u001b[35m\u001b[Ksrc/bin/bat/directories.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K9\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K///  The fallback directories are `~/.cache/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` and `~/.config/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`, respectively.\n\u001b[35m\u001b[Ksrc/bin/bat/directories.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K10\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kpub struct \u001b[1;33m\u001b[KBat\u001b[m\u001b[KProjectDirs {\n\u001b[35m\u001b[Ksrc/bin/bat/directories.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K15\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kimpl \u001b[1;33m\u001b[KBat\u001b[m\u001b[KProjectDirs {\n\u001b[35m\u001b[Ksrc/bin/bat/directories.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K16\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    fn new() -> Option<\u001b[1;33m\u001b[KBat\u001b[m\u001b[KProjectDirs> {\n\u001b[35m\u001b[Ksrc/bin/bat/directories.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K17\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        let cache_dir = \u001b[1;33m\u001b[KBat\u001b[m\u001b[KProjectDirs::get_cache_dir()?;\n\u001b[35m\u001b[Ksrc/bin/bat/directories.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K19\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        // Checks whether or not $\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CONFIG_DIR exists. If it doesn't, set our config dir\n\u001b[35m\u001b[Ksrc/bin/bat/directories.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K22\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            if let Some(config_dir_op) = env::var_os(\"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CONFIG_DIR\").map(PathBuf::from) {\n\u001b[35m\u001b[Ksrc/bin/bat/directories.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K34\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                config_dir_op.map(|d| d.join(\"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\"))?\n\u001b[35m\u001b[Ksrc/bin/bat/directories.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K37\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        Some(\u001b[1;33m\u001b[KBat\u001b[m\u001b[KProjectDirs {\n\u001b[35m\u001b[Ksrc/bin/bat/directories.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K44\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        // on all OS prefer \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CACHE_PATH if set\n\u001b[35m\u001b[Ksrc/bin/bat/directories.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K45\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        let cache_dir_op = env::var_os(\"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CACHE_PATH\").map(PathBuf::from);\n\u001b[35m\u001b[Ksrc/bin/bat/directories.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K59\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        cache_dir_op.map(|d| d.join(\"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\"))\n\u001b[35m\u001b[Ksrc/bin/bat/directories.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K72\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    pub static ref PROJECT_DIRS: \u001b[1;33m\u001b[KBat\u001b[m\u001b[KProjectDirs =\n\u001b[35m\u001b[Ksrc/bin/bat/directories.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K73\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        \u001b[1;33m\u001b[KBat\u001b[m\u001b[KProjectDirs::new().expect(\"Could not get home directory\");\n\u001b[35m\u001b[Ksrc/bin/bat/app.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K17\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kuse \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K::{\n\u001b[35m\u001b[Ksrc/bin/bat/app.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K19\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_warning,\n\u001b[35m\u001b[Ksrc/bin/bat/app.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K56\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            // Skip the arguments in \u001b[1;33m\u001b[Kbat\u001b[m\u001b[Ks config file\n\u001b[35m\u001b[Ksrc/bin/bat/app.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K62\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            // Read arguments from \u001b[1;33m\u001b[Kbat\u001b[m\u001b[Ks config file\n\u001b[35m\u001b[Ksrc/bin/bat/app.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K191\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                .or_else(|| env::var(\"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_TABS\").ok())\n\u001b[35m\u001b[Ksrc/bin/bat/app.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K204\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                .or_else(|| env::var(\"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_THEME\").ok())\n\u001b[35m\u001b[Ksrc/bin/bat/app.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K305\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                let env_style_components: Option<Vec<StyleComponent>> = env::var(\"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_STYLE\")\n\u001b[35m\u001b[Ksrc/bin/bat/app.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K336\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_warning!(\"Style 'rule' is a subset of style 'grid', 'rule' will not be visible.\");\n\u001b[35m\u001b[Ksrc/bin/bat/assets.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K9\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kuse \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K::assets::HighlightingAssets;\n\u001b[35m\u001b[Ksrc/bin/bat/assets.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K10\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kuse \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K::assets_metadata::AssetsMetadata;\n\u001b[35m\u001b[Ksrc/bin/bat/assets.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K11\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kuse \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K::error::*;\n\u001b[35m\u001b[Ksrc/bin/bat/assets.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K34\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                 in '{}' are not compatible with this version of \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K ({}). To solve this, \\\n\u001b[35m\u001b[Ksrc/bin/bat/assets.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K35\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                 either rebuild the cache (\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K cache --build) or remove \\\n\u001b[35m\u001b[Ksrc/bin/bat/assets.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K36\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                 the custom syntaxes/themes (\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K cache --clear).\\n\\\n\u001b[35m\u001b[Ksrc/bin/bat/assets.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K38\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                 https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K#adding-new-syntaxes--language-definitions\",\n\u001b[35m\u001b[Ksrc/bin/bat/main.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K28\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kuse \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K::{\n\u001b[35m\u001b[Ksrc/bin/bat/main.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K52\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K::assets::build(source_dir, !blank, target_dir, clap::crate_version!())\n\u001b[35m\u001b[Ksrc/bin/bat/main.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K60\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        println!(\"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K has been built without the 'build-assets' feature. The 'cache --build' option is not available.\");\n\u001b[35m\u001b[Ksrc/bin/bat/main.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K207\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            and are added to the cache with `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K cache --build`. \\\n\u001b[35m\u001b[Ksrc/bin/bat/main.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K209\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K#adding-new-themes\",\n\u001b[35m\u001b[Ksrc/bin/bat/main.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K230\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    let pager = \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K::config::get_pager_executable(app.matches.value_of(\"pager\"))\n\u001b[35m\u001b[Ksrc/bin/bat/main.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K243\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            \"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER\",\n\u001b[35m\u001b[Ksrc/bin/bat/main.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K244\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            \"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CACHE_PATH\",\n\u001b[35m\u001b[Ksrc/bin/bat/main.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K245\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            \"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CONFIG_PATH\",\n\u001b[35m\u001b[Ksrc/bin/bat/main.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K246\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            \"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_OPTS\",\n\u001b[35m\u001b[Ksrc/bin/bat/main.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K247\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            \"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_STYLE\",\n\u001b[35m\u001b[Ksrc/bin/bat/main.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K248\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            \"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_TABS\",\n\u001b[35m\u001b[Ksrc/bin/bat/main.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K249\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            \"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_THEME\",\n\u001b[35m\u001b[Ksrc/bin/bat/main.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K280\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        println!(\"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K has been built without the 'bugreport' feature. The '--diagnostic' option is not available.\");\n\u001b[35m\u001b[Ksrc/bin/bat/clap_app.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K43\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            \"Note: `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K -h` prints a short and concise overview while `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --help` gives all \\\n\u001b[35m\u001b[Ksrc/bin/bat/clap_app.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K127\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                     data to \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K from STDIN when \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K does not otherwise know \\\n\u001b[35m\u001b[Ksrc/bin/bat/clap_app.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K290\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                        if the output of \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K is piped to another program, but you want \\\n\u001b[35m\u001b[Ksrc/bin/bat/clap_app.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K306\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                    set \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER to an empty string. To control which pager is used, see the \\\n\u001b[35m\u001b[Ksrc/bin/bat/clap_app.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K330\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                    PAGER and \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER environment variables. The default pager is 'less'. \\\n\u001b[35m\u001b[Ksrc/bin/bat/clap_app.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K363\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                     \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_THEME environment variable (e.g.: export \\\n\u001b[35m\u001b[Ksrc/bin/bat/clap_app.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K364\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                     \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_THEME=\\\"...\\\").\",\n\u001b[35m\u001b[Ksrc/bin/bat/clap_app.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K412\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                     \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_STYLE environment variable (e.g.: export \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_STYLE=\\\"..\\\").\\n\\n\\\n\u001b[35m\u001b[Ksrc/bin/bat/clap_app.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K497\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                .help(\"Show \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K's configuration directory.\"),\n\u001b[35m\u001b[Ksrc/bin/bat/clap_app.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K503\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                .help(\"Show \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K's cache directory.\"),\n\u001b[35m\u001b[Ksrc/bin/bat/clap_app.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K521\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                    '\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --ignored-suffix \\\".dev\\\" my_file.json.dev' will use JSON syntax, and ignore '.dev'\"\n\u001b[35m\u001b[Ksrc/bin/bat/clap_app.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K528\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    // enable the '\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K cache' subcommand.\n\u001b[35m\u001b[Ksrc/assets/serialized_syntax_set.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K14\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    /// The data to use is embedded into the \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K binary.\n\u001b[35m\u001b[Ksrc/assets/build_assets.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K246\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        if std::env::var(\"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PRINT_SYNTAX_DEPENDENCIES\").is_ok() {\n\u001b[35m\u001b[Ksrc/assets/build_assets.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K248\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            // \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PRINT_SYNTAX_DEPENDENCIES=1 cargo run -- cache --build --source assets --blank --target /tmp\n\u001b[35m\u001b[Ksrc/assets/build_assets.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K342\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K/// \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_SYNTAX_DEPENDENCIES_TO_GRAPHVIZ_DOT_FILE=/tmp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-syntax-dependencies.dot cargo run -- cache  --build --source assets --blank --target /tmp\n\u001b[35m\u001b[Ksrc/assets/build_assets.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K343\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K/// dot /tmp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-syntax-dependencies.dot -Tpng -o /tmp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-syntax-dependencies.png\n\u001b[35m\u001b[Ksrc/assets/build_assets.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K344\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K/// open /tmp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-syntax-dependencies.png\n\u001b[35m\u001b[Ksrc/assets/build_assets.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K350\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    if let Ok(dot_file_path) = std::env::var(\"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_SYNTAX_DEPENDENCIES_TO_GRAPHVIZ_DOT_FILE\") {\n\u001b[35m\u001b[Ksrc/assets/build_assets.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K424\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            if std::env::var(\"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_INCLUDE_SYNTAX_DEPENDENTS\").is_ok() {\n\u001b[35m\u001b[Ksrc/assets/assets_metadata.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K12\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_version: Option<String>,\n\u001b[35m\u001b[Ksrc/assets/assets_metadata.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K22\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_version: Some(current_version.to_owned()),\n\u001b[35m\u001b[Ksrc/assets/assets_metadata.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K48\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    ///       => assume that these were created by an old version of \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K and return\n\u001b[35m\u001b[Ksrc/assets/assets_metadata.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K69\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            Version::parse(current_version).expect(\"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K follows semantic versioning\");\n\u001b[35m\u001b[Ksrc/assets/assets_metadata.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K71\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            .\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_version\n\u001b[35m\u001b[Ksrc/assets/build_assets/graphviz_utils.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K30\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    writeln!(dot_file, \"digraph \u001b[1;33m\u001b[KBat\u001b[m\u001b[KSyntaxDependencies {{\")?;\n\u001b[35m\u001b[Kbuild.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K2\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K// For more details, see https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/issues/372\n\u001b[35m\u001b[Kbuild.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K4\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K// For \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-as-a-library, no build script is required. The build script is for\n\u001b[35m\u001b[Kbuild.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K5\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K// the manpage and completions, which are only relevant to the \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K application.\n\u001b[35m\u001b[Kbuild.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K17\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    let project_name = option_env!(\"PROJECT_NAME\").unwrap_or(\"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\");\n\u001b[35m\u001b[Kbuild.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K54\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        \"assets/manual/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.1.in\",\n\u001b[35m\u001b[Kbuild.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K55\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        out_dir.join(\"assets/manual/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.1\"),\n\u001b[35m\u001b[Kbuild.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K59\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        \"assets/completions/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.bash.in\",\n\u001b[35m\u001b[Kbuild.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K60\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        out_dir.join(\"assets/completions/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.bash\"),\n\u001b[35m\u001b[Kbuild.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K64\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        \"assets/completions/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.fish.in\",\n\u001b[35m\u001b[Kbuild.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K65\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        out_dir.join(\"assets/completions/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.fish\"),\n\u001b[35m\u001b[Kbuild.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K69\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        \"assets/completions/_\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.ps1.in\",\n\u001b[35m\u001b[Kbuild.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K70\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        out_dir.join(\"assets/completions/_\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.ps1\"),\n\u001b[35m\u001b[Kbuild.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K74\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        \"assets/completions/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.zsh.in\",\n\u001b[35m\u001b[Kbuild.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K75\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        out_dir.join(\"assets/completions/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.zsh\"),\n\u001b[35m\u001b[Kbuild.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K89\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K// const BIN_NAME: &str = \"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\";\n\u001b[35m\u001b[K.git/info/refs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K21\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kb41fb0df6cf831081754c27a4c33227c166eee69\trefs/heads/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-0.16-updates\n\u001b[35m\u001b[K.git/info/refs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K22\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kb5a40d0866e6a190fbee095ac104fdc6ec168d0a\trefs/heads/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-0.18.2-release\n\u001b[35m\u001b[K.git/info/refs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K23\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kfa0d448cd3e652ffd3c5caa4caa4bdbe2973241c\trefs/heads/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-config-file\n\u001b[35m\u001b[K.git/info/refs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K24\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K27516c6f26dc1319dc2516e7caf1aafbe8d30aa0\trefs/heads/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-diagnostic-option\n\u001b[35m\u001b[K.git/info/refs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K25\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kcd501edcbded4dc344e0a0478472b0a4819c2251\trefs/heads/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-diff\n\u001b[35m\u001b[K.git/info/refs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K26\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kd77742b2e425cd76e2ca90a75efba4205e280859\trefs/heads/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-diff-fixes\n\u001b[35m\u001b[K.git/info/refs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K215\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kf1f8807a38052c8138c6f8d1b3bf125e30588712\trefs/remotes/origin/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-v0.18.3-candidate\n\u001b[35m\u001b[K.git/FETCH_HEAD\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K619cf6e6d6641dbb913dddd56907a54c6a9f6ce6\t\tbranch 'master' of https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[K.git/FETCH_HEAD\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K2\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K8244eb8ef88cc1b64d27991d6a5c7c69586b8a13\tnot-for-merge\tbranch 'ci-experiment' of https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[K.git/FETCH_HEAD\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K3\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K271842d87c816cb80dc0a1c48eefee99c9439db6\tnot-for-merge\tbranch 'create_highlighted_versions-wrong-path-repro' of https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[K.git/FETCH_HEAD\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K4\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kc42ec074ea6accdc38b8d9278bc3810343e2d1a3\tnot-for-merge\tbranch 'dependabot/submodules/assets/syntaxes/02_Extra/PowerShell-742f0b5' of https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[K.git/FETCH_HEAD\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K5\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kfb9c30b1f7ff648d8aa8fb35a8ff669513c8e91f\tnot-for-merge\tbranch 'dependabot/submodules/assets/syntaxes/02_Extra/SCSS_Sass-d3d9404' of https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[K.git/FETCH_HEAD\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K6\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K179d905bb92eee7272cf6fbb38db88f9294df94a\tnot-for-merge\tbranch 'dependabot/submodules/assets/syntaxes/02_Extra/TypeScript-ba45efd' of https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[K.git/FETCH_HEAD\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K7\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kb146958ecbb8c8c926159509ca7fb32a8573f897\tnot-for-merge\tbranch 'release-v0.18.3' of https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[K.git/logs/HEAD\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K14\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Ka946f3ae23e7d6d9aa6361c034e9b62859b4dbff e92e13cd4332196617df7a07bc6c55d1fd4834bb David Peter <mail@david-peter.de> 1631038809 +0200\trebase (continue) (pick): Use \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CONFIG_DIR and \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CACHE_PATH\n\u001b[35m\u001b[K.git/modules/assets/themes/Coldark/FETCH_HEAD\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Ke44750b2a9629dd12d8ed3ad9fd50c77232170b9\tnot-for-merge\tbranch 'master' of https://github.com/ArmandPhilippot/coldark-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[K.git/modules/assets/themes/Coldark/logs/refs/heads/master\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K0000000000000000000000000000000000000000 b4a1c74d8d5bdd136ec530e5905b810272472545 sharkdp <davidpeter@web.de> 1603543180 +0200\tclone: from https://github.com/ArmandPhilippot/coldark-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/modules/assets/themes/Coldark/logs/refs/remotes/origin/HEAD\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K0000000000000000000000000000000000000000 b4a1c74d8d5bdd136ec530e5905b810272472545 sharkdp <davidpeter@web.de> 1603543180 +0200\tclone: from https://github.com/ArmandPhilippot/coldark-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/modules/assets/themes/Coldark/logs/HEAD\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K0000000000000000000000000000000000000000 b4a1c74d8d5bdd136ec530e5905b810272472545 sharkdp <davidpeter@web.de> 1603543180 +0200\tclone: from https://github.com/ArmandPhilippot/coldark-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/modules/assets/themes/Coldark/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K8\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\turl = https://github.com/ArmandPhilippot/coldark-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/modules/assets/themes/gruvbox/FETCH_HEAD\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K64c47250e54298b91e2cf8d401320009aba9f991\tnot-for-merge\tbranch '\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-source' of https://github.com/subnut/gruvbox-tmTheme\n\u001b[35m\u001b[K.git/packed-refs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K22\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kb41fb0df6cf831081754c27a4c33227c166eee69 refs/heads/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-0.16-updates\n\u001b[35m\u001b[K.git/packed-refs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K23\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kb5a40d0866e6a190fbee095ac104fdc6ec168d0a refs/heads/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-0.18.2-release\n\u001b[35m\u001b[K.git/packed-refs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K24\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kfa0d448cd3e652ffd3c5caa4caa4bdbe2973241c refs/heads/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-config-file\n\u001b[35m\u001b[K.git/packed-refs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K25\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K27516c6f26dc1319dc2516e7caf1aafbe8d30aa0 refs/heads/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-diagnostic-option\n\u001b[35m\u001b[K.git/packed-refs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K26\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kcd501edcbded4dc344e0a0478472b0a4819c2251 refs/heads/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-diff\n\u001b[35m\u001b[K.git/packed-refs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K27\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kd77742b2e425cd76e2ca90a75efba4205e280859 refs/heads/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-diff-fixes\n\u001b[35m\u001b[K.git/packed-refs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K216\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kf1f8807a38052c8138c6f8d1b3bf125e30588712 refs/remotes/origin/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-v0.18.3-candidate\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K7\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\turl = https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K13\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tslug = sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K143\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[branch \"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-config-file\"]\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K145\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tmerge = refs/heads/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-config-file\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K176\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[branch \"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-diff\"]\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K178\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tmerge = refs/heads/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-diff\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K228\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:lavifb/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K231\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\turl = https://github.com/lavifb/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K234\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:majecty/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K237\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\turl = https://github.com/majecty/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K246\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:reidwagner/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K315\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:hrlmartins/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K369\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:fvictorio/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K378\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:eth-p/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K387\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:Kogia-sima/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K426\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:neuronull/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K429\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:jmick414/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K435\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:dtolnay/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K441\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:eth-p/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K444\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:neuronull/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K482\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[branch \"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-diff-fixes\"]\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K484\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tmerge = refs/heads/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-diff-fixes\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K486\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:lzutao/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K507\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:eth-p/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K510\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:eth-p/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K513\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:kopecs/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K516\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:eth-p/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K540\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:rxt1077/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K558\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:alexnovak/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K561\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:guidocella/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K564\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:gsomix/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K567\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:caioalonso/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K579\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:mk12/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K585\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:kjmph/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K591\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:Kienyew/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K603\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:alexanderkarlis/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K609\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:ahmedelgabri/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K615\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:Kienyew/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K618\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:eth-p/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K620\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[branch \"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-0.16-updates\"]\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K622\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tmerge = refs/heads/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-0.16-updates\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K624\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:henil/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K627\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:AkshatGadhwal/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K633\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:loganintech/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K639\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:mzegar/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K642\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:AkshatGadhwal/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K645\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:AkshatGadhwal/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K651\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:jacobmischka/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K657\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\turl = https://github.com/forkeith/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K660\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:ArmandPhilippot/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K664\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\turl = https://github.com/ArmandPhilippot/coldark-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K666\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:adrian-rivera/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K669\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:eth-p/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K681\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:MarcoIeni/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K690\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:Enselic/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K696\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:stku1985/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K699\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:mk12/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K702\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:j0hnmeow/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K708\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:Enselic/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K713\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[branch \"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-diagnostic-option\"]\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K715\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tmerge = refs/heads/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-diagnostic-option\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K717\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\turl = https://github.com/niklasmohrin/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K723\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:paulsmith/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K735\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:Enselic/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K762\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:Enselic/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K771\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:brightly-salty/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K774\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:eth-p/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K804\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:matklad/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K827\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[branch \"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-0.18.2-release\"]\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K829\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tmerge = refs/heads/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-0.18.2-release\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K831\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:Enselic/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K834\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:steffahn/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K837\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:SarveshMD/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K840\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:Enselic/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K852\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:Enselic/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K861\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:bojan88/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K870\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:Enselic/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[K.git/config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K882\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tremote = git@github.com:Enselic/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.git\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K6\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- `$\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CONFIG_DIR` is now a recognized environment variable. It has precedence over `$XDG_CONFIG_HOME`, see #1727 (@billrisher)\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K25\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- Include git hash in `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K -V` and `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --version` output if present. See #1921 (@Enselic)\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K42\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K## `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` as a library\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K45\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- Remove `HighlightingAssets::from_files` and `HighlightingAssets::save_to_cache`. Instead of calling the former and then the latter you now make a single call to `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K::assets::build`. See #1802 (@Enselic)\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K67\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- Fix for a security vulnerability on Windows. Prior to this release, `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` would execute programs called `less`/`less.exe` from the current working directory (instead of the one from `PATH`) with priority. An attacker might be able to use this by placing a malicious program in a shared directory where the user would execute `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`. `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` users on Windows are advised to upgrade to this version. See #1724 and #1472 (@Ry0taK).\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K92\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- The `LESS` environment variable is now included in `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --diagnostic`, see #1589 (@Enselic)\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K98\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- Replaced \"Advanced CSV\" with a custom CSV syntax definition written especially for `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`; see #1574 (@keith-hall)\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K112\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- Use a pager when `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --list-languages` is called, see #1394 (@stku1985)\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K117\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- Only print themes hint in interactive mode (`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --list-themes`), see #1439 (@rsteube)\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K122\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- If `PAGER` (but not `\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER` or `--pager`) is `more` or `most`, silently use `less` instead to ensure support for colors, see #1063 (@Enselic)\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K123\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- If `PAGER` is `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`, silently use `less` to prevent recursion. For `\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER` or `--pager`, exit with error, see #1413 (@Enselic)\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K125\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- `\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CONFIG_PATH` ignored by `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` if non-existent, see #1550 (@sharkdp)\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K147\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K## `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` as a library\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K160\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- Running `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` without arguments fails (\"output file is also an input\"), see #1396\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K168\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- Pass `-S` (\"chop long lines\") to `less` if `--wrap=never` is set in `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`, see #1255 (@gahag)\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K173\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- Throw an error when `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` is being used as `pager`, see #1343 (@adrian-rivera)\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K225\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K## `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` as a library\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K246\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- Cannot run `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` with relative paths, see #1022\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K247\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K mishighlights Users that start with digits in SSH config, see #984\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K268\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K now prints an error if an invalid syntax is specified via `-l` or `--map-syntax`, see #1004 (@eth-p)\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K270\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K## `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` as a library\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K276\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- Compilation problems with `onig_sys` on various platforms have been resolved by upgrading to `syntect 4.2`, which includes a new `onig` version that allows to build `onig_sys` without the `bindgen` dependency. This removes the need for `libclang(-dev)` to be installed to compile `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`. Package maintainers might want to remove `clang` as a build dependency. See #650 for more details.\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K284\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  Users suffering from #865 (\"no color for \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K in ssh from a Windows client\") can use the `ansi-dark` and `ansi-light` themes from now on.\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K303\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- Performance improvements when using custom caches (via `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K cache --build`): the `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` startup time should now be twice as fast (@lzutao).\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K309\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K## `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` as a library\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K320\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  in the header. This is useful when piping input into `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`. See #654 and #892 (@neuronull).\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K336\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- When saving/reading user-provided syntaxes or themes, `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` will now maintain a\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K337\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  `metadata.yaml` file which includes information about the `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` version which was\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K342\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K## `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` as a library\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K346\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  API is still available (basically everything that is not in the root `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K349\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  Note that this should still be considered a \"beta\" release of `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`-as-a-library.\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K354\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  everything required by `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` the application. When depending on \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K as a library, downstream\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K358\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K = { version = \"0.14\", default-features = false }\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K371\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K## `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` as a library\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K373\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KBeginning with this release, `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` can be used as a library (#423).\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K378\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- Second attempt, complete restructuring of the `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` crate, see #679 (@DrSensor)\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K383\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KThat being said, you can start using it! See the example programs in [`examples/`](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/tree/master/examples).\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K385\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KYou can see the API documentation here: https://docs.rs/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K390\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  users need to update their \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K config files (`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --config-file`), if they have any `--map-syntax` settings\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K407\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- `\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CACHE_PATH` can be used to place cached `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` assets in a non-standard path, see #829 (@neuronull)\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K413\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- '\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K cache' still takes precedence over existing files, see #666 (@sharkdp)\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K425\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- Enabled LTO, making `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` about 10% faster, see #719 (@bolinfest, @sharkdp)\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K426\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- Suggestions non how to configure `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` for MacOS dark mode, see README (@jerguslejko)\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K427\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- Extended [\"Integration with other tools\"](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K#integration-with-other-tools) section (@eth-p)\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K428\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- Updated [instrutions on how to use `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` as a `man`-pager](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K#man), see #652, see #667 (@sharkdp)\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K456\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` is now in the official Ubuntu and Debian repositories, see #323 and #705 (@MarcoFalke)\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K457\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` can now be installed via MacPorts, see #675 (@bn3t)\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K476\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- Binary file content can now be viewed with `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K -A`, see #623, #640 (@pjsier and @sharkdp)\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K477\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` can now be used as a man pager. Take a look at the README and #523 for more details.\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K506\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` is now in the official Gentoo repositories, see #588 (@toku-sa-n)\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K507\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` is now in the official Alpine Linux repositories, see #586 (@5paceToast)\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K508\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` is in the official Fedora repositories, see #610 (@ignatenkobrain)\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K534\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- New [\"Integration with other tools\"](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K#integration-with-other-tools) section in the README.\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K544\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` is now available on Chocolatey, see #541 (@rasmuskriest)\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K554\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- **Change the default configuration directory on macOS** to `~/.config/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`, see #442 (@lavifb). If you are on macOS, you need to copy your configuration directory from the previous place (`~/Library/Preferences/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`) to the new place (`~/.config/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`).\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K559\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- Rename `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K cache --init` to `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K cache --build`, see #498\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K560\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- Move the `--config-dir` and `--cache-dir` options from `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K cache` to `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` and hide them from the help text.\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K596\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- Added `\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CONFIG_PATH` environment variable to set a non-default path for `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`s configuration file, see #375 (@deg4uss3r)\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K618\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- Avoid endless recursion when `PAGER=\"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\"`, see #383 (@rodorgas)\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K622\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` is now available on openSUSE, see #405 (@dmarcoux)\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K651\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  The configuration file path can be accessed via `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --config-file`. On Linux,\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K652\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  it is stored in `~/.config/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/config`.\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K654\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- Support for the `\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_OPTS` environment variable with the same format as specified\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K664\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --map-syntax .config:json ...\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K667\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  The option can be use multiple times. Note that you can easily make these mappings permanent by using \u001b[1;33m\u001b[Kbat\u001b[m\u001b[Ks new configuration file.\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K671\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- Support pager command-line arguments in `PAGER` and `\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER`, see #352 (@Foxboron)\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K689\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- \u001b[1;33m\u001b[KBat\u001b[m\u001b[K Panics on Haskell Source Code, see #314\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K695\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- Updated documentation on how to configure `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`s pager\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K703\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` is now available via [Termux](https://termux.com/), see #341 (@fornwall)\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K705\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` is now available via [nix](https://nixos.org/nix), see #344 (@mgttlinger)\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K707\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` is now available via [Docker](https://hub.docker.com/r/danlynn/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/), see #331 (@danlynn)\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K717\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- \u001b[1;33m\u001b[KBat\u001b[m\u001b[K Panics on Haskell Source Code, see #314\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K730\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  `--tabs` command-line option or the `\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_TABS` environment variable. The\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K733\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- Added support for the `\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_STYLE` environment variable, see #208 (@ms2300)\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K764\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- Added README section about \"`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` on Windows\" (@Aankhen)\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K772\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- Fixed panic when running `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --list-languages | head`, see #232 (@mchlrhw)\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K786\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- Major refactorings, enabling some progress on #150. In non-interactive mode, `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` will now copy input bytes 1:1.\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K792\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- New themes in `$\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CONFIG_DIR/themes` are now loaded *in addition* to\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K798\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K* Using `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K cache --init` leads to duplicated syntaxes, see #206\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K811\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- The syntax highlighting theme can now be controlled by the `\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_THEME` environment variable, see [README](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K#highlighting-theme) and #177 (@mandx)\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K812\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- The `PAGER` and `\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER` environment variables can be used to control the pager that `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` uses, see #158 and the [new README section](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K#using-a-different-pager)\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K818\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- The customization of syntax sets and theme sets is now separated. Syntax definitions are now loaded *in addition* to the ones that are stored in the `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` binary by default. Please refer to these new sections in the README: [Adding new syntaxes](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K#adding-new-syntaxes--language-definitions), [Adding new themes](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K#adding-new-themes), also see #172\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K830\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` is now in the official [Arch package repositories](https://www.archlinux.org/packages/community/x86_64/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/).\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K839\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- Fix problem with `cargo test` when `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` is not checked out in a Git repository, see #161\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K874\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- [Comparison with alternative projects](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/blob/master/doc/alternatives.md).\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K875\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- New \"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\" logo in the README, see #119 (@jraulhernandezi)\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K895\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K cache`. See `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K cache -h` for all available commands.\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K900\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K* Process substitution can now be used with \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K (`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K <(echo a) <(echo b)`), see #80\n\u001b[35m\u001b[KCHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K912\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- Added a new statically linked version of \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K (`..-musl-..`)\n\u001b[35m\u001b[KCONTRIBUTING.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K3\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KThank you for considering to contribute to `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`!\n\u001b[35m\u001b[KCONTRIBUTING.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K9\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KIf your contribution changes the behavior of `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` (as opposed to a typo-fix\n\u001b[35m\u001b[KCONTRIBUTING.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K12\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Ktherefore helps to get your changes into a new `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` release faster.\n\u001b[35m\u001b[KCONTRIBUTING.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K28\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KPlease check out the [Development](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K#development)\n\u001b[35m\u001b[KCONTRIBUTING.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K35\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[feature request ticket](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/issues/new?assignees=&labels=feature-request&template=feature_request.md)\n\u001b[35m\u001b[KCONTRIBUTING.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K42\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kthe [Customization](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K#customization) section\n\u001b[35m\u001b[KCONTRIBUTING.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K47\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[documentation](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/blob/master/doc/assets.md)\n\u001b[35m\u001b[KCargo.toml\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K5\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Khomepage = \"https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\"\n\u001b[35m\u001b[KCargo.toml\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K7\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kname = \"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\"\n\u001b[35m\u001b[KCargo.toml\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K8\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Krepository = \"https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\"\n\u001b[35m\u001b[KCargo.toml\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K16\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K# Feature required for \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K the application. Should be disabled when depending on\n\u001b[35m\u001b[KCargo.toml\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K17\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K# \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K as a library.\n\u001b[35m\u001b[KCargo.toml\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K40\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K# You need to use one of these if you depend on \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K as a library:\n\u001b[35m\u001b[Kdoc/fzf-preview.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K6\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K \\\n\u001b[35m\u001b[Kdoc/preview.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K47\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --color always \\\n\u001b[35m\u001b[Kdoc/assets.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K3\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KShould you find that a particular syntax is not available within `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` and think it should be included in `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` by default, you can follow the instructions outlined below.\n\u001b[35m\u001b[Kdoc/assets.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K5\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` uses the excellent [syntect](https://github.com/trishume/syntect) library to highlight source\n\u001b[35m\u001b[Kdoc/assets.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K20\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K3. Run the `assets/create.sh` script. It calls `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K cache --build` to parse all available\n\u001b[35m\u001b[Kdoc/assets.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K23\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K4. Re-compile `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`. At compilation time, the `syntaxes.bin` file will be stored inside the\n\u001b[35m\u001b[Kdoc/assets.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K24\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K   `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` binary.\n\u001b[35m\u001b[Kdoc/assets.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K26\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K5. Use `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --list-languages` to check if the new languages are available.\n\u001b[35m\u001b[Kdoc/assets.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K31\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K   file. A new binary cache file will be created once before every new release of `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`. This\n\u001b[35m\u001b[Kdoc/assets.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K36\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` has a set of syntax highlighting regression tests in `tests/syntax-tests`. The main idea is\n\u001b[35m\u001b[Kdoc/assets.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K38\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kfor some language is suddenly not working anymore or (2) `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` suddenly crashes for some input (due\n\u001b[35m\u001b[Kdoc/assets.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K43\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K1. Make sure that you are running the **latest version of `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`** and that `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` is available on\n\u001b[35m\u001b[Kdoc/assets.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K45\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K   your version of `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` already has the new syntax builtin.\n\u001b[35m\u001b[Kdoc/assets.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K50\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K   be `test.rb` (adapt extension) but can also be adapted if that is necessary in order for `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` to\n\u001b[35m\u001b[Kdoc/assets.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K53\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K   under the respective license and that the license is compatible with `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`s license. If it\n\u001b[35m\u001b[Kdoc/assets.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K62\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K6. Use `cat` or `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --language=txt` to display the content of this file and make sure that the\n\u001b[35m\u001b[Kdoc/assets.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K70\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kthemes (`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K cache --clear`).\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K2\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  <img src=\"logo-header.svg\" alt=\"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K - a cat clone with wings\"><br>\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K3\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  <a href=\"https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/actions?query=workflow%3ACICD\"><img src=\"https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/workflows/CICD/badge.svg\" alt=\"Build Status\"></a>\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K4\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  <img src=\"https://img.shields.io/crates/l/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.svg\" alt=\"license\">\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K5\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  <a href=\"https://crates.io/crates/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\"><img src=\"https://img.shields.io/crates/v/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.svg?colorB=319e8c\" alt=\"Version info\"></a><br>\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K16\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  [<a href=\"https://github.com/chinanf-boy/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-zh\">中文</a>]\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K24\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` は多くのプログラミング言語やマークアップ言語の\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K31\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` は `git` とも連携しており、差分を表現する記号が表示されます\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K45\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K出力が1つの画面に対して大きすぎる場合、`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` は自身の出力をページャー(例えば `less`) にパイプで繋げます。\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K50\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` は非対話型のターミナルを検出すると(すなわち他のプロセスにパイプしたりファイル出力していると)、\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K51\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` は `cat` の完全互換として振る舞い、\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K59\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K> \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K README.md\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K65\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K> \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K src/*.rs\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K73\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K> curl -s https://sh.rustup.rs | \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K79\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K> yaml2json .travis.yml | json_pp | \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K -l json\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K84\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K> \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K -A /etc/hosts\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K87\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`cat` の代わりに `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` を使用する際の例:\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K90\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K > note.md  # quickly create a new file\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K92\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K header.md content.md footer.md > document.md\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K94\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K -n main.rs  # show line numbers (only)\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K96\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K f - g  # output 'f', then stdin, then 'g'.\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K103\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[`fzf`](https://github.com/junegunn/fzf) のプレビューウィンドウに `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` を使用できます。\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K104\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kその場合、`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` の `--color=always` オプションを用いてカラー出力を強制しなければなりません。\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K107\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kfzf --preview '\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --color=always --style=numbers --line-range=:500 {}'\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K114\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`find` の `-exec` オプションを使用して、`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` ですべての検索結果をプレビューできます:\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K116\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kfind … -exec \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K {} +\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K119\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[`fd`](https://github.com/sharkdp/fd) を使用している場合は、`-X` /`-exec-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch` オプションを使用して同じことを行うことができます:\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K121\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kfd … -X \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K126\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kgrep`](https://github.com/eth-p/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-extras/blob/master/doc/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kgrep.md) では、[`ripgrep`](https://github.com/BurntSushi/ripgrep) 検索結果のプリンターとして `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` を使用できます。\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K129\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kgrep needle src/\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K134\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` を `tail -f` と組み合わせて、構文強調表示を使用して特定のファイルを継続的に監視できます。\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K136\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Ktail -f /var/log/pacman.log | \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --paging=never -l log\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K142\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` を `git show` と組み合わせて、\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K145\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kgit show v0.6.0:src/main.rs | \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K -l rs\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K152\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` の出力の行番号と Git 変更マーカーにより、ファイルの内容をコピーするのが難しくなる場合があります。\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K153\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kこれを防ぐには、`-p` / `-plain` オプションを使用して `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` を呼び出すか、\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K156\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K main.cpp | xclip\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K158\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` は出力がリダイレクトされていることを検出し、プレーンファイルの内容を出力します。\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K162\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` は `MANPAGER` 環境変数を設定することにより、\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K166\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kexport MANPAGER=\"sh -c 'col -bx | \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K -l man -p'\"\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K173\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kこれを新しいコマンドにバンドルしたい場合は [`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kman`](https://github.com/eth-p/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-extras/blob/master/doc/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kman.md) も使用できます。\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K179\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[`pretty\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`](https://github.com/eth-p/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-extras/blob/master/doc/pretty\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.md) スクリプトは、コードをフォーマットし、`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` で印刷するラッパーです。\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K184\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[![Packaging status](https://repology.org/badge/vertical-allrepos/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.svg)](https://repology.org/project/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/versions)\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K189\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KUbuntu Eoan 19.10 または Debian 不安定版 sid 以降の [the Ubuntu `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` package](https://packages.ubuntu.com/eoan/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K) または [the Debian `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` package](https://packages.debian.org/sid/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K) からインストールできます:\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K192\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kapt install \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K195\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`apt` を使用して `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` をインストールした場合、実行可能ファイルの名前が `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` ではなく `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kcat` になることがあります([他のパッケージとの名前衝突のため](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/issues/982))。`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K -> \u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kcat` のシンボリックリンクまたはエイリアスを設定することで、実行可能ファイル名が異なることによる問題の発生を防ぎ、他のディストリビューションと一貫性を保てます。\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K199\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kln -s /usr/bin/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kcat ~/.local/bin/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K205\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kの最新リリースを実行する場合、または Ubuntu/Debian の古いバージョンを使用している場合は、[release page](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/releases) から最新の `.deb` パッケージをダウンロードし、\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K208\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Ksudo dpkg -i \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_0.18.3_amd64.deb  # adapt version number and architecture\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K214\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K公式のソースから [`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` package](https://pkgs.alpinelinux.org/packages?name=\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K) をインストールできます:\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K217\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kapk add \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K222\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[Arch Linuxの公式リソース](https://www.archlinux.org/packages/community/x86_64/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/)\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K226\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kpacman -S \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K231\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K公式の [Fedora Modular](https://docs.fedoraproject.org/en-US/modularity/using-modules/) リポジトリから [the `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` package](https://koji.fedoraproject.org/koji/packageinfo?packageID=27506) をインストールできます。\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K234\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kdnf install \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K240\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[the `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` package](https://packages.gentoo.org/packages/sys-apps/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K) をインストールできます。\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K243\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kemerge sys-apps/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K248\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kxbps-install経由で `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` をインストールできます。\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K250\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kxbps-install -S \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K255\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kpkg を使用してプリコンパイルされた [`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` package](https://www.freshports.org/textproc/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K) をインストールできます:\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K258\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kpkg install \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K264\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kcd /usr/ports/textproc/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K270\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` を [nix package manager](https://nixos.org/nix) 経由でインストールすることができます:\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K273\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Knix-env -i \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K278\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` をzypperでインストールすることができます:\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K281\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kzypper install \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K286\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[Homebrew](http://braumeister.org/formula/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K)で `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` をインストールできます:\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K289\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kbrew install \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K292\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kまたは [MacPorts](https://ports.macports.org/port/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/summary) で `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` をインストールします:\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K295\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kport install \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K300\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KWindowsに\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kをインストールするいくつかのオプションがあります。\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K301\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kをインストールしたら [Windowsでの\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kの使用](#windows-での-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-の利用) セクションをご覧ください。\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K305\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[Chocolatey](https://chocolatey.org/packages/\u001b[1;33m\u001b[KBat\u001b[m\u001b[K) から `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` をインストールできます:\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K307\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kchoco install \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K312\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[scoop](https://scoop.sh/) から `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` をインストールできます:\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K314\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kscoop install \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K321\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[リリースページ](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/releases) からビルド済みのバイナリをダウンロードできます。\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K327\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kコンテナ内で `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` を使いたい方のために [Docker image](https://hub.docker.com/r/danlynn/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/) が用意されています:\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K329\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kdocker pull danlynn/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K330\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kalias \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K='docker run -it --rm -e \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_THEME -e \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_STYLE -e \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_TABS -v \"$(pwd):/myapp\" danlynn/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K'\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K339\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kansible-galaxy install aeimer.install_\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K344\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K# Playbook to install \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K347\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    - aeimer.install_\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K350\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- [Ansible Galaxy](https://galaxy.ansible.com/aeimer/install_\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K)\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K351\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- [GitHub](https://github.com/aeimer/ansible-install-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K)\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K364\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K多くの異なるアーキテクチャのためのプレビルドバージョンを[リリースページ](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/releases)からチェックしてみてください。静的にリンクされている多くのバイナリも利用できます: ファイル名に `musl` を含むアーカイブを探してみてください。\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K369\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` をソースからビルドしたいならば、Rust 1.36 以上の環境が必要です。\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K373\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kcargo install --locked \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K382\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --list-themes` を使うと現在利用可能なシンタックスハイライトのテーマを入手できます。\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K384\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`--theme=TwoDark` オプションをつけるか `\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_THEME` という環境変数に\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K385\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`TwoDark` を代入する必要があります。 シェルの起動ファイルに `export \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_THEME=\"TwoDark\"`\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K386\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kと定義すればその設定が変わることはないでしょう。あるいは、 `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` の\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K392\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --list-themes | fzf --preview=\"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --theme={} --color=always /path/to/file\"\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K395\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` はデフォルトだと黒い背景色のターミナルに適しています。\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K402\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`--style` を使うことで `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` の表示の見た目を変更することができます。\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K405\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K環境変数に `\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_STYLE` を定義するとこれらの設定を永続的に使用することができます。\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K410\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` はシンタックスハイライトのための [`syntect`](https://github.com/trishume/syntect/)\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K418\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kmkdir -p \"$(\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --config-dir)/syntaxes\"\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K419\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kcd \"$(\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --config-dir)/syntaxes\"\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K429\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K cache --build\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K432\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K最後に `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --list-languages` と入力すると新しい言語が利用可能かどうかチェックします。\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K437\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K cache --clear\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K446\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kmkdir -p \"$(\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --config-dir)/themes\"\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K447\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kcd \"$(\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --config-dir)/themes\"\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K453\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K cache --build\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K456\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K最後に、 `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --list-themes` で新しいテーマが利用可能かチェックします\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K460\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` は環境変数 `PAGER` に使用するページャーを明記します。\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K463\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kまたは、`PAGER` を上書きする環境変数として `\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER` を定義することも可能です。\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K466\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`PAGER`/`\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER` 環境変数を定義してください:\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K469\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kexport \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER=\"less -RF\"\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K472\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K環境変数を利用する代わりに、 `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` の [設定ファイル](#設定ファイル) を使用して設定も可能です（`--pager` オプション）\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K475\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` はページャーの以下のコマンドラインオプション を受け付けるでしょう:\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K491\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KmacOSでダークモード機能を使用する場合、OSテーマに基づいて異なるテーマを使用するように `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` を構成することができます。\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K496\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kalias cat=\"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --theme=\\$(defaults read -globalDomain AppleInterfaceStyle &> /dev/null && echo default || echo GitHub)\"\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K501\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` は設定ファイルでカスタマイズすることが可能です。ファイルの場所はOSに依存します。\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K504\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --config-file\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K507\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kまたは、`\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CONFIG_PATH` 環境変数を使用して、`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` が\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K510\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kexport \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CONFIG_PATH=\"/path/to/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.conf\"\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K515\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kこの設定ファイルはコマンドライン引数の単純なリストです。 `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --help` を利用すると、利用可能なオプションとその値を閲覧することができます。さらに、`#` でコメント文を加えることができます。\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K535\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K## Windows での `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` の利用\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K537\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KWindows 上で `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` はほとんど動作しますが、いくつかの機能は設定を必要をする場合があります。\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K555\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER` に空文字を設定することでページングを完全に無効にできます。\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K559\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KWindows上の `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` は Cygwin のunix風のpath(`/cygdrive/*`)をネイティブサポートしていません。絶対的なcygwinパスを引数として受けたときに、 `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` は以下のエラーを返すでしょう: `The system cannot find the path specified. (os error 3)`\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K564\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K() {\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K573\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    command \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K \"${args[@]}\"\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K581\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` はターミナルがトゥルーカラーをサポートしている/していないに関係なくサポートします。\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K588\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`24bit` のどちらかを代入してください。さもなければ、`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` はどの色を使うのか決定することができません。または、24-bit エスケープシーケンスがサポートされません\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K593\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K異なるテーマを試してみてください（`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --list-themes` でテーマを閲覧できます）。\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K598\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` は UTF-16 と同様に UTF-8 をネイティブにサポートします。\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K603\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kiconv -f ISO-8859-1 -t UTF-8 my-file.php | \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K605\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K注: `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` が構文を自動検出できない場合は\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K612\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kgit clone --recursive https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K615\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kcd \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K624\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K# Build a \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K binary with modified syntaxes and themes\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K636\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` は以下の目標を達成しようと試みています:\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K647\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KCopyright (c) 2018-2021 [\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-developers](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K).\n\u001b[35m\u001b[Kdoc/README-ja.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K649\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` は MIT License 及び Apache License 2.0 の両方の条件の下で配布されています。\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K2\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  <img src=\"logo-header.svg\" alt=\"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K - a cat clone with wings\"><br>\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K3\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  <a href=\"https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/actions?query=workflow%3ACICD\"><img src=\"https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/workflows/CICD/badge.svg\" alt=\"Build Status\"></a>\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K4\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  <img src=\"https://img.shields.io/crates/l/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.svg\" alt=\"license\">\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K5\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  <a href=\"https://crates.io/crates/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\"><img src=\"https://img.shields.io/crates/v/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.svg?colorB=319e8c\" alt=\"Version info\"></a><br>\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K16\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  [<a href=\"https://github.com/chinanf-boy/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-zh\">中文</a>]\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K24\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`은 다양한 프로그래밍 및 마크업 언어의 문법 강조(syntax highlighting) 기능을\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K31\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`은 `git`을 통해 인덱스와 함께 변경분을 표시합니다\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K44\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`은 기본적으로 한 화면에 비해 출력이 큰 경우 `less`와 같은 페이저(pager)로\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K46\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K만약 `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`을 언제나 `cat`처럼 작동하게 하려면 (출력을 페이지하지 않기),\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K48\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K셸(shell) 설정에서 `cat`을 `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`의 alias로 사용하려면,\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K49\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`alias cat='\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --paging=never'`를 써서 기본 행동을 유지할 수 있습니다.\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K53\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K페이저(pager)를 사용하더라도 `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`은 파일들을 연결(concatenate)할 수 있습니다\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K55\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`이 비대화형(non-interactive) 터미널(예를 들어, 다른 프로세스나 파일에\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K56\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K연결(pipe)한 경우)을 감지하면, `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`은 `--pager` 옵션의 값과 상관없이 `cat`과\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K64\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K> \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K README.md\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K70\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K> \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K src/*.rs\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K78\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K> curl -s https://sh.rustup.rs | \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K84\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K> yaml2json .travis.yml | json_pp | \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K -l json\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K89\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K> \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K -A /etc/hosts\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K95\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K > note.md  # quickly create a new file\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K97\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K header.md content.md footer.md > document.md\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K99\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K -n main.rs  # show line numbers (only)\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K101\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K f - g  # output 'f', then stdin, then 'g'.\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K108\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`을 [`fzf`](https://github.com/junegunn/fzf)의 프리뷰로 쓸 수 있습니다.\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K109\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K이를 위해서는 `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`의 `--color=always` 옵션으로 항상 컬러 출력이 나오게 해야\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K113\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kfzf --preview '\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --color=always --style=numbers --line-range=:500 {}'\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K120\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`find`의 `-exec` 옵션을 사용하여 모든 검색 결과를 `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`로 미리 볼 수 있습니다:\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K122\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kfind … -exec \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K {} +\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K125\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[`fd`](https://github.com/sharkdp/fd)를 사용하는 경우, `-X`/`--exec-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch`\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K128\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kfd … -X \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K133\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kgrep`](https://github.com/eth-p/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-extras/blob/master/doc/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kgrep.md)을\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K134\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K통해 `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`로 [`ripgrep`](https://github.com/BurntSushi/ripgrep)의 검색 결과를\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K138\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kgrep needle src/\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K143\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`와 `tail -f`를 함께 사용하여 주어진 파일을 문법 강조하며 지속적으로\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K146\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Ktail -f /var/log/pacman.log | \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --paging=never -l log\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K154\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`과 `git show`를 함께 사용하여 주어진 파일의 이전 버전을 올바른 문법 강조로\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K157\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kgit show v0.6.0:src/main.rs | \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K -l rs\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K162\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`과 `git diff`를 함께 사용하여 수정된 코드 주위의 줄들을 올바른 문법 강조로\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K165\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kdiff() {\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K166\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    git diff --name-only --diff-filter=d | xargs \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --diff\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K170\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-extras`](https://github.com/eth-p/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-extras)의 `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kdiff`를 확인해 보세요.\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K177\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` 출력에 줄 번호와 Git 수정 내역이 포함되어서 파일의 내용을 복사하기\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K179\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K이 경우에는 `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`의 `-p`/`--plain` 옵션을 사용하거나 간단히 `xclip`으로 출력을\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K182\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K main.cpp | xclip\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K184\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`는 출력이 우회되고 있다는 것을 감지하여 파일 내용 그대로를 출력합니다.\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K188\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`MANPAGER` 환경 변수 설정을 통해 `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`을 `man`의 컬러 페이저(pager)로 쓸 수\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K192\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kexport MANPAGER=\"sh -c 'col -bx | \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K -l man -p'\"\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K195\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K(Debian이나 Ubuntu를 사용한다면 `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`을 `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kcat`으로 치환하세요.)\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K200\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kman`](https://github.com/eth-p/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-extras/blob/master/doc/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kman.md)을 쓸\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K207\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[작동하지 않습니다](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/issues/1145).\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K211\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[`pretty\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`](https://github.com/eth-p/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-extras/blob/master/doc/pretty\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.md)\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K212\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K스크립트는 코드를 포맷하고 `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`으로 출력하는 래퍼(wrapper)입니다.\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K217\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[![Packaging status](https://repology.org/badge/vertical-allrepos/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-cat.svg)](https://repology.org/project/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-cat/versions)\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K222\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`은 [Ubuntu](https://packages.ubuntu.com/eoan/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K)와\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K223\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[Debian](https://packages.debian.org/sid/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K) 패키지 배포 과정에 도입되는 중이며,\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K225\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K현재 Debain에서는 불안정한 \"Sid\" 브랜치에서만 `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`이 제공됩니다.\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K230\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kapt install \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K233\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K**중요**: 만약 `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`을 이와 같이 설치한다면, ([다른 패키지와의 이름\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K234\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K충돌](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/issues/982)로 인하여) `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` 대신에\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K235\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kcat`이라는 이름의 실행 파일로 설치될 수 있음을 참고하세요.\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K236\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K이에 따른 문제들과 다른 배포판들과의 일관성을 위하여 `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K -> \u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kcat` symlink\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K240\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kln -s /usr/bin/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kcat ~/.local/bin/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K247\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`을 원한다면, [릴리즈 페이지](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/releases)에서\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K251\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Ksudo dpkg -i \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_0.18.3_amd64.deb  # adapt version number and architecture\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K257\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` 패키지](https://pkgs.alpinelinux.org/packages?name=\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K)를 설치할 수\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K261\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kapk add \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K267\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` 패키지](https://www.archlinux.org/packages/community/x86_64/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/)를\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K271\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kpacman -S \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K279\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` 패키지](https://koji.fedoraproject.org/koji/packageinfo?packageID=27506)를\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K283\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kdnf install \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K288\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kdev-kit을 통해 [`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` 패키지](https://github.com/funtoo/dev-kit/tree/1.4-release/sys-apps/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K)를 설치할 수 있습니다:\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K291\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kemerge sys-apps/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K297\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` 패키지](https://packages.gentoo.org/packages/sys-apps/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K)를 설치할 수\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K301\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kemerge sys-apps/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K306\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kxbps-install을 이용해 `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`을 설치할 수 있습니다:\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K308\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kxbps-install -S \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K313\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kpkg를 이용해 `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`을 설치할 수 있습니다:\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K315\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kpkg install \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K321\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` 패키지](https://www.freshports.org/textproc/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K)를 설치할 수 있습니다:\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K324\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kpkg install \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K330\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kcd /usr/ports/textproc/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K336\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[nix package manager](https://nixos.org/nix)를 이용해 `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`을 설치할 수\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K340\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Knix-env -i \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K345\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kzypper를 이용해 `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`을 설치할 수 있습니다:\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K348\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kzypper install \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K355\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[문제](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/issues/1519)가 있을 수 있습니다.\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K360\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[macOS의 Homebrew](https://formulae.brew.sh/formula/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K) 또는\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K361\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[Linux의 Homebrew](https://formulae.brew.sh/formula-linux/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K)를 이용하여\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K362\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`을 설치할 수 있습니다.\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K365\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kbrew install \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K370\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[MacPorts](https://ports.macports.org/port/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/summary)를 이용하여 `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`을\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K374\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kport install \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K379\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KWindows에서 `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`을 설치할 수 있는 몇 가지 옵션들이 있습니다.\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K380\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K먼저 `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`을 설치한 후,\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K381\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[\"Windows에서 `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` 사용하기\"](#windows에서-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-사용하기) 섹션을 살펴보세요.\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K390\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[Chocolatey](https://chocolatey.org/packages/\u001b[1;33m\u001b[KBat\u001b[m\u001b[K)를 이용해 `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`을 설치할 수\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K393\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kchoco install \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K398\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[scoop](https://scoop.sh/)을 이용해 `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`을 설치할 수 있습니다:\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K400\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kscoop install \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K405\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[릴리즈 페이지](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/releases)에서 사전 빌드된\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K413\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[릴리즈 페이지](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/releases)에서 다양한 아키텍처를\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K419\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`의 소스를 빌드하기 위해서는, Rust 1.46 이상이 필요합니다.\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K423\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kcargo install --locked \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K435\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --list-themes`을 사용하여 사용 가능한 문법 강조 테마들의 목록을 확인할 수\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K437\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`TwoDark` 테마를 선택하려면, `--theme=TwoDark` 옵션과 함께 `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`을 사용하거나\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K438\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_THEME` 환경 변수를 `TwoDark`로 설정하세요.\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K439\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K셸 시작 파일에 `export \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_THEME=\"TwoDark\"` 를 정의해 영구적으로 설정할 수\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K441\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K이 밖에 `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`의 [설정 파일](#설정-파일)을 이용할 수 있습니다.\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K447\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --list-themes | fzf --preview=\"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --theme={} --color=always /path/to/file\"\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K450\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`은 기본적으로 어두운 배경에 적합합니다.\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K458\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`은 트루컬러 지원이 되더라도 항상\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K478\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- 만약 터미널 테마를 바꾼다면, 이미 화면 상의 `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`의 출력도 이에 맞추어\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K483\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`--style` 옵션을 이용하면 `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`의 출력 모양을 조절할 수 있습니다.\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K486\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_STYLE` 환경 변수를 정의하여 이러한 수정을 영구적으로 하거나 `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`의\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K491\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K만약 `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`에서 특정 문법이 지원되지 않을 경우, 다음의 절차를 통해 현재 `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K494\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`은 문법 강조를 위해 훌륭한\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K506\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  mkdir -p \"$(\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --config-dir)/syntaxes\"\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K507\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  cd \"$(\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --config-dir)/syntaxes\"\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K517\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K cache --build\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K520\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K3. 마지막으로, `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --list-languages`로 새로 추가한 언어가 사용 가능한지\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K526\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K cache --clear\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K529\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K4. 만약 특정 문법이 `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`에 기본적으로 포함되어 있어야 한다고 생각한다면, 방침과\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K531\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  주세요: [문법 요청하기](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/issues/new?labels=syntax-request&template=syntax_request.md).\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K539\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kmkdir -p \"$(\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --config-dir)/themes\"\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K540\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kcd \"$(\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --config-dir)/themes\"\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K546\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K cache --build\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K549\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K마지막으로 `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --list-themes`을 통해 새로 추가한 테마들이 사용 가능한지\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K559\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K(`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --list-languages`를 통해 개요를 확인하세요).\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K561\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K참고: 이 옵션은 커맨드 라인에 넘겨 주는 것보다는 `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`의 설정 파일에 넣는 것이\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K584\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`은 환경 변수 `PAGER`에 명시된 페이저를 사용합니다.\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K586\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K만약 다른 페이저를 사용하고 싶다면, `PAGER` 변수를 수정하거나 `\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER` 환경\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K589\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K만약 커맨드라인 인수들을 페이저에게 넘겨 주려면, `PAGER`/`\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER` 변수로\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K593\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kexport \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER=\"less -RF\"\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K596\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K환경 변수를 사용하는 대신, `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`의 [설정 파일](#설정-파일)로 페이저를 설정할\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K600\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K옵션이 지정되어 있지 않다면), `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`은 다음 옵션들을 페이저로 넘겨줍니다:\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K619\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`은 페이저에 의존하지 않고 탭을 4 스페이스로 확장합니다.\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K623\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K**참고**: (`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`의 `--pager` 인자 혹은 `less`의 `LESS` 환경 변수를 통해)\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K627\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`을 `--tabs=0`과 함께 호출하면 이를 오버라이드하여 페이저가 탭을 처리하게\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K632\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KmacOS에서 다크 모드를 사용하고 있다면, `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`가 OS 테마에 따라 다른 테마를\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K638\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kalias cat=\"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --theme=\\$(defaults read -globalDomain AppleInterfaceStyle &> /dev/null && echo default || echo GitHub)\"\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K643\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`는 설정 파일로도 사용자화 할 수 있습니다.\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K647\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --config-file\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K650\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K또는, `\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CONFIG_PATH` 환경 변수를 사용하여 `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`가 설정 파일의 기본 경로\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K653\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kexport \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CONFIG_PATH=\"/path/to/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.conf\"\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K658\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --generate-config-file\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K664\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --help`로 가능한 모든 옵션과 값들을 확인하세요.\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K682\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K## Windows에서 `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` 사용하기\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K684\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`는 대부분의 경우 Windows에서 기본적으로 잘 작동하지만, 일부 기능은 추가적인\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K715\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER`을 빈 문자열로 설정하여 페이징을 완전히 비활성화 할 수 있습니다.\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K719\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KWindows에서의 `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`은 기본적으로 Cygwin의 unix 스타일 경로(`/cygdrive/*`)를\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K721\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KCygwin 절대 경로를 인자로 받았을 때, `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`은 다음과 같은 오류를 반환합니다:\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K728\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K() {\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K737\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    command \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K \"${args[@]}\"\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K745\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`은 터미널의 트루컬러 지원 여부와 상관 없이 동작합니다.\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K754\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K그렇지 않을 경우, `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`은 24비트 확장열(escape sequence)이 지원되는지 여부를\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K759\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K다른 테마를 사용해 보세요 (`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --list-themes`에서 목록을 볼 수 있습니다).\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K764\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`은 기본적으로 UTF-8과 UTF-16을 지원합니다.\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K770\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kiconv -f ISO-8859-1 -t UTF-8 my-file.php | \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K772\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K참고: `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`으로 문법 자동 감지가 되지 않는 경우에는 `-l`/`--language` 옵션을\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K779\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kgit clone --recursive https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K782\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kcd \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K791\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K# 수정된 문법과 테마가 적용된 \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K 바이너리 빌드\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K796\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`의 pretty-printing 기능을 라이브러리로 사용하는 애플리케이션을 만들고\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K797\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K싶다면, [API 문서](https://docs.rs/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/)를 살펴보세요.\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K798\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K참고로 `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`에 라이브러리로써 의존한다면, `regex-onig`나 `regex-fancy`를\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K814\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K만약 `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`의 취약점을 발견하였다면, [David Peter](https://david-peter.de/)에게 메일로 연락주시기 바랍니다.\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K818\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`은 다음과 같은 목표를 달성하려고 합니다:\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K829\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KCopyright (c) 2018-2021 [\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-developers](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K).\n\u001b[35m\u001b[Kdoc/README-ko.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K831\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`는 여러분의 선택에 따라 MIT 라이센스 또는 Apache 라이센스 2.0의 조건에 따라\n\u001b[35m\u001b[Kdoc/alternatives.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K3\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KThe following table tries to give an overview *from `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`s perspective*, i.e. we only compare\n\u001b[35m\u001b[Kdoc/alternatives.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K4\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kcategories which are relevant for `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`. Some of these projects have completely different goals and\n\u001b[35m\u001b[Kdoc/alternatives.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K5\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kif you are not looking for a program like `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`, this comparison might not be for you.\n\u001b[35m\u001b[Kdoc/alternatives.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K7\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K|                                              | \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K                                                                 | [pygments](http://pygments.org/) | [highlight](http://www.andre-simon.de/doku/highlight/highlight.php) | [ccat](https://github.com/jingweno/ccat) | [source-highlight](https://www.gnu.org/software/src-highlite/) | [hicat](https://github.com/rstacruz/hicat)          | [coderay](https://github.com/rubychan/coderay)      | [rouge](https://github.com/jneen/rouge)             |\n\u001b[35m\u001b[Kdoc/alternatives.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K9\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K| Drop-in `cat` replacement                    | :heavy_check_mark: [*](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/issues/134)   | :x:                              | :x:                                                                 | (:heavy_check_mark:)                     | :x:                                                            | :x: [*](https://github.com/rstacruz/hicat/issues/6) | :x:                                                 | :x:                                                 |\n\u001b[35m\u001b[Kdoc/alternatives.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K43\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kcmd_\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K=\"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --style=full --color=always --paging=never '$SRC'\"\n\u001b[35m\u001b[Kdoc/alternatives.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K44\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kcmd_\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_simple=\"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --plain --wrap=never --tabs=0 --color=always --paging=never '$SRC'\"\n\u001b[35m\u001b[Kdoc/alternatives.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K54\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \"$cmd_\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\" \\\n\u001b[35m\u001b[Kdoc/alternatives.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K55\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \"$cmd_\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_simple\" \\\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K2\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  <img src=\"logo-header.svg\" alt=\"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K - a cat clone with wings\"><br>\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K3\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  <a href=\"https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/actions?query=workflow%3ACICD\"><img src=\"https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/workflows/CICD/badge.svg\" alt=\"Build Status\"></a>\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K4\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  <img src=\"https://img.shields.io/crates/l/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.svg\" alt=\"license\">\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K5\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  <a href=\"https://crates.io/crates/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\"><img src=\"https://img.shields.io/crates/v/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.svg?colorB=319e8c\" alt=\"Version info\"></a><br>\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K16\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  [<a href=\"https://github.com/chinanf-boy/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-zh\">中文</a>]\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K24\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` поддерживает выделение синтаксиса для огромного количества языков программирования и разметки:\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K29\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` использует `git`, чтобы показать изменения в коде\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K42\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` умеет перенаправлять вывод в `less`, если вывод не помещается на экране полностью.\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K47\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` обнаружит неинтерактивный терминал (например, когда вы перенаправляете вывод в файл или процесс), он будет работать как утилита `cat` и выведет содержимое файлов как обычный текст (без подсветки синтаксиса).\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K54\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K> \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K README.md\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K60\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K> \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K src/*.rs\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K66\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K> curl -s https://sh.rustup.rs | \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K72\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K> yaml2json .travis.yml | json_pp | \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K -l json\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K77\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K> \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K -A /etc/hosts\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K83\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K > note.md  # мгновенно создаем новый файл\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K85\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K header.md content.md footer.md > document.md\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K87\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K -n main.rs  # показываем только количество строк\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K89\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K f - g  # выводит 'f' в stdin, а потом 'g'.\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K96\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KВы можете использовать флаг `-exec` в `find`, чтобы посмотреть превью всех файлов в `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K98\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kfind … -exec \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K {} +\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K101\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KЕсли вы используете [`fd`](https://github.com/sharkdp/fd), применяйте для этого флаг `-X`/`--exec-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch`:\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K103\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kfd … -X \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K108\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KС помощью [`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kgrep`](https://github.com/eth-p/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-extras/blob/master/doc/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kgrep.md), `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` может быть использован для вывода результата запроса [`ripgrep`](https://github.com/BurntSushi/ripgrep)\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K111\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kgrep needle src/\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K116\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` может быть использован вместе с  `tail -f`, чтобы выводить содержимое файла с подсветкой синтаксиса в реальном времени.\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K118\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Ktail -f /var/log/pacman.log | \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --paging=never -l log\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K124\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KВы можете использовать `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` с `git show`, чтобы просмотреть старую версию файла с выделением синтаксиса:\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K126\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kgit show v0.6.0:src/main.rs | \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K -l rs\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K136\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K main.cpp | xclip\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K138\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` обнаружит перенаправление вывода и выведет обычный текст без выделения синтаксиса.\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K142\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` может быть использован в виде выделения цвета для  `man`, для этого установите переменную окружения\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K146\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kexport MANPAGER=\"sh -c 'col -bx | \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K -l man -p'\"\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K152\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KЕсли вы хотите сделать этой одной командой, вы можете использовать [`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kman`](https://github.com/eth-p/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-extras/blob/master/doc/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kman.md).\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K158\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[`Pretty\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`](https://github.com/eth-p/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-extras/blob/master/doc/pretty\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.md) — скрипт, который форматирует код и выводит его с помощью `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`.\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K163\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[![Packaging status](https://repology.org/badge/vertical-allrepos/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.svg)](https://repology.org/project/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/versions)\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K168\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` есть в репозиториях [Ubuntu](https://packages.ubuntu.com/eoan/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K) и\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K169\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[Debian](https://packages.debian.org/sid/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K) и доступен начиная с Ubuntu Eoan 19.10. На Debian `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` пока что доступен только с нестабильной веткой \"Sid\".\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K171\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KЕсли ваша версия Ubuntu/Debian достаточно новая, вы можете установить `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` так:\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K174\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kapt install \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K177\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KЕсли вы установили `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` таким образом, то бинарный файл может быть установлен как `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kcat` вместо `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` (из-за [конфликта имени с другим пакетом](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/issues/982)). Вы можете сделать симлинк или алиас `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K -> \u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kcat`, чтобы предотвратить подобные проблемы и в других дистрибутивах.\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K181\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kln -s /usr/bin/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kcat ~/.local/bin/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K187\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KЕсли пакет еще недоступен в вашем Ubuntu/Debian дистрибутиве или вы хотите установить самую последнюю версию `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`, то вы можете скачать самый последний `deb`-пакет отсюда:\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K188\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K[release page](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/releases) и установить так:\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K191\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Ksudo dpkg -i \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_0.18.3_amd64.deb  # измените архитектуру и версию\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K196\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KВы можете установить [`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`](https://pkgs.alpinelinux.org/packages?name=\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K) из официальных источников:\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K199\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kapk add \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K204\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KВы можете установить [`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`](https://www.archlinux.org/packages/community/x86_64/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/) из официального источника:\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K207\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kpacman -S \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K212\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KВы можете установить [`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`](https://koji.fedoraproject.org/koji/packageinfo?packageID=27506) из официального репозитория [Fedora Modular](https://docs.fedoraproject.org/en-US/modularity/using-modules/).\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K215\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kdnf install \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K220\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KВы можете установить [`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`](https://packages.gentoo.org/packages/sys-apps/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K) из официальных источников:\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K223\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kemerge sys-apps/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K228\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KВы можете установить `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` с помощью `xbps-install`:\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K230\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kxbps-install -S \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K235\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KВы можете установить [`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`](https://www.freshports.org/textproc/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K) с помощью `pkg`:\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K238\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kpkg install \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K244\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kcd /usr/ports/textproc/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K250\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KВы можете установить `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`, используя [nix package manager](https://nixos.org/nix):\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K253\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Knix-env -i \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K258\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KВы можете установить `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` с помощью `zypper`:\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K261\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kzypper install \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K266\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KВы можете установить `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` с помощью [Homebrew](http://braumeister.org/formula/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K):\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K269\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kbrew install \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K272\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KИли же установить его с помощью [MacPorts](https://ports.macports.org/port/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/summary):\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K275\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kport install \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K280\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KЕсть несколько способов установить `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`. Как только вы установили его, посмотрите на секцию [\"Использование `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` в Windows\"](#using-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-on-windows).\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K284\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KВы можете установить `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` с помощью [Chocolatey](https://chocolatey.org/packages/\u001b[1;33m\u001b[KBat\u001b[m\u001b[K):\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K286\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kchoco install \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K291\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KВы можете установить `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` с помощью [scoop](https://scoop.sh/):\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K293\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kscoop install \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K300\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KИх вы можете скачать на [странице релизов](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/releases).\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K306\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KВы можете использовать [Docker image](https://hub.docker.com/r/danlynn/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/), чтобы запустить `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` в контейнере:\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K308\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kdocker pull danlynn/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K309\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kalias \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K='docker run -it --rm -e \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_THEME -e \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_STYLE -e \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_TABS -v \"$(pwd):/myapp\" danlynn/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K'\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K314\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KВы можете установить `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` с [Ansible](https://www.ansible.com/):\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K318\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kansible-galaxy install aeimer.install_\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K323\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K# Playbook для установки \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K326\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    - aeimer.install_\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K329\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- [Ansible Galaxy](https://galaxy.ansible.com/aeimer/install_\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K)\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K330\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- [GitHub](https://github.com/aeimer/ansible-install-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K)\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K342\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KПерейдите на [страницу релизов](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/releases) для\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K343\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kскомпилированных файлов `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` для различных платформ. Бинарные файлы со статической связкой так же доступны: выбирайте архив с `musl` в имени.\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K347\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KЕсли вы желаете установить `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` из исходников, вам понадобится Rust 1.46 или выше. После этого используйте `cargo`, чтобы все скомпилировать:\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K350\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kcargo install --locked \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K357\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KИспользуйте `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --list-themes`, чтобы вывести список всех доступных тем. Для выбора темы `TwoDark` используйте `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` с флагом\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K358\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`--theme=TwoDark` или выставьте переменную окружения `\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_THEME` в `TwoDark`. Используйте `export \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_THEME=\"TwoDark\"` в конфигурационном файле вашей оболочки, чтобы изменить ее навсегда. Или же используйте [конфигурационный файл](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K#configuration-file) `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`.\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K362\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --list-themes | fzf --preview=\"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --theme={} --color=always /путь/к/файлу\"\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K365\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` отлично смотрится на темном фоне. Однако если ваш терминал использует светлую тему, то такие темы как `GitHub` или `OneHalfLight` будут смотреться куда лучше!\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K366\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KВы также можете использовать новую тему, для этого перейдите [в раздел добавления тем](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K#добавление-новых-тем).\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K370\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KВы можете использовать флаг `--style`, чтобы изменять внешний вид вывода в `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`.\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K371\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KНапример, вы можете использовать `--style=numbers,changes`, чтобы показать только количество строк и изменений в Git. Установите переменную окружения `\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_STYLE` чтобы изменить это навсегда, или используйте [конфиг файл](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K#configuration-file) `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`.\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K375\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` использует [`syntect`](https://github.com/trishume/syntect/) для выделения синтаксиса. `syntect` может читать\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K382\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kmkdir -p \"$(\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --config-dir)/syntaxes\"\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K383\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kcd \"$(\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --config-dir)/syntaxes\"\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K393\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K cache --build\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K396\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KТеперь вы можете использовать `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --list-languages`, чтобы проверить, доступны ли новые языки.\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K401\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K cache --clear\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K410\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kmkdir -p \"$(\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --config-dir)/themes\"\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K411\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kcd \"$(\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --config-dir)/themes\"\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K417\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K cache --build\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K420\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KТеперь используйте `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --list-themes`, чтобы проверить доступность новых тем.\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K424\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` использует пейджер, указанный в переменной окружения `PAGER`. Если она не задана, то используется `less`.\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K425\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KЕсли вы желаете использовать другой пейджер, вы можете либо изменить переменную `PAGER`, либо `\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER` чтобы перезаписать то, что указано в `PAGER`.\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K430\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kexport \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER=\"less -RF\"\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K433\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KТак же вы можете использовать [файл конфигурации](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K#configuration-file) `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` (флаг `--pager`).\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K436\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` задаст следующие флаги для пейджера:\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K449\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KЕсли вы используете темный режим в macOS, возможно вы захотите чтобы `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` использовал другую тему, основанную на теме вашей ОС. Следующий сниппет использует тему `default`, когда у вас включен темный режим, и тему `GitHub`, когда включен светлый.\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K452\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kalias cat=\"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --theme=\\$(defaults read -globalDomain AppleInterfaceStyle &> /dev/null && echo default || echo GitHub)\"\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K457\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` также может быть кастомизирован с помощью файла конфигурации. Его местоположение зависит от вашей ОС: чтобы посмотреть его путь, введите\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K459\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --config-file\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K462\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KТакже вы можете установить переменную окружения `\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CONFIG_PATH`, чтобы изменить путь к файлу конфигурации.\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K464\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kexport \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CONFIG_PATH=\"/path/to/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.conf\"\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K469\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --generate-config-file\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K474\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KФайл конфигурации - это всего лишь набор аргументов. Введите `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --help`, чтобы просмотреть список всех возможных флагов и аргументов. Также вы можете закомментировать строку с помощью `#`.\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K494\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K## Использование `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` в Windows\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K496\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` полностью работоспособен \"из коробки\", но для некоторых возможностей могут понадобиться дополнительные настройки.\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K509\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kили установить `\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER` равным пустой строке.\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K513\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KИз коробки `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` не поддерживает пути в стиле Unix (`/cygdrive/*`). Когда указан абсолютный путь cygwin, `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` выдаст следующую ошибку: `The system cannot find the path specified. (os error 3)`\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K518\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K() {\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K527\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    command \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K \"${args[@]}\"\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K535\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` поддерживает терминалы *с* и *без* поддержки truecolor. Однако подсветка синтаксиса не оптимизирована для терминалов с 8-битными цветами, и рекомендуется использовать терминалы с поддержкой 24-битных цветов (`terminator`, `konsole`, `iTerm2`, ...).\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K539\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`24bit`. Иначе `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` не сможет определить поддержку 24-битных цветов (и будет использовать 8-битные).\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K543\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KИспользуйте другую тему (`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --list-themes` выведет список всех установленных тем). Темы `OneHalfDark` и\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K548\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` поддерживает UTF-8 и UTF-16. Файлы в других кодировках, возможно, придётся перекодировать, так как кодировка может быть распознана неверно. Используйте `iconv`.\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K551\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kiconv -f ISO-8859-1 -t UTF-8 my-file.php | \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K553\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KВнимание: вам может понадобится флаг `-l`/`--language`, если `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` не сможет автоматически определить синтаксис.\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K559\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kgit clone --recursive https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K562\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kcd \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K571\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K# Компилирование исполняего файла \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K с другим синтаксисом и темами\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K583\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KЦели проекта `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`:\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K590\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KЕсть очень много альтернатив `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`. Смотрите [этот документ](doc/alternatives.md) для сравнения.\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K593\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KCopyright (c) 2018-2021 [Разработчики \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K).\n\u001b[35m\u001b[Kdoc/README-ru.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K595\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` распостраняется под лицензями MIT License и Apache License 2.0 (на выбор пользователя).\n\u001b[35m\u001b[Kdoc/release-checklist.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K5\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KSee this page for a good overview: https://deps.rs/repo/github/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdoc/release-checklist.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K27\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      sure that it is available on the `PATH` (`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --version` should show the\n\u001b[35m\u001b[Kdoc/release-checklist.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K41\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      this, install the latest `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` version again (to include the new synaxes\n\u001b[35m\u001b[Kdoc/release-checklist.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K50\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- [ ] Go to https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/releases/new to create the new\n\u001b[35m\u001b[KCargo.lock\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K85\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kname = \"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\"\n\u001b[35m\u001b[KLICENSE-MIT\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KCopyright (c) 2018-2021 \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-developers (https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K).\n\u001b[35m\u001b[Kassets/themes/Coldark/README.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K5\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K# Coldark - \u001b[1;33m\u001b[KBat\u001b[m\u001b[K\n\u001b[35m\u001b[Kassets/themes/Coldark/README.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K7\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K![GitHub License](https://img.shields.io/github/license/ArmandPhilippot/coldark-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K?colorA=111b27&color=d0dae7&logo=Github&logoColor=e3eaf2&style=for-the-badge) ![GitHub package.json version](https://img.shields.io/github/package-json/v/ArmandPhilippot/coldark-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K?colorA=111b27&color=d0dae7&logo=Github&logoColor=e3eaf2&style=for-the-badge)\n\u001b[35m\u001b[Kassets/themes/Coldark/README.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K15\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KThis Coldark version is designed for [\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K) command.\n\u001b[35m\u001b[Kassets/themes/Coldark/README.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K21\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KThe `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` version uses almost the same colors as [VS code version](https://github.com/ArmandPhilippot/coldark-vscode). The scopes seems a little different and a little less complete, hence the difference.\n\u001b[35m\u001b[Kassets/themes/Coldark/README.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K69\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K1. Install `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` (on Manjaro: `pacman -S \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`)\n\u001b[35m\u001b[Kassets/themes/Coldark/README.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K70\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K2. Create themes folder: `mkdir -p \"$(\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --config-dir)/themes\"`\n\u001b[35m\u001b[Kassets/themes/Coldark/README.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K71\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K3. Go inside this new folder: `cd \"$(\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --config-dir)/themes\"`\n\u001b[35m\u001b[Kassets/themes/Coldark/README.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K72\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K4. Clone this repo: `git clone https://github.com/ArmandPhilippot/coldark-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`\n\u001b[35m\u001b[Kassets/themes/Coldark/README.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K73\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K5. Update the binary cache: `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K cache --build`\n\u001b[35m\u001b[Kassets/themes/Coldark/README.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K75\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KThen, if you use `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --list-themes`, you should see the themes.\n\u001b[35m\u001b[Kassets/themes/Coldark/README.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K77\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KColdark \u001b[1;33m\u001b[KBat\u001b[m\u001b[K is now present in [\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K repo](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K). It may be present in the list of themes in a future version without having to install it manually.\n\u001b[35m\u001b[Kassets/themes/Coldark/README.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K81\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KTo select one of the Coldark themes, call `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` with the `--theme=Coldark-Cold` (or `--theme=Coldark-Dark`) option or set the `\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_THEME` environment variable to `Coldark-Cold` (or `Coldark-Dark`). Use `export \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_THEME=\"Coldark-Cold\"` (or `export \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_THEME=\"Coldark-Dark\"`) in your shell's startup file to make the change permanent.\n\u001b[35m\u001b[Kassets/themes/Coldark/README.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K91\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K| [![Coldark Cold PHP](./assets/coldark-cold-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-php.jpg)](./assets/coldark-cold-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-php.jpg) | [![Coldark Cold Markdown](./assets/coldark-cold-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-markdown.jpg)](./assets/coldark-cold-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-markdown.jpg) |\n\u001b[35m\u001b[Kassets/themes/Coldark/README.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K97\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K| [![Coldark Dark PHP](./assets/coldark-dark-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-php.jpg)](./assets/coldark-dark-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-php.jpg) | [![Coldark Dark Markdown](./assets/coldark-dark-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-markdown.jpg)](./assets/coldark-dark-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-markdown.jpg) |\n\u001b[35m\u001b[Kassets/themes/Coldark/README.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K101\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KThis project is open source and available under the [MIT License](https://github.com/ArmandPhilippot/coldark-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/blob/master/LICENSE).\n\u001b[35m\u001b[Kassets/themes/Coldark/Coldark-Cold.tmTheme\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K6\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    Project:    Coldark \u001b[1;33m\u001b[KBat\u001b[m\u001b[K\n\u001b[35m\u001b[Kassets/themes/Coldark/Coldark-Cold.tmTheme\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K7\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    Repository: https://github.com/ArmandPhilippot/coldark-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kassets/themes/Coldark/package.json\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K2\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  \"name\": \"coldark-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\",\n\u001b[35m\u001b[Kassets/themes/Coldark/package.json\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K15\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  \"homepage\": \"https://github.com/ArmandPhilippot/coldark-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K#readme\",\n\u001b[35m\u001b[Kassets/themes/Coldark/package.json\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K18\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \"url\": \"https://github.com/ArmandPhilippot/coldark-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\"\n\u001b[35m\u001b[Kassets/themes/Coldark/package.json\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K21\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \"url\": \"https://github.com/ArmandPhilippot/coldark-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/issues\"\n\u001b[35m\u001b[Kassets/themes/Coldark/CHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K10\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K## [v1.0.5](https://github.com/ArmandPhilippot/coldark-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/compare/v1.0.4...v1.0.5)\n\u001b[35m\u001b[Kassets/themes/Coldark/CHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K19\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- fix: change red color for both versions [`93ee1f3`](https://github.com/ArmandPhilippot/coldark-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/commit/93ee1f3fb5e08ecf66baee03dd3900c0abcdc1e9)\n\u001b[35m\u001b[Kassets/themes/Coldark/CHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K21\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K## [v1.0.4](https://github.com/ArmandPhilippot/coldark-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/compare/v1.0.3...v1.0.4) - 2020-10-28\n\u001b[35m\u001b[Kassets/themes/Coldark/CHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K25\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- Update Coldark Colors / Complete Markdown syntax highlighting [`a355b1d`](https://github.com/ArmandPhilippot/coldark-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/commit/a355b1d75611d12d322dd47f2ea7799b663a7738)\n\u001b[35m\u001b[Kassets/themes/Coldark/CHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K26\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- Update colors, logo, banner & add some screenshots [`0b13521`](https://github.com/ArmandPhilippot/coldark-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/commit/0b13521b6018c04d00304121bcf47fe04fa266ee)\n\u001b[35m\u001b[Kassets/themes/Coldark/CHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K27\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- build: update auto-changelog command [`2cd0f6e`](https://github.com/ArmandPhilippot/coldark-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/commit/2cd0f6ea22280c892b564348aab72a45f7b28223)\n\u001b[35m\u001b[Kassets/themes/Coldark/CHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K29\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K## [v1.0.3](https://github.com/ArmandPhilippot/coldark-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/compare/v1.0.2...v1.0.3) - 2020-10-19\n\u001b[35m\u001b[Kassets/themes/Coldark/CHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K33\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- fix: color for pseudo-class/element in CSS [`1fada34`](https://github.com/ArmandPhilippot/coldark-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/commit/1fada3494ae545fd186b1cb6c7d98c5860bcbcfe)\n\u001b[35m\u001b[Kassets/themes/Coldark/CHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K35\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K## [v1.0.2](https://github.com/ArmandPhilippot/coldark-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/compare/v1.0.1...v1.0.2) - 2020-10-18\n\u001b[35m\u001b[Kassets/themes/Coldark/CHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K39\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- fix: update scopes to be up to date with VS Code theme [`e92f6a7`](https://github.com/ArmandPhilippot/coldark-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/commit/e92f6a7d7832d269cdec0754a198a589a4567a00)\n\u001b[35m\u001b[Kassets/themes/Coldark/CHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K41\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K## [v1.0.1](https://github.com/ArmandPhilippot/coldark-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/compare/v1.0.0...v1.0.1) - 2020-10-17\n\u001b[35m\u001b[Kassets/themes/Coldark/CHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K45\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- docs: fix export command [`0439c73`](https://github.com/ArmandPhilippot/coldark-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/commit/0439c73d4af9c6a3254467dc7c6a758796f78267)\n\u001b[35m\u001b[Kassets/themes/Coldark/CHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K51\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- feat: Coldark for \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K command [`18fa11d`](https://github.com/ArmandPhilippot/coldark-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/commit/18fa11d259bd4c1b5d3278b1ef91dbf8a13e5ee1)\n\u001b[35m\u001b[Kassets/themes/Coldark/CHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K52\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- Initial commit [`80b7c34`](https://github.com/ArmandPhilippot/coldark-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/commit/80b7c34079e11ae69fdd94d5839305fedd9fe847)\n\u001b[35m\u001b[Kassets/themes/Coldark/CHANGELOG.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K53\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- docs: add README [`e904c4d`](https://github.com/ArmandPhilippot/coldark-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/commit/e904c4d78e3ff7653b25a6215441ad643408aedf)\n\u001b[35m\u001b[Kassets/themes/Coldark/Coldark-Dark.tmTheme\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K6\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    Project:    Coldark \u001b[1;33m\u001b[KBat\u001b[m\u001b[K\n\u001b[35m\u001b[Kassets/themes/Coldark/Coldark-Dark.tmTheme\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K7\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    Repository: https://github.com/ArmandPhilippot/coldark-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kassets/themes/Solarized/samples/test.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K26\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    a ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim or \"code\" block\n\u001b[35m\u001b[Kassets/themes/onehalf/README.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K43\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  - [x] [\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K)\n\u001b[35m\u001b[Kassets/themes/base16.tmTheme\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K8\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        the \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K theme base16-256 instead.\n\u001b[35m\u001b[Kassets/themes/ansi.tmTheme\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K26\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                    Explicitly set the gutter color since \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K falls back to a\n\u001b[35m\u001b[Kassets/themes/DarkNeon/Mou/Dark Neon Eighties.txt\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K77\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KVER\u001b[1;33m\u001b[KBAT\u001b[m\u001b[KIM\n\u001b[35m\u001b[Kassets/themes/DarkNeon/Mou/Dark Neon.txt\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K77\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KVER\u001b[1;33m\u001b[KBAT\u001b[m\u001b[KIM\n\u001b[35m\u001b[Kassets/themes/DarkNeon/Mou/Dark Neon Light.txt\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K77\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KVER\u001b[1;33m\u001b[KBAT\u001b[m\u001b[KIM\n\u001b[35m\u001b[Kassets/themes/TwoDark/icons/Prefs/icon_script.tmPreferences\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K6\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        <string>source.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch, source.shell</string>\n\u001b[35m\u001b[Kassets/themes/TwoDark/src/svg/gfx_quick-panel-row-selected.svg\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K60\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KpQxTwpjGF\u001b[1;33m\u001b[KbAt\u001b[m\u001b[Ki4KEppoxavUgB0Kt5geqNtU3yigwdL9zPN5DHw0QItval6DB1kZEzQTiJdJEmU3x\n\u001b[35m\u001b[Kassets/themes/gruvbox/README.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K4\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KThis branch is being used as a submodule in [\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K) for the _gruvbox_ family of themes\n\u001b[35m\u001b[Kassets/themes/gruvbox/gruvbox-dark.tmTheme\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K259\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        <string>entity.name.val.declaration, entity.name.variable, meta.definition.variable, storage.type.variable, support.type.custom-property, support.type.variable-name, variable, variable.interpolation variable, variable.other.interpolation variable, variable.parameter.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch, variable.parameter.output.function.matlab, variable.parameter.sass</string>\n\u001b[35m\u001b[Kassets/themes/gruvbox/gruvbox-light.tmTheme\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K259\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        <string>entity.name.val.declaration, entity.name.variable, meta.definition.variable, storage.type.variable, support.type.custom-property, support.type.variable-name, variable, variable.interpolation variable, variable.other.interpolation variable, variable.parameter.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch, variable.parameter.output.function.matlab, variable.parameter.sass</string>\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Slim/Demo/demo.slim\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K152\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K/ Ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Slim/Demo/demo.slim\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K163\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  'Ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim text with space after\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Slim/Syntaxes/Ruby Slim.YAML-tmLanguage\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K130\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  comment: Ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim text (can include HTML tags and copied lines)\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Slim/Syntaxes/Ruby Slim.tmLanguage\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K326\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t\t\t<string>Ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim text (can include HTML tags and copied lines)</string>\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/LLVM/README.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K2\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KLLVM syntax highlighting definitions based on [LLVM.tmBundle](https://github.com/whitequark/LLVM.tmBundle) created by [whitequark](https://github.com/whitequark) for [\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K).\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Puppet/Puppet.sublime-build\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K8\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      \"cmd\": [\"puppet.\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\", \"parser\", \"validate\", \"--color=false\", \"$file\" ]\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Slim.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K117\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      comment: Ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim text (can include HTML tags and copied lines)\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Assembly (x86_64).sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K463\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            - match: '(?i)\\\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\\b'\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/HTML (Twig).sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K377\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    - match: '(?<=(?:[a-zA-Z0-9_\\x{7f}-\\x{ff}\\]\\)\\''\\\"]\\|)|\\{%\\sfilter\\s)(\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch|convert_encoding|date|date_modify|default|e(?:scape)?|format|join|merge|number_format|replace|round|slice|split|trim)(\\()'\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/HTML (Twig).sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K479\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    - match: (?<=\\s)((?:end)?(?:autoescape|block|embed|filter|for|if|macro|raw|sandbox|set|spaceless|trans|ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim)|as|do|else|elseif|extends|flush|from|ignore missing|import|include|only|use|with)(?=\\s)\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypsecriptReact.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K2325\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        |AudioNode|AudioParam|\u001b[1;33m\u001b[KBat\u001b[m\u001b[KteryManager|BeforeUnloadEvent|BiquadFilterNode|Blob|BufferSource|ByteString|CSS|CSSConditionRule\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/typingsInstaller.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K3584\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        // The advantage of this approach is its simplicity. For the case of \u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch compilation,\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/typingsInstaller.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K37221\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        // Literal files are always included ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim. An \"include\" or \"exclude\" specification cannot\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/typingsInstaller.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K48035\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                    var ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[KimTargetName = ts.unescapeLeadingUnderscores(target.escapedName);\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/typingsInstaller.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K48036\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                    if (ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[KimTargetName === \"export=\" /* ExportEquals */ && (compilerOptions.esModuleInterop || compilerOptions.allowSyntheticDefaultImports)) {\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/typingsInstaller.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K48038\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                        ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[KimTargetName = \"default\" /* Default */;\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/typingsInstaller.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K48040\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                    var targetName = getInternalSymbolName(target, ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[KimTargetName);\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/typingsInstaller.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K48085\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                                ts.factory.createImportSpecifier(localName !== ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[KimTargetName ? ts.factory.createIdentifier(ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[KimTargetName) : undefined, ts.factory.createIdentifier(localName))\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/typingsInstaller.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K48094\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                            serializeExportSpecifier(ts.unescapeLeadingUnderscores(symbol.escapedName), specifier ? ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[KimTargetName : targetName, specifier && ts.isStringLiteralLike(specifier) ? ts.factory.createStringLiteral(specifier.text) : undefined);\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/typingsInstaller.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K98916\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                // If he number will be printed ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim and it doesn't already contain a dot, add one\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/typingsInstaller.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K101096\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K         * If `optimistic` is set, the first instance will use 'baseName' ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim instead of 'baseName_1'\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/typingsInstaller.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K105964\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            // Get next \u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch of affected files\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/typingsInstaller.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K108618\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        // Upon detecting a file change, wait for 250ms and then perform a recompilation. This gives \u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/tsc.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K39425\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                    var ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[KimTargetName = ts.unescapeLeadingUnderscores(target.escapedName);\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/tsc.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K39426\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                    if (ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[KimTargetName === \"export=\" && (compilerOptions.esModuleInterop || compilerOptions.allowSyntheticDefaultImports)) {\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/tsc.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K39427\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                        ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[KimTargetName = \"default\";\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/tsc.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K39429\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                    var targetName = getInternalSymbolName(target, ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[KimTargetName);\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/tsc.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K39452\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                                ts.factory.createImportSpecifier(localName !== ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[KimTargetName ? ts.factory.createIdentifier(ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[KimTargetName) : undefined, ts.factory.createIdentifier(localName))\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/tsc.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K39457\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                            serializeExportSpecifier(ts.unescapeLeadingUnderscores(symbol.escapedName), specifier ? ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[KimTargetName : targetName, specifier && ts.isStringLiteralLike(specifier) ? ts.factory.createStringLiteral(specifier.text) : undefined);\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/tsserver.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K3595\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        // The advantage of this approach is its simplicity. For the case of \u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch compilation,\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/tsserver.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K37232\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        // Literal files are always included ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim. An \"include\" or \"exclude\" specification cannot\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/tsserver.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K48046\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                    var ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[KimTargetName = ts.unescapeLeadingUnderscores(target.escapedName);\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/tsserver.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K48047\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                    if (ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[KimTargetName === \"export=\" /* ExportEquals */ && (compilerOptions.esModuleInterop || compilerOptions.allowSyntheticDefaultImports)) {\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/tsserver.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K48049\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                        ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[KimTargetName = \"default\" /* Default */;\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/tsserver.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K48051\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                    var targetName = getInternalSymbolName(target, ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[KimTargetName);\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/tsserver.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K48096\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                                ts.factory.createImportSpecifier(localName !== ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[KimTargetName ? ts.factory.createIdentifier(ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[KimTargetName) : undefined, ts.factory.createIdentifier(localName))\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/tsserver.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K48105\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                            serializeExportSpecifier(ts.unescapeLeadingUnderscores(symbol.escapedName), specifier ? ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[KimTargetName : targetName, specifier && ts.isStringLiteralLike(specifier) ? ts.factory.createStringLiteral(specifier.text) : undefined);\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/tsserver.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K98927\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                // If he number will be printed ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim and it doesn't already contain a dot, add one\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/tsserver.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K101107\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K         * If `optimistic` is set, the first instance will use 'baseName' ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim instead of 'baseName_1'\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/tsserver.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K105975\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            // Get next \u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch of affected files\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/tsserver.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K108629\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        // Upon detecting a file change, wait for 250ms and then perform a recompilation. This gives \u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/typescriptServices.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K3789\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        // The advantage of this approach is its simplicity. For the case of \u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch compilation,\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/typescriptServices.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K37426\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        // Literal files are always included ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim. An \"include\" or \"exclude\" specification cannot\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/typescriptServices.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K48240\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                    var ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[KimTargetName = ts.unescapeLeadingUnderscores(target.escapedName);\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/typescriptServices.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K48241\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                    if (ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[KimTargetName === \"export=\" /* ExportEquals */ && (compilerOptions.esModuleInterop || compilerOptions.allowSyntheticDefaultImports)) {\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/typescriptServices.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K48243\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                        ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[KimTargetName = \"default\" /* Default */;\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/typescriptServices.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K48245\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                    var targetName = getInternalSymbolName(target, ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[KimTargetName);\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/typescriptServices.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K48290\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                                ts.factory.createImportSpecifier(localName !== ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[KimTargetName ? ts.factory.createIdentifier(ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[KimTargetName) : undefined, ts.factory.createIdentifier(localName))\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/typescriptServices.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K48299\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                            serializeExportSpecifier(ts.unescapeLeadingUnderscores(symbol.escapedName), specifier ? ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[KimTargetName : targetName, specifier && ts.isStringLiteralLike(specifier) ? ts.factory.createStringLiteral(specifier.text) : undefined);\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/typescriptServices.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K99121\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                // If he number will be printed ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim and it doesn't already contain a dot, add one\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/typescriptServices.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K101301\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K         * If `optimistic` is set, the first instance will use 'baseName' ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim instead of 'baseName_1'\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/typescriptServices.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K106169\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            // Get next \u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch of affected files\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/typescriptServices.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K108823\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        // Upon detecting a file change, wait for 250ms and then perform a recompilation. This gives \u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/tsserverlibrary.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K3789\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        // The advantage of this approach is its simplicity. For the case of \u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch compilation,\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/tsserverlibrary.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K37426\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        // Literal files are always included ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim. An \"include\" or \"exclude\" specification cannot\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/tsserverlibrary.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K48240\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                    var ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[KimTargetName = ts.unescapeLeadingUnderscores(target.escapedName);\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/tsserverlibrary.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K48241\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                    if (ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[KimTargetName === \"export=\" /* ExportEquals */ && (compilerOptions.esModuleInterop || compilerOptions.allowSyntheticDefaultImports)) {\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/tsserverlibrary.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K48243\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                        ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[KimTargetName = \"default\" /* Default */;\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/tsserverlibrary.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K48245\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                    var targetName = getInternalSymbolName(target, ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[KimTargetName);\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/tsserverlibrary.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K48290\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                                ts.factory.createImportSpecifier(localName !== ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[KimTargetName ? ts.factory.createIdentifier(ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[KimTargetName) : undefined, ts.factory.createIdentifier(localName))\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/tsserverlibrary.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K48299\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                            serializeExportSpecifier(ts.unescapeLeadingUnderscores(symbol.escapedName), specifier ? ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[KimTargetName : targetName, specifier && ts.isStringLiteralLike(specifier) ? ts.factory.createStringLiteral(specifier.text) : undefined);\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/tsserverlibrary.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K99121\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                // If he number will be printed ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim and it doesn't already contain a dot, add one\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/tsserverlibrary.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K101301\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K         * If `optimistic` is set, the first instance will use 'baseName' ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim instead of 'baseName_1'\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/tsserverlibrary.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K106169\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            // Get next \u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch of affected files\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/tsserverlibrary.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K108823\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        // Upon detecting a file change, wait for 250ms and then perform a recompilation. This gives \u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/typescript.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K3789\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        // The advantage of this approach is its simplicity. For the case of \u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch compilation,\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/typescript.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K37426\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        // Literal files are always included ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim. An \"include\" or \"exclude\" specification cannot\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/typescript.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K48240\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                    var ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[KimTargetName = ts.unescapeLeadingUnderscores(target.escapedName);\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/typescript.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K48241\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                    if (ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[KimTargetName === \"export=\" /* ExportEquals */ && (compilerOptions.esModuleInterop || compilerOptions.allowSyntheticDefaultImports)) {\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/typescript.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K48243\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                        ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[KimTargetName = \"default\" /* Default */;\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/typescript.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K48245\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                    var targetName = getInternalSymbolName(target, ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[KimTargetName);\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/typescript.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K48290\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                                ts.factory.createImportSpecifier(localName !== ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[KimTargetName ? ts.factory.createIdentifier(ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[KimTargetName) : undefined, ts.factory.createIdentifier(localName))\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/typescript.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K48299\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                            serializeExportSpecifier(ts.unescapeLeadingUnderscores(symbol.escapedName), specifier ? ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[KimTargetName : targetName, specifier && ts.isStringLiteralLike(specifier) ? ts.factory.createStringLiteral(specifier.text) : undefined);\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/typescript.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K99121\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                // If he number will be printed ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim and it doesn't already contain a dot, add one\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/typescript.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K101301\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K         * If `optimistic` is set, the first instance will use 'baseName' ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim instead of 'baseName_1'\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/typescript.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K106169\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            // Get next \u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch of affected files\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/typescript.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K108823\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        // Upon detecting a file change, wait for 250ms and then perform a recompilation. This gives \u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/tsserver/lib.scripthost.d.ts\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K161\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K     * Gets/sets the script mode - interactive(true) or \u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch(false).\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/TypeScript.tmLanguage\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K6080\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  |AudioNode|AudioParam|\u001b[1;33m\u001b[KBat\u001b[m\u001b[KteryManager|BeforeUnloadEvent|BiquadFilterNode|Blob|BufferSource|ByteString|CSS|CSSConditionRule\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript/TypeScriptReact.tmLanguage\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K6026\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  |AudioNode|AudioParam|\u001b[1;33m\u001b[KBat\u001b[m\u001b[KteryManager|BeforeUnloadEvent|BiquadFilterNode|Blob|BufferSource|ByteString|CSS|CSSConditionRule\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Org mode/README.org\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K25\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K- [X] =Ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim=\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/PowerShell/examples/test.ps1\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K281\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Ka.\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/PowerShell/examples/test.ps1\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K282\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kaa.\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/PowerShell/examples/test.ps1\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K283\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kaaa.\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/PowerShell/examples/test.ps1\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K284\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kaaaa.\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/PowerShell/PowerShellSyntax.tmLanguage\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K255\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t\t\t<string>(\\b(([A-Za-z0-9\\-_\\.]+)\\.(?i:exe|com|cmd|\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K))\\b)</string>\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/PowerShell/PowerShellSyntax.tmLanguage\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K503\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t\t\t\t\t<string>(?:(\\p{L}|\\d|_|-|\\\\|\\:)*\\\\)?\\b(?i:Add|Approve|Assert|Backup|Block|Build|Checkpoint|Clear|Close|Compare|Complete|Compress|Confirm|Connect|Convert|ConvertFrom|ConvertTo|Copy|Debug|Deny|Deploy|Disable|Disconnect|Dismount|Edit|Enable|Enter|Exit|Expand|Export|Find|Format|Get|Grant|Group|Hide|Import|Initialize|Install|Invoke|Join|Limit|Lock|Measure|Merge|Mount|Move|New|Open|Optimize|Out|Ping|Pop|Protect|Publish|Push|Read|Receive|Redo|Register|Remove|Rename|Repair|Request|Reset|Resize|Resolve|Restart|Restore|Resume|Revoke|Save|Search|Select|Send|Set|Show|Skip|Split|Start|Step|Stop|Submit|Suspend|Switch|Sync|Test|Trace|Unblock|Undo|Uninstall|Unlock|Unprotect|Unpublish|Unregister|Update|Use|Wait|Watch|Write)\\-.+?(?:\\.(?i:exe|cmd|\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K|ps1))?\\b</string>\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/ssh-config/src/options.yaml\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K54\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[KBat\u001b[m\u001b[KchMode:\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/ssh-config/SSH Config.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K215\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            \u001b[1;33m\u001b[KBat\u001b[m\u001b[KchMode|CanonicalizeFallbackLocal|CheckHostIP|Compression|\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/ssh-config/Support/SSH Config.sublime-completions\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K41\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            \"trigger\": \"\u001b[1;33m\u001b[KBat\u001b[m\u001b[KchMode\",\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/ssh-config/Support/SSH Config.sublime-completions\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K42\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            \"contents\": \"\u001b[1;33m\u001b[KBat\u001b[m\u001b[KchMode\",\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/ssh-config/Support/SSH Config.sublime-completions\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K47\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            \"trigger\": \"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kchmode\",\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/ssh-config/Support/SSH Config.sublime-completions\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K48\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            \"contents\": \"\u001b[1;33m\u001b[KBat\u001b[m\u001b[KchMode ${0:{ yes | no \\\\}}\",\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/http-request-response/README.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K3\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KIt was originally designed for use in https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K, so it is not using any Sublime Text 4 features, as https://github.com/trishume/syntect does not support them yet. So this package should work in Sublime Text 3 also.\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/http-request-response/docs/CONTRIBUTING.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K9\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KIf you are not a Sublime Text user, and are contributing to improve a tool that uses the `syntect` Rust library, such as `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K`,\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Crystal/Crystal.tmLanguage\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K353\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t\t\t<string>\\b(initialize|new|loop|include|extend|raise|getter|setter|property|class_getter|class_setter|class_property|describe|context|it|with|delegate|def_hash|def_equals|def_equals_and_hash|forward_missing_to|record|assert_responds_to|spawn|annotation|ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim)\\b[!?]?</string>\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Lean/README.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K22\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K* \u001b[1;33m\u001b[KBat\u001b[m\u001b[Kch file execution\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Lean/README.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K178\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K* `lean.\u001b[1;33m\u001b[Kbat\u001b[m\u001b[KchExecute` (Lean: \u001b[1;33m\u001b[KBat\u001b[m\u001b[Kch Execute File): execute the current file using Lean (bound to <kbd>ctrl</kbd>+<kbd>shift</kbd>+<kbd>r</kbd> by default)\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Lean/README.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K287\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K* Properly set working directory when executing in \u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch mode.\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Lean/src/batch.ts\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K6\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Klet \u001b[1;33m\u001b[Kbat\u001b[m\u001b[KchOutputChannel: OutputChannel;\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Lean/src/batch.ts\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K8\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kexport function \u001b[1;33m\u001b[Kbat\u001b[m\u001b[KchExecuteFile(\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Lean/src/batch.ts\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K13\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[KchOutputChannel = \u001b[1;33m\u001b[Kbat\u001b[m\u001b[KchOutputChannel ||\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Lean/src/batch.ts\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K14\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        window.createOutputChannel('Lean: \u001b[1;33m\u001b[KBat\u001b[m\u001b[Kch File Output');\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Lean/src/batch.ts\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K23\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[KchOutputChannel.clear();\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Lean/src/batch.ts\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K26\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        \u001b[1;33m\u001b[Kbat\u001b[m\u001b[KchOutputChannel.appendLine(line);\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Lean/src/batch.ts\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K30\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        \u001b[1;33m\u001b[Kbat\u001b[m\u001b[KchOutputChannel.appendLine(line);\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Lean/src/batch.ts\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K37\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[KchOutputChannel.show(true);\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Lean/src/extension.ts\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K3\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kimport { \u001b[1;33m\u001b[Kbat\u001b[m\u001b[KchExecuteFile } from './\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch';\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Lean/src/extension.ts\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K67\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        commands.registerTextEditorCommand('lean.\u001b[1;33m\u001b[Kbat\u001b[m\u001b[KchExecute',\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Lean/src/extension.ts\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K68\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            (editor, edit, args) => { \u001b[1;33m\u001b[Kbat\u001b[m\u001b[KchExecuteFile(server, editor, edit, args); }),\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Lean/package.json\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K281\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t\t\t\t\"command\": \"lean.\u001b[1;33m\u001b[Kbat\u001b[m\u001b[KchExecute\",\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Lean/package.json\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K283\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t\t\t\t\"title\": \"\u001b[1;33m\u001b[KBat\u001b[m\u001b[Kch Execute File\",\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Lean/package.json\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K350\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t\t\t\t\"command\": \"lean.\u001b[1;33m\u001b[Kbat\u001b[m\u001b[KchExecute\",\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Lean/package.json\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K373\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t\t\t\t\t\"command\": \"lean.\u001b[1;33m\u001b[Kbat\u001b[m\u001b[KchExecute\",\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Lean/syntaxes/lean-markdown.json\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K571\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t\t\"fenced_code_block_dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\": {\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Lean/syntaxes/lean-markdown.json\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K572\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t\t\t\"begin\": \"(^)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K|\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch)((\\\\s+|:|\\\\{)[^`~]*)?$)\",\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Lean/syntaxes/lean-markdown.json\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K595\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t\t\t\t\t\"contentName\": \"meta.embedded.block.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\",\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Lean/syntaxes/lean-markdown.json\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K598\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t\t\t\t\t\t\t\"include\": \"source.\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kchfile\"\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Lean/syntaxes/lean-markdown.json\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1774\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t\t\t\t\t\"include\": \"#fenced_code_block_dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\"\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Lean/syntaxes/lean.json\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K21\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    { \"match\": \"\\\\\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Ktribute\\\\b\\\\s*\\\\[[^\\\\]]*\\\\]\", \"name\": \"storage.modifier.lean\" },\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Lean/package-lock.json\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1946\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t\t\t\"integrity\": \"sha512-b39T\u001b[1;33m\u001b[KBaT\u001b[m\u001b[KSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==\",\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Lean/package-lock.json\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K4288\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t\t\t\"integrity\": \"sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJ\u001b[1;33m\u001b[KBAt\u001b[m\u001b[K2rzfoa/5QBGBhxDix1dMt2kQKQ==\",\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Lean/package-lock.json\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K7099\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t\t\t\"integrity\": \"sha512-b39T\u001b[1;33m\u001b[KBaT\u001b[m\u001b[KSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==\",\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Lean/package-lock.json\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K9705\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t\t\t\t\t\"integrity\": \"sha512-b39T\u001b[1;33m\u001b[KBaT\u001b[m\u001b[KSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==\",\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Lean/package-lock.json\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K11662\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t\t\t\"integrity\": \"sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJ\u001b[1;33m\u001b[KBAt\u001b[m\u001b[K2rzfoa/5QBGBhxDix1dMt2kQKQ==\",\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Lean/package-lock.json\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K14054\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t\t\t\t\t\"integrity\": \"sha512-b39T\u001b[1;33m\u001b[KBaT\u001b[m\u001b[KSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==\",\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/CMake/CMakeCommands.yml\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K4\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kadd_custom_command: [OUTPUT, COMMAND, ARGS, MAIN_DEPENDENCY, DEPENDS, BYPRODUCTS, IMPLICIT_DEPENDS, WORKING_DIRECTORY, COMMENT, DEPFILE, VER\u001b[1;33m\u001b[KBAT\u001b[m\u001b[KIM, APPEND, USES_TERMINAL COMMAND_EXPAND_LISTS, TARGET, PRE_BUILD, PRE_LINK, POST_BUILD]\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/CMake/CMakeCommands.yml\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K5\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kadd_custom_target: [ALL, COMMAND, DEPENDS, BYPRODUCTS, WORKING_DIRECTORY, COMMENT, VER\u001b[1;33m\u001b[KBAT\u001b[m\u001b[KIM, USES_TERMINAL, COMMAND_EXPAND_LISTS, SOURCES]\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/CMake/CMakeVariables.sublime-completions\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K{\"completions\":[{\"contents\":\"ANDROID\",\"trigger\":\"ANDROID\\tbuiltin variable\"},{\"contents\":\"APPLE\",\"trigger\":\"APPLE\\tbuiltin variable\"},{\"contents\":\"BORLAND\",\"trigger\":\"BORLAND\\tbuiltin variable\"},{\"contents\":\"BUILD_SHARED_LIBS\",\"trigger\":\"BUILD_SHARED_LIBS\\tbuiltin variable\"},{\"contents\":\"CACHE\",\"trigger\":\"CACHE\\tbuiltin variable\"},{\"contents\":\"CMAKE_ABSOLUTE_DESTINATION_FILES\",\"trigger\":\"CMAKE_ABSOLUTE_DESTINATION_FILES\\tbuiltin variable\"},{\"contents\":\"CMAKE_AIX_EXPORT_ALL_SYMBOLS\",\"trigger\":\"CMAKE_AIX_EXPORT_ALL_SYMBOLS\\tbuiltin variable\"},{\"contents\":\"CMAKE_ANDROID_ANT_ADDITIONAL_OPTIONS\",\"trigger\":\"CMAKE_ANDROID_ANT_ADDITIONAL_OPTIONS\\tbuiltin variable\"},{\"contents\":\"CMAKE_ANDROID_API\",\"trigger\":\"CMAKE_ANDROID_API\\tbuiltin variable\"},{\"contents\":\"CMAKE_ANDROID_API_MIN\",\"trigger\":\"CMAKE_ANDROID_API_MIN\\tbuiltin variable\"},{\"contents\":\"CMAKE_ANDROID_ARCH\",\"trigger\":\"CMAKE_ANDROID_ARCH\\tbuiltin variable\"},{\"contents\":\"CMAKE_ANDROID_ARCH_ABI\",\"trigger\":\"CMAKE_ANDROID_ARCH_ABI\\tbuiltin variable\"},{\"contents\":\"CMAKE_ANDROID_ARM_MODE\",\"trigger\":\"CMAKE_ANDROID_ARM_MODE\\tbuiltin variable\"},{\"contents\":\"CMAKE_ANDROID_ARM_NEON\",\"trigger\":\"CMAKE_ANDROID_ARM_NEON\\tbuiltin variable\"},{\"contents\":\"CMAKE_ANDROID_ASSETS_DIRECTORIES\",\"trigger\":\"CMAKE_ANDROID_ASSETS_DIRECTORIES\\tbuiltin variable\"},{\"contents\":\"CMAKE_ANDROID_GUI\",\"trigger\":\"CMAKE_ANDROID_GUI\\tbuiltin variable\"},{\"contents\":\"CMAKE_ANDROID_JAR_DEPENDENCIES\",\"trigger\":\"CMAKE_ANDROID_JAR_DEPENDENCIES\\tbuiltin variable\"},{\"contents\":\"CMAKE_ANDROID_JAR_DIRECTORIES\",\"trigger\":\"CMAKE_ANDROID_JAR_DIRECTORIES\\tbuiltin variable\"},{\"contents\":\"CMAKE_ANDROID_JAVA_SOURCE_DIR\",\"trigger\":\"CMAKE_ANDROID_JAVA_SOURCE_DIR\\tbuiltin variable\"},{\"contents\":\"CMAKE_ANDROID_NATIVE_LIB_DEPENDENCIES\",\"trigger\":\"CMAKE_ANDROID_NATIVE_LIB_DEPENDENCIES\\tbuiltin variable\"},{\"contents\":\"CMAKE_ANDROID_NATIVE_LIB_DIRECTORIES\",\"trigger\":\"CMAKE_ANDROID_NATIVE_LIB_DIRECTORIES\\tbuiltin variable\"},{\"contents\":\"CMAKE_ANDROID_NDK\",\"trigger\":\"CMAKE_ANDROID_NDK\\tbuiltin variable\"},{\"contents\":\"CMAKE_ANDROID_NDK_DEPRECATED_HEADERS\",\"trigger\":\"CMAKE_ANDROID_NDK_DEPRECATED_HEADERS\\tbuiltin variable\"},{\"contents\":\"CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG\",\"trigger\":\"CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG\\tbuiltin variable\"},{\"contents\":\"CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION\",\"trigger\":\"CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION\\tbuiltin variable\"},{\"contents\":\"CMAKE_ANDROID_PROCESS_MAX\",\"trigger\":\"CMAKE_ANDROID_PROCESS_MAX\\tbuiltin variable\"},{\"contents\":\"CMAKE_ANDROID_PROGUARD\",\"trigger\":\"CMAKE_ANDROID_PROGUARD\\tbuiltin variable\"},{\"contents\":\"CMAKE_ANDROID_PROGUARD_CONFIG_PATH\",\"trigger\":\"CMAKE_ANDROID_PROGUARD_CONFIG_PATH\\tbuiltin variable\"},{\"contents\":\"CMAKE_ANDROID_SECURE_PROPS_PATH\",\"trigger\":\"CMAKE_ANDROID_SECURE_PROPS_PATH\\tbuiltin variable\"},{\"contents\":\"CMAKE_ANDROID_SKIP_ANT_STEP\",\"trigger\":\"CMAKE_ANDROID_SKIP_ANT_STEP\\tbuiltin variable\"},{\"contents\":\"CMAKE_ANDROID_STANDALONE_TOOLCHAIN\",\"trigger\":\"CMAKE_ANDROID_STANDALONE_TOOLCHAIN\\tbuiltin variable\"},{\"contents\":\"CMAKE_ANDROID_STL_TYPE\",\"trigger\":\"CMAKE_ANDROID_STL_TYPE\\tbuiltin variable\"},{\"contents\":\"CMAKE_APPBUNDLE_PATH\",\"trigger\":\"CMAKE_APPBUNDLE_PATH\\tbuiltin variable\"},{\"contents\":\"CMAKE_APPLE_SILICON_PROCESSOR\",\"trigger\":\"CMAKE_APPLE_SILICON_PROCESSOR\\tbuiltin variable\"},{\"contents\":\"CMAKE_AR\",\"trigger\":\"CMAKE_AR\\tbuiltin variable\"},{\"contents\":\"CMAKE_ARCHIVE_OUTPUT_DIRECTORY\",\"trigger\":\"CMAKE_ARCHIVE_OUTPUT_DIRECTORY\\tbuiltin variable\"},{\"contents\":\"CMAKE_ARGC\",\"trigger\":\"CMAKE_ARGC\\tbuiltin variable\"},{\"contents\":\"CMAKE_ARGV0\",\"trigger\":\"CMAKE_ARGV0\\tbuiltin variable\"},{\"contents\":\"CMAKE_AUTOGEN_ORIGIN_DEPENDS\",\"trigger\":\"CMAKE_AUTOGEN_ORIGIN_DEPENDS\\tbuiltin variable\"},{\"contents\":\"CMAKE_AUTOGEN_PARALLEL\",\"trigger\":\"CMAKE_AUTOGEN_PARALLEL\\tbuiltin variable\"},{\"contents\":\"CMAKE_AUTOGEN_VERBOSE\",\"trigger\":\"CMAKE_AUTOGEN_VERBOSE\\tbuiltin variable\"},{\"contents\":\"CMAKE_AUTOMOC\",\"trigger\":\"CMAKE_AUTOMOC\\tbuiltin variable\"},{\"contents\":\"CMAKE_AUTOMOC_COMPILER_PREDEFINES\",\"trigger\":\"CMAKE_AUTOMOC_COMPILER_PREDEFINES\\tbuiltin variable\"},{\"contents\":\"CMAKE_AUTOMOC_DEPEND_FILTERS\",\"trigger\":\"CMAKE_AUTOMOC_DEPEND_FILTERS\\tbuiltin variable\"},{\"contents\":\"CMAKE_AUTOMOC_MACRO_NAMES\",\"trigger\":\"CMAKE_AUTOMOC_MACRO_NAMES\\tbuiltin variable\"},{\"contents\":\"CMAKE_AUTOMOC_MOC_OPTIONS\",\"trigger\":\"CMAKE_AUTOMOC_MOC_OPTIONS\\tbuiltin variable\"},{\"contents\":\"CMAKE_AUTOMOC_PATH_PREFIX\",\"trigger\":\"CMAKE_AUTOMOC_PATH_PREFIX\\tbuiltin variable\"},{\"contents\":\"CMAKE_AUTOMOC_RELAXED_MODE\",\"trigger\":\"CMAKE_AUTOMOC_RELAXED_MODE\\tbuiltin variable\"},{\"contents\":\"CMAKE_AUTORCC\",\"trigger\":\"CMAKE_AUTORCC\\tbuiltin variable\"},{\"contents\":\"CMAKE_AUTORCC_OPTIONS\",\"trigger\":\"CMAKE_AUTORCC_OPTIONS\\tbuiltin variable\"},{\"contents\":\"CMAKE_AUTOUIC\",\"trigger\":\"CMAKE_AUTOUIC\\tbuiltin variable\"},{\"contents\":\"CMAKE_AUTOUIC_OPTIONS\",\"trigger\":\"CMAKE_AUTOUIC_OPTIONS\\tbuiltin variable\"},{\"contents\":\"CMAKE_AUTOUIC_SEARCH_PATHS\",\"trigger\":\"CMAKE_AUTOUIC_SEARCH_PATHS\\tbuiltin variable\"},{\"contents\":\"CMAKE_BACKWARDS_COMPATIBILITY\",\"trigger\":\"CMAKE_BACKWARDS_COMPATIBILITY\\tbuiltin variable\"},{\"contents\":\"CMAKE_BINARY_DIR\",\"trigger\":\"CMAKE_BINARY_DIR\\tbuiltin variable\"},{\"contents\":\"CMAKE_BUILD_RPATH\",\"trigger\":\"CMAKE_BUILD_RPATH\\tbuiltin variable\"},{\"contents\":\"CMAKE_BUILD_RPATH_USE_ORIGIN\",\"trigger\":\"CMAKE_BUILD_RPATH_USE_ORIGIN\\tbuiltin variable\"},{\"contents\":\"CMAKE_BUILD_TOOL\",\"trigger\":\"CMAKE_BUILD_TOOL\\tbuiltin variable\"},{\"contents\":\"CMAKE_BUILD_TYPE\",\"trigger\":\"CMAKE_BUILD_TYPE\\tbuiltin variable\"},{\"contents\":\"CMAKE_BUILD_WITH_INSTALL_NAME_DIR\",\"trigger\":\"CMAKE_BUILD_WITH_INSTALL_NAME_DIR\\tbuiltin variable\"},{\"contents\":\"CMAKE_BUILD_WITH_INSTALL_RPATH\",\"trigger\":\"CMAKE_BUILD_WITH_INSTALL_RPATH\\tbuiltin variable\"},{\"contents\":\"CMAKE_CACHEFILE_DIR\",\"trigger\":\"CMAKE_CACHEFILE_DIR\\tbuiltin variable\"},{\"contents\":\"CMAKE_CACHE_MAJOR_VERSION\",\"trigger\":\"CMAKE_CACHE_MAJOR_VERSION\\tbuiltin variable\"},{\"contents\":\"CMAKE_CACHE_MINOR_VERSION\",\"trigger\":\"CMAKE_CACHE_MINOR_VERSION\\tbuiltin variable\"},{\"contents\":\"CMAKE_CACHE_PATCH_VERSION\",\"trigger\":\"CMAKE_CACHE_PATCH_VERSION\\tbuiltin variable\"},{\"contents\":\"CMAKE_CFG_INTDIR\",\"trigger\":\"CMAKE_CFG_INTDIR\\tbuiltin variable\"},{\"contents\":\"CMAKE_CLANG_VFS_OVERLAY\",\"trigger\":\"CMAKE_CLANG_VFS_OVERLAY\\tbuiltin variable\"},{\"contents\":\"CMAKE_CL_64\",\"trigger\":\"CMAKE_CL_64\\tbuiltin variable\"},{\"contents\":\"CMAKE_CODEBLOCKS_COMPILER_ID\",\"trigger\":\"CMAKE_CODEBLOCKS_COMPILER_ID\\tbuiltin variable\"},{\"contents\":\"CMAKE_CODEBLOCKS_EXCLUDE_EXTERNAL_FILES\",\"trigger\":\"CMAKE_CODEBLOCKS_EXCLUDE_EXTERNAL_FILES\\tbuiltin variable\"},{\"contents\":\"CMAKE_CODELITE_USE_TARGETS\",\"trigger\":\"CMAKE_CODELITE_USE_TARGETS\\tbuiltin variable\"},{\"contents\":\"CMAKE_COLOR_MAKEFILE\",\"trigger\":\"CMAKE_COLOR_MAKEFILE\\tbuiltin variable\"},{\"contents\":\"CMAKE_COMMAND\",\"trigger\":\"CMAKE_COMMAND\\tbuiltin variable\"},{\"contents\":\"CMAKE_COMPILER_2005\",\"trigger\":\"CMAKE_COMPILER_2005\\tbuiltin variable\"},{\"contents\":\"CMAKE_COMPILER_IS_GNUCC\",\"trigger\":\"CMAKE_COMPILER_IS_GNUCC\\tbuiltin variable\"},{\"contents\":\"CMAKE_COMPILER_IS_GNUCXX\",\"trigger\":\"CMAKE_COMPILER_IS_GNUCXX\\tbuiltin variable\"},{\"contents\":\"CMAKE_COMPILER_IS_GNUG77\",\"trigger\":\"CMAKE_COMPILER_IS_GNUG77\\tbuiltin variable\"},{\"contents\":\"CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY\",\"trigger\":\"CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY\\tbuiltin variable\"},{\"contents\":\"CMAKE_CONFIGURATION_TYPES\",\"trigger\":\"CMAKE_CONFIGURATION_TYPES\\tbuiltin variable\"},{\"contents\":\"CMAKE_CPACK_COMMAND\",\"trigger\":\"CMAKE_CPACK_COMMAND\\tbuiltin variable\"},{\"contents\":\"CMAKE_CROSSCOMPILING\",\"trigger\":\"CMAKE_CROSSCOMPILING\\tbuiltin variable\"},{\"contents\":\"CMAKE_CROSSCOMPILING_EMULATOR\",\"trigger\":\"CMAKE_CROSSCOMPILING_EMULATOR\\tbuiltin variable\"},{\"contents\":\"CMAKE_CROSS_CONFIGS\",\"trigger\":\"CMAKE_CROSS_CONFIGS\\tbuiltin variable\"},{\"contents\":\"CMAKE_CTEST_ARGUMENTS\",\"trigger\":\"CMAKE_CTEST_ARGUMENTS\\tbuiltin variable\"},{\"contents\":\"CMAKE_CTEST_COMMAND\",\"trigger\":\"CMAKE_CTEST_COMMAND\\tbuiltin variable\"},{\"contents\":\"CMAKE_CUDA_ARCHITECTURES\",\"trigger\":\"CMAKE_CUDA_ARCHITECTURES\\tbuiltin variable\"},{\"contents\":\"CMAKE_CUDA_COMPILE_FEATURES\",\"trigger\":\"CMAKE_CUDA_COMPILE_FEATURES\\tbuiltin variable\"},{\"contents\":\"CMAKE_CUDA_EXTENSIONS\",\"trigger\":\"CMAKE_CUDA_EXTENSIONS\\tbuiltin variable\"},{\"contents\":\"CMAKE_CUDA_HOST_COMPILER\",\"trigger\":\"CMAKE_CUDA_HOST_COMPILER\\tbuiltin variable\"},{\"contents\":\"CMAKE_CUDA_RESOLVE_DEVICE_SYMBOLS\",\"trigger\":\"CMAKE_CUDA_RESOLVE_DEVICE_SYMBOLS\\tbuiltin variable\"},{\"contents\":\"CMAKE_CUDA_RUNTIME_LIBRARY\",\"trigger\":\"CMAKE_CUDA_RUNTIME_LIBRARY\\tbuiltin variable\"},{\"contents\":\"CMAKE_CUDA_SEPARABLE_COMPILATION\",\"trigger\":\"CMAKE_CUDA_SEPARABLE_COMPILATION\\tbuiltin variable\"},{\"contents\":\"CMAKE_CUDA_STANDARD\",\"trigger\":\"CMAKE_CUDA_STANDARD\\tbuiltin variable\"},{\"contents\":\"CMAKE_CUDA_STANDARD_REQUIRED\",\"trigger\":\"CMAKE_CUDA_STANDARD_REQUIRED\\tbuiltin variable\"},{\"contents\":\"CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES\",\"trigger\":\"CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES\\tbuiltin variable\"},{\"contents\":\"CMAKE_CURRENT_BINARY_DIR\",\"trigger\":\"CMAKE_CURRENT_BINARY_DIR\\tbuiltin variable\"},{\"contents\":\"CMAKE_CURRENT_FUNCTION\",\"trigger\":\"CMAKE_CURRENT_FUNCTION\\tbuiltin variable\"},{\"contents\":\"CMAKE_CURRENT_FUNCTION_LIST_DIR\",\"trigger\":\"CMAKE_CURRENT_FUNCTION_LIST_DIR\\tbuiltin variable\"},{\"contents\":\"CMAKE_CURRENT_FUNCTION_LIST_FILE\",\"trigger\":\"CMAKE_CURRENT_FUNCTION_LIST_FILE\\tbuiltin variable\"},{\"contents\":\"CMAKE_CURRENT_FUNCTION_LIST_LINE\",\"trigger\":\"CMAKE_CURRENT_FUNCTION_LIST_LINE\\tbuiltin variable\"},{\"contents\":\"CMAKE_CURRENT_LIST_DIR\",\"trigger\":\"CMAKE_CURRENT_LIST_DIR\\tbuiltin variable\"},{\"contents\":\"CMAKE_CURRENT_LIST_FILE\",\"trigger\":\"CMAKE_CURRENT_LIST_FILE\\tbuiltin variable\"},{\"contents\":\"CMAKE_CURRENT_LIST_LINE\",\"trigger\":\"CMAKE_CURRENT_LIST_LINE\\tbuiltin variable\"},{\"contents\":\"CMAKE_CURRENT_SOURCE_DIR\",\"trigger\":\"CMAKE_CURRENT_SOURCE_DIR\\tbuiltin variable\"},{\"contents\":\"CMAKE_CXX_COMPILE_FEATURES\",\"trigger\":\"CMAKE_CXX_COMPILE_FEATURES\\tbuiltin variable\"},{\"contents\":\"CMAKE_CXX_EXTENSIONS\",\"trigger\":\"CMAKE_CXX_EXTENSIONS\\tbuiltin variable\"},{\"contents\":\"CMAKE_CXX_STANDARD\",\"trigger\":\"CMAKE_CXX_STANDARD\\tbuiltin variable\"},{\"contents\":\"CMAKE_CXX_STANDARD_REQUIRED\",\"trigger\":\"CMAKE_CXX_STANDARD_REQUIRED\\tbuiltin variable\"},{\"contents\":\"CMAKE_C_COMPILE_FEATURES\",\"trigger\":\"CMAKE_C_COMPILE_FEATURES\\tbuiltin variable\"},{\"contents\":\"CMAKE_C_EXTENSIONS\",\"trigger\":\"CMAKE_C_EXTENSIONS\\tbuiltin variable\"},{\"contents\":\"CMAKE_C_STANDARD\",\"trigger\":\"CMAKE_C_STANDARD\\tbuiltin variable\"},{\"contents\":\"CMAKE_C_STANDARD_REQUIRED\",\"trigger\":\"CMAKE_C_STANDARD_REQUIRED\\tbuiltin variable\"},{\"contents\":\"CMAKE_DEBUG_POSTFIX\",\"trigger\":\"CMAKE_DEBUG_POSTFIX\\tbuiltin variable\"},{\"contents\":\"CMAKE_DEBUG_TARGET_PROPERTIES\",\"trigger\":\"CMAKE_DEBUG_TARGET_PROPERTIES\\tbuiltin variable\"},{\"contents\":\"CMAKE_DEFAULT_BUILD_TYPE\",\"trigger\":\"CMAKE_DEFAULT_BUILD_TYPE\\tbuiltin variable\"},{\"contents\":\"CMAKE_DEFAULT_CONFIGS\",\"trigger\":\"CMAKE_DEFAULT_CONFIGS\\tbuiltin variable\"},{\"contents\":\"CMAKE_DEPENDS_IN_PROJECT_ONLY\",\"trigger\":\"CMAKE_DEPENDS_IN_PROJECT_ONLY\\tbuiltin variable\"},{\"contents\":\"CMAKE_DIRECTORY_LABELS\",\"trigger\":\"CMAKE_DIRECTORY_LABELS\\tbuiltin variable\"},{\"contents\":\"CMAKE_DISABLE_PRECOMPILE_HEADERS\",\"trigger\":\"CMAKE_DISABLE_PRECOMPILE_HEADERS\\tbuiltin variable\"},{\"contents\":\"CMAKE_DL_LIBS\",\"trigger\":\"CMAKE_DL_LIBS\\tbuiltin variable\"},{\"contents\":\"CMAKE_DOTNET_TARGET_FRAMEWORK\",\"trigger\":\"CMAKE_DOTNET_TARGET_FRAMEWORK\\tbuiltin variable\"},{\"contents\":\"CMAKE_DOTNET_TARGET_FRAMEWORK_VERSION\",\"trigger\":\"CMAKE_DOTNET_TARGET_FRAMEWORK_VERSION\\tbuiltin variable\"},{\"contents\":\"CMAKE_ECLIPSE_GENERATE_LINKED_RESOURCES\",\"trigger\":\"CMAKE_ECLIPSE_GENERATE_LINKED_RESOURCES\\tbuiltin variable\"},{\"contents\":\"CMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT\",\"trigger\":\"CMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT\\tbuiltin variable\"},{\"contents\":\"CMAKE_ECLIPSE_MAKE_ARGUMENTS\",\"trigger\":\"CMAKE_ECLIPSE_MAKE_ARGUMENTS\\tbuiltin variable\"},{\"contents\":\"CMAKE_ECLIPSE_RESOURCE_ENCODING\",\"trigger\":\"CMAKE_ECLIPSE_RESOURCE_ENCODING\\tbuiltin variable\"},{\"contents\":\"CMAKE_ECLIPSE_VERSION\",\"trigger\":\"CMAKE_ECLIPSE_VERSION\\tbuiltin variable\"},{\"contents\":\"CMAKE_EDIT_COMMAND\",\"trigger\":\"CMAKE_EDIT_COMMAND\\tbuiltin variable\"},{\"contents\":\"CMAKE_ENABLE_EXPORTS\",\"trigger\":\"CMAKE_ENABLE_EXPORTS\\tbuiltin variable\"},{\"contents\":\"CMAKE_ERROR_DEPRECATED\",\"trigger\":\"CMAKE_ERROR_DEPRECATED\\tbuiltin variable\"},{\"contents\":\"CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION\",\"trigger\":\"CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION\\tbuiltin variable\"},{\"contents\":\"CMAKE_EXECUTABLE_SUFFIX\",\"trigger\":\"CMAKE_EXECUTABLE_SUFFIX\\tbuiltin variable\"},{\"contents\":\"CMAKE_EXECUTE_PROCESS_COMMAND_ECHO\",\"trigger\":\"CMAKE_EXECUTE_PROCESS_COMMAND_ECHO\\tbuiltin variable\"},{\"contents\":\"CMAKE_EXE_LINKER_FLAGS\",\"trigger\":\"CMAKE_EXE_LINKER_FLAGS\\tbuiltin variable\"},{\"contents\":\"CMAKE_EXE_LINKER_FLAGS_INIT\",\"trigger\":\"CMAKE_EXE_LINKER_FLAGS_INIT\\tbuiltin variable\"},{\"contents\":\"CMAKE_EXPORT_COMPILE_COMMANDS\",\"trigger\":\"CMAKE_EXPORT_COMPILE_COMMANDS\\tbuiltin variable\"},{\"contents\":\"CMAKE_EXPORT_NO_PACKAGE_REGISTRY\",\"trigger\":\"CMAKE_EXPORT_NO_PACKAGE_REGISTRY\\tbuiltin variable\"},{\"contents\":\"CMAKE_EXPORT_PACKAGE_REGISTRY\",\"trigger\":\"CMAKE_EXPORT_PACKAGE_REGISTRY\\tbuiltin variable\"},{\"contents\":\"CMAKE_EXTRA_GENERATOR\",\"trigger\":\"CMAKE_EXTRA_GENERATOR\\tbuiltin variable\"},{\"contents\":\"CMAKE_EXTRA_SHARED_LIBRARY_SUFFIXES\",\"trigger\":\"CMAKE_EXTRA_SHARED_LIBRARY_SUFFIXES\\tbuiltin variable\"},{\"contents\":\"CMAKE_FIND_APPBUNDLE\",\"trigger\":\"CMAKE_FIND_APPBUNDLE\\tbuiltin variable\"},{\"contents\":\"CMAKE_FIND_DEBUG_MODE\",\"trigger\":\"CMAKE_FIND_DEBUG_MODE\\tbuiltin variable\"},{\"contents\":\"CMAKE_FIND_FRAMEWORK\",\"trigger\":\"CMAKE_FIND_FRAMEWORK\\tbuiltin variable\"},{\"contents\":\"CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX\",\"trigger\":\"CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX\\tbuiltin variable\"},{\"contents\":\"CMAKE_FIND_LIBRARY_PREFIXES\",\"trigger\":\"CMAKE_FIND_LIBRARY_PREFIXES\\tbuiltin variable\"},{\"contents\":\"CMAKE_FIND_LIBRARY_SUFFIXES\",\"trigger\":\"CMAKE_FIND_LIBRARY_SUFFIXES\\tbuiltin variable\"},{\"contents\":\"CMAKE_FIND_NO_INSTALL_PREFIX\",\"trigger\":\"CMAKE_FIND_NO_INSTALL_PREFIX\\tbuiltin variable\"},{\"contents\":\"CMAKE_FIND_PACKAGE_NAME\",\"trigger\":\"CMAKE_FIND_PACKAGE_NAME\\tbuiltin variable\"},{\"contents\":\"CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY\",\"trigger\":\"CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY\\tbuiltin variable\"},{\"contents\":\"CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY\",\"trigger\":\"CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY\\tbuiltin variable\"},{\"contents\":\"CMAKE_FIND_PACKAGE_PREFER_CONFIG\",\"trigger\":\"CMAKE_FIND_PACKAGE_PREFER_CONFIG\\tbuiltin variable\"},{\"contents\":\"CMAKE_FIND_PACKAGE_RESOLVE_SYMLINKS\",\"trigger\":\"CMAKE_FIND_PACKAGE_RESOLVE_SYMLINKS\\tbuiltin variable\"},{\"contents\":\"CMAKE_FIND_PACKAGE_SORT_DIRECTION\",\"trigger\":\"CMAKE_FIND_PACKAGE_SORT_DIRECTION\\tbuiltin variable\"},{\"contents\":\"CMAKE_FIND_PACKAGE_SORT_ORDER\",\"trigger\":\"CMAKE_FIND_PACKAGE_SORT_ORDER\\tbuiltin variable\"},{\"contents\":\"CMAKE_FIND_PACKAGE_WARN_NO_MODULE\",\"trigger\":\"CMAKE_FIND_PACKAGE_WARN_NO_MODULE\\tbuiltin variable\"},{\"contents\":\"CMAKE_FIND_ROOT_PATH\",\"trigger\":\"CMAKE_FIND_ROOT_PATH\\tbuiltin variable\"},{\"contents\":\"CMAKE_FIND_ROOT_PATH_MODE_INCLUDE\",\"trigger\":\"CMAKE_FIND_ROOT_PATH_MODE_INCLUDE\\tbuiltin variable\"},{\"contents\":\"CMAKE_FIND_ROOT_PATH_MODE_LIBRARY\",\"trigger\":\"CMAKE_FIND_ROOT_PATH_MODE_LIBRARY\\tbuiltin variable\"},{\"contents\":\"CMAKE_FIND_ROOT_PATH_MODE_PACKAGE\",\"trigger\":\"CMAKE_FIND_ROOT_PATH_MODE_PACKAGE\\tbuiltin variable\"},{\"contents\":\"CMAKE_FIND_ROOT_PATH_MODE_PROGRAM\",\"trigger\":\"CMAKE_FIND_ROOT_PATH_MODE_PROGRAM\\tbuiltin variable\"},{\"contents\":\"CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH\",\"trigger\":\"CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH\\tbuiltin variable\"},{\"contents\":\"CMAKE_FIND_USE_CMAKE_PATH\",\"trigger\":\"CMAKE_FIND_USE_CMAKE_PATH\\tbuiltin variable\"},{\"contents\":\"CMAKE_FIND_USE_CMAKE_SYSTEM_PATH\",\"trigger\":\"CMAKE_FIND_USE_CMAKE_SYSTEM_PATH\\tbuiltin variable\"},{\"contents\":\"CMAKE_FIND_USE_PACKAGE_REGISTRY\",\"trigger\":\"CMAKE_FIND_USE_PACKAGE_REGISTRY\\tbuiltin variable\"},{\"contents\":\"CMAKE_FIND_USE_PACKAGE_ROOT_PATH\",\"trigger\":\"CMAKE_FIND_USE_PACKAGE_ROOT_PATH\\tbuiltin variable\"},{\"contents\":\"CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH\",\"trigger\":\"CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH\\tbuiltin variable\"},{\"contents\":\"CMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY\",\"trigger\":\"CMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY\\tbuiltin variable\"},{\"contents\":\"CMAKE_FOLDER\",\"trigger\":\"CMAKE_FOLDER\\tbuiltin variable\"},{\"contents\":\"CMAKE_FRAMEWORK\",\"trigger\":\"CMAKE_FRAMEWORK\\tbuiltin variable\"},{\"contents\":\"CMAKE_FRAMEWORK_PATH\",\"trigger\":\"CMAKE_FRAMEWORK_PATH\\tbuiltin variable\"},{\"contents\":\"CMAKE_Fortran_FORMAT\",\"trigger\":\"CMAKE_Fortran_FORMAT\\tbuiltin variable\"},{\"contents\":\"CMAKE_Fortran_MODDIR_DEFAULT\",\"trigger\":\"CMAKE_Fortran_MODDIR_DEFAULT\\tbuiltin variable\"},{\"contents\":\"CMAKE_Fortran_MODDIR_FLAG\",\"trigger\":\"CMAKE_Fortran_MODDIR_FLAG\\tbuiltin variable\"},{\"contents\":\"CMAKE_Fortran_MODOUT_FLAG\",\"trigger\":\"CMAKE_Fortran_MODOUT_FLAG\\tbuiltin variable\"},{\"contents\":\"CMAKE_Fortran_MODULE_DIRECTORY\",\"trigger\":\"CMAKE_Fortran_MODULE_DIRECTORY\\tbuiltin variable\"},{\"contents\":\"CMAKE_Fortran_PREPROCESS\",\"trigger\":\"CMAKE_Fortran_PREPROCESS\\tbuiltin variable\"},{\"contents\":\"CMAKE_GENERATOR\",\"trigger\":\"CMAKE_GENERATOR\\tbuiltin variable\"},{\"contents\":\"CMAKE_GENERATOR_INSTANCE\",\"trigger\":\"CMAKE_GENERATOR_INSTANCE\\tbuiltin variable\"},{\"contents\":\"CMAKE_GENERATOR_PLATFORM\",\"trigger\":\"CMAKE_GENERATOR_PLATFORM\\tbuiltin variable\"},{\"contents\":\"CMAKE_GENERATOR_TOOLSET\",\"trigger\":\"CMAKE_GENERATOR_TOOLSET\\tbuiltin variable\"},{\"contents\":\"CMAKE_GHS_NO_SOURCE_GROUP_FILE\",\"trigger\":\"CMAKE_GHS_NO_SOURCE_GROUP_FILE\\tbuiltin variable\"},{\"contents\":\"CMAKE_GLOBAL_AUTOGEN_TARGET\",\"trigger\":\"CMAKE_GLOBAL_AUTOGEN_TARGET\\tbuiltin variable\"},{\"contents\":\"CMAKE_GLOBAL_AUTOGEN_TARGET_NAME\",\"trigger\":\"CMAKE_GLOBAL_AUTOGEN_TARGET_NAME\\tbuiltin variable\"},{\"contents\":\"CMAKE_GLOBAL_AUTORCC_TARGET\",\"trigger\":\"CMAKE_GLOBAL_AUTORCC_TARGET\\tbuiltin variable\"},{\"contents\":\"CMAKE_GLOBAL_AUTORCC_TARGET_NAME\",\"trigger\":\"CMAKE_GLOBAL_AUTORCC_TARGET_NAME\\tbuiltin variable\"},{\"contents\":\"CMAKE_GNUtoMS\",\"trigger\":\"CMAKE_GNUtoMS\\tbuiltin variable\"},{\"contents\":\"CMAKE_HOME_DIRECTORY\",\"trigger\":\"CMAKE_HOME_DIRECTORY\\tbuiltin variable\"},{\"contents\":\"CMAKE_HOST_APPLE\",\"trigger\":\"CMAKE_HOST_APPLE\\tbuiltin variable\"},{\"contents\":\"CMAKE_HOST_SOLARIS\",\"trigger\":\"CMAKE_HOST_SOLARIS\\tbuiltin variable\"},{\"contents\":\"CMAKE_HOST_SYSTEM\",\"trigger\":\"CMAKE_HOST_SYSTEM\\tbuiltin variable\"},{\"contents\":\"CMAKE_HOST_SYSTEM_NAME\",\"trigger\":\"CMAKE_HOST_SYSTEM_NAME\\tbuiltin variable\"},{\"contents\":\"CMAKE_HOST_SYSTEM_PROCESSOR\",\"trigger\":\"CMAKE_HOST_SYSTEM_PROCESSOR\\tbuiltin variable\"},{\"contents\":\"CMAKE_HOST_SYSTEM_VERSION\",\"trigger\":\"CMAKE_HOST_SYSTEM_VERSION\\tbuiltin variable\"},{\"contents\":\"CMAKE_HOST_UNIX\",\"trigger\":\"CMAKE_HOST_UNIX\\tbuiltin variable\"},{\"contents\":\"CMAKE_HOST_WIN32\",\"trigger\":\"CMAKE_HOST_WIN32\\tbuiltin variable\"},{\"contents\":\"CMAKE_IGNORE_PATH\",\"trigger\":\"CMAKE_IGNORE_PATH\\tbuiltin variable\"},{\"contents\":\"CMAKE_IMPORT_LIBRARY_PREFIX\",\"trigger\":\"CMAKE_IMPORT_LIBRARY_PREFIX\\tbuiltin variable\"},{\"contents\":\"CMAKE_IMPORT_LIBRARY_SUFFIX\",\"trigger\":\"CMAKE_IMPORT_LIBRARY_SUFFIX\\tbuiltin variable\"},{\"contents\":\"CMAKE_INCLUDE_CURRENT_DIR\",\"trigger\":\"CMAKE_INCLUDE_CURRENT_DIR\\tbuiltin variable\"},{\"contents\":\"CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE\",\"trigger\":\"CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE\\tbuiltin variable\"},{\"contents\":\"CMAKE_INCLUDE_DIRECTORIES_BEFORE\",\"trigger\":\"CMAKE_INCLUDE_DIRECTORIES_BEFORE\\tbuiltin variable\"},{\"contents\":\"CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE\",\"trigger\":\"CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE\\tbuiltin variable\"},{\"contents\":\"CMAKE_INCLUDE_PATH\",\"trigger\":\"CMAKE_INCLUDE_PATH\\tbuiltin variable\"},{\"contents\":\"CMAKE_INSTALL_DEFAULT_COMPONENT_NAME\",\"trigger\":\"CMAKE_INSTALL_DEFAULT_COMPONENT_NAME\\tbuiltin variable\"},{\"contents\":\"CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS\",\"trigger\":\"CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS\\tbuiltin variable\"},{\"contents\":\"CMAKE_INSTALL_MESSAGE\",\"trigger\":\"CMAKE_INSTALL_MESSAGE\\tbuiltin variable\"},{\"contents\":\"CMAKE_INSTALL_NAME_DIR\",\"trigger\":\"CMAKE_INSTALL_NAME_DIR\\tbuiltin variable\"},{\"contents\":\"CMAKE_INSTALL_PREFIX\",\"trigger\":\"CMAKE_INSTALL_PREFIX\\tbuiltin variable\"},{\"contents\":\"CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT\",\"trigger\":\"CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT\\tbuiltin variable\"},{\"contents\":\"CMAKE_INSTALL_REMOVE_ENVIRONMENT_RPATH\",\"trigger\":\"CMAKE_INSTALL_REMOVE_ENVIRONMENT_RPATH\\tbuiltin variable\"},{\"contents\":\"CMAKE_INSTALL_RPATH\",\"trigger\":\"CMAKE_INSTALL_RPATH\\tbuiltin variable\"},{\"contents\":\"CMAKE_INSTALL_RPATH_USE_LINK_PATH\",\"trigger\":\"CMAKE_INSTALL_RPATH_USE_LINK_PATH\\tbuiltin variable\"},{\"contents\":\"CMAKE_INTERNAL_PLATFORM_ABI\",\"trigger\":\"CMAKE_INTERNAL_PLATFORM_ABI\\tbuiltin variable\"},{\"contents\":\"CMAKE_INTERPROCEDURAL_OPTIMIZATION\",\"trigger\":\"CMAKE_INTERPROCEDURAL_OPTIMIZATION\\tbuiltin variable\"},{\"contents\":\"CMAKE_IOS_INSTALL_COMBINED\",\"trigger\":\"CMAKE_IOS_INSTALL_COMBINED\\tbuiltin variable\"},{\"contents\":\"CMAKE_ISPC_HEADER_DIRECTORY\",\"trigger\":\"CMAKE_ISPC_HEADER_DIRECTORY\\tbuiltin variable\"},{\"contents\":\"CMAKE_ISPC_HEADER_SUFFIX\",\"trigger\":\"CMAKE_ISPC_HEADER_SUFFIX\\tbuiltin variable\"},{\"contents\":\"CMAKE_ISPC_INSTRUCTION_SETS\",\"trigger\":\"CMAKE_ISPC_INSTRUCTION_SETS\\tbuiltin variable\"},{\"contents\":\"CMAKE_JOB_POOLS\",\"trigger\":\"CMAKE_JOB_POOLS\\tbuiltin variable\"},{\"contents\":\"CMAKE_JOB_POOL_COMPILE\",\"trigger\":\"CMAKE_JOB_POOL_COMPILE\\tbuiltin variable\"},{\"contents\":\"CMAKE_JOB_POOL_LINK\",\"trigger\":\"CMAKE_JOB_POOL_LINK\\tbuiltin variable\"},{\"contents\":\"CMAKE_JOB_POOL_PRECOMPILE_HEADER\",\"trigger\":\"CMAKE_JOB_POOL_PRECOMPILE_HEADER\\tbuiltin variable\"},{\"contents\":\"CMAKE_LIBRARY_ARCHITECTURE\",\"trigger\":\"CMAKE_LIBRARY_ARCHITECTURE\\tbuiltin variable\"},{\"contents\":\"CMAKE_LIBRARY_ARCHITECTURE_REGEX\",\"trigger\":\"CMAKE_LIBRARY_ARCHITECTURE_REGEX\\tbuiltin variable\"},{\"contents\":\"CMAKE_LIBRARY_OUTPUT_DIRECTORY\",\"trigger\":\"CMAKE_LIBRARY_OUTPUT_DIRECTORY\\tbuiltin variable\"},{\"contents\":\"CMAKE_LIBRARY_PATH\",\"trigger\":\"CMAKE_LIBRARY_PATH\\tbuiltin variable\"},{\"contents\":\"CMAKE_LIBRARY_PATH_FLAG\",\"trigger\":\"CMAKE_LIBRARY_PATH_FLAG\\tbuiltin variable\"},{\"contents\":\"CMAKE_LINK_DEF_FILE_FLAG\",\"trigger\":\"CMAKE_LINK_DEF_FILE_FLAG\\tbuiltin variable\"},{\"contents\":\"CMAKE_LINK_DEPENDS_NO_SHARED\",\"trigger\":\"CMAKE_LINK_DEPENDS_NO_SHARED\\tbuiltin variable\"},{\"contents\":\"CMAKE_LINK_DIRECTORIES_BEFORE\",\"trigger\":\"CMAKE_LINK_DIRECTORIES_BEFORE\\tbuiltin variable\"},{\"contents\":\"CMAKE_LINK_INTERFACE_LIBRARIES\",\"trigger\":\"CMAKE_LINK_INTERFACE_LIBRARIES\\tbuiltin variable\"},{\"contents\":\"CMAKE_LINK_LIBRARY_FILE_FLAG\",\"trigger\":\"CMAKE_LINK_LIBRARY_FILE_FLAG\\tbuiltin variable\"},{\"contents\":\"CMAKE_LINK_LIBRARY_FLAG\",\"trigger\":\"CMAKE_LINK_LIBRARY_FLAG\\tbuiltin variable\"},{\"contents\":\"CMAKE_LINK_LIBRARY_SUFFIX\",\"trigger\":\"CMAKE_LINK_LIBRARY_SUFFIX\\tbuiltin variable\"},{\"contents\":\"CMAKE_LINK_SEARCH_END_STATIC\",\"trigger\":\"CMAKE_LINK_SEARCH_END_STATIC\\tbuiltin variable\"},{\"contents\":\"CMAKE_LINK_SEARCH_START_STATIC\",\"trigger\":\"CMAKE_LINK_SEARCH_START_STATIC\\tbuiltin variable\"},{\"contents\":\"CMAKE_LINK_WHAT_YOU_USE\",\"trigger\":\"CMAKE_LINK_WHAT_YOU_USE\\tbuiltin variable\"},{\"contents\":\"CMAKE_MACOSX_BUNDLE\",\"trigger\":\"CMAKE_MACOSX_BUNDLE\\tbuiltin variable\"},{\"contents\":\"CMAKE_MACOSX_RPATH\",\"trigger\":\"CMAKE_MACOSX_RPATH\\tbuiltin variable\"},{\"contents\":\"CMAKE_MAJOR_VERSION\",\"trigger\":\"CMAKE_MAJOR_VERSION\\tbuiltin variable\"},{\"contents\":\"CMAKE_MAKE_PROGRAM\",\"trigger\":\"CMAKE_MAKE_PROGRAM\\tbuiltin variable\"},{\"contents\":\"CMAKE_MATCH_COUNT\",\"trigger\":\"CMAKE_MATCH_COUNT\\tbuiltin variable\"},{\"contents\":\"CMAKE_MAXIMUM_RECURSION_DEPTH\",\"trigger\":\"CMAKE_MAXIMUM_RECURSION_DEPTH\\tbuiltin variable\"},{\"contents\":\"CMAKE_MESSAGE_CONTEXT\",\"trigger\":\"CMAKE_MESSAGE_CONTEXT\\tbuiltin variable\"},{\"contents\":\"CMAKE_MESSAGE_CONTEXT_SHOW\",\"trigger\":\"CMAKE_MESSAGE_CONTEXT_SHOW\\tbuiltin variable\"},{\"contents\":\"CMAKE_MESSAGE_INDENT\",\"trigger\":\"CMAKE_MESSAGE_INDENT\\tbuiltin variable\"},{\"contents\":\"CMAKE_MESSAGE_LOG_LEVEL\",\"trigger\":\"CMAKE_MESSAGE_LOG_LEVEL\\tbuiltin variable\"},{\"contents\":\"CMAKE_MFC_FLAG\",\"trigger\":\"CMAKE_MFC_FLAG\\tbuiltin variable\"},{\"contents\":\"CMAKE_MINIMUM_REQUIRED_VERSION\",\"trigger\":\"CMAKE_MINIMUM_REQUIRED_VERSION\\tbuiltin variable\"},{\"contents\":\"CMAKE_MINOR_VERSION\",\"trigger\":\"CMAKE_MINOR_VERSION\\tbuiltin variable\"},{\"contents\":\"CMAKE_MODULE_LINKER_FLAGS\",\"trigger\":\"CMAKE_MODULE_LINKER_FLAGS\\tbuiltin variable\"},{\"contents\":\"CMAKE_MODULE_LINKER_FLAGS_INIT\",\"trigger\":\"CMAKE_MODULE_LINKER_FLAGS_INIT\\tbuiltin variable\"},{\"contents\":\"CMAKE_MODULE_PATH\",\"trigger\":\"CMAKE_MODULE_PATH\\tbuiltin variable\"},{\"contents\":\"CMAKE_MSVCIDE_RUN_PATH\",\"trigger\":\"CMAKE_MSVCIDE_RUN_PATH\\tbuiltin variable\"},{\"contents\":\"CMAKE_MSVC_RUNTIME_LIBRARY\",\"trigger\":\"CMAKE_MSVC_RUNTIME_LIBRARY\\tbuiltin variable\"},{\"contents\":\"CMAKE_NETRC\",\"trigger\":\"CMAKE_NETRC\\tbuiltin variable\"},{\"contents\":\"CMAKE_NETRC_FILE\",\"trigger\":\"CMAKE_NETRC_FILE\\tbuiltin variable\"},{\"contents\":\"CMAKE_NINJA_OUTPUT_PATH_PREFIX\",\"trigger\":\"CMAKE_NINJA_OUTPUT_PATH_PREFIX\\tbuiltin variable\"},{\"contents\":\"CMAKE_NOT_USING_CONFIG_FLAGS\",\"trigger\":\"CMAKE_NOT_USING_CONFIG_FLAGS\\tbuiltin variable\"},{\"contents\":\"CMAKE_NO_BUILTIN_CHRPATH\",\"trigger\":\"CMAKE_NO_BUILTIN_CHRPATH\\tbuiltin variable\"},{\"contents\":\"CMAKE_NO_SYSTEM_FROM_IMPORTED\",\"trigger\":\"CMAKE_NO_SYSTEM_FROM_IMPORTED\\tbuiltin variable\"},{\"contents\":\"CMAKE_OBJCXX_EXTENSIONS\",\"trigger\":\"CMAKE_OBJCXX_EXTENSIONS\\tbuiltin variable\"},{\"contents\":\"CMAKE_OBJCXX_STANDARD\",\"trigger\":\"CMAKE_OBJCXX_STANDARD\\tbuiltin variable\"},{\"contents\":\"CMAKE_OBJCXX_STANDARD_REQUIRED\",\"trigger\":\"CMAKE_OBJCXX_STANDARD_REQUIRED\\tbuiltin variable\"},{\"contents\":\"CMAKE_OBJC_EXTENSIONS\",\"trigger\":\"CMAKE_OBJC_EXTENSIONS\\tbuiltin variable\"},{\"contents\":\"CMAKE_OBJC_STANDARD\",\"trigger\":\"CMAKE_OBJC_STANDARD\\tbuiltin variable\"},{\"contents\":\"CMAKE_OBJC_STANDARD_REQUIRED\",\"trigger\":\"CMAKE_OBJC_STANDARD_REQUIRED\\tbuiltin variable\"},{\"contents\":\"CMAKE_OBJECT_PATH_MAX\",\"trigger\":\"CMAKE_OBJECT_PATH_MAX\\tbuiltin variable\"},{\"contents\":\"CMAKE_OPTIMIZE_DEPENDENCIES\",\"trigger\":\"CMAKE_OPTIMIZE_DEPENDENCIES\\tbuiltin variable\"},{\"contents\":\"CMAKE_OSX_ARCHITECTURES\",\"trigger\":\"CMAKE_OSX_ARCHITECTURES\\tbuiltin variable\"},{\"contents\":\"CMAKE_OSX_DEPLOYMENT_TARGET\",\"trigger\":\"CMAKE_OSX_DEPLOYMENT_TARGET\\tbuiltin variable\"},{\"contents\":\"CMAKE_OSX_SYSROOT\",\"trigger\":\"CMAKE_OSX_SYSROOT\\tbuiltin variable\"},{\"contents\":\"CMAKE_PARENT_LIST_FILE\",\"trigger\":\"CMAKE_PARENT_LIST_FILE\\tbuiltin variable\"},{\"contents\":\"CMAKE_PATCH_VERSION\",\"trigger\":\"CMAKE_PATCH_VERSION\\tbuiltin variable\"},{\"contents\":\"CMAKE_PCH_INSTANTIATE_TEMPLATES\",\"trigger\":\"CMAKE_PCH_INSTANTIATE_TEMPLATES\\tbuiltin variable\"},{\"contents\":\"CMAKE_PCH_WARN_INVALID\",\"trigger\":\"CMAKE_PCH_WARN_INVALID\\tbuiltin variable\"},{\"contents\":\"CMAKE_PDB_OUTPUT_DIRECTORY\",\"trigger\":\"CMAKE_PDB_OUTPUT_DIRECTORY\\tbuiltin variable\"},{\"contents\":\"CMAKE_POSITION_INDEPENDENT_CODE\",\"trigger\":\"CMAKE_POSITION_INDEPENDENT_CODE\\tbuiltin variable\"},{\"contents\":\"CMAKE_PREFIX_PATH\",\"trigger\":\"CMAKE_PREFIX_PATH\\tbuiltin variable\"},{\"contents\":\"CMAKE_PROGRAM_PATH\",\"trigger\":\"CMAKE_PROGRAM_PATH\\tbuiltin variable\"},{\"contents\":\"CMAKE_PROJECT_DESCRIPTION\",\"trigger\":\"CMAKE_PROJECT_DESCRIPTION\\tbuiltin variable\"},{\"contents\":\"CMAKE_PROJECT_HOMEPAGE_URL\",\"trigger\":\"CMAKE_PROJECT_HOMEPAGE_URL\\tbuiltin variable\"},{\"contents\":\"CMAKE_PROJECT_INCLUDE\",\"trigger\":\"CMAKE_PROJECT_INCLUDE\\tbuiltin variable\"},{\"contents\":\"CMAKE_PROJECT_INCLUDE_BEFORE\",\"trigger\":\"CMAKE_PROJECT_INCLUDE_BEFORE\\tbuiltin variable\"},{\"contents\":\"CMAKE_PROJECT_NAME\",\"trigger\":\"CMAKE_PROJECT_NAME\\tbuiltin variable\"},{\"contents\":\"CMAKE_PROJECT_VERSION\",\"trigger\":\"CMAKE_PROJECT_VERSION\\tbuiltin variable\"},{\"contents\":\"CMAKE_PROJECT_VERSION_MAJOR\",\"trigger\":\"CMAKE_PROJECT_VERSION_MAJOR\\tbuiltin variable\"},{\"contents\":\"CMAKE_PROJECT_VERSION_MINOR\",\"trigger\":\"CMAKE_PROJECT_VERSION_MINOR\\tbuiltin variable\"},{\"contents\":\"CMAKE_PROJECT_VERSION_PATCH\",\"trigger\":\"CMAKE_PROJECT_VERSION_PATCH\\tbuiltin variable\"},{\"contents\":\"CMAKE_PROJECT_VERSION_TWEAK\",\"trigger\":\"CMAKE_PROJECT_VERSION_TWEAK\\tbuiltin variable\"},{\"contents\":\"CMAKE_RANLIB\",\"trigger\":\"CMAKE_RANLIB\\tbuiltin variable\"},{\"contents\":\"CMAKE_ROOT\",\"trigger\":\"CMAKE_ROOT\\tbuiltin variable\"},{\"contents\":\"CMAKE_RULE_MESSAGES\",\"trigger\":\"CMAKE_RULE_MESSAGES\\tbuiltin variable\"},{\"contents\":\"CMAKE_RUNTIME_OUTPUT_DIRECTORY\",\"trigger\":\"CMAKE_RUNTIME_OUTPUT_DIRECTORY\\tbuiltin variable\"},{\"contents\":\"CMAKE_SCRIPT_MODE_FILE\",\"trigger\":\"CMAKE_SCRIPT_MODE_FILE\\tbuiltin variable\"},{\"contents\":\"CMAKE_SHARED_LIBRARY_PREFIX\",\"trigger\":\"CMAKE_SHARED_LIBRARY_PREFIX\\tbuiltin variable\"},{\"contents\":\"CMAKE_SHARED_LIBRARY_SUFFIX\",\"trigger\":\"CMAKE_SHARED_LIBRARY_SUFFIX\\tbuiltin variable\"},{\"contents\":\"CMAKE_SHARED_LINKER_FLAGS\",\"trigger\":\"CMAKE_SHARED_LINKER_FLAGS\\tbuiltin variable\"},{\"contents\":\"CMAKE_SHARED_LINKER_FLAGS_INIT\",\"trigger\":\"CMAKE_SHARED_LINKER_FLAGS_INIT\\tbuiltin variable\"},{\"contents\":\"CMAKE_SHARED_MODULE_PREFIX\",\"trigger\":\"CMAKE_SHARED_MODULE_PREFIX\\tbuiltin variable\"},{\"contents\":\"CMAKE_SHARED_MODULE_SUFFIX\",\"trigger\":\"CMAKE_SHARED_MODULE_SUFFIX\\tbuiltin variable\"},{\"contents\":\"CMAKE_SIZEOF_VOID_P\",\"trigger\":\"CMAKE_SIZEOF_VOID_P\\tbuiltin variable\"},{\"contents\":\"CMAKE_SKIP_BUILD_RPATH\",\"trigger\":\"CMAKE_SKIP_BUILD_RPATH\\tbuiltin variable\"},{\"contents\":\"CMAKE_SKIP_INSTALL_ALL_DEPENDENCY\",\"trigger\":\"CMAKE_SKIP_INSTALL_ALL_DEPENDENCY\\tbuiltin variable\"},{\"contents\":\"CMAKE_SKIP_INSTALL_RPATH\",\"trigger\":\"CMAKE_SKIP_INSTALL_RPATH\\tbuiltin variable\"},{\"contents\":\"CMAKE_SKIP_INSTALL_RULES\",\"trigger\":\"CMAKE_SKIP_INSTALL_RULES\\tbuiltin variable\"},{\"contents\":\"CMAKE_SKIP_RPATH\",\"trigger\":\"CMAKE_SKIP_RPATH\\tbuiltin variable\"},{\"contents\":\"CMAKE_SOURCE_DIR\",\"trigger\":\"CMAKE_SOURCE_DIR\\tbuiltin variable\"},{\"contents\":\"CMAKE_STAGING_PREFIX\",\"trigger\":\"CMAKE_STAGING_PREFIX\\tbuiltin variable\"},{\"contents\":\"CMAKE_STATIC_LIBRARY_PREFIX\",\"trigger\":\"CMAKE_STATIC_LIBRARY_PREFIX\\tbuiltin variable\"},{\"contents\":\"CMAKE_STATIC_LIBRARY_SUFFIX\",\"trigger\":\"CMAKE_STATIC_LIBRARY_SUFFIX\\tbuiltin variable\"},{\"contents\":\"CMAKE_STATIC_LINKER_FLAGS\",\"trigger\":\"CMAKE_STATIC_LINKER_FLAGS\\tbuiltin variable\"},{\"contents\":\"CMAKE_STATIC_LINKER_FLAGS_INIT\",\"trigger\":\"CMAKE_STATIC_LINKER_FLAGS_INIT\\tbuiltin variable\"},{\"contents\":\"CMAKE_SUBLIME_TEXT_2_ENV_SETTINGS\",\"trigger\":\"CMAKE_SUBLIME_TEXT_2_ENV_SETTINGS\\tbuiltin variable\"},{\"contents\":\"CMAKE_SUBLIME_TEXT_2_EXCLUDE_BUILD_TREE\",\"trigger\":\"CMAKE_SUBLIME_TEXT_2_EXCLUDE_BUILD_TREE\\tbuiltin variable\"},{\"contents\":\"CMAKE_SUPPRESS_REGENERATION\",\"trigger\":\"CMAKE_SUPPRESS_REGENERATION\\tbuiltin variable\"},{\"contents\":\"CMAKE_SYSROOT\",\"trigger\":\"CMAKE_SYSROOT\\tbuiltin variable\"},{\"contents\":\"CMAKE_SYSROOT_COMPILE\",\"trigger\":\"CMAKE_SYSROOT_COMPILE\\tbuiltin variable\"},{\"contents\":\"CMAKE_SYSROOT_LINK\",\"trigger\":\"CMAKE_SYSROOT_LINK\\tbuiltin variable\"},{\"contents\":\"CMAKE_SYSTEM\",\"trigger\":\"CMAKE_SYSTEM\\tbuiltin variable\"},{\"contents\":\"CMAKE_SYSTEM_APPBUNDLE_PATH\",\"trigger\":\"CMAKE_SYSTEM_APPBUNDLE_PATH\\tbuiltin variable\"},{\"contents\":\"CMAKE_SYSTEM_FRAMEWORK_PATH\",\"trigger\":\"CMAKE_SYSTEM_FRAMEWORK_PATH\\tbuiltin variable\"},{\"contents\":\"CMAKE_SYSTEM_IGNORE_PATH\",\"trigger\":\"CMAKE_SYSTEM_IGNORE_PATH\\tbuiltin variable\"},{\"contents\":\"CMAKE_SYSTEM_INCLUDE_PATH\",\"trigger\":\"CMAKE_SYSTEM_INCLUDE_PATH\\tbuiltin variable\"},{\"contents\":\"CMAKE_SYSTEM_LIBRARY_PATH\",\"trigger\":\"CMAKE_SYSTEM_LIBRARY_PATH\\tbuiltin variable\"},{\"contents\":\"CMAKE_SYSTEM_NAME\",\"trigger\":\"CMAKE_SYSTEM_NAME\\tbuiltin variable\"},{\"contents\":\"CMAKE_SYSTEM_PREFIX_PATH\",\"trigger\":\"CMAKE_SYSTEM_PREFIX_PATH\\tbuiltin variable\"},{\"contents\":\"CMAKE_SYSTEM_PROCESSOR\",\"trigger\":\"CMAKE_SYSTEM_PROCESSOR\\tbuiltin variable\"},{\"contents\":\"CMAKE_SYSTEM_PROGRAM_PATH\",\"trigger\":\"CMAKE_SYSTEM_PROGRAM_PATH\\tbuiltin variable\"},{\"contents\":\"CMAKE_SYSTEM_VERSION\",\"trigger\":\"CMAKE_SYSTEM_VERSION\\tbuiltin variable\"},{\"contents\":\"CMAKE_Swift_LANGUAGE_VERSION\",\"trigger\":\"CMAKE_Swift_LANGUAGE_VERSION\\tbuiltin variable\"},{\"contents\":\"CMAKE_Swift_MODULE_DIRECTORY\",\"trigger\":\"CMAKE_Swift_MODULE_DIRECTORY\\tbuiltin variable\"},{\"contents\":\"CMAKE_Swift_NUM_THREADS\",\"trigger\":\"CMAKE_Swift_NUM_THREADS\\tbuiltin variable\"},{\"contents\":\"CMAKE_TOOLCHAIN_FILE\",\"trigger\":\"CMAKE_TOOLCHAIN_FILE\\tbuiltin variable\"},{\"contents\":\"CMAKE_TRY_COMPILE_CONFIGURATION\",\"trigger\":\"CMAKE_TRY_COMPILE_CONFIGURATION\\tbuiltin variable\"},{\"contents\":\"CMAKE_TRY_COMPILE_PLATFORM_VARIABLES\",\"trigger\":\"CMAKE_TRY_COMPILE_PLATFORM_VARIABLES\\tbuiltin variable\"},{\"contents\":\"CMAKE_TRY_COMPILE_TARGET_TYPE\",\"trigger\":\"CMAKE_TRY_COMPILE_TARGET_TYPE\\tbuiltin variable\"},{\"contents\":\"CMAKE_TWEAK_VERSION\",\"trigger\":\"CMAKE_TWEAK_VERSION\\tbuiltin variable\"},{\"contents\":\"CMAKE_UNITY_BUILD\",\"trigger\":\"CMAKE_UNITY_BUILD\\tbuiltin variable\"},{\"contents\":\"CMAKE_UNITY_BUILD_\u001b[1;33m\u001b[KBAT\u001b[m\u001b[KCH_SIZE\",\"trigger\":\"CMAKE_UNITY_BUILD_\u001b[1;33m\u001b[KBAT\u001b[m\u001b[KCH_SIZE\\tbuiltin variable\"},{\"contents\":\"CMAKE_USER_MAKE_RULES_OVERRIDE\",\"trigger\":\"CMAKE_USER_MAKE_RULES_OVERRIDE\\tbuiltin variable\"},{\"contents\":\"CMAKE_USE_RELATIVE_PATHS\",\"trigger\":\"CMAKE_USE_RELATIVE_PATHS\\tbuiltin variable\"},{\"contents\":\"CMAKE_VERBOSE_MAKEFILE\",\"trigger\":\"CMAKE_VERBOSE_MAKEFILE\\tbuiltin variable\"},{\"contents\":\"CMAKE_VERSION\",\"trigger\":\"CMAKE_VERSION\\tbuiltin variable\"},{\"contents\":\"CMAKE_VISIBILITY_INLINES_HIDDEN\",\"trigger\":\"CMAKE_VISIBILITY_INLINES_HIDDEN\\tbuiltin variable\"},{\"contents\":\"CMAKE_VS_DEVENV_COMMAND\",\"trigger\":\"CMAKE_VS_DEVENV_COMMAND\\tbuiltin variable\"},{\"contents\":\"CMAKE_VS_GLOBALS\",\"trigger\":\"CMAKE_VS_GLOBALS\\tbuiltin variable\"},{\"contents\":\"CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD\",\"trigger\":\"CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD\\tbuiltin variable\"},{\"contents\":\"CMAKE_VS_INCLUDE_PACKAGE_TO_DEFAULT_BUILD\",\"trigger\":\"CMAKE_VS_INCLUDE_PACKAGE_TO_DEFAULT_BUILD\\tbuiltin variable\"},{\"contents\":\"CMAKE_VS_INTEL_Fortran_PROJECT_VERSION\",\"trigger\":\"CMAKE_VS_INTEL_Fortran_PROJECT_VERSION\\tbuiltin variable\"},{\"contents\":\"CMAKE_VS_JUST_MY_CODE_DEBUGGING\",\"trigger\":\"CMAKE_VS_JUST_MY_CODE_DEBUGGING\\tbuiltin variable\"},{\"contents\":\"CMAKE_VS_MSBUILD_COMMAND\",\"trigger\":\"CMAKE_VS_MSBUILD_COMMAND\\tbuiltin variable\"},{\"contents\":\"CMAKE_VS_NsightTegra_VERSION\",\"trigger\":\"CMAKE_VS_NsightTegra_VERSION\\tbuiltin variable\"},{\"contents\":\"CMAKE_VS_PLATFORM_NAME\",\"trigger\":\"CMAKE_VS_PLATFORM_NAME\\tbuiltin variable\"},{\"contents\":\"CMAKE_VS_PLATFORM_NAME_DEFAULT\",\"trigger\":\"CMAKE_VS_PLATFORM_NAME_DEFAULT\\tbuiltin variable\"},{\"contents\":\"CMAKE_VS_PLATFORM_TOOLSET\",\"trigger\":\"CMAKE_VS_PLATFORM_TOOLSET\\tbuiltin variable\"},{\"contents\":\"CMAKE_VS_PLATFORM_TOOLSET_CUDA\",\"trigger\":\"CMAKE_VS_PLATFORM_TOOLSET_CUDA\\tbuiltin variable\"},{\"contents\":\"CMAKE_VS_PLATFORM_TOOLSET_CUDA_CUSTOM_DIR\",\"trigger\":\"CMAKE_VS_PLATFORM_TOOLSET_CUDA_CUSTOM_DIR\\tbuiltin variable\"},{\"contents\":\"CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE\",\"trigger\":\"CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE\\tbuiltin variable\"},{\"contents\":\"CMAKE_VS_PLATFORM_TOOLSET_VERSION\",\"trigger\":\"CMAKE_VS_PLATFORM_TOOLSET_VERSION\\tbuiltin variable\"},{\"contents\":\"CMAKE_VS_SDK_EXCLUDE_DIRECTORIES\",\"trigger\":\"CMAKE_VS_SDK_EXCLUDE_DIRECTORIES\\tbuiltin variable\"},{\"contents\":\"CMAKE_VS_SDK_EXECUTABLE_DIRECTORIES\",\"trigger\":\"CMAKE_VS_SDK_EXECUTABLE_DIRECTORIES\\tbuiltin variable\"},{\"contents\":\"CMAKE_VS_SDK_INCLUDE_DIRECTORIES\",\"trigger\":\"CMAKE_VS_SDK_INCLUDE_DIRECTORIES\\tbuiltin variable\"},{\"contents\":\"CMAKE_VS_SDK_LIBRARY_DIRECTORIES\",\"trigger\":\"CMAKE_VS_SDK_LIBRARY_DIRECTORIES\\tbuiltin variable\"},{\"contents\":\"CMAKE_VS_SDK_LIBRARY_WINRT_DIRECTORIES\",\"trigger\":\"CMAKE_VS_SDK_LIBRARY_WINRT_DIRECTORIES\\tbuiltin variable\"},{\"contents\":\"CMAKE_VS_SDK_REFERENCE_DIRECTORIES\",\"trigger\":\"CMAKE_VS_SDK_REFERENCE_DIRECTORIES\\tbuiltin variable\"},{\"contents\":\"CMAKE_VS_SDK_SOURCE_DIRECTORIES\",\"trigger\":\"CMAKE_VS_SDK_SOURCE_DIRECTORIES\\tbuiltin variable\"},{\"contents\":\"CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION\",\"trigger\":\"CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION\\tbuiltin variable\"},{\"contents\":\"CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION_MAXIMUM\",\"trigger\":\"CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION_MAXIMUM\\tbuiltin variable\"},{\"contents\":\"CMAKE_VS_WINRT_BY_DEFAULT\",\"trigger\":\"CMAKE_VS_WINRT_BY_DEFAULT\\tbuiltin variable\"},{\"contents\":\"CMAKE_WARN_DEPRECATED\",\"trigger\":\"CMAKE_WARN_DEPRECATED\\tbuiltin variable\"},{\"contents\":\"CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION\",\"trigger\":\"CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION\\tbuiltin variable\"},{\"contents\":\"CMAKE_WIN32_EXECUTABLE\",\"trigger\":\"CMAKE_WIN32_EXECUTABLE\\tbuiltin variable\"},{\"contents\":\"CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS\",\"trigger\":\"CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS\\tbuiltin variable\"},{\"contents\":\"CMAKE_XCODE_BUILD_SYSTEM\",\"trigger\":\"CMAKE_XCODE_BUILD_SYSTEM\\tbuiltin variable\"},{\"contents\":\"CMAKE_XCODE_GENERATE_SCHEME\",\"trigger\":\"CMAKE_XCODE_GENERATE_SCHEME\\tbuiltin variable\"},{\"contents\":\"CMAKE_XCODE_GENERATE_TOP_LEVEL_PROJECT_ONLY\",\"trigger\":\"CMAKE_XCODE_GENERATE_TOP_LEVEL_PROJECT_ONLY\\tbuiltin variable\"},{\"contents\":\"CMAKE_XCODE_LINK_BUILD_PHASE_MODE\",\"trigger\":\"CMAKE_XCODE_LINK_BUILD_PHASE_MODE\\tbuiltin variable\"},{\"contents\":\"CMAKE_XCODE_PLATFORM_TOOLSET\",\"trigger\":\"CMAKE_XCODE_PLATFORM_TOOLSET\\tbuiltin variable\"},{\"contents\":\"CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER\",\"trigger\":\"CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER\\tbuiltin variable\"},{\"contents\":\"CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN\",\"trigger\":\"CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN\\tbuiltin variable\"},{\"contents\":\"CMAKE_XCODE_SCHEME_DEBUG_DOCUMENT_VERSIONING\",\"trigger\":\"CMAKE_XCODE_SCHEME_DEBUG_DOCUMENT_VERSIONING\\tbuiltin variable\"},{\"contents\":\"CMAKE_XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER\",\"trigger\":\"CMAKE_XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER\\tbuiltin variable\"},{\"contents\":\"CMAKE_XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS\",\"trigger\":\"CMAKE_XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS\\tbuiltin variable\"},{\"contents\":\"CMAKE_XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE\",\"trigger\":\"CMAKE_XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE\\tbuiltin variable\"},{\"contents\":\"CMAKE_XCODE_SCHEME_ENVIRONMENT\",\"trigger\":\"CMAKE_XCODE_SCHEME_ENVIRONMENT\\tbuiltin variable\"},{\"contents\":\"CMAKE_XCODE_SCHEME_GUARD_MALLOC\",\"trigger\":\"CMAKE_XCODE_SCHEME_GUARD_MALLOC\\tbuiltin variable\"},{\"contents\":\"CMAKE_XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP\",\"trigger\":\"CMAKE_XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP\\tbuiltin variable\"},{\"contents\":\"CMAKE_XCODE_SCHEME_MALLOC_GUARD_EDGES\",\"trigger\":\"CMAKE_XCODE_SCHEME_MALLOC_GUARD_EDGES\\tbuiltin variable\"},{\"contents\":\"CMAKE_XCODE_SCHEME_MALLOC_SCRIBBLE\",\"trigger\":\"CMAKE_XCODE_SCHEME_MALLOC_SCRIBBLE\\tbuiltin variable\"},{\"contents\":\"CMAKE_XCODE_SCHEME_MALLOC_STACK\",\"trigger\":\"CMAKE_XCODE_SCHEME_MALLOC_STACK\\tbuiltin variable\"},{\"contents\":\"CMAKE_XCODE_SCHEME_THREAD_SANITIZER\",\"trigger\":\"CMAKE_XCODE_SCHEME_THREAD_SANITIZER\\tbuiltin variable\"},{\"contents\":\"CMAKE_XCODE_SCHEME_THREAD_SANITIZER_STOP\",\"trigger\":\"CMAKE_XCODE_SCHEME_THREAD_SANITIZER_STOP\\tbuiltin variable\"},{\"contents\":\"CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER\",\"trigger\":\"CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER\\tbuiltin variable\"},{\"contents\":\"CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP\",\"trigger\":\"CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP\\tbuiltin variable\"},{\"contents\":\"CMAKE_XCODE_SCHEME_WORKING_DIRECTORY\",\"trigger\":\"CMAKE_XCODE_SCHEME_WORKING_DIRECTORY\\tbuiltin variable\"},{\"contents\":\"CMAKE_XCODE_SCHEME_ZOMBIE_OBJECTS\",\"trigger\":\"CMAKE_XCODE_SCHEME_ZOMBIE_OBJECTS\\tbuiltin variable\"},{\"contents\":\"CPACK_ABSOLUTE_DESTINATION_FILES\",\"trigger\":\"CPACK_ABSOLUTE_DESTINATION_FILES\\tbuiltin variable\"},{\"contents\":\"CPACK_COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY\",\"trigger\":\"CPACK_COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY\\tbuiltin variable\"},{\"contents\":\"CPACK_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION\",\"trigger\":\"CPACK_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION\\tbuiltin variable\"},{\"contents\":\"CPACK_INCLUDE_TOPLEVEL_DIRECTORY\",\"trigger\":\"CPACK_INCLUDE_TOPLEVEL_DIRECTORY\\tbuiltin variable\"},{\"contents\":\"CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS\",\"trigger\":\"CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS\\tbuiltin variable\"},{\"contents\":\"CPACK_PACKAGING_INSTALL_PREFIX\",\"trigger\":\"CPACK_PACKAGING_INSTALL_PREFIX\\tbuiltin variable\"},{\"contents\":\"CPACK_SET_DESTDIR\",\"trigger\":\"CPACK_SET_DESTDIR\\tbuiltin variable\"},{\"contents\":\"CPACK_WARN_ON_ABSOLUTE_INSTALL_DESTINATION\",\"trigger\":\"CPACK_WARN_ON_ABSOLUTE_INSTALL_DESTINATION\\tbuiltin variable\"},{\"contents\":\"CTEST_BINARY_DIRECTORY\",\"trigger\":\"CTEST_BINARY_DIRECTORY\\tbuiltin variable\"},{\"contents\":\"CTEST_BUILD_COMMAND\",\"trigger\":\"CTEST_BUILD_COMMAND\\tbuiltin variable\"},{\"contents\":\"CTEST_BUILD_NAME\",\"trigger\":\"CTEST_BUILD_NAME\\tbuiltin variable\"},{\"contents\":\"CTEST_BZR_COMMAND\",\"trigger\":\"CTEST_BZR_COMMAND\\tbuiltin variable\"},{\"contents\":\"CTEST_BZR_UPDATE_OPTIONS\",\"trigger\":\"CTEST_BZR_UPDATE_OPTIONS\\tbuiltin variable\"},{\"contents\":\"CTEST_CHANGE_ID\",\"trigger\":\"CTEST_CHANGE_ID\\tbuiltin variable\"},{\"contents\":\"CTEST_CHECKOUT_COMMAND\",\"trigger\":\"CTEST_CHECKOUT_COMMAND\\tbuiltin variable\"},{\"contents\":\"CTEST_CONFIGURATION_TYPE\",\"trigger\":\"CTEST_CONFIGURATION_TYPE\\tbuiltin variable\"},{\"contents\":\"CTEST_CONFIGURE_COMMAND\",\"trigger\":\"CTEST_CONFIGURE_COMMAND\\tbuiltin variable\"},{\"contents\":\"CTEST_COVERAGE_COMMAND\",\"trigger\":\"CTEST_COVERAGE_COMMAND\\tbuiltin variable\"},{\"contents\":\"CTEST_COVERAGE_EXTRA_FLAGS\",\"trigger\":\"CTEST_COVERAGE_EXTRA_FLAGS\\tbuiltin variable\"},{\"contents\":\"CTEST_CURL_OPTIONS\",\"trigger\":\"CTEST_CURL_OPTIONS\\tbuiltin variable\"},{\"contents\":\"CTEST_CUSTOM_COVERAGE_EXCLUDE\",\"trigger\":\"CTEST_CUSTOM_COVERAGE_EXCLUDE\\tbuiltin variable\"},{\"contents\":\"CTEST_CUSTOM_ERROR_EXCEPTION\",\"trigger\":\"CTEST_CUSTOM_ERROR_EXCEPTION\\tbuiltin variable\"},{\"contents\":\"CTEST_CUSTOM_ERROR_MATCH\",\"trigger\":\"CTEST_CUSTOM_ERROR_MATCH\\tbuiltin variable\"},{\"contents\":\"CTEST_CUSTOM_ERROR_POST_CONTEXT\",\"trigger\":\"CTEST_CUSTOM_ERROR_POST_CONTEXT\\tbuiltin variable\"},{\"contents\":\"CTEST_CUSTOM_ERROR_PRE_CONTEXT\",\"trigger\":\"CTEST_CUSTOM_ERROR_PRE_CONTEXT\\tbuiltin variable\"},{\"contents\":\"CTEST_CUSTOM_MAXIMUM_FAILED_TEST_OUTPUT_SIZE\",\"trigger\":\"CTEST_CUSTOM_MAXIMUM_FAILED_TEST_OUTPUT_SIZE\\tbuiltin variable\"},{\"contents\":\"CTEST_CUSTOM_MAXIMUM_NUMBER_OF_ERRORS\",\"trigger\":\"CTEST_CUSTOM_MAXIMUM_NUMBER_OF_ERRORS\\tbuiltin variable\"},{\"contents\":\"CTEST_CUSTOM_MAXIMUM_NUMBER_OF_WARNINGS\",\"trigger\":\"CTEST_CUSTOM_MAXIMUM_NUMBER_OF_WARNINGS\\tbuiltin variable\"},{\"contents\":\"CTEST_CUSTOM_MAXIMUM_PASSED_TEST_OUTPUT_SIZE\",\"trigger\":\"CTEST_CUSTOM_MAXIMUM_PASSED_TEST_OUTPUT_SIZE\\tbuiltin variable\"},{\"contents\":\"CTEST_CUSTOM_MEMCHECK_IGNORE\",\"trigger\":\"CTEST_CUSTOM_MEMCHECK_IGNORE\\tbuiltin variable\"},{\"contents\":\"CTEST_CUSTOM_POST_MEMCHECK\",\"trigger\":\"CTEST_CUSTOM_POST_MEMCHECK\\tbuiltin variable\"},{\"contents\":\"CTEST_CUSTOM_POST_TEST\",\"trigger\":\"CTEST_CUSTOM_POST_TEST\\tbuiltin variable\"},{\"contents\":\"CTEST_CUSTOM_PRE_MEMCHECK\",\"trigger\":\"CTEST_CUSTOM_PRE_MEMCHECK\\tbuiltin variable\"},{\"contents\":\"CTEST_CUSTOM_PRE_TEST\",\"trigger\":\"CTEST_CUSTOM_PRE_TEST\\tbuiltin variable\"},{\"contents\":\"CTEST_CUSTOM_TESTS_IGNORE\",\"trigger\":\"CTEST_CUSTOM_TESTS_IGNORE\\tbuiltin variable\"},{\"contents\":\"CTEST_CUSTOM_WARNING_EXCEPTION\",\"trigger\":\"CTEST_CUSTOM_WARNING_EXCEPTION\\tbuiltin variable\"},{\"contents\":\"CTEST_CUSTOM_WARNING_MATCH\",\"trigger\":\"CTEST_CUSTOM_WARNING_MATCH\\tbuiltin variable\"},{\"contents\":\"CTEST_CVS_CHECKOUT\",\"trigger\":\"CTEST_CVS_CHECKOUT\\tbuiltin variable\"},{\"contents\":\"CTEST_CVS_COMMAND\",\"trigger\":\"CTEST_CVS_COMMAND\\tbuiltin variable\"},{\"contents\":\"CTEST_CVS_UPDATE_OPTIONS\",\"trigger\":\"CTEST_CVS_UPDATE_OPTIONS\\tbuiltin variable\"},{\"contents\":\"CTEST_DROP_LOCATION\",\"trigger\":\"CTEST_DROP_LOCATION\\tbuiltin variable\"},{\"contents\":\"CTEST_DROP_METHOD\",\"trigger\":\"CTEST_DROP_METHOD\\tbuiltin variable\"},{\"contents\":\"CTEST_DROP_SITE\",\"trigger\":\"CTEST_DROP_SITE\\tbuiltin variable\"},{\"contents\":\"CTEST_DROP_SITE_CDASH\",\"trigger\":\"CTEST_DROP_SITE_CDASH\\tbuiltin variable\"},{\"contents\":\"CTEST_DROP_SITE_PASSWORD\",\"trigger\":\"CTEST_DROP_SITE_PASSWORD\\tbuiltin variable\"},{\"contents\":\"CTEST_DROP_SITE_USER\",\"trigger\":\"CTEST_DROP_SITE_USER\\tbuiltin variable\"},{\"contents\":\"CTEST_EXTRA_COVERAGE_GLOB\",\"trigger\":\"CTEST_EXTRA_COVERAGE_GLOB\\tbuiltin variable\"},{\"contents\":\"CTEST_GIT_COMMAND\",\"trigger\":\"CTEST_GIT_COMMAND\\tbuiltin variable\"},{\"contents\":\"CTEST_GIT_INIT_SUBMODULES\",\"trigger\":\"CTEST_GIT_INIT_SUBMODULES\\tbuiltin variable\"},{\"contents\":\"CTEST_GIT_UPDATE_CUSTOM\",\"trigger\":\"CTEST_GIT_UPDATE_CUSTOM\\tbuiltin variable\"},{\"contents\":\"CTEST_GIT_UPDATE_OPTIONS\",\"trigger\":\"CTEST_GIT_UPDATE_OPTIONS\\tbuiltin variable\"},{\"contents\":\"CTEST_HG_COMMAND\",\"trigger\":\"CTEST_HG_COMMAND\\tbuiltin variable\"},{\"contents\":\"CTEST_HG_UPDATE_OPTIONS\",\"trigger\":\"CTEST_HG_UPDATE_OPTIONS\\tbuiltin variable\"},{\"contents\":\"CTEST_LABELS_FOR_SUBPROJECTS\",\"trigger\":\"CTEST_LABELS_FOR_SUBPROJECTS\\tbuiltin variable\"},{\"contents\":\"CTEST_MEMORYCHECK_COMMAND\",\"trigger\":\"CTEST_MEMORYCHECK_COMMAND\\tbuiltin variable\"},{\"contents\":\"CTEST_MEMORYCHECK_COMMAND_OPTIONS\",\"trigger\":\"CTEST_MEMORYCHECK_COMMAND_OPTIONS\\tbuiltin variable\"},{\"contents\":\"CTEST_MEMORYCHECK_SANITIZER_OPTIONS\",\"trigger\":\"CTEST_MEMORYCHECK_SANITIZER_OPTIONS\\tbuiltin variable\"},{\"contents\":\"CTEST_MEMORYCHECK_SUPPRESSIONS_FILE\",\"trigger\":\"CTEST_MEMORYCHECK_SUPPRESSIONS_FILE\\tbuiltin variable\"},{\"contents\":\"CTEST_MEMORYCHECK_TYPE\",\"trigger\":\"CTEST_MEMORYCHECK_TYPE\\tbuiltin variable\"},{\"contents\":\"CTEST_NIGHTLY_START_TIME\",\"trigger\":\"CTEST_NIGHTLY_START_TIME\\tbuiltin variable\"},{\"contents\":\"CTEST_P4_CLIENT\",\"trigger\":\"CTEST_P4_CLIENT\\tbuiltin variable\"},{\"contents\":\"CTEST_P4_COMMAND\",\"trigger\":\"CTEST_P4_COMMAND\\tbuiltin variable\"},{\"contents\":\"CTEST_P4_OPTIONS\",\"trigger\":\"CTEST_P4_OPTIONS\\tbuiltin variable\"},{\"contents\":\"CTEST_P4_UPDATE_OPTIONS\",\"trigger\":\"CTEST_P4_UPDATE_OPTIONS\\tbuiltin variable\"},{\"contents\":\"CTEST_RESOURCE_SPEC_FILE\",\"trigger\":\"CTEST_RESOURCE_SPEC_FILE\\tbuiltin variable\"},{\"contents\":\"CTEST_RUN_CURRENT_SCRIPT\",\"trigger\":\"CTEST_RUN_CURRENT_SCRIPT\\tbuiltin variable\"},{\"contents\":\"CTEST_SCP_COMMAND\",\"trigger\":\"CTEST_SCP_COMMAND\\tbuiltin variable\"},{\"contents\":\"CTEST_SITE\",\"trigger\":\"CTEST_SITE\\tbuiltin variable\"},{\"contents\":\"CTEST_SOURCE_DIRECTORY\",\"trigger\":\"CTEST_SOURCE_DIRECTORY\\tbuiltin variable\"},{\"contents\":\"CTEST_SUBMIT_URL\",\"trigger\":\"CTEST_SUBMIT_URL\\tbuiltin variable\"},{\"contents\":\"CTEST_SVN_COMMAND\",\"trigger\":\"CTEST_SVN_COMMAND\\tbuiltin variable\"},{\"contents\":\"CTEST_SVN_OPTIONS\",\"trigger\":\"CTEST_SVN_OPTIONS\\tbuiltin variable\"},{\"contents\":\"CTEST_SVN_UPDATE_OPTIONS\",\"trigger\":\"CTEST_SVN_UPDATE_OPTIONS\\tbuiltin variable\"},{\"contents\":\"CTEST_TEST_LOAD\",\"trigger\":\"CTEST_TEST_LOAD\\tbuiltin variable\"},{\"contents\":\"CTEST_TEST_TIMEOUT\",\"trigger\":\"CTEST_TEST_TIMEOUT\\tbuiltin variable\"},{\"contents\":\"CTEST_TRIGGER_SITE\",\"trigger\":\"CTEST_TRIGGER_SITE\\tbuiltin variable\"},{\"contents\":\"CTEST_UPDATE_COMMAND\",\"trigger\":\"CTEST_UPDATE_COMMAND\\tbuiltin variable\"},{\"contents\":\"CTEST_UPDATE_OPTIONS\",\"trigger\":\"CTEST_UPDATE_OPTIONS\\tbuiltin variable\"},{\"contents\":\"CTEST_UPDATE_VERSION_ONLY\",\"trigger\":\"CTEST_UPDATE_VERSION_ONLY\\tbuiltin variable\"},{\"contents\":\"CTEST_UPDATE_VERSION_OVERRIDE\",\"trigger\":\"CTEST_UPDATE_VERSION_OVERRIDE\\tbuiltin variable\"},{\"contents\":\"CTEST_USE_LAUNCHERS\",\"trigger\":\"CTEST_USE_LAUNCHERS\\tbuiltin variable\"},{\"contents\":\"CYGWIN\",\"trigger\":\"CYGWIN\\tbuiltin variable\"},{\"contents\":\"ENV\",\"trigger\":\"ENV\\tbuiltin variable\"},{\"contents\":\"EXECUTABLE_OUTPUT_PATH\",\"trigger\":\"EXECUTABLE_OUTPUT_PATH\\tbuiltin variable\"},{\"contents\":\"GHS-MULTI\",\"trigger\":\"GHS-MULTI\\tbuiltin variable\"},{\"contents\":\"IOS\",\"trigger\":\"IOS\\tbuiltin variable\"},{\"contents\":\"LIBRARY_OUTPUT_PATH\",\"trigger\":\"LIBRARY_OUTPUT_PATH\\tbuiltin variable\"},{\"contents\":\"MINGW\",\"trigger\":\"MINGW\\tbuiltin variable\"},{\"contents\":\"MSVC\",\"trigger\":\"MSVC\\tbuiltin variable\"},{\"contents\":\"MSVC10\",\"trigger\":\"MSVC10\\tbuiltin variable\"},{\"contents\":\"MSVC11\",\"trigger\":\"MSVC11\\tbuiltin variable\"},{\"contents\":\"MSVC12\",\"trigger\":\"MSVC12\\tbuiltin variable\"},{\"contents\":\"MSVC14\",\"trigger\":\"MSVC14\\tbuiltin variable\"},{\"contents\":\"MSVC60\",\"trigger\":\"MSVC60\\tbuiltin variable\"},{\"contents\":\"MSVC70\",\"trigger\":\"MSVC70\\tbuiltin variable\"},{\"contents\":\"MSVC71\",\"trigger\":\"MSVC71\\tbuiltin variable\"},{\"contents\":\"MSVC80\",\"trigger\":\"MSVC80\\tbuiltin variable\"},{\"contents\":\"MSVC90\",\"trigger\":\"MSVC90\\tbuiltin variable\"},{\"contents\":\"MSVC_IDE\",\"trigger\":\"MSVC_IDE\\tbuiltin variable\"},{\"contents\":\"MSVC_TOOLSET_VERSION\",\"trigger\":\"MSVC_TOOLSET_VERSION\\tbuiltin variable\"},{\"contents\":\"MSVC_VERSION\",\"trigger\":\"MSVC_VERSION\\tbuiltin variable\"},{\"contents\":\"MSYS\",\"trigger\":\"MSYS\\tbuiltin variable\"},{\"contents\":\"PROJECT_BINARY_DIR\",\"trigger\":\"PROJECT_BINARY_DIR\\tbuiltin variable\"},{\"contents\":\"PROJECT_DESCRIPTION\",\"trigger\":\"PROJECT_DESCRIPTION\\tbuiltin variable\"},{\"contents\":\"PROJECT_HOMEPAGE_URL\",\"trigger\":\"PROJECT_HOMEPAGE_URL\\tbuiltin variable\"},{\"contents\":\"PROJECT_NAME\",\"trigger\":\"PROJECT_NAME\\tbuiltin variable\"},{\"contents\":\"PROJECT_SOURCE_DIR\",\"trigger\":\"PROJECT_SOURCE_DIR\\tbuiltin variable\"},{\"contents\":\"PROJECT_VERSION\",\"trigger\":\"PROJECT_VERSION\\tbuiltin variable\"},{\"contents\":\"PROJECT_VERSION_MAJOR\",\"trigger\":\"PROJECT_VERSION_MAJOR\\tbuiltin variable\"},{\"contents\":\"PROJECT_VERSION_MINOR\",\"trigger\":\"PROJECT_VERSION_MINOR\\tbuiltin variable\"},{\"contents\":\"PROJECT_VERSION_PATCH\",\"trigger\":\"PROJECT_VERSION_PATCH\\tbuiltin variable\"},{\"contents\":\"PROJECT_VERSION_TWEAK\",\"trigger\":\"PROJECT_VERSION_TWEAK\\tbuiltin variable\"},{\"contents\":\"UNIX\",\"trigger\":\"UNIX\\tbuiltin variable\"},{\"contents\":\"WIN32\",\"trigger\":\"WIN32\\tbuiltin variable\"},{\"contents\":\"WINCE\",\"trigger\":\"WINCE\\tbuiltin variable\"},{\"contents\":\"WINDOWS_PHONE\",\"trigger\":\"WINDOWS_PHONE\\tbuiltin variable\"},{\"contents\":\"WINDOWS_STORE\",\"trigger\":\"WINDOWS_STORE\\tbuiltin variable\"},{\"contents\":\"XCODE\",\"trigger\":\"XCODE\\tbuiltin variable\"},{\"contents\":\"XCODE_VERSION\",\"trigger\":\"XCODE_VERSION\\tbuiltin variable\"}],\"scope\":\"variable.other.readwrite.cmake\"}\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/CMake/CMakeCommands.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K30\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  - match: \\bVER\u001b[1;33m\u001b[KBAT\u001b[m\u001b[KIM\\b\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/CMake/CMakeCommands.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K31\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    scope: variable.parameter.VER\u001b[1;33m\u001b[KBAT\u001b[m\u001b[KIM.cmake\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/CMake/CMakeCommands.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K59\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  - match: \\bVER\u001b[1;33m\u001b[KBAT\u001b[m\u001b[KIM\\b\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/CMake/CMakeCommands.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K60\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    scope: variable.parameter.VER\u001b[1;33m\u001b[KBAT\u001b[m\u001b[KIM.cmake\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/SCSS_Sass/Syntaxes/Sass.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1830\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          - match: '\\\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\\b'\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Elixir/builds/Elixir - mix format $file.sublime-build\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K6\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \"cmd\": [\"mix.\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\", \"format\", \"$file\", \"--dot-formatter\", \"$folder/.formatter.exs\"],\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Elixir/builds/Elixir - elixir $file.sublime-build\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K6\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \"cmd\": [\"elixir.\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\", \"$file_name\"]\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Lean.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K23\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    - match: '\\\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Ktribute\\b\\s*\\[[^\\]]*\\]'\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/PowerShell.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K86\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    - match: '(\\b(([A-Za-z0-9\\-_\\.]+)\\.(?i:exe|com|cmd|\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K))\\b)'\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/PowerShell.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K174\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    - match: '(?:(\\p{L}|\\d|_|-|\\\\|\\:)*\\\\)?\\b(?i:Add|Approve|Assert|Backup|Block|Build|Checkpoint|Clear|Close|Compare|Complete|Compress|Confirm|Connect|Convert|ConvertFrom|ConvertTo|Copy|Debug|Deny|Deploy|Disable|Disconnect|Dismount|Edit|Enable|Enter|Exit|Expand|Export|Find|Format|Get|Grant|Group|Hide|Import|Initialize|Install|Invoke|Join|Limit|Lock|Measure|Merge|Mount|Move|New|Open|Optimize|Out|Ping|Pop|Protect|Publish|Push|Read|Receive|Redo|Register|Remove|Rename|Repair|Request|Reset|Resize|Resolve|Restart|Restore|Resume|Revoke|Save|Search|Select|Send|Set|Show|Skip|Split|Start|Step|Stop|Submit|Suspend|Switch|Sync|Test|Trace|Unblock|Undo|Uninstall|Unlock|Unprotect|Unpublish|Unregister|Update|Use|Wait|Watch|Write)\\-.+?(?:\\.(?i:exe|cmd|\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K|ps1))?\\b'\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/MediaWiki/MediawikiNG.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K129\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            - meta_content_scope: meta.environment.embedded.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch.mediawiki source.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch.embedded\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/MediaWiki/MediawikiNG.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K132\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            - include: scope:source.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/MediaWiki/lib/Crypto.lin.x64/Crypto/Util/RFC1751.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K125\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K   \"BAN\", \"BAR\", \"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K\", \"BAY\", \"BE\", \"BED\", \"BEE\", \"BEG\", \"BEN\", \"BET\",\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/MediaWiki/lib/Crypto.lin.x64/Crypto/Util/RFC1751.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K189\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K   \"BARN\", \"BARR\", \"BASE\", \"BASH\", \"BASK\", \"BASS\", \"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[KE\", \"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[KH\",\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/MediaWiki/lib/Crypto.lin.x64/Crypto/SelfTest/Signature/test_vectors/wycheproof/ecdsa_test.json\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K12177\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      \"keyPem\" : \"-----BEGIN PUBLIC KEY-----\\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABHJlM+Jnc6xyChF\u001b[1;33m\u001b[KbAt\u001b[m\u001b[K6JrBWWZnfi\\nObfFd6HBW4ECex/rc+ZzYB4hGqkqzLWFvAbMJ0thyeYUdG7dJI0czPjYsatLwVzF\\njN8RYGXOl2fyoyI9\\n-----END PUBLIC KEY-----\",\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/MediaWiki/lib/Crypto.lin.x64/Crypto/SelfTest/Signature/test_vectors/wycheproof/ecdsa_test.json\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K13141\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      \"keyPem\" : \"-----BEGIN PUBLIC KEY-----\\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IA\u001b[1;33m\u001b[KBAT\u001b[m\u001b[KZ1KYtbrAgc+c4seQ5zs1UQAMZ\\nEfRRkOtgYqM1NfxSabz8JdSvwdrg662UjXcy2AKa836Jo86n3ziwIPYkkG/KbZRO\\nFIaFP+jlupz7otdKhS7Fh9Rv5JkXw2RBjvfspQ==\\n-----END PUBLIC KEY-----\",\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/MediaWiki/lib/Crypto.lin.x64/Crypto/SelfTest/Signature/test_vectors/wycheproof/ecdsa_secp256r1_sha256_test.json\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K2410\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      \"keyPem\" : \"-----BEGIN PUBLIC KEY-----\\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE3q0Rx6WzloYvIZdNxHUvre/5lO/p\\nu9\u001b[1;33m\u001b[KBat\u001b[m\u001b[KBN2XqgLbh8d4/BkDorG7c+Jz/U8QOJlu5QHijQ3Nt8HqgMY/H/h/w==\\n-----END PUBLIC KEY-----\",\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/MediaWiki/lib/Crypto.lin.x64/Crypto/SelfTest/PublicKey/test_import_RSA.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K444\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KMIIEcjCCAlqgAwIBAgI\u001b[1;33m\u001b[KBAT\u001b[m\u001b[KANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQGEwJVUzEL\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/MediaWiki/lib/Crypto.win.x64/Crypto/Util/RFC1751.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K125\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K   \"BAN\", \"BAR\", \"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K\", \"BAY\", \"BE\", \"BED\", \"BEE\", \"BEG\", \"BEN\", \"BET\",\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/MediaWiki/lib/Crypto.win.x64/Crypto/Util/RFC1751.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K189\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K   \"BARN\", \"BARR\", \"BASE\", \"BASH\", \"BASK\", \"BASS\", \"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[KE\", \"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[KH\",\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/MediaWiki/lib/Crypto.win.x64/Crypto/SelfTest/Signature/test_vectors/wycheproof/ecdsa_test.json\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K12177\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      \"keyPem\" : \"-----BEGIN PUBLIC KEY-----\\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABHJlM+Jnc6xyChF\u001b[1;33m\u001b[KbAt\u001b[m\u001b[K6JrBWWZnfi\\nObfFd6HBW4ECex/rc+ZzYB4hGqkqzLWFvAbMJ0thyeYUdG7dJI0czPjYsatLwVzF\\njN8RYGXOl2fyoyI9\\n-----END PUBLIC KEY-----\",\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/MediaWiki/lib/Crypto.win.x64/Crypto/SelfTest/Signature/test_vectors/wycheproof/ecdsa_test.json\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K13141\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      \"keyPem\" : \"-----BEGIN PUBLIC KEY-----\\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IA\u001b[1;33m\u001b[KBAT\u001b[m\u001b[KZ1KYtbrAgc+c4seQ5zs1UQAMZ\\nEfRRkOtgYqM1NfxSabz8JdSvwdrg662UjXcy2AKa836Jo86n3ziwIPYkkG/KbZRO\\nFIaFP+jlupz7otdKhS7Fh9Rv5JkXw2RBjvfspQ==\\n-----END PUBLIC KEY-----\",\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/MediaWiki/lib/Crypto.win.x64/Crypto/SelfTest/Signature/test_vectors/wycheproof/ecdsa_secp256r1_sha256_test.json\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K2410\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      \"keyPem\" : \"-----BEGIN PUBLIC KEY-----\\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE3q0Rx6WzloYvIZdNxHUvre/5lO/p\\nu9\u001b[1;33m\u001b[KBat\u001b[m\u001b[KBN2XqgLbh8d4/BkDorG7c+Jz/U8QOJlu5QHijQ3Nt8HqgMY/H/h/w==\\n-----END PUBLIC KEY-----\",\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/MediaWiki/lib/Crypto.win.x64/Crypto/SelfTest/PublicKey/test_import_RSA.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K444\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KMIIEcjCCAlqgAwIBAgI\u001b[1;33m\u001b[KBAT\u001b[m\u001b[KANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQGEwJVUzEL\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/MediaWiki/lib/Crypto.osx.x64/Crypto/Util/RFC1751.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K125\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K   \"BAN\", \"BAR\", \"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K\", \"BAY\", \"BE\", \"BED\", \"BEE\", \"BEG\", \"BEN\", \"BET\",\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/MediaWiki/lib/Crypto.osx.x64/Crypto/Util/RFC1751.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K189\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K   \"BARN\", \"BARR\", \"BASE\", \"BASH\", \"BASK\", \"BASS\", \"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[KE\", \"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[KH\",\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/MediaWiki/lib/Crypto.osx.x64/Crypto/SelfTest/Signature/test_vectors/wycheproof/ecdsa_test.json\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K12177\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      \"keyPem\" : \"-----BEGIN PUBLIC KEY-----\\nMGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABHJlM+Jnc6xyChF\u001b[1;33m\u001b[KbAt\u001b[m\u001b[K6JrBWWZnfi\\nObfFd6HBW4ECex/rc+ZzYB4hGqkqzLWFvAbMJ0thyeYUdG7dJI0czPjYsatLwVzF\\njN8RYGXOl2fyoyI9\\n-----END PUBLIC KEY-----\",\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/MediaWiki/lib/Crypto.osx.x64/Crypto/SelfTest/Signature/test_vectors/wycheproof/ecdsa_test.json\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K13141\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      \"keyPem\" : \"-----BEGIN PUBLIC KEY-----\\nMHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IA\u001b[1;33m\u001b[KBAT\u001b[m\u001b[KZ1KYtbrAgc+c4seQ5zs1UQAMZ\\nEfRRkOtgYqM1NfxSabz8JdSvwdrg662UjXcy2AKa836Jo86n3ziwIPYkkG/KbZRO\\nFIaFP+jlupz7otdKhS7Fh9Rv5JkXw2RBjvfspQ==\\n-----END PUBLIC KEY-----\",\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/MediaWiki/lib/Crypto.osx.x64/Crypto/SelfTest/Signature/test_vectors/wycheproof/ecdsa_secp256r1_sha256_test.json\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K2410\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      \"keyPem\" : \"-----BEGIN PUBLIC KEY-----\\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE3q0Rx6WzloYvIZdNxHUvre/5lO/p\\nu9\u001b[1;33m\u001b[KBat\u001b[m\u001b[KBN2XqgLbh8d4/BkDorG7c+Jz/U8QOJlu5QHijQ3Nt8HqgMY/H/h/w==\\n-----END PUBLIC KEY-----\",\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/MediaWiki/lib/Crypto.osx.x64/Crypto/SelfTest/PublicKey/test_import_RSA.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K444\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KMIIEcjCCAlqgAwIBAgI\u001b[1;33m\u001b[KBAT\u001b[m\u001b[KANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQGEwJVUzEL\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Julia/julia_unicode/emoji_symbols.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K69\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  (\"\\\\:\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Ktery:\", u\"🔋\"),\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Julia/julia_unicode/emoji_symbols.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K576\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  (\"\\\\:tana\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Ka_tree:\", u\"🎋\"),\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Julia/julia_unicode/emoji_symbols.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K729\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  (\"\\\\:\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kh:\", u\"🛀\"),\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Julia/julia_unicode/emoji_symbols.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K804\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  (\"\\\\:\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Khtub:\", u\"🛁\"),\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Crystal.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K136\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    - match: '\\b(initialize|new|loop|include|extend|raise|getter|setter|property|class_getter|class_setter|class_property|describe|context|it|with|delegate|def_hash|def_equals|def_equals_and_hash|forward_missing_to|record|assert_responds_to|spawn|annotation|ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim)\\b[!?]?'\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Dart/docgen.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K30\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            cmd = [\"docgen.\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\", \"--no-include-sdk\", path]\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Dart/docgen.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K58\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            cmd = [\"docgen.\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\", \"--no-include-sdk\", \"--serve\", path]\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Dart/lib/sdk.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K177\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        return self.get_bin_tool('pub', '.\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K')\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Dart/lib/sdk.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K183\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        return self.get_bin_tool('dart2js', '.\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K')\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Dart/lib/sdk.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K189\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        return self.get_bin_tool('dartanalyzer', '.\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K')\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Dart/lib/sdk.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K195\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        return self.get_bin_tool('docgen', '.\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K')\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Dart/lib/sdk.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K247\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        self.path = SDK().get_bin_tool('dartfmt', '.\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K')\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Dart/sublime_plugin_lib/path.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K142\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    Useful to add .exe to @original, .\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K, etc if ST is running on Windows.\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Dart/sublime_plugin_lib/path.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K186\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \"\"\" Useful to add .exe, .\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K, etc. to @original if ST is running on\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Dart/Support/Dart.sublime-build\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K19\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                \"cmd\": [\"dart2js.\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\", \"--minify\", \"-o$file.js\", \"$file\"]\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Dart/Support/Dart - Pubspec.sublime-build\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K21\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                \"cmd\": [\"pub.\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\", \"upgrade\"]\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Dart/Support/Dart - Pubspec.sublime-build\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K36\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                \"cmd\": [\"pub.\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\", \"version\"]\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/LESS/Syntaxes/LESS.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1709\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          - match: '\\\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\\b'\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Email/README.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K15\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K:mouse: Using [\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K](https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K) *(\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K is a cat clone with syntax highlighting and Git integration)*\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Email/README.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K16\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K![\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K](https://raw.githubusercontent.com/mariozaizar/email.sublime-syntax/master/demo/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.png)\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Email/link_bat.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K3\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K# We use \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K to verify the sintax. \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K is a cat clone with syntax highlighting\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Email/link_bat.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K4\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K# and Git integration. \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K uses syntect library for syntax highlighting which\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Email/link_bat.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K7\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K# https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Email/link_bat.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K9\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --version || brew install \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K # Mac OS only\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Email/link_bat.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K11\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PATH=$(\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --config-dir)\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Email/link_bat.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K13\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kmkdir -p \"$\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PATH/syntaxes\"\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Email/link_bat.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K14\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kmkdir -p \"$\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PATH/themes\"\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Email/link_bat.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K16\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KINSTALL_PATH=${\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PATH}/syntaxes\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Email/link_bat.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K19\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K cache --build\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Email/link_bat.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K20\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --list-languages | grep \"Email\"\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/Email/link_bat.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K22\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K demo/email.eml\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/TypeScript.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K2446\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        |AudioNode|AudioParam|\u001b[1;33m\u001b[KBat\u001b[m\u001b[KteryManager|BeforeUnloadEvent|BiquadFilterNode|Blob|BufferSource|ByteString|CSS|CSSConditionRule\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/HTML (Twig)/Preferences/Indentation.tmPreferences\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K22\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            ^\\s*\\{%-?\\s(end(?:autoescape|block|embed|filter|for|if|macro|raw|sandbox|set|spaceless|trans|ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim)|(else))(?:(?!%\\}).)*\\s-?%\\}\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/HTML (Twig)/Preferences/Indentation.tmPreferences\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K36\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            ^\\s*\\{%-?\\s(autoescape|block|embed|filter|for|if|else|macro|raw|sandbox|set|spaceless|trans|ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim)(?:(?!%\\}).)*\\s-?%\\}(?!.*\\{%-?\\send\\1)\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/HTML (Twig)/Preferences/Folding.tmPreferences\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K16\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t        |\\{%\\s+(autoescape|block|embed|filter|for|if|macro|raw|sandbox|set|spaceless|trans|ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim)\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/HTML (Twig)/Preferences/Folding.tmPreferences\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K23\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t        |\\{%\\s+end(autoescape|block|embed|filter|for|if|macro|raw|sandbox|set|spaceless|trans|ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim)\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/HTML (Twig)/Snippets/verbatim.tmSnippet\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K6\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    <string>{% ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim %}\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/HTML (Twig)/Snippets/verbatim.tmSnippet\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K8\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K{% endver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim %}</string>\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/HTML (Twig)/Snippets/verbatim.tmSnippet\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K10\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    <string>ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim</string>\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/HTML (Twig)/Snippets/verbatim.tmSnippet\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K14\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    <string>ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim</string>\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/HTML (Twig)/Syntaxes/HTML (Twig).tmLanguage\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1374\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            <string>(?&lt;=\\s)((?:end)?(?:autoescape|block|embed|filter|for|if|macro|raw|sandbox|set|spaceless|trans|ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim)|as|do|else|elseif|extends|flush|from|ignore missing|import|include|only|use|with)(?=\\s)</string>\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/HTML (Twig)/Syntaxes/HTML (Twig).tmLanguage\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1590\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            <string>(?&lt;=(?:[a-zA-Z0-9_\\x{7f}-\\x{ff}\\]\\)\\'\\\"]\\|)|\\{%\\sfilter\\s)(\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch|convert_encoding|date|date_modify|default|e(?:scape)?|format|join|merge|number_format|replace|round|slice|split|trim)(\\()</string>\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/requirementstxt/LICENSE\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K5\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K Everyone is permitted to copy and distribute ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim copies\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/requirementstxt/LICENSE\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K195\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  4. Conveying Ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim Copies.\n\u001b[35m\u001b[Kassets/syntaxes/02_Extra/requirementstxt/LICENSE\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K197\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  You may convey ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim copies of the Program's source code as you\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Symbol List.tmPreferences\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K7\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t<string>source.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch entity.name.label - meta.function-call</string>\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K4\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kname: \u001b[1;33m\u001b[KBat\u001b[m\u001b[Kch File\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K6\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  - \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K8\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kscope: source.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K31\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      scope: keyword.control.statement.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K34\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        1: keyword.control.statement.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K35\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        2: punctuation.separator.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K36\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        3: keyword.control.flow.return.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K37\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        4: meta.function-call.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch variable.function.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K40\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        1: keyword.control.conditional.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K41\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        2: keyword.operator.logical.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K42\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        3: keyword.other.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K44\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      scope: keyword.control.conditional.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K46\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      scope: keyword.control.repeat.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K50\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      scope: keyword.command.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K60\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      scope: keyword.command.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K64\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      scope: keyword.command.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K74\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          1: punctuation.definition.string.begin.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K75\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          2: variable.other.readwrite.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K76\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          3: keyword.operator.assignment.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K78\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          - meta_scope: string.quoted.double.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K80\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            scope: punctuation.definition.string.end.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K88\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          1: variable.other.readwrite.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K89\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          2: keyword.operator.assignment.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K91\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          - meta_content_scope: string.unquoted.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K96\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            scope: punctuation.definition.string.begin.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K98\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K              - meta_scope: string.quoted.double.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K101\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                scope: punctuation.definition.string.end.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K108\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        scope: variable.other.readwrite.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K112\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          - meta_content_scope: meta.expression.set.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K120\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K              1: variable.other.readwrite.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K121\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K              2: keyword.operator.assignment.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K123\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K              - meta_scope: meta.prompt.set.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K132\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                    scope: comment.line.ignored.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K135\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                  - meta_content_scope: string.unquoted.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K145\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      scope: punctuation.section.group.begin.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K148\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      scope: punctuation.definition.string.begin.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K153\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    - meta_scope: meta.group.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K155\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      scope: punctuation.section.group.end.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K158\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      scope: punctuation.definition.string.begin.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K164\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      scope: keyword.operator.assignment.augmented.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K167\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        1: constant.character.escape.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K168\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        2: keyword.operator.assignment.augmented.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K170\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      scope: keyword.operator.arithmetic.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K173\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        1: constant.character.escape.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K174\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        2: keyword.operator.arithmetic.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K176\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      scope: keyword.operator.assignment.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K180\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      scope: keyword.operator.assignment.augmented.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K182\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      scope: keyword.operator.arithmetic.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K186\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    - meta_scope: string.quoted.double.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K190\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      scope: punctuation.definition.string.end.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K193\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      scope: punctuation.section.group.begin.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K195\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        - meta_scope: meta.group.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K202\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    - meta_scope: meta.group.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K204\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      scope: punctuation.section.group.end.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K207\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      scope: punctuation.definition.string.end.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K214\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    - meta_scope: string.quoted.double.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch meta.group.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K216\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      scope: punctuation.section.group.begin.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K219\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      scope: punctuation.section.group.end.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K227\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      scope: keyword.operator.logical.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K233\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      scope: variable.other.readwrite.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K238\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      scope: variable.parameter.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K240\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        1: punctuation.definition.variable.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K242\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      scope: variable.language.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K244\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        1: punctuation.definition.variable.begin.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K245\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        2: punctuation.definition.variable.end.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K252\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      scope: punctuation.definition.variable.begin.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K254\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        - meta_scope: variable.other.readwrite.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K257\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            1: punctuation.definition.variable.end.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K261\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          scope: punctuation.separator.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K263\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            - meta_content_scope: meta.variable.substring.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K269\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          scope: punctuation.separator.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K271\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            - meta_content_scope: meta.variable.substitution.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K276\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K              scope: punctuation.separator.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K282\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                  scope: string.unquoted.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K287\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      scope: punctuation.definition.variable.begin.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K289\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        - meta_scope: variable.other.readwrite.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K292\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            1: punctuation.definition.variable.end.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K296\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          scope: punctuation.separator.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K298\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            - meta_content_scope: meta.variable.substring.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K304\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          scope: punctuation.separator.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K306\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            - meta_content_scope: meta.variable.substitution.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K312\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K              scope: punctuation.separator.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K318\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                  scope: string.unquoted.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K322\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      scope: string.unquoted.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K326\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      scope: constant.numeric.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K331\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      scope: punctuation.separator.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K335\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      scope: constant.numeric.integer.hexadecimal.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K337\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        1: punctuation.definition.numeric.hexadecimal.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K339\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      scope: constant.numeric.integer.octal.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K341\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        1: punctuation.definition.numeric.octal.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K343\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      scope: constant.numeric.integer.decimal.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K347\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      scope: constant.language.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K351\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      scope: keyword.operator.at.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K353\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      scope: keyword.operator.comparison.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K355\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      scope: keyword.operator.logical.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K357\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      scope: keyword.operator.conditional.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K359\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      scope: keyword.operator.pipe.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K361\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      scope: keyword.operator.redirection.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K366\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        1: punctuation.separator.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K367\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        2: entity.name.label.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K372\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        1: keyword.operator.conditional.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K375\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          scope: comment.line.rem.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K378\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          scope: punctuation.definition.comment.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K380\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            - meta_scope: comment.line.colon.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K386\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      scope: keyword.command.rem.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K390\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        - meta_content_scope: comment.line.rem.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K392\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          scope: comment.line.rem.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K395\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          scope: invalid.illegal.unexpected-character.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K399\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      scope: punctuation.definition.string.begin.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K401\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        - meta_scope: string.quoted.double.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K404\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            1: punctuation.definition.string.end.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K405\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            2: invalid.illegal.newline.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K412\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      scope: punctuation.section.group.begin.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K414\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        - meta_scope: meta.group.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K416\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          scope: punctuation.section.group.end.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K419\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          scope: punctuation.separator.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Batch File.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K424\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    scope: constant.character.escape.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/Comments.tmPreferences\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K7\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t<string>source.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch</string>\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K:: SYNTAX TEST \"Packages/\u001b[1;33m\u001b[KBat\u001b[m\u001b[Kch File/\u001b[1;33m\u001b[KBat\u001b[m\u001b[Kch File.sublime-syntax\"\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K4\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K:: ^^^                  keyword.command.rem.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K5\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::     ^^^^^^^^^^^^^^^^ comment.line.rem.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K6\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::           ^          invalid.illegal.unexpected-character.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K7\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::               ^      invalid.illegal.unexpected-character.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K8\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                    ^ invalid.illegal.unexpected-character.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K12\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K:: ^^^^^^^^^^^^^ - comment.line.rem.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K19\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K:: ^^         punctuation.definition.comment.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K20\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K:: ^^^^^^^^^^ comment.line.colon.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K23\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K:: ^^         punctuation.definition.comment.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K26\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K:: ^^         punctuation.definition.comment.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K29\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K:: ^^         punctuation.definition.comment.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K32\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K:: ^^         punctuation.definition.comment.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K35\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K:: ^^         punctuation.definition.comment.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K46\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::   ^ keyword.operator.conditional.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K47\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::    ^^ punctuation.definition.comment.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K48\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::    ^^^^^^^^^^^^ comment.line.colon.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K51\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::^^ punctuation.definition.comment.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K52\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::^^^^^^^^^^^^^^^^^^^^^^ comment.line.colon.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K55\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::      ^       punctuation.definition.string.begin.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K56\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::      ^^^^^   string.quoted.double.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K57\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::          ^   punctuation.definition.string.end.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K60\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::    ^ invalid.illegal.newline.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K63\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K:: ^ keyword.operator.at.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K66\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K:: ^ - keyword.operator.at.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K69\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K:: ^^^^ keyword.control.statement.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K70\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::     ^ punctuation.separator.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K71\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::      ^^^ keyword.control.flow.return.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K74\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K:: ^^^^ keyword.control.statement.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K75\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::      ^ punctuation.separator.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K76\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::       ^^^ meta.function-call.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch variable.function.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K79\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K:: ^^^^ keyword.control.statement.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K80\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::     ^ punctuation.separator.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K81\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::      ^^^ meta.function-call.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch variable.function.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K85\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K:: ^^^^                keyword.command.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K86\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                   ^ keyword.operator.redirection.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K89\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::      ^^     keyword.operator.redirection.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K93\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::     ^ keyword.operator.redirection.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K94\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::              ^^ keyword.operator.redirection.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K97\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::      ^^ keyword.operator.conditional.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K98\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::              ^^ keyword.operator.conditional.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K99\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                      ^ keyword.operator.conditional.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K103\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K:: ^^         keyword.control.conditional.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K104\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::        ^^^ keyword.operator.comparison.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K107\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K:: ^^             keyword.control.conditional.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K108\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::    ^^^         keyword.operator.logical.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K109\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::            ^^^ keyword.operator.comparison.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K113\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K:: ^^              keyword.control.conditional.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K114\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::    ^^^^^^^^^^^^ variable.language.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K115\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::    ^ punctuation.definition.variable.begin.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K116\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::               ^ variable.language.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch punctuation.definition.variable.end.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K119\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K:: ^^         keyword.control.conditional.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K120\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::        ^^  keyword.operator.comparison.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K123\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K:: ^^^                 keyword.control.repeat.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K124\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::             ^       constant.numeric.integer.decimal.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K127\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::          ^ keyword.operator.pipe.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K130\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::^    punctuation.separator.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K131\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K:: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ entity.name.label.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K134\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::^    punctuation.separator.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K135\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K:: ^^^ entity.name.label.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K138\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::      ^ punctuation.definition.variable.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K139\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::      ^^ variable.parameter.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K140\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::         ^ punctuation.definition.variable.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K141\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::         ^^ variable.parameter.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K142\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::            ^ punctuation.definition.variable.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K143\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::            ^^^^^^^^^^^ variable.parameter.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K144\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                         ^ punctuation.definition.variable.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K145\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                         ^^^ variable.parameter.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K148\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::      ^ punctuation.definition.variable.begin.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K149\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::      ^^^^^^^^^^ variable.other.readwrite.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K150\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::               ^ punctuation.definition.variable.end.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K151\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                 ^ punctuation.definition.variable.begin.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K152\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                 ^^^^^^^^^^ variable.other.readwrite.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K153\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                          ^ punctuation.definition.variable.end.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K156\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::   ^^^^^^^^^^^^^^^ variable.other.readwrite.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K157\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::   ^ punctuation.definition.variable.begin.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K158\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::       ^ punctuation.separator.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K159\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::        ^^^^^^^^^ meta.variable.substitution.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K160\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::        ^^^^ string.unquoted.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K161\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::            ^ punctuation.separator.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K162\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::             ^^^^ string.unquoted.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K163\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                 ^ punctuation.definition.variable.end.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K164\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                   ^^^^^^^^^^^^^^^ variable.other.readwrite.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K165\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                   ^ punctuation.definition.variable.begin.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K166\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                       ^ punctuation.separator.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K167\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                        ^^^^^^^^^ meta.variable.substitution.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K168\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                        ^^^^ string.unquoted.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K169\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                            ^ punctuation.separator.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K170\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                             ^^^^ string.unquoted.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K171\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                                 ^ punctuation.definition.variable.end.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K175\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::   ^^^^^^^^^^^^^^ variable.other.readwrite.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K176\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::   ^ punctuation.definition.variable.begin.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K177\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::          ^^ punctuation.separator.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K178\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::            ^^^^ meta.variable.substring.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K179\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::            ^ constant.numeric.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K180\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::             ^ punctuation.separator.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K181\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::              ^^ constant.numeric.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K182\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                ^ punctuation.definition.variable.end.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K183\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                  ^^^^^^^^^^^^^^ variable.other.readwrite.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K184\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                  ^ punctuation.definition.variable.begin.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K185\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                         ^^ punctuation.separator.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K186\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                           ^^^^ meta.variable.substring.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K187\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                           ^ constant.numeric.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K188\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                            ^ punctuation.separator.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K189\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                             ^^ constant.numeric.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K190\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                               ^ punctuation.definition.variable.end.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K193\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::   ^^^^^^^ variable.other.readwrite.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K194\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::   ^ punctuation.definition.variable.begin.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K195\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::     ^^ punctuation.separator.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K196\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::       ^^ meta.variable.substring.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K197\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::       ^^ constant.numeric.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K198\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::         ^ punctuation.definition.variable.end.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K199\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::           ^^^^^^^ variable.other.readwrite.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K200\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::           ^ punctuation.definition.variable.begin.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K201\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::             ^^ punctuation.separator.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K202\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::               ^^ meta.variable.substring.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K203\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::               ^^ constant.numeric.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K204\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                 ^ punctuation.definition.variable.end.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K207\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::   ^^^^^^^^^^^^^^^^^^^^^ variable.other.readwrite.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K208\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::   ^ punctuation.definition.variable.begin.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K209\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::      ^^^^^ meta.variable.substitution.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch variable.other.readwrite.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K210\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::      ^ meta.variable.substitution.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch punctuation.definition.variable.begin.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K211\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::          ^ meta.variable.substitution.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch punctuation.definition.variable.end.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K212\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::            ^ meta.variable.substitution.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch punctuation.definition.variable.begin.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K213\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::            ^^^^^^^^^^^ meta.variable.substitution.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch variable.other.readwrite.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K214\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                  ^^^^ meta.variable.substitution.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch meta.variable.substring.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K215\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                      ^ meta.variable.substitution.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch punctuation.definition.variable.end.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K216\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                    ^^ meta.variable.substitution.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch constant.numeric.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K217\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                       ^ punctuation.definition.variable.end.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K220\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::   ^^^^^^^^^^^^^^^^^^^ variable.other.readwrite.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K221\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::   ^ punctuation.definition.variable.begin.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K222\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::          ^ meta.variable.substitution.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch punctuation.definition.variable.begin.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K223\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::          ^^^^^^^^^^^ meta.variable.substitution.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch variable.other.readwrite.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K224\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                ^^^^ meta.variable.substitution.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch meta.variable.substring.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K225\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                    ^ meta.variable.substitution.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch punctuation.definition.variable.end.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K226\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                  ^^ meta.variable.substitution.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch constant.numeric.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K227\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                     ^ punctuation.definition.variable.end.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K230\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::      ^^^^^^^^^^^^ - variable.other.readwrite.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K231\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::   ^^^             - keyword.operator.logical.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K234\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::      ^^^^^^^^^^^^ - variable.other.readwrite.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K235\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::   ^^^             - keyword.operator.logical.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K239\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::         ^^^ constant.numeric.integer.octal.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K240\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::         ^ punctuation.definition.numeric.octal.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K241\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::               ^^^^ constant.numeric.integer.hexadecimal.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K242\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::               ^^ punctuation.definition.numeric.hexadecimal.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K243\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                      ^^ constant.numeric.integer.decimal.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K247\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::   ^^ constant.character.escape.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K248\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::      ^^^ constant.character.escape.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K249\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::          ^^ constant.character.escape.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K253\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::        ^^^^^^^^^ meta.expression.set.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K254\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::            ^^^ keyword.operator.assignment.augmented.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K257\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::            ^^ keyword.operator.assignment.augmented.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K260\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::            ^^ keyword.operator.assignment.augmented.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K263\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::            ^^ keyword.operator.assignment.augmented.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K266\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::            ^^ keyword.operator.assignment.augmented.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K269\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::            ^^ keyword.operator.assignment.augmented.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K272\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::            ^^^ keyword.operator.assignment.augmented.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K275\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::            ^ keyword.operator.assignment.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K276\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::             ^ keyword.operator.logical.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K279\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::             ^^^^^ meta.group.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K280\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::             ^ punctuation.section.group.begin.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K281\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                 ^ punctuation.section.group.end.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K282\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::            ^ keyword.operator.assignment.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K283\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::               ^ keyword.operator.arithmetic.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K284\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                  ^ keyword.operator.arithmetic.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K287\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::            ^ keyword.operator.assignment.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K288\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::              ^ punctuation.separator.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K289\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                     ^ keyword.operator.assignment.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K290\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                         ^ keyword.operator.arithmetic.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K293\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::            ^ keyword.operator.assignment.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K294\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::              ^^ keyword.operator.arithmetic.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K297\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::            ^ keyword.operator.assignment.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K298\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::              ^^ keyword.operator.arithmetic.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K301\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::            ^ keyword.operator.assignment.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K302\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::              ^^ keyword.operator.arithmetic.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K305\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::            ^ keyword.operator.assignment.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K306\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::              ^ keyword.operator.arithmetic.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K309\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::            ^ keyword.operator.assignment.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K310\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::              ^ keyword.operator.arithmetic.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K313\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::            ^ keyword.operator.assignment.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K314\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::              ^ keyword.operator.arithmetic.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K317\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::            ^^ keyword.operator.assignment.augmented.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K320\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::            ^ keyword.operator.assignment.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K321\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                ^ keyword.operator.arithmetic.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K324\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::            ^ keyword.operator.assignment.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K325\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                ^ keyword.operator.arithmetic.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K328\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::            ^ keyword.operator.assignment.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K329\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                ^ keyword.operator.arithmetic.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K332\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::            ^ keyword.operator.assignment.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K333\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                ^ keyword.operator.arithmetic.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K336\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::            ^ keyword.operator.assignment.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K337\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::             ^ keyword.operator.arithmetic.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K340\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::            ^^^ keyword.operator.assignment.augmented.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K343\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::            ^^ keyword.operator.assignment.augmented.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K346\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::               ^ keyword.operator.assignment.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K347\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                    ^ keyword.operator.arithmetic.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K348\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                        ^ punctuation.separator.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K349\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                              ^ keyword.operator.assignment.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K350\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                                      ^ keyword.operator.arithmetic.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K436\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::  ^^^^^^^^^^^ variable.other.readwrite.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K444\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                           ^^^^^^^^^^^ string.quoted.double.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K445\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                            ^^ constant.character.escape.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K446\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                              ^ - constant.character.escape.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K447\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                               ^^ constant.character.escape.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K448\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                                 ^ - constant.character.escape.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K449\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                                  ^^ constant.character.escape.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K450\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                                    ^ - constant.character.escape.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K454\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K:: ^^^^ - variable.other.readwrite.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K455\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::     ^^^^^ variable.other.readwrite.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K456\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::          ^ keyword.operator.assignment.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K457\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::           ^ keyword.operator.redirection.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K459\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                      ^ punctuation.definition.variable.begin.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K460\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                      ^^^^^^^ variable.other.readwrite.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K461\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                            ^ punctuation.definition.variable.end.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K464\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K:: ^^^^ - variable.other.readwrite.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K465\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::     ^^^^^ variable.other.readwrite.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K466\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::          ^ keyword.operator.assignment.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K467\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::           ^^^^^^^^^^^^^ meta.prompt.set.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch string.unquoted - variable.other.readwrite.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K468\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                        ^ - meta.prompt.set.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K470\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K:: ^^^^ - variable.other.readwrite.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K471\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::     ^^^^^ variable.other.readwrite.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K472\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::          ^ keyword.operator.assignment.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K473\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.prompt.set.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch string.unquoted - variable.other.readwrite.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch - comment\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K474\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                                                     ^ - meta.prompt.set.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K476\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K:: ^^^^ - variable.other.readwrite.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K477\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::     ^^^^^ variable.other.readwrite.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K478\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::          ^ keyword.operator.assignment.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K479\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::           ^ - meta.prompt.set.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K493\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::  ^^^^^^ variable.other.readwrite.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K494\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::         ^^^^^^ variable.other.readwrite.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K498\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::  ^^^^ variable.other.readwrite.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K499\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::      ^ keyword.operator.assignment.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K500\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::       ^ punctuation.definition.string.begin.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K501\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ string.quoted.double.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K502\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                               ^^^^^^^^^ variable.other.readwrite.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K503\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                                         ^^ constant.character.escape.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K504\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                                               ^ punctuation.definition.string.end.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K505\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                                                ^^^ string.unquoted.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K508\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::^^^^^^ keyword.command.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K510\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::   ^^^^ - variable.other.readwrite.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K511\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::       ^^^^^^^ variable.other.readwrite.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K512\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::              ^ keyword.operator.assignment.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K513\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::               ^ punctuation.definition.string.begin.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K514\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::               ^^^^^^^^^^^^^^^^^^^^^^^^^ meta.prompt.set.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch string.quoted\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K515\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                                       ^ punctuation.definition.string.end.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K516\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                                         ^ keyword.operator.conditional.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch - meta.prompt.set.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch - string\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K517\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                                           ^^^^ keyword.command.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K518\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::                                                                   ^^^^^^^^^ variable.other.readwrite.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K520\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::^^^^^^ keyword.command.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K542\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K:: ^^^^ - variable.other.readwrite.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K543\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::     ^^^^^ variable.other.readwrite.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K544\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::          ^ keyword.operator.assignment.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch - variable.other.readwrite.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Batch File/syntax_test_batch_file.bat\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K545\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K::           ^^^^^^^^^^^^^^^^ meta.prompt.set.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch string.quoted - variable.other.readwrite.dos\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch - comment\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/CSS/CSS.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1257\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          - match: '\\\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\\b'\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/C#/tests/syntax_test_Strings.cs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K35\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kvar ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim_singleline = @\"foo\";\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/C#/tests/syntax_test_Strings.cs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K37\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kvar ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim_singleline_interpolated_none = $@\"foo bar\";\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/C#/tests/syntax_test_Strings.cs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K39\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kvar ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim_singleline_interpolated_yes = $@\"foo {bar} foo\";\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/C#/tests/syntax_test_Strings.cs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K42\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kvar ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim_multiline = @\"foo bar\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/C#/tests/syntax_test_Strings.cs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K45\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kvar ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim_multiline_interpolated_none = $@\"foo bar\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/C#/tests/syntax_test_Strings.cs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K48\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kvar ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim_multiline_interpolated_yes = $@\"foo {bar}\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/C#/tests/syntax_test_GeneralStructure.cs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K344\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                case BLBody\u001b[1;33m\u001b[KBat\u001b[m\u001b[KtleLibrary.ContextType.TapUp:\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/C#/tests/syntax_test_Generics.cs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K57\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kstring ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim = @\"This is a test \"\" of a ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim string literal - C:\\User\";\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/C#/tests/syntax_test_c#.cs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K35\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kstring ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim = @\"This is a test \"\" of a ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim string literal - C:\\User\";\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/PHP/PHP.sublime-completions\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K2082\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t\t{ \"trigger\": \"mssql_fetch_\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch\", \"contents\": \"mssql_fetch_\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch(${1:result})\" },\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/PHP/PHP Source.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K407\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        # ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim and the indexer should find the name in the original source\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/PHP/PHP Source.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K447\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        # ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim and the indexer should find the name in the original source\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/PHP/PHP Source.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K2082\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          mssql_bind | mssql_close | mssql_connect | mssql_data_seek | mssql_execute | mssql_fetch_array | mssql_fetch_assoc | mssql_fetch_\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch |\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K29\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    - include: ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K311\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim:\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K312\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    - match: '((\\\\)begin)(\\{)\\s*((?:[vV]er\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim|alltt)\\*?)\\s*(\\})'\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K321\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        - meta_scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K322\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        - meta_content_scope: markup.raw.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K541\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        - meta_scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.verb.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K777\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        - meta_scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.lstinline.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K784\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            - meta_content_scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.lstinline.latex markup.raw.verb.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K786\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K              scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.lstinline.latex punctuation.definition.group.brace.end.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K792\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            - meta_content_scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.lstinline.latex markup.raw.verb.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K794\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K              scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.lstinline.latex punctuation.definition.verb.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K806\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        - meta_scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.lstlisting.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K938\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        - meta_scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1146\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        - meta_scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1149\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1157\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          embed_scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex meta.environment.embedded.c.latex source.c.embedded\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1163\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1171\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          embed_scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex meta.environment.embedded.c++.latex source.c++.embedded\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1177\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1185\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          embed_scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex meta.environment.embedded.diff.latex source.diff.embedded\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1191\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1199\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          embed_scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex meta.environment.embedded.go.latex source.go.embedded\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1205\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1213\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          embed_scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex meta.environment.embedded.haskell.latex source.haskell.embedded\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1219\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1227\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          embed_scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex meta.environment.embedded.html.latex text.html.embedded\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1233\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1241\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          embed_scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex meta.environment.embedded.java.latex source.java.embedded\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1247\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1255\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          embed_scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex meta.environment.embedded.js.latex source.js.embedded\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1261\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1269\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          embed_scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex meta.environment.embedded.json.latex source.json.embedded\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1275\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1283\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          embed_scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex meta.environment.embedded.latex.latex text.tex.latex.embedded\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1289\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1297\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          embed_scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex meta.environment.embedded.lisp.latex source.lisp.embedded\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1303\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1311\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          embed_scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex meta.environment.embedded.lua.latex source.lua.embedded\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1317\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1325\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          embed_scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex meta.environment.embedded.objc.latex source.objc.embedded\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1331\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1339\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          embed_scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex meta.environment.embedded.objc++.latex source.objc++.embedded\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1345\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1353\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          embed_scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex meta.environment.embedded.perl.latex source.perl.embedded\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1359\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1367\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          embed_scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex meta.environment.embedded.php.latex source.php.embedded\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1373\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1381\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          embed_scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex meta.environment.embedded.python.latex source.python.embedded\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1387\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1395\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          embed_scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex meta.environment.embedded.r.latex source.r.embedded\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1401\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1409\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          embed_scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex meta.environment.embedded.ruby.latex source.ruby.embedded\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1415\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1423\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          embed_scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex meta.environment.embedded.shell.latex source.shell.embedded\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1429\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1437\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          embed_scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex meta.environment.embedded.sql.latex source.sql.embedded\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1443\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1451\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          embed_scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex meta.environment.embedded.xml.latex text.xml.embedded\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1457\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/LaTeX.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1465\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K          embed_scope: meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex meta.environment.embedded.yaml.latex source.yaml.embedded\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/syntax_test_latex.tex\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K261\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K% VER\u001b[1;33m\u001b[KBAT\u001b[m\u001b[KIM\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/syntax_test_latex.tex\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K267\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K%      ^ meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.verb.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/syntax_test_latex.tex\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K271\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K%      ^ meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.verb.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/syntax_test_latex.tex\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K274\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K% ^^^^^^^^^^^^^^ meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.verb.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/syntax_test_latex.tex\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K277\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K% <- - meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.verb.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/syntax_test_latex.tex\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K279\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\\begin{ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim}\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/syntax_test_latex.tex\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K282\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KThe \\emph{ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim} environment sets everything in ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/syntax_test_latex.tex\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K283\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K% <- meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/syntax_test_latex.tex\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K284\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K% ^ markup.raw.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/syntax_test_latex.tex\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K290\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\\end{ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim}\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/syntax_test_latex.tex\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K397\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K% <- meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.lstlisting.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/syntax_test_latex.tex\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K407\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K% <- meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.lstlisting.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/syntax_test_latex.tex\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K415\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K% <- meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.lstlisting.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/syntax_test_latex.tex\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K423\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K% ^^^^^^^^^^^^^^^^^^^^^ meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.lstinline.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/syntax_test_latex.tex\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K428\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K%                      ^ - meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.lstinline.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/syntax_test_latex.tex\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K431\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K% ^^^^^^^^^^^^^^^^^^^^^ meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.lstinline.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/syntax_test_latex.tex\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K433\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K%                      ^ - meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.lstinline.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/syntax_test_latex.tex\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K443\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K% <- meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/syntax_test_latex.tex\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K451\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K%             ^ meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/syntax_test_latex.tex\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K459\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K%             ^ meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/LaTeX/syntax_test_latex.tex\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K464\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K%                    ^ meta.environment.ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim.minted.latex\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Java/Ant.sublime-build\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K10\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t\t\"cmd\": [\"ant.\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\"]\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Matlab/Matlab.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K325\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    - match: \\b(zerom|zero22pi|zdatam-ui|zdatam|wrapToPi|wrapTo360|wrapTo2Pi|wrapTo180|worldmap|worldfilewrite|worldfileread|westof|vmap0ui|vmap0rhead|vmap0read|vmap0data|vinvtran|viewshed|vfwdtran|vec2mtx|utmzoneui|utmzone|utmgeoid|usgsdems|usgsdem|usgs24kdem|usamap|updategeostruct|unwrapMultipart|unitstr|unitsratio|undotrim|undoclip|uimaptbx|trimdata|trimcart|trackui|trackg|track2|track1|track|toRadians|toDegrees|tissot|timezone|timedim|time2str|tightmap|tigerp|tigermif|tgrline|textm|tbase|tagm-ui|tagm|symbolm|surfm|surflsrm|surflm|surfdist|surfacem|str2angle|stem3m|stdm|stdist|spzerom|spcread|smoothlong|sm2rad|sm2nm|sm2km|sm2deg|sizem|showm-ui|showm|showaxes|shapewrite|shaperead|shapeinfo|shaderel|setpostn|setm|setltln|seedm|sectorg|sec2hr|sec2hms|sec2hm|sdtsinfo|sdtsdemread|scxsc|scirclui|scircleg|scircle2|scircle1|scatterm|scaleruler|sat\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kh|rsphere|roundn|rotatetext|rotatem|rootlayr|rhxrh|restack|resizem|removeExtraNanSeparators|refvec2mat|refmat2vec|reducem|reckon|readmtx|readfk5|readfields|rcurve|rad2sm|rad2nm|rad2km|rad2dms|rad2dm|rad2deg|quiverm|quiver3m|qrydata|putpole|projlist|projinv|projfwd|project|previewmap|polyxpoly|polysplit|polymerge|polyjoin|polycut|polybool|poly2fv|poly2cw|poly2ccw|polcmap|plotm|plot3m|plabel|pixcenters|pix2map|pix2latlon|pcolorm|patchm|patchesm|parallelui|paperscale|panzoom|originui|org2pol|onem|npi2pi|northarrow|nm2sm|nm2rad|nm2km|nm2deg|newpole|neworig|navfix|nanm|nanclip|namem|n2ecc|mobjects|mlayers|mlabelzero22pi|mlabel|minvtran|minaxis|mfwdtran|meshm|meshlsrm|meshgrat|meridianfwd|meridianarc|meanm|mdistort|mat2hms|mat2dms|mapview|maptrims|maptrimp|maptriml|maptrim|maptool|mapshow|maps|mapprofile|mapoutline|maplist|mapbbox|map2pix|makesymbolspec|makerefmat|makemapped|makedbfspec|makeattribspec|majaxis|lv2ecef|ltln2val|los2|linem|linecirc|limitm|lightmui|lightm|legs|lcolorbar|latlon2pix|kmlwrite|km2sm|km2rad|km2nm|km2deg|ispolycw|ismapped|ismap|isShapeMultipart|intrplon|intrplat|interpm|inputm|ind2rgb8|imbedm|hr2sec|hr2hms|hr2hm|hms2sec|hms2mat|hms2hr|hms2hm|histr|hista|hidem-ui|hidem|handlem-ui|handlem|gtopo30s|gtopo30|gtextm|gshhs|grn2eqa|gridm|grid2image|grepfields|gradientm|globedems|globedem|getworldfilename|getseeds|getm|geotiffread|geotiffinfo|geotiff2mstruct|geoshow|geoloc2grid|geodetic2geocentricLat|geodetic2ecef|geocentric2geodeticLat|gcxsc|gcxgc|gcwaypts|gcpmap|gcm|gc2sc|fromRadians|fromDegrees|framem|flatearthpoly|flat2ecc|fipsname|findm|filterm|fillm|fill3m|extractm|extractfield|etopo5|etopo|eqa2grn|epsm|encodem|ellipse1|elevation|egm96geoid|ecef2lv|ecef2geodetic|ecc2n|ecc2flat|eastof|dteds|dted|driftvel|driftcorr|dreckon|dms2rad|dms2mat|dms2dm|dms2degrees|dms2deg|dm2degrees|distortcalc|distdim|distance|dist2str|displaym|departure|demdataui|demcmap|degrees2dms|degrees2dm|deg2sm|deg2rad|deg2nm|deg2km|deg2dms|deg2dm|defaultm|dcwrhead|dcwread|dcwgaz|dcwdata|daspectm|crossfix|convertlat|contourm|contourfm|contourcmap|contour3m|cometm|comet3m|combntns|colorui|colorm|cmapui|clrmenu|closePolygonParts|clmo-ui|clmo|clma|clipdata|clegendm|clabelm|circcirc|changem|cart2grn|camupm|camtargm|camposm|bufferm|azimuth|axesscale|axesmui|axesm|axes2ecc|avhrrlambert|avhrrgoode|areaquad|areamat|areaint|arcgridread|antipode|angledim|angl2str|almanac)\\b\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/RestructuredText/reStructuredText.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K41\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      comment: ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim blocks\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/RestructuredText/syntax_test_restructuredtext.rst\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K95\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KVer\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim tests\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/RestructuredText/syntax_test_restructuredtext.rst\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K100\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    Ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/RestructuredText/syntax_test_restructuredtext.rst\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K105\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    Ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/RestructuredText/syntax_test_restructuredtext.rst\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K112\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    Ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/RestructuredText/syntax_test_restructuredtext.rst\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K114\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    Also Ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/RestructuredText/syntax_test_restructuredtext.rst\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K119\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    Ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/RestructuredText/syntax_test_restructuredtext.rst\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K121\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      Also Ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/RestructuredText/syntax_test_restructuredtext.rst\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K127\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    Ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/RestructuredText/syntax_test_restructuredtext.rst\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K129\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KNot ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Go/Indents/GoIndent.tmPreferences\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K4\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch-reindent real-world code without wrecking it. As such, these rules are\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/Go/Indents/GoIndent.tmPreferences\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K5\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Koptimized for convenience while typing, not for \u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kch reindentation.\n\u001b[35m\u001b[Kassets/syntaxes/01_Packages/YAML/YAML.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K64\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  c_ns_tag_property: |- # c-ver\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kim-tag | c-ns-shorthand-tag | c-non-specific-tag\n\u001b[35m\u001b[Kassets/manual/bat.1.in\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K113\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\\fB-P\\fR. To disable the pager permanently, set \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER to an empty string. To control\n\u001b[35m\u001b[Kassets/manual/bat.1.in\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K118\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KDetermine which pager is used. This option will override the PAGER and \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER\n\u001b[35m\u001b[Kassets/manual/bat.1.in\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K134\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kexport the \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_THEME environment variable (e.g.: export \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_THEME=\"...\").\n\u001b[35m\u001b[Kassets/manual/bat.1.in\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K146\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kexport the \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_STYLE environment variable (e.g.: export \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_STYLE=\"..\"). Possible\n\u001b[35m\u001b[Kassets/manual/bat.1.in\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K194\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KAlternatively, you can use the \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CONFIG_PATH environment variable to point {{PROJECT_EXECUTABLE}} to a non-default\n\u001b[35m\u001b[Kassets/manual/bat.1.in\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K235\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\\fBhttps://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\\fR\n\u001b[35m\u001b[Kassets/completions/bat.bash.in\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K5\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K_\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K() {\n\u001b[35m\u001b[Kassets/completions/bat.bash.in\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K88\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K} && complete -F _\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K {{PROJECT_EXECUTABLE}}\n\u001b[35m\u001b[Kassets/completions/_bat.ps1.in\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K64\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            [CompletionResult]::new('--config-dir', 'config-dir', [CompletionResultType]::ParameterName, 'Show \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K''s configuration directory.')\n\u001b[35m\u001b[Kassets/completions/_bat.ps1.in\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K65\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            [CompletionResult]::new('--cache-dir', 'cache-dir', [CompletionResultType]::ParameterName, 'Show \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K''s cache directory.')\n\u001b[35m\u001b[Kassets/completions/bat.zsh.in\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K49\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        '(: --config-dir)'--config-dir'[Show \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K'\"'\"'s configuration directory]'\n\u001b[35m\u001b[Kassets/completions/bat.zsh.in\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K52\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        '(: --cache-dir)'--cache-dir'[Show \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K'\"'\"'s cache directory]'\n\u001b[35m\u001b[Kassets/create.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K43\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K cache --clear\n\u001b[35m\u001b[Kassets/create.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K56\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K cache --build --blank --source=\"$ASSET_DIR\" --target=\"$ASSET_DIR\"\n\u001b[35m\u001b[Kassets/metadata.yaml\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K2\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_version: 0.18.3\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K34\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kfn \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_raw_command_with_config() -> Command {\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K35\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    let mut cmd = Command::cargo_bin(\"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\").unwrap();\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K37\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    cmd.env_remove(\"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CACHE_PATH\");\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K38\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    cmd.env_remove(\"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CONFIG_DIR\");\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K39\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    cmd.env_remove(\"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CONFIG_PATH\");\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K40\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    cmd.env_remove(\"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_OPTS\");\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K41\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    cmd.env_remove(\"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER\");\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K42\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    cmd.env_remove(\"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_STYLE\");\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K43\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    cmd.env_remove(\"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_TABS\");\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K44\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    cmd.env_remove(\"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_THEME\");\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K51\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kfn \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_raw_command() -> Command {\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K52\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    let mut cmd = \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_raw_command_with_config();\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K57\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kfn \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_with_config() -> assert_cmd::Command {\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K58\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    assert_cmd::Command::from_std(\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_raw_command_with_config())\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K61\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kfn \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K() -> assert_cmd::Command {\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K62\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    assert_cmd::Command::from_std(\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_raw_command())\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K67\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K77\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K86\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K96\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K108\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K118\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K128\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K138\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K149\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K160\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K170\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K181\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K192\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K202\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K212\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K222\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K245\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    let res = \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_raw_command()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K261\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    let res = \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_raw_command()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K277\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    let res = \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_raw_command()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K293\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    let res = \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_raw_command()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K307\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    // To simulate \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K getting started from the shell, a process is created with stdin and stdout\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K308\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    // as the slave end of a pseudo terminal. Although both point to the same \"file\", \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K should\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K316\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    let mut child = \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_raw_command()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K349\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K372\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K395\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K418\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K441\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K464\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K487\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K510\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K().arg(\"non-existing-file\").assert().failure();\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K515\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K().arg(\"sub_directory\").assert().failure();\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K520\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K530\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K541\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K543\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        .env(\"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER\", \"echo pager-output\")\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K553\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K555\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        .env(\"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER\", \"\")\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K564\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kfn env_var_pager_value_\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K() {\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K565\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K566\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        .env(\"PAGER\", \"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\")\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K575\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kfn env_var_\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_pager_value_\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K() {\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K576\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K577\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        .env(\"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER\", \"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\")\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K582\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        .stderr(predicate::str::contains(\"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K as a pager is disallowed\"));\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K586\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kfn pager_value_\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K() {\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K587\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K588\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        .arg(\"--pager=\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\")\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K593\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        .stderr(predicate::str::contains(\"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K as a pager is disallowed\"));\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K603\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K613\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K/// If the \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-specific \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER is used, obey the wish of the user\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K617\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kfn pager_most_from_\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_pager_env_var() {\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K619\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K620\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            .env(\"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER\", mocked_pagers::from(\"most\"))\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K629\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K/// Same reasoning with --pager as with \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K634\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K649\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K664\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K676\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K687\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K699\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K700\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        .env(\"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER\", \"mismatched-quotes 'a\")\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K710\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K714\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        .stdout(predicate::str::contains(\"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER=\"))\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K720\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_with_config()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K721\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        .env(\"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CONFIG_PATH\", \"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.conf\")\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K725\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        .stdout(\"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.conf\\n\");\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K727\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_with_config()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K728\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        .env(\"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CONFIG_PATH\", \"not-existing.conf\")\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K740\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    // Create the file with \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K741\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_with_config()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K742\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        .env(\"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CONFIG_PATH\", tmp_config_path.to_str().unwrap())\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K756\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kfn config_location_from_\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_config_dir_variable() {\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K757\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_with_config()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K758\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        .env(\"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CONFIG_DIR\", \"conf/\")\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K767\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_with_config()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K768\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        .env(\"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CONFIG_PATH\", \"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.conf\")\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K778\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K789\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_with_config()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K799\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_with_config()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K810\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_with_config()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K820\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_with_config().arg(\"cach\").assert().failure();\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K827\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K836\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_with_config()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K878\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K898\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K910\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K922\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K936\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K950\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K966\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_with_config()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K979\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K995\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1008\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1020\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1040\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1057\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        .stderr(\"\\x1b[33m[\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K warning]\\x1b[0m: Style 'rule' is a subset of style 'grid', 'rule' will not be visible.\\n\");\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1077\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1093\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1105\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    let cmd_for_file = \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1114\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    let cmd_for_stdin = \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1134\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1147\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1157\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1169\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1181\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1193\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1204\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K// Regression test for https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/issues/299\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1207\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1231\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1240\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/integration_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1250\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/examples/regression_tests/issue_985.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K3\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K# \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --map-syntax '*.js:Markdown' --file-name 'issue_985.js' < issue_985.js\n\u001b[35m\u001b[Ktests/examples/regression_tests/issue_985.js\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K4\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K# \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --map-syntax '*.js:Markdown' --file-name 'issue_985.js' issue_985.js\n\u001b[35m\u001b[Ktests/utils/mocked_pagers.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K16\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K/// On Windows: 'most' -> 'most.\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K'\n\u001b[35m\u001b[Ktests/utils/mocked_pagers.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K19\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        format!(\"{}.\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\", base)\n\u001b[35m\u001b[Ktests/benchmarks/benchmark-results/syntax-highlighting-speed-miniz.c.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K3\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K| `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K … miniz.c` | 96.2 ± 1.9 | 92.6 | 99.6 | 1.00 |\n\u001b[35m\u001b[Ktests/benchmarks/benchmark-results/syntax-highlighting-speed-jquery.js.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K3\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K| `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K … jquery.js` | 692.4 ± 5.6 | 684.2 | 701.8 | 1.00 |\n\u001b[35m\u001b[Ktests/benchmarks/benchmark-results/syntax-highlighting-speed-test_multiarray.py.json\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K4\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      \"command\": \"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K … test_multiarray.py\",\n\u001b[35m\u001b[Ktests/benchmarks/benchmark-results/syntax-highlighting-speed-jquery.js.json\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K4\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      \"command\": \"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K … jquery.js\",\n\u001b[35m\u001b[Ktests/benchmarks/benchmark-results/plain-text-speed.json\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K4\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      \"command\": \"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K … --language=txt test_multiarray.py\",\n\u001b[35m\u001b[Ktests/benchmarks/benchmark-results/syntax-highlighting-speed-test_multiarray.ansi-sequences.txt.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K3\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K| `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K … test_multiarray.ansi-sequences.txt` | 125.3 ± 5.6 | 119.3 | 140.4 | 1.00 |\n\u001b[35m\u001b[Ktests/benchmarks/benchmark-results/syntax-highlighting-speed-test_multiarray.py.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K3\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K| `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K … test_multiarray.py` | 924.7 ± 4.4 | 917.1 | 932.3 | 1.00 |\n\u001b[35m\u001b[Ktests/benchmarks/benchmark-results/report.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K## `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` benchmark results\n\u001b[35m\u001b[Ktests/benchmarks/benchmark-results/report.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K7\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K| `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` | 6.9 ± 0.6 | 5.6 | 9.2 | 1.00 |\n\u001b[35m\u001b[Ktests/benchmarks/benchmark-results/report.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K13\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K| `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K … --language=txt test_multiarray.py` | 10.4 ± 0.6 | 9.0 | 12.1 | 1.00 |\n\u001b[35m\u001b[Ktests/benchmarks/benchmark-results/report.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K19\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K| `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K … jquery.js` | 692.4 ± 5.6 | 684.2 | 701.8 | 1.00 |\n\u001b[35m\u001b[Ktests/benchmarks/benchmark-results/report.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K25\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K| `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K … miniz.c` | 96.2 ± 1.9 | 92.6 | 99.6 | 1.00 |\n\u001b[35m\u001b[Ktests/benchmarks/benchmark-results/report.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K31\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K| `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K … test_multiarray.ansi-sequences.txt` | 125.3 ± 5.6 | 119.3 | 140.4 | 1.00 |\n\u001b[35m\u001b[Ktests/benchmarks/benchmark-results/report.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K37\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K| `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K … test_multiarray.py` | 924.7 ± 4.4 | 917.1 | 932.3 | 1.00 |\n\u001b[35m\u001b[Ktests/benchmarks/benchmark-results/startup-time.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K3\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K| `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` | 6.9 ± 0.6 | 5.6 | 9.2 | 1.00 |\n\u001b[35m\u001b[Ktests/benchmarks/benchmark-results/syntax-highlighting-speed-miniz.c.json\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K4\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      \"command\": \"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K … miniz.c\",\n\u001b[35m\u001b[Ktests/benchmarks/benchmark-results/plain-text-speed.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K3\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K| `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K … --language=txt test_multiarray.py` | 10.4 ± 0.6 | 9.0 | 12.1 | 1.00 |\n\u001b[35m\u001b[Ktests/benchmarks/benchmark-results/syntax-highlighting-speed-jquery-3.3.1.js.json\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K4\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      \"command\": \"/home/shark/.cargo-target/release/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --style=full --color=always --paging=never test-src/jquery-3.3.1.js\",\n\u001b[35m\u001b[Ktests/benchmarks/benchmark-results/syntax-highlighting-speed-test_multiarray.highlighted.txt.json\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K4\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      \"command\": \"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K … test_multiarray.highlighted.txt\",\n\u001b[35m\u001b[Ktests/benchmarks/benchmark-results/syntax-highlighting-speed-test_multiarray.ansi-sequences.txt.json\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K4\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      \"command\": \"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K … test_multiarray.ansi-sequences.txt\",\n\u001b[35m\u001b[Ktests/benchmarks/benchmark-results/syntax-highlighting-speed-jquery-3.3.1.min.js.json\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K4\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      \"command\": \"/home/shark/.cargo-target/release/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --style=full --color=always --paging=never test-src/jquery-3.3.1.min.js\",\n\u001b[35m\u001b[Ktests/benchmarks/benchmark-results/ansi-sequence-forwarding.json\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K4\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      \"command\": \"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K … test_multiarray.highlighted.txt\",\n\u001b[35m\u001b[Ktests/benchmarks/benchmark-results/startup-time.json\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K4\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K      \"command\": \"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\",\n\u001b[35m\u001b[Ktests/benchmarks/run-benchmarks.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K33\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kunset \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CACHE_PATH\n\u001b[35m\u001b[Ktests/benchmarks/run-benchmarks.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K34\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kunset \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CONFIG_DIR\n\u001b[35m\u001b[Ktests/benchmarks/run-benchmarks.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K35\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kunset \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CONFIG_PATH\n\u001b[35m\u001b[Ktests/benchmarks/run-benchmarks.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K36\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kunset \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_OPTS\n\u001b[35m\u001b[Ktests/benchmarks/run-benchmarks.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K37\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kunset \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER\n\u001b[35m\u001b[Ktests/benchmarks/run-benchmarks.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K38\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kunset \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_STYLE\n\u001b[35m\u001b[Ktests/benchmarks/run-benchmarks.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K39\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kunset \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_TABS\n\u001b[35m\u001b[Ktests/benchmarks/run-benchmarks.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K40\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kunset \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_THEME\n\u001b[35m\u001b[Ktests/benchmarks/run-benchmarks.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K50\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KTARGET_RELEASE=\"${TARGET_DIR}/release/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\"\n\u001b[35m\u001b[Ktests/benchmarks/run-benchmarks.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K55\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K=''\n\u001b[35m\u001b[Ktests/benchmarks/run-benchmarks.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K58\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t\t--system)  \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K=\"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\" ;;\n\u001b[35m\u001b[Ktests/benchmarks/run-benchmarks.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K59\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t\t--release) \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K=\"$TARGET_RELEASE\" ;;\n\u001b[35m\u001b[Ktests/benchmarks/run-benchmarks.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K60\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t\t--\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K=*)   \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K=\"${arg:6}\" ;;\n\u001b[35m\u001b[Ktests/benchmarks/run-benchmarks.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K64\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kif [[ -z \"$\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K\" ]]; then\n\u001b[35m\u001b[Ktests/benchmarks/run-benchmarks.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K65\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\techo \"A build of '\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K' must be specified for benchmarking.\"\n\u001b[35m\u001b[Ktests/benchmarks/run-benchmarks.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K66\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\techo \"You can use '--system', '--release' or '--\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K=path/to/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K'.\"\n\u001b[35m\u001b[Ktests/benchmarks/run-benchmarks.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K70\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kif ! command -v \"$\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K\" &>/dev/null; then\n\u001b[35m\u001b[Ktests/benchmarks/run-benchmarks.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K71\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\techo \"Could not find the build of \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K to benchmark ($\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K).\"\n\u001b[35m\u001b[Ktests/benchmarks/run-benchmarks.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K72\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tcase \"$\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K\" in\n\u001b[35m\u001b[Ktests/benchmarks/run-benchmarks.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K73\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t\t\"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\")             echo \"Make you sure to symlink '\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kcat' as '\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K'.\" ;;\n\u001b[35m\u001b[Ktests/benchmarks/run-benchmarks.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K83\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kecho \"## \\`\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\\` benchmark results\" >> \"$REPORT\"\n\u001b[35m\u001b[Ktests/benchmarks/run-benchmarks.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K88\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t\"$(printf \"%q\" \"$\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K\") --no-config\" \\\n\u001b[35m\u001b[Ktests/benchmarks/run-benchmarks.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K89\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t--command-name \"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\" \\\n\u001b[35m\u001b[Ktests/benchmarks/run-benchmarks.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K98\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t\"$(printf \"%q\" \"$\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K\") --no-config --language=txt --style=plain test-src/test_multiarray.py\" \\\n\u001b[35m\u001b[Ktests/benchmarks/run-benchmarks.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K99\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t--command-name '\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K … --language=txt test_multiarray.py' \\\n\u001b[35m\u001b[Ktests/benchmarks/run-benchmarks.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K111\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t\t\"$(printf \"%q\" \"$\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K\") --no-config --style=full --color=always '$SRC'\" \\\n\u001b[35m\u001b[Ktests/benchmarks/run-benchmarks.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K112\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t\t--command-name \"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K … ${filename}\" \\\n\u001b[35m\u001b[Ktests/snapshots/generate_snapshots.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K35\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kdef build_\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K():\n\u001b[35m\u001b[Ktests/snapshots/generate_snapshots.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K36\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    print(\"building \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\")\n\u001b[35m\u001b[Ktests/snapshots/generate_snapshots.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K55\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kbuild_\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K()\n\u001b[35m\u001b[Ktests/syntax-tests/create_highlighted_versions.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K11\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_OPTIONS = [\n\u001b[35m\u001b[Ktests/syntax-tests/create_highlighted_versions.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K23\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_options\",\n\u001b[35m\u001b[Ktests/syntax-tests/create_highlighted_versions.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K28\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    options = \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_OPTIONS.copy()\n\u001b[35m\u001b[Ktests/syntax-tests/create_highlighted_versions.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K31\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    options_file = path.join(source_dirpath, \"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_options\")\n\u001b[35m\u001b[Ktests/syntax-tests/create_highlighted_versions.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K44\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    env.pop(\"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CACHE_PATH\", None)\n\u001b[35m\u001b[Ktests/syntax-tests/create_highlighted_versions.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K45\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    env.pop(\"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CONFIG_DIR\", None)\n\u001b[35m\u001b[Ktests/syntax-tests/create_highlighted_versions.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K46\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    env.pop(\"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CONFIG_PATH\", None)\n\u001b[35m\u001b[Ktests/syntax-tests/create_highlighted_versions.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K47\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    env.pop(\"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_OPTS\", None)\n\u001b[35m\u001b[Ktests/syntax-tests/create_highlighted_versions.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K48\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    env.pop(\"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER\", None)\n\u001b[35m\u001b[Ktests/syntax-tests/create_highlighted_versions.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K49\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    env.pop(\"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_STYLE\", None)\n\u001b[35m\u001b[Ktests/syntax-tests/create_highlighted_versions.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K50\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    env.pop(\"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_TABS\", None)\n\u001b[35m\u001b[Ktests/syntax-tests/create_highlighted_versions.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K51\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    env.pop(\"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_THEME\", None)\n\u001b[35m\u001b[Ktests/syntax-tests/create_highlighted_versions.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K62\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_output = subprocess.check_output(\n\u001b[35m\u001b[Ktests/syntax-tests/create_highlighted_versions.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K63\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        [\"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\"] + get_options(source) + [source],\n\u001b[35m\u001b[Ktests/syntax-tests/create_highlighted_versions.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K74\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        output_file.write(\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_output)\n\u001b[35m\u001b[Ktests/syntax-tests/create_highlighted_versions.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K98\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            \"=== \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K stdout:\\n{}\".format(err.stdout.decode(\"utf-8\")),\n\u001b[35m\u001b[Ktests/syntax-tests/create_highlighted_versions.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K102\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            \"=== \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K stderr:\\n{}\".format(err.stderr.decode(\"utf-8\")),\n\u001b[35m\u001b[Ktests/syntax-tests/create_highlighted_versions.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K108\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            \"Error: Could not execute '\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K'. Please make sure that the executable \"\n\u001b[35m\u001b[Ktests/syntax-tests/BatTestCustomAssets.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K4\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kname: \u001b[1;33m\u001b[KBat\u001b[m\u001b[KTestCustomAssets\n\u001b[35m\u001b[Ktests/syntax-tests/BatTestCustomAssets.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K6\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K  - \u001b[1;33m\u001b[Kbat\u001b[m\u001b[Ktestcustomassets\n\u001b[35m\u001b[Ktests/syntax-tests/BatTestCustomAssets.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K7\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kscope: source.\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Ktestcustomassets\n\u001b[35m\u001b[Ktests/syntax-tests/BatTestCustomAssets.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K9\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K# This syntax is used to test if custom assets work with \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.\n\u001b[35m\u001b[Ktests/syntax-tests/BatTestCustomAssets.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K20\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        1: keyword.other.\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Ktestcustomassets-key\n\u001b[35m\u001b[Ktests/syntax-tests/BatTestCustomAssets.sublime-syntax\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K21\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        2: string.other.\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Ktestcustomassets-value\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/C/test.c\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K21\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m/*\u001b[0m\u001b[38;2;117;113;94m This C program was written to help \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/QML/BatSyntaxTest.qml\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K19\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;230;219;116mservice\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116morg.\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.service\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/QML/BatSyntaxTest.qml\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K41\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;230;219;116mtext\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mqsTr\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mInstall \u001b[1;33m\u001b[KBat\u001b[m\u001b[K.\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Diff/82e7786e747b1fcfac1f963ae6415a22ec9caae1.diff\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K16\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m ## `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` as a library\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Diff/82e7786e747b1fcfac1f963ae6415a22ec9caae1.diff\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K17\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242mdiff --git a/src/bin/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/app.rs b/src/bin/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/app.rs\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Diff/82e7786e747b1fcfac1f963ae6415a22ec9caae1.diff\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K19\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;117;113;94m---\u001b[0m\u001b[38;2;117;113;94m a/src/bin/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/app.rs\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Diff/82e7786e747b1fcfac1f963ae6415a22ec9caae1.diff\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K20\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;117;113;94m+++\u001b[0m\u001b[38;2;117;113;94m b/src/bin/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/app.rs\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Diff/82e7786e747b1fcfac1f963ae6415a22ec9caae1.diff\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K23\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m use \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K::{\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Diff/82e7786e747b1fcfac1f963ae6415a22ec9caae1.diff\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K61\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242mdiff --git a/src/bin/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/clap_app.rs b/src/bin/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/clap_app.rs\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Diff/82e7786e747b1fcfac1f963ae6415a22ec9caae1.diff\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K63\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;117;113;94m---\u001b[0m\u001b[38;2;117;113;94m a/src/bin/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/clap_app.rs\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Diff/82e7786e747b1fcfac1f963ae6415a22ec9caae1.diff\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K64\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;117;113;94m+++\u001b[0m\u001b[38;2;117;113;94m b/src/bin/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/clap_app.rs\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Diff/82e7786e747b1fcfac1f963ae6415a22ec9caae1.diff\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K66\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m                             data to \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K from STDIN when \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K does not otherwise know \\\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Git Attributes/example.gitattributes\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K10\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46m\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\u001b[0m\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255mtext\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255meol\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116mcrlf\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/SSH Config/ssh_config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K8\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114m\u001b[1;33m\u001b[KBat\u001b[m\u001b[KchMode\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mno\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;190;132;255m\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m                      \u001b[0m\u001b[38;2;253;151;31mGeneral\u001b[0m\u001b[38;2;253;151;31m \u001b[0m\u001b[38;2;253;151;31mCommands\u001b[0m\u001b[38;2;253;151;31m \u001b[0m\u001b[38;2;253;151;31mManual\u001b[0m\u001b[38;2;248;248;242m                     \u001b[0m\u001b[38;2;190;132;255m\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K4\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m       \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K - a \u001b[0m\u001b[38;2;166;226;46mcat\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m clone with syntax highlighting and Git integration.\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K7\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m       \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mOPTIONS\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mFILE\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m...\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K9\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m       \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K cache \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mCACHE-OPTIONS\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46m--build\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;166;226;46m--clear\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K12\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m       \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K  prints  the syntax-highlighted content of a collection of FILEs to\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K16\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m       \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K  supports  a  large number of programming and markup languages.  It\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K18\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m       git  index.  \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K automatically pipes its output through a pager (by de‐\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K21\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m       Whenever the output of \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K goes to  a  non-interactive  terminal,  i.e.\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K22\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m       when  the output is piped into another process or into a file, \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K will\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K112\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m              if the output of \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K is piped to another program, but  you  want\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K119\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m              set  \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER  to  an  empty  string. To control which pager is\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K126\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m              PAGER and \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER environment variables. The default pager  is\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K143\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m              \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_THEME environment variable (e.g.: export \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_THEME=\"...\").\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K156\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m              to the configuration file or export  the  \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_STYLE  environment\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K157\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m              variable (e.g.: export \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_STYLE=\"..\"). Possible values: *auto*,\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K202\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m       \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K can also be customized with a configuration file. The  location  of\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K206\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m       \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K \u001b[0m\u001b[38;2;166;226;46m--config-file\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K208\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m       Alternatively, you can use the \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CONFIG_PATH environment variable  to\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K209\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m       point \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K to a non-default location of the configuration file.\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K212\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m       \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K  supports  Sublime  Text .sublime-syntax language files, and can be\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K214\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m       do  this,  add  the  .sublime-snytax language files to `$(\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K \u001b[0m\u001b[38;2;166;226;46m--config-\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K215\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m       dir)/syntaxes` and run `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K cache \u001b[0m\u001b[38;2;166;226;46m--build\u001b[0m\u001b[38;2;248;248;242m`.\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K219\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m            mkdir \u001b[0m\u001b[38;2;166;226;46m-p\u001b[0m\u001b[38;2;248;248;242m \"$(\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K \u001b[0m\u001b[38;2;166;226;46m--config-dir\u001b[0m\u001b[38;2;248;248;242m)/syntaxes\"\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K220\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m            cd \"$(\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K \u001b[0m\u001b[38;2;166;226;46m--config-dir\u001b[0m\u001b[38;2;248;248;242m)/syntaxes\"\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K227\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m            \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K cache \u001b[0m\u001b[38;2;166;226;46m--build\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K229\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m       Once the cache is built, the new  language  will  be  visible  in  `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K232\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m       cache with `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K cache \u001b[0m\u001b[38;2;166;226;46m--clear\u001b[0m\u001b[38;2;248;248;242m`.\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K235\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m       Similarly to custom  languages,  \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K  supports  Sublime  Text  .tmTheme\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K236\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m       themes.   These  can  be installed to `$(\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K \u001b[0m\u001b[38;2;166;226;46m--config-dir\u001b[0m\u001b[38;2;248;248;242m)/themes`, and\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K237\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m       are added to the cache with `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K cache \u001b[0m\u001b[38;2;166;226;46m--build\u001b[0m\u001b[38;2;248;248;242m`.\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K240\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m       For more information and up-to-date documentation, visit the \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K repo:\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K241\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m       https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K243\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m                                                                        \u001b[0m\u001b[38;2;166;226;46m\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Svelte/App.svelte\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K30\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;246;170;17m// This block is a regression test for a \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K panic when a LiveScript syntax definition is missing\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/VimL/source.vim\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K77\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;117;113;94m\" Error case from issue #1604 (https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/issues/1064)\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Java/test.java\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K3\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;117;113;94m/*\u001b[0m\u001b[38;2;117;113;94m This Java program was submitted to help \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Sass/example.sass\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K46\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mbackground-image\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239murl\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mhttps://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/raw/master/doc/logo-header.svg\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/HTML/test.html\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K5\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtitle\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m\u001b[1;33m\u001b[KBat\u001b[m\u001b[K Syntax Test\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtitle\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Cpp/test.cpp\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K6\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;117;113;94m/*\u001b[0m\u001b[38;2;117;113;94m This C program was submitted to help \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Crystal/test.cr\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m An example file to test Crystal syntax highlighting in \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Crystal/test.cr\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K58\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242mgreeter \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mGreeter\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;249;38;114mnew\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/GLSL/test.glsl\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K38\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m This GLSL code serves the purpose of \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K syntax highlighting tests\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/CMake/CMakeLists.txt\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K3\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;102;217;239mproject\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mhello-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mVERSION\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m0.0.1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mLANGUAGES\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mC\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/CMake/CMakeLists.txt\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K8\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;102;217;239madd_executable\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mhello-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mSOURCES\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/CMake/CMakeLists.txt\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K11\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;102;217;239mtarget_link_libraries\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mhello-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242massimp\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/SCSS/example.scss\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K48\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mbackground-image\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239murl\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mhttps://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/raw/master/doc/logo-header.svg\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/TOML/Cargo.toml\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K5\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;249;38;114mhomepage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mhttps://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/TOML/Cargo.toml\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K7\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;249;38;114mname\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/TOML/Cargo.toml\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K9\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;249;38;114mrepository\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mhttps://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/TOML/Cargo.toml\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K20\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Feature required for \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K the application. Should be disabled when depending on\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/TOML/Cargo.toml\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K21\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K as a library.\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Erlang/bat_erlang.erl\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;190;132;255m-\u001b[0m\u001b[38;2;249;38;114mmodule\u001b[0m\u001b[38;2;190;132;255m(\u001b[0m\u001b[38;2;166;226;46m\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_erlang\u001b[0m\u001b[38;2;190;132;255m)\u001b[0m\u001b[38;2;190;132;255m.\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Bash/batgrep.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K3\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[3;38;2;124;120;101m#\u001b[0m\u001b[3;38;2;124;120;101m \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-extras | Copyright (C) 2020 eth-p and contributors | MIT License\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Bash/batgrep.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K5\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[3;38;2;124;120;101m#\u001b[0m\u001b[3;38;2;124;120;101m Repository: https://github.com/eth-p/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-extras\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Bash/batgrep.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K6\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[3;38;2;124;120;101m#\u001b[0m\u001b[3;38;2;124;120;101m Issues:     https://github.com/eth-p/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-extras/issues\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Bash/batgrep.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K37\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;255;255;255mprintc\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m%{YELLOW}[%s warning]%{CLEAR}: \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\u001b[38;2;230;219;116m%{CLEAR}\\n\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kgrep\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m>&\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Bash/batgrep.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K40\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;255;255;255mprintc\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m%{RED}[%s error]%{CLEAR}: \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\u001b[38;2;230;219;116m%{CLEAR}\\n\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kgrep\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m>&\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Bash/batgrep.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K116\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m[[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mn\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[38;2;255;255;255m\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;255;255;255mx\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m]]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Bash/batgrep.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K117\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;255;255;255mSCRIPT_PAGER_CMD\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Bash/batgrep.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K169\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;255;255;255mprintc\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m%{RED}%s: '%s' requires a value%{CLEAR}\\n\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kgrep\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mARG\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Bash/batgrep.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K185\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255mprintc\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m%{RED}%s: '--color' expects value of 'auto', 'always', or 'never'%{CLEAR}\\n\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kgrep\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Bash/batgrep.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K217\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255mprintc\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m%{RED}%s: '--paging' expects value of 'auto', 'always', or 'never'%{CLEAR}\\n\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kgrep\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Bash/batgrep.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K238\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kgrep\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Bash/batgrep.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K241\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mhttps://github.com/eth-p/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-extras\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Bash/batgrep.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K269\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;166;226;46m\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_version\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Bash/batgrep.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K270\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[3;38;2;253;151;31m --\u001b[0m\u001b[3;38;2;253;151;31mversion\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255mcut\u001b[0m\u001b[3;38;2;253;151;31m -\u001b[0m\u001b[3;38;2;253;151;31md\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[3;38;2;253;151;31m -\u001b[0m\u001b[3;38;2;253;151;31mf\u001b[0m\u001b[38;2;255;255;255m 2\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Bash/batgrep.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K319\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;255;255;255m\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_ARGS\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Bash/batgrep.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K330\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;255;255;255m\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_STYLE\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mheader,numbers\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Bash/batgrep.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K331\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mversion_compare\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m(\u001b[0m\u001b[38;2;255;255;255m\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_version\u001b[0m\u001b[38;2;230;219;116m)\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[3;38;2;253;151;31m -\u001b[0m\u001b[3;38;2;253;151;31mgt\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m0.12\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Bash/batgrep.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K419\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;255;255;255mprintc\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m%{RED}%s: unknown option '%s'%{CLEAR}\\n\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kgrep\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mOPT\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m>&\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Bash/batgrep.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K444\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;255;255;255m\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_ARGS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m--color=always\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Bash/batgrep.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K446\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;255;255;255m\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_ARGS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m--color=never\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Bash/batgrep.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K462\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116mthe pager was explicitly disabled by $\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER or the\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Bash/batgrep.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K482\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255m\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_ARGS\u001b[0m\u001b[38;2;255;255;255m[\u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;255;255;255m]\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Bash/batgrep.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K485\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[3;38;2;253;151;31m--\u001b[0m\u001b[3;38;2;253;151;31mstyle\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_STYLE\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mOPT_SNIP\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Bash/simple.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K15\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;255;255;255m\t\t\t\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mcat\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\u001b[0m\u001b[38;2;255;255;255m -\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mcat\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Bash/simple.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K20\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239mcommand\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mv\u001b[0m\u001b[38;2;255;255;255m \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K \u001b[0m\u001b[38;2;249;38;114m&>\u001b[0m\u001b[38;2;255;255;255m /dev/null\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Rust/output.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K39\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m        \u001b[0m\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m pager_from_env \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mmatch\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242menv\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242mvar\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242menv\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242mvar\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mPAGER\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Rust/output.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K40\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;166;226;46mOk\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_pager\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m_\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mSome\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_pager\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Rust/output.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K43\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m ANSI color sequences printed by \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K. If someone has set PAGER=\"less -F\", we\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Rust/output.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K46\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m We only do this for PAGER (as it is not specific to '\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K'), not for \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Rust/output.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K47\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m or \u001b[1;33m\u001b[Kbat\u001b[m\u001b[Ks '--pager' command line option.\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/highlighted/Rust/output.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K71\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m pager_path\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mfile_stem\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mSome\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114m&\u001b[0m\u001b[38;2;248;248;242mOsString\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242mfrom\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[35m\u001b[Ktests/syntax-tests/source/C/test.c\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K21\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    /* This C program was written to help \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Ktests/syntax-tests/source/QML/BatSyntaxTest.qml\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K19\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        service: \"org.\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.service\"\n\u001b[35m\u001b[Ktests/syntax-tests/source/QML/BatSyntaxTest.qml\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K41\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            text: qsTr(\"Install \u001b[1;33m\u001b[KBat\u001b[m\u001b[K.\")\n\u001b[35m\u001b[Ktests/syntax-tests/source/Diff/82e7786e747b1fcfac1f963ae6415a22ec9caae1.diff\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K16\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K ## `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` as a library\n\u001b[35m\u001b[Ktests/syntax-tests/source/Diff/82e7786e747b1fcfac1f963ae6415a22ec9caae1.diff\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K17\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kdiff --git a/src/bin/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/app.rs b/src/bin/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/app.rs\n\u001b[35m\u001b[Ktests/syntax-tests/source/Diff/82e7786e747b1fcfac1f963ae6415a22ec9caae1.diff\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K19\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K--- a/src/bin/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/app.rs\n\u001b[35m\u001b[Ktests/syntax-tests/source/Diff/82e7786e747b1fcfac1f963ae6415a22ec9caae1.diff\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K20\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K+++ b/src/bin/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/app.rs\n\u001b[35m\u001b[Ktests/syntax-tests/source/Diff/82e7786e747b1fcfac1f963ae6415a22ec9caae1.diff\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K23\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K use \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K::{\n\u001b[35m\u001b[Ktests/syntax-tests/source/Diff/82e7786e747b1fcfac1f963ae6415a22ec9caae1.diff\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K61\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kdiff --git a/src/bin/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/clap_app.rs b/src/bin/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/clap_app.rs\n\u001b[35m\u001b[Ktests/syntax-tests/source/Diff/82e7786e747b1fcfac1f963ae6415a22ec9caae1.diff\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K63\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K--- a/src/bin/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/clap_app.rs\n\u001b[35m\u001b[Ktests/syntax-tests/source/Diff/82e7786e747b1fcfac1f963ae6415a22ec9caae1.diff\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K64\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K+++ b/src/bin/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/clap_app.rs\n\u001b[35m\u001b[Ktests/syntax-tests/source/Diff/82e7786e747b1fcfac1f963ae6415a22ec9caae1.diff\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K66\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                             data to \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K from STDIN when \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K does not otherwise know \\\n\u001b[35m\u001b[Ktests/syntax-tests/source/Git Attributes/example.gitattributes\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K10\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K*.\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K      text eol=crlf\n\u001b[35m\u001b[Ktests/syntax-tests/source/SSH Config/ssh_config\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K8\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \u001b[1;33m\u001b[KBat\u001b[m\u001b[KchMode no\n\u001b[35m\u001b[Ktests/syntax-tests/source/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K(1)                      General Commands Manual                     \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K(1)\n\u001b[35m\u001b[Ktests/syntax-tests/source/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K4\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K       \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K - a cat(1) clone with syntax highlighting and Git integration.\n\u001b[35m\u001b[Ktests/syntax-tests/source/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K7\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K       \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K [OPTIONS] [FILE]...\n\u001b[35m\u001b[Ktests/syntax-tests/source/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K9\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K       \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K cache [CACHE-OPTIONS] [--build|--clear]\n\u001b[35m\u001b[Ktests/syntax-tests/source/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K12\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K       \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K  prints  the syntax-highlighted content of a collection of FILEs to\n\u001b[35m\u001b[Ktests/syntax-tests/source/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K16\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K       \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K  supports  a  large number of programming and markup languages.  It\n\u001b[35m\u001b[Ktests/syntax-tests/source/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K18\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K       git  index.  \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K automatically pipes its output through a pager (by de‐\n\u001b[35m\u001b[Ktests/syntax-tests/source/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K21\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K       Whenever the output of \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K goes to  a  non-interactive  terminal,  i.e.\n\u001b[35m\u001b[Ktests/syntax-tests/source/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K22\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K       when  the output is piped into another process or into a file, \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K will\n\u001b[35m\u001b[Ktests/syntax-tests/source/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K112\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K              if the output of \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K is piped to another program, but  you  want\n\u001b[35m\u001b[Ktests/syntax-tests/source/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K119\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K              set  \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER  to  an  empty  string. To control which pager is\n\u001b[35m\u001b[Ktests/syntax-tests/source/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K126\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K              PAGER and \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER environment variables. The default pager  is\n\u001b[35m\u001b[Ktests/syntax-tests/source/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K143\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K              \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_THEME environment variable (e.g.: export \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_THEME=\"...\").\n\u001b[35m\u001b[Ktests/syntax-tests/source/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K156\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K              to the configuration file or export  the  \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_STYLE  environment\n\u001b[35m\u001b[Ktests/syntax-tests/source/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K157\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K              variable (e.g.: export \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_STYLE=\"..\"). Possible values: *auto*,\n\u001b[35m\u001b[Ktests/syntax-tests/source/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K202\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K       \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K can also be customized with a configuration file. The  location  of\n\u001b[35m\u001b[Ktests/syntax-tests/source/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K206\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K       \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --config-file\n\u001b[35m\u001b[Ktests/syntax-tests/source/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K208\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K       Alternatively, you can use the \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CONFIG_PATH environment variable  to\n\u001b[35m\u001b[Ktests/syntax-tests/source/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K209\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K       point \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K to a non-default location of the configuration file.\n\u001b[35m\u001b[Ktests/syntax-tests/source/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K212\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K       \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K  supports  Sublime  Text .sublime-syntax language files, and can be\n\u001b[35m\u001b[Ktests/syntax-tests/source/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K214\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K       do  this,  add  the  .sublime-snytax language files to `$(\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --config-\n\u001b[35m\u001b[Ktests/syntax-tests/source/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K215\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K       dir)/syntaxes` and run `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K cache --build`.\n\u001b[35m\u001b[Ktests/syntax-tests/source/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K219\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            mkdir -p \"$(\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --config-dir)/syntaxes\"\n\u001b[35m\u001b[Ktests/syntax-tests/source/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K220\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            cd \"$(\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --config-dir)/syntaxes\"\n\u001b[35m\u001b[Ktests/syntax-tests/source/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K227\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K cache --build\n\u001b[35m\u001b[Ktests/syntax-tests/source/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K229\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K       Once the cache is built, the new  language  will  be  visible  in  `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Ktests/syntax-tests/source/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K232\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K       cache with `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K cache --clear`.\n\u001b[35m\u001b[Ktests/syntax-tests/source/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K235\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K       Similarly to custom  languages,  \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K  supports  Sublime  Text  .tmTheme\n\u001b[35m\u001b[Ktests/syntax-tests/source/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K236\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K       themes.   These  can  be installed to `$(\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --config-dir)/themes`, and\n\u001b[35m\u001b[Ktests/syntax-tests/source/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K237\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K       are added to the cache with `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K cache --build`.\n\u001b[35m\u001b[Ktests/syntax-tests/source/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K240\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K       For more information and up-to-date documentation, visit the \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K repo:\n\u001b[35m\u001b[Ktests/syntax-tests/source/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K241\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K       https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Ktests/syntax-tests/source/Manpage/bat-0.16.man\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K243\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                                                                        \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K(1)\n\u001b[35m\u001b[Ktests/syntax-tests/source/Svelte/App.svelte\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K30\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    // This block is a regression test for a \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K panic when a LiveScript syntax definition is missing\n\u001b[35m\u001b[Ktests/syntax-tests/source/VimL/source.vim\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K77\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\" Error case from issue #1604 (https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/issues/1064)\n\u001b[35m\u001b[Ktests/syntax-tests/source/Git Config/LICENSE.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KThe `test.gitconfig` file has been added from https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/pull/1336#issuecomment-715905807. Its \"free to use\".\n\u001b[35m\u001b[Ktests/syntax-tests/source/Java/test.java\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K3\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K/* This Java program was submitted to help \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Ktests/syntax-tests/source/Sass/example.sass\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K46\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    background-image: url(\"https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/raw/master/doc/logo-header.svg\")\n\u001b[35m\u001b[Ktests/syntax-tests/source/HTML/test.html\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K5\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    <title>\u001b[1;33m\u001b[KBat\u001b[m\u001b[K Syntax Test</title>\n\u001b[35m\u001b[Ktests/syntax-tests/source/Cpp/test.cpp\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K6\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K/* This C program was submitted to help \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Ktests/syntax-tests/source/Crystal/test.cr\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K# An example file to test Crystal syntax highlighting in \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Ktests/syntax-tests/source/Crystal/test.cr\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K58\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kgreeter = Greeter.new(\"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\")\n\u001b[35m\u001b[Ktests/syntax-tests/source/GLSL/test.glsl\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K38\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    // This GLSL code serves the purpose of \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K syntax highlighting tests\n\u001b[35m\u001b[Ktests/syntax-tests/source/Java Server Page (JSP)/LICENSE.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K216\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KFor the Eclipse JDT Core \u001b[1;33m\u001b[KBat\u001b[m\u001b[Kch Compiler (ecj-x.x.x.jar) component and the\n\u001b[35m\u001b[Ktests/syntax-tests/source/Java Server Page (JSP)/NOTICE\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K23\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KJDT Core \u001b[1;33m\u001b[KBat\u001b[m\u001b[Kch Compiler component, which is open source software.\n\u001b[35m\u001b[Ktests/syntax-tests/source/CMake/CMakeLists.txt\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K3\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kproject(hello-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K VERSION 0.0.1 LANGUAGES C)\n\u001b[35m\u001b[Ktests/syntax-tests/source/CMake/CMakeLists.txt\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K8\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kadd_executable(hello-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K SOURCES)\n\u001b[35m\u001b[Ktests/syntax-tests/source/CMake/CMakeLists.txt\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K11\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Ktarget_link_libraries(hello-\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K assimp)\n\u001b[35m\u001b[Ktests/syntax-tests/source/SCSS/example.scss\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K48\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    background-image: url(\"https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K/raw/master/doc/logo-header.svg\");\n\u001b[35m\u001b[Ktests/syntax-tests/source/TOML/Cargo.toml\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K5\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Khomepage = \"https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\"\n\u001b[35m\u001b[Ktests/syntax-tests/source/TOML/Cargo.toml\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K7\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kname = \"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\"\n\u001b[35m\u001b[Ktests/syntax-tests/source/TOML/Cargo.toml\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K9\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Krepository = \"https://github.com/sharkdp/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\"\n\u001b[35m\u001b[Ktests/syntax-tests/source/TOML/Cargo.toml\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K20\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K# Feature required for \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K the application. Should be disabled when depending on\n\u001b[35m\u001b[Ktests/syntax-tests/source/TOML/Cargo.toml\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K21\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K# \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K as a library.\n\u001b[35m\u001b[Ktests/syntax-tests/source/Erlang/bat_erlang.erl\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K-module(\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_erlang).\n\u001b[35m\u001b[Ktests/syntax-tests/source/Batch/LICENSE.md\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KThe `build.\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` file has been added from https://github.com/Leandros/ClangOnWindows/blob/master/build.\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K under the following license:\n\u001b[35m\u001b[Ktests/syntax-tests/source/Bash/batgrep.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K3\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K# \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-extras | Copyright (C) 2020 eth-p and contributors | MIT License\n\u001b[35m\u001b[Ktests/syntax-tests/source/Bash/batgrep.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K5\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K# Repository: https://github.com/eth-p/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-extras\n\u001b[35m\u001b[Ktests/syntax-tests/source/Bash/batgrep.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K6\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K# Issues:     https://github.com/eth-p/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-extras/issues\n\u001b[35m\u001b[Ktests/syntax-tests/source/Bash/batgrep.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K37\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kprintc \"%{YELLOW}[%s warning]%{CLEAR}: $1%{CLEAR}\\n\" \"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kgrep\" \"${@:2}\" 1>&2\n\u001b[35m\u001b[Ktests/syntax-tests/source/Bash/batgrep.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K40\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kprintc \"%{RED}[%s error]%{CLEAR}: $1%{CLEAR}\\n\" \"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kgrep\" \"${@:2}\" 1>&2\n\u001b[35m\u001b[Ktests/syntax-tests/source/Bash/batgrep.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K116\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kif [[ -n ${\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER+x} ]];then\n\u001b[35m\u001b[Ktests/syntax-tests/source/Bash/batgrep.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K117\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[KSCRIPT_PAGER_CMD=($\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER)\n\u001b[35m\u001b[Ktests/syntax-tests/source/Bash/batgrep.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K169\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kprintc \"%{RED}%s: '%s' requires a value%{CLEAR}\\n\" \"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kgrep\" \"$ARG\"\n\u001b[35m\u001b[Ktests/syntax-tests/source/Bash/batgrep.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K185\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K*)printc \"%{RED}%s: '--color' expects value of 'auto', 'always', or 'never'%{CLEAR}\\n\" \"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kgrep\"\n\u001b[35m\u001b[Ktests/syntax-tests/source/Bash/batgrep.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K217\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K*)printc \"%{RED}%s: '--paging' expects value of 'auto', 'always', or 'never'%{CLEAR}\\n\" \"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kgrep\"\n\u001b[35m\u001b[Ktests/syntax-tests/source/Bash/batgrep.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K238\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kgrep\" \\\n\u001b[35m\u001b[Ktests/syntax-tests/source/Bash/batgrep.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K241\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\"https://github.com/eth-p/\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K-extras\"\n\u001b[35m\u001b[Ktests/syntax-tests/source/Bash/batgrep.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K269\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_version(){\n\u001b[35m\u001b[Ktests/syntax-tests/source/Bash/batgrep.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K270\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\" --version|cut -d ' ' -f 2\n\u001b[35m\u001b[Ktests/syntax-tests/source/Bash/batgrep.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K319\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_ARGS=()\n\u001b[35m\u001b[Ktests/syntax-tests/source/Bash/batgrep.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K330\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_STYLE=\"header,numbers\"\n\u001b[35m\u001b[Ktests/syntax-tests/source/Bash/batgrep.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K331\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kif version_compare \"$(\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_version)\" -gt \"0.12\";then\n\u001b[35m\u001b[Ktests/syntax-tests/source/Bash/batgrep.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K419\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kprintc \"%{RED}%s: unknown option '%s'%{CLEAR}\\n\" \"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kgrep\" \"$OPT\" 1>&2\n\u001b[35m\u001b[Ktests/syntax-tests/source/Bash/batgrep.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K444\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_ARGS+=(\"--color=always\")\n\u001b[35m\u001b[Ktests/syntax-tests/source/Bash/batgrep.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K446\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_ARGS+=(\"--color=never\")\n\u001b[35m\u001b[Ktests/syntax-tests/source/Bash/batgrep.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K462\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K'the pager was explicitly disabled by $\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER or the' \\\n\u001b[35m\u001b[Ktests/syntax-tests/source/Bash/batgrep.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K482\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\" \"${\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_ARGS[@]}\" \\\n\u001b[35m\u001b[Ktests/syntax-tests/source/Bash/batgrep.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K485\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K--style=\"$\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_STYLE$OPT_SNIP\" \\\n\u001b[35m\u001b[Ktests/syntax-tests/source/Bash/simple.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K15\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t\t\t| cat | \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K - | cat\n\u001b[35m\u001b[Ktests/syntax-tests/source/Bash/simple.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K20\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kif command -v \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K &> /dev/null; then\n\u001b[35m\u001b[Ktests/syntax-tests/source/Rust/output.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K39\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        let pager_from_env = match (env::var(\"\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER\"), env::var(\"PAGER\")) {\n\u001b[35m\u001b[Ktests/syntax-tests/source/Rust/output.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K40\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            (Ok(\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_pager), _) => Some(\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_pager),\n\u001b[35m\u001b[Ktests/syntax-tests/source/Rust/output.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K43\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                // ANSI color sequences printed by \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K. If someone has set PAGER=\"less -F\", we\n\u001b[35m\u001b[Ktests/syntax-tests/source/Rust/output.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K46\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                // We only do this for PAGER (as it is not specific to '\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K'), not for \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_PAGER\n\u001b[35m\u001b[Ktests/syntax-tests/source/Rust/output.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K47\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                // or \u001b[1;33m\u001b[Kbat\u001b[m\u001b[Ks '--pager' command line option.\n\u001b[35m\u001b[Ktests/syntax-tests/source/Rust/output.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K71\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                if pager_path.file_stem() == Some(&OsString::from(\"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\")) {\n\u001b[35m\u001b[Ktests/syntax-tests/test_custom_assets.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K6\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CONFIG_DIR=$(mktemp -d)\n\u001b[35m\u001b[Ktests/syntax-tests/test_custom_assets.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K7\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kexport \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CONFIG_DIR\n\u001b[35m\u001b[Ktests/syntax-tests/test_custom_assets.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K9\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CACHE_PATH=$(mktemp -d)\n\u001b[35m\u001b[Ktests/syntax-tests/test_custom_assets.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K10\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kexport \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CACHE_PATH\n\u001b[35m\u001b[Ktests/syntax-tests/test_custom_assets.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K13\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CONFIG_DIR = ${\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CONFIG_DIR}\n\u001b[35m\u001b[Ktests/syntax-tests/test_custom_assets.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K14\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CACHE_PATH = ${\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CACHE_PATH}\n\u001b[35m\u001b[Ktests/syntax-tests/test_custom_assets.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K20\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \"--language=\u001b[1;33m\u001b[KBat\u001b[m\u001b[KTestCustomAssets\"\n\u001b[35m\u001b[Ktests/syntax-tests/test_custom_assets.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K21\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \"tests/syntax-tests/source/\u001b[1;33m\u001b[KBat\u001b[m\u001b[KTestCustomAssets/NoColorsUnlessCustomAssetsAreUsed.\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Ktestcustomassets\"\n\u001b[35m\u001b[Ktests/syntax-tests/test_custom_assets.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K42\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kecho_step \"TEST: Make sure '\u001b[1;33m\u001b[KBat\u001b[m\u001b[KTestCustomAssets' is not part of integrated syntaxes\"\n\u001b[35m\u001b[Ktests/syntax-tests/test_custom_assets.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K43\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K -f \"${custom_syntax_args[@]}\" &&\n\u001b[35m\u001b[Ktests/syntax-tests/test_custom_assets.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K46\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kecho_step \"PREPARE: Install custom syntax '\u001b[1;33m\u001b[KBat\u001b[m\u001b[KTestCustomAssets'\"\n\u001b[35m\u001b[Ktests/syntax-tests/test_custom_assets.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K47\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kcustom_syntaxes_dir=\"$(\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K --config-dir)/syntaxes\"\n\u001b[35m\u001b[Ktests/syntax-tests/test_custom_assets.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K49\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kcp -v \"tests/syntax-tests/\u001b[1;33m\u001b[KBat\u001b[m\u001b[KTestCustomAssets.sublime-syntax\" \\\n\u001b[35m\u001b[Ktests/syntax-tests/test_custom_assets.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K50\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    \"${custom_syntaxes_dir}/\u001b[1;33m\u001b[KBat\u001b[m\u001b[KTestCustomAssets.sublime-syntax\"\n\u001b[35m\u001b[Ktests/syntax-tests/test_custom_assets.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K52\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kecho_step \"PREPARE: Build custom assets to enable '\u001b[1;33m\u001b[KBat\u001b[m\u001b[KTestCustomAssets' syntax\"\n\u001b[35m\u001b[Ktests/syntax-tests/test_custom_assets.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K53\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K cache --build\n\u001b[35m\u001b[Ktests/syntax-tests/test_custom_assets.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K55\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kecho_step \"TEST: '\u001b[1;33m\u001b[KBat\u001b[m\u001b[KTestCustomAssets' is a known syntax\"\n\u001b[35m\u001b[Ktests/syntax-tests/test_custom_assets.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K56\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K -f \"${custom_syntax_args[@]}\" ||\n\u001b[35m\u001b[Ktests/syntax-tests/test_custom_assets.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K60\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K -f \"${integrated_syntax_args[@]}\" ||\n\u001b[35m\u001b[Ktests/syntax-tests/test_custom_assets.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K63\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kecho_step \"TEST: '\u001b[1;33m\u001b[KBat\u001b[m\u001b[KTestCustomAssets' is an unknown syntax with --no-custom-assets\"\n\u001b[35m\u001b[Ktests/syntax-tests/test_custom_assets.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K64\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K -f --no-custom-assets \"${custom_syntax_args[@]}\" &&\n\u001b[35m\u001b[Ktests/syntax-tests/test_custom_assets.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K67\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kecho_step \"TEST: '\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K cache --clear' removes all files\"\n\u001b[35m\u001b[Ktests/syntax-tests/test_custom_assets.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K68\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K cache --clear\n\u001b[35m\u001b[Ktests/syntax-tests/test_custom_assets.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K69\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kremaining_files=$(ls -A \"${\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CACHE_PATH}\")\n\u001b[35m\u001b[Ktests/syntax-tests/test_custom_assets.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K74\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Krm -rv \"${\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CONFIG_DIR}\" \"${\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_CACHE_PATH}\"\n\u001b[35m\u001b[Ktests/assets.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K1\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kuse \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K::assets::HighlightingAssets;\n\u001b[35m\u001b[Ktests/no_duplicate_extensions.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K3\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kuse \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K::assets::HighlightingAssets;\n\u001b[35m\u001b[Ktests/scripts/find-slow-to-highlight-files.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K3\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K# This script goes through all languages that are supported by '\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K'. For each\n\u001b[35m\u001b[Ktests/scripts/find-slow-to-highlight-files.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K5\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K# given folder for matching files. It calls '\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K' for each of these files and\n\u001b[35m\u001b[Ktests/scripts/find-slow-to-highlight-files.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K8\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K# execution of '\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K'.\n\u001b[35m\u001b[Ktests/scripts/find-slow-to-highlight-files.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K11\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K#   - \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K (in the $PATH)\n\u001b[35m\u001b[Ktests/scripts/find-slow-to-highlight-files.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K24\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K# Maximum time we allow `\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K` to run\n\u001b[35m\u001b[Ktests/scripts/find-slow-to-highlight-files.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K25\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_TIMEOUT_SEC = 10\n\u001b[35m\u001b[Ktests/scripts/find-slow-to-highlight-files.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K62\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            sp.check_output([\"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\", \"--color=always\", path], timeout=\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_TIMEOUT_SEC)\n\u001b[35m\u001b[Ktests/scripts/find-slow-to-highlight-files.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K77\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            if num_chars < THRESHOLD_SPEED * \u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_TIMEOUT_SEC:\n\u001b[35m\u001b[Ktests/scripts/find-slow-to-highlight-files.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K78\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                print(f\"  Error: \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K timed out on file '{path.decode()}'.\")\n\u001b[35m\u001b[Ktests/scripts/find-slow-to-highlight-files.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K81\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                    f\"  Warning: \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K timed out on file '{path.decode()} (but the file is large).\"\n\u001b[35m\u001b[Ktests/scripts/find-slow-to-highlight-files.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K85\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kdef measure_\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_startup_speed():\n\u001b[35m\u001b[Ktests/scripts/find-slow-to-highlight-files.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K90\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            [\"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\", \"--color=always\", \"--language=py\"], stdin=sp.PIPE, stdout=sp.PIPE\n\u001b[35m\u001b[Ktests/scripts/find-slow-to-highlight-files.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K102\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    output = sp.check_output([\"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\", \"--list-languages\"]).decode()\n\u001b[35m\u001b[Ktests/scripts/find-slow-to-highlight-files.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K113\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    print(\"Measuring '\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K' startup speed ... \", flush=True, end=\"\")\n\u001b[35m\u001b[Ktests/scripts/find-slow-to-highlight-files.py\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K114\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    startup_time = measure_\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_startup_speed()\n\u001b[35m\u001b[Ktests/tester.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K13\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kpub struct \u001b[1;33m\u001b[KBat\u001b[m\u001b[KTester {\n\u001b[35m\u001b[Ktests/tester.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K17\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    /// Path to the *\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K* executable\n\u001b[35m\u001b[Ktests/tester.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K21\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kimpl \u001b[1;33m\u001b[KBat\u001b[m\u001b[KTester {\n\u001b[35m\u001b[Ktests/tester.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K35\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            .expect(\"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K failed\");\n\u001b[35m\u001b[Ktests/tester.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K52\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kimpl Default for \u001b[1;33m\u001b[KBat\u001b[m\u001b[KTester {\n\u001b[35m\u001b[Ktests/tester.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K61\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K            .expect(\"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K executable directory\")\n\u001b[35m\u001b[Ktests/tester.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K64\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        let exe_name = if cfg!(windows) { \"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K.exe\" } else { \"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\" };\n\u001b[35m\u001b[Ktests/tester.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K67\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K        \u001b[1;33m\u001b[KBat\u001b[m\u001b[KTester { temp_dir, exe }\n\u001b[35m\u001b[Ktests/tester.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K86\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K    let signature = Signature::now(\"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K test runner\", \"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K@test.runner\")?;\n\u001b[35m\u001b[Ktests/snapshot_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K3\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kuse crate::tester::\u001b[1;33m\u001b[KBat\u001b[m\u001b[KTester;\n\u001b[35m\u001b[Ktests/snapshot_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K10\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                let \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_tester = \u001b[1;33m\u001b[KBat\u001b[m\u001b[KTester::default();\n\u001b[35m\u001b[Ktests/snapshot_tests.rs\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K11\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K                \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_tester.test_snapshot(stringify!($test_name), $style);\n\u001b[35m\u001b[Kdiagnostics/info.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K2\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K_modules=('system' '\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K' '\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_config' '\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_wrapper' '\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_wrapper_function' 'tool')\n\u001b[35m\u001b[Kdiagnostics/info.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K10\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K=\"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\"\n\u001b[35m\u001b[Kdiagnostics/info.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K11\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kif ! command -v \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K &>/dev/null; then\n\u001b[35m\u001b[Kdiagnostics/info.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K12\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tif command -v \u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kcat &> /dev/null; then\n\u001b[35m\u001b[Kdiagnostics/info.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K13\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t\t\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K=\"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[Kcat\"\n\u001b[35m\u001b[Kdiagnostics/info.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K17\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t\t\t\"Unable to find a \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K executable on your PATH.\" \\\n\u001b[35m\u001b[Kdiagnostics/info.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K18\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t\t\t\"Please ensure that '\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K' exists and is not named something else.\"\n\u001b[35m\u001b[Kdiagnostics/info.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K28\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K_\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_:description() {\n\u001b[35m\u001b[Kdiagnostics/info.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K29\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t_collects \"Version information for '\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K'.\"\n\u001b[35m\u001b[Kdiagnostics/info.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K30\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t_collects \"Custom syntaxes and themes for '\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K'.\"\n\u001b[35m\u001b[Kdiagnostics/info.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K33\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K_\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_config_:description() {\n\u001b[35m\u001b[Kdiagnostics/info.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K34\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t_collects \"The environment variables used by '\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K'.\"\n\u001b[35m\u001b[Kdiagnostics/info.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K35\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t_collects \"The '\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K' configuration file.\"\n\u001b[35m\u001b[Kdiagnostics/info.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K38\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K_\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_wrapper_:description() {\n\u001b[35m\u001b[Kdiagnostics/info.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K39\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t_collects \"Any wrapper script used by '\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K'.\"\n\u001b[35m\u001b[Kdiagnostics/info.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K42\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K_\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_wrapper_function_:description() {\n\u001b[35m\u001b[Kdiagnostics/info.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K43\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t_collects \"The wrapper function surrounding '\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K' (if applicable).\"\n\u001b[35m\u001b[Kdiagnostics/info.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K57\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K_\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_:run() {\n\u001b[35m\u001b[Kdiagnostics/info.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K58\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t_out \"$\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K\" --version\n\u001b[35m\u001b[Kdiagnostics/info.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K59\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t_out env | grep '^\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K_\\|^PAGER='\n\u001b[35m\u001b[Kdiagnostics/info.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K62\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tcache_dir=\"$($\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K --cache-dir)\"\n\u001b[35m\u001b[Kdiagnostics/info.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K64\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t\t_print_command \"$\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K\" \"--list-languages\"\n\u001b[35m\u001b[Kdiagnostics/info.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K69\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t\t_print_command \"$\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K\" \"--list-themes\"\n\u001b[35m\u001b[Kdiagnostics/info.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K74\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K_\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_config_:run() {\n\u001b[35m\u001b[Kdiagnostics/info.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K75\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tif [[ -f \"$(\"$\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K\" --config-file)\" ]]; then\n\u001b[35m\u001b[Kdiagnostics/info.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K76\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t\t_out_fence cat \"$(\"$\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K\" --config-file)\"\n\u001b[35m\u001b[Kdiagnostics/info.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K80\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K_\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_wrapper_:run() {\n\u001b[35m\u001b[Kdiagnostics/info.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K81\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t_\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_wrapper_:detect_wrapper() {\n\u001b[35m\u001b[Kdiagnostics/info.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K82\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t\tlocal \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K=\"$1\"\n\u001b[35m\u001b[Kdiagnostics/info.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K83\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t\tif file \"$(command -v \"${\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K}\")\" | grep \"text executable\" &> /dev/null; then\n\u001b[35m\u001b[Kdiagnostics/info.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K84\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t\t\t_out_fence cat \"$(command -v \"${\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K}\")\"\n\u001b[35m\u001b[Kdiagnostics/info.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K88\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t\tprintf \"\\nNo wrapper script for '%s'.\\n\" \"${\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K}\"\n\u001b[35m\u001b[Kdiagnostics/info.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K91\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t_\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_wrapper_:detect_wrapper \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdiagnostics/info.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K92\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tif [[ \"$\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K\" != \"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\" ]]; then\n\u001b[35m\u001b[Kdiagnostics/info.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K93\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t\t_\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_wrapper_:detect_wrapper \"$\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K\"\n\u001b[35m\u001b[Kdiagnostics/info.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K97\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K_\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_wrapper_function_:run() {\n\u001b[35m\u001b[Kdiagnostics/info.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K98\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t_\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_wrapper_function_:detect_wrapper() {\n\u001b[35m\u001b[Kdiagnostics/info.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K125\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t_\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_wrapper_function_:detect_wrapper \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\n\u001b[35m\u001b[Kdiagnostics/info.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K126\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t_\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_wrapper_function_:detect_wrapper cat\n\u001b[35m\u001b[Kdiagnostics/info.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K127\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tif [[ \"$\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K\" != \"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\" ]]; then\n\u001b[35m\u001b[Kdiagnostics/info.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K128\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t\t_\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K_wrapper_function_:detect_wrapper \"$\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K\"\n\u001b[35m\u001b[Kdiagnostics/info.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K180\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Ksystem and \u001b[1;33m\u001b[Kbat\u001b[m\u001b[K configuration. It will give you a small preview of the commands\n\u001b[35m\u001b[Kdiagnostics/info.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K201\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\t\t| sed \"s/\\\"\\$\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K\\\"/$\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K/\" 1>&2\n\u001b[35m\u001b[Kdiagnostics/info.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K228\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K# Tell the user if their executable isn't named \"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\".\n\u001b[35m\u001b[Kdiagnostics/info.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K229\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[Kif [[ \"$\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K\" != \"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\" ]] && [[ \"$1\" != '-y' ]]; then\n\u001b[35m\u001b[Kdiagnostics/info.sh\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\u001b[32m\u001b[K235\u001b[m\u001b[K\u001b[36m\u001b[K:\u001b[m\u001b[K\tprintf \"The %s executable on your system is named '%s'.\\n%s\\n\" \"\u001b[1;33m\u001b[Kbat\u001b[m\u001b[K\" \"$\u001b[1;33m\u001b[KBAT\u001b[m\u001b[K\" \\\n"
  },
  {
    "path": "tests/benchmarks/highlighting-speed-src/jquery.js",
    "content": "/*!\n * jQuery JavaScript Library v3.3.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2018-01-20T17:24Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar document = window.document;\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n      // Support: Chrome <=57, Firefox <=52\n      // In some browsers, typeof returns \"function\" for HTML <object> elements\n      // (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n      // We don't want to classify *any* DOM node as a function.\n      return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n  };\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, doc, node ) {\n\t\tdoc = doc || document;\n\n\t\tvar i,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\t\t\t\tif ( node[ i ] ) {\n\t\t\t\t\tscript[ i ] = node[ i ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.3.1\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && Array.isArray( src ) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\n\t\t/* eslint-disable no-unused-vars */\n\t\t// See https://github.com/eslint/eslint/issues/6125\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tDOMEval( code );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android <=4.0 only\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.3\n * https://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-08-08\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tdisabledAncestor = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && (\"form\" in elem || \"label\" in elem);\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!compilerCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\n\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\tnewContext = context;\n\t\t\t\t\tnewSelector = selector;\n\n\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t// Support: IE <=8\n\t\t\t\t// Exclude object elements\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = \"#\" + nid + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement(\"fieldset\");\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tdisabledAncestor( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( preferredDoc !== document &&\n\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( el ) {\n\t\tel.appendChild( document.createComment(\"\") );\n\t\treturn !el.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[\"ID\"] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( (elem = elems[i++]) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( el ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll(\":enabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll(\":disabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( el ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!compilerCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn (sel + \"\").replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( (oldCache = uniqueCache[ key ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( el ) {\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement(\"fieldset\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( el ) {\n\tel.innerHTML = \"<a href='#'></a>\";\n\treturn el.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( el ) {\n\tel.innerHTML = \"<input/>\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( el ) {\n\treturn el.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n  return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n};\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n        if ( nodeName( elem, \"iframe\" ) ) {\n            return elem.contentDocument;\n        }\n\n        // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n        // Treat the template element as a regular one in browsers that\n        // don't support it.\n        if ( nodeName( elem, \"template\" ) ) {\n            elem = elem.content || elem;\n        }\n\n        return jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the master Deferred\n\t\t\tmaster = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tmaster.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( master.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn master.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), master.reject );\n\t\t}\n\n\t\treturn master.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (#9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tjQuery.contains( elem.ownerDocument, elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]+)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE <=9 only\n\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE <=9 only\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, contains, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( contains ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\nvar documentElement = document.documentElement;\n\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 only\n// See #13393 for more info\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\n\twhich: function( event ) {\n\t\tvar button = event.button;\n\n\t\t// Add which for key events\n\t\tif ( event.which == null && rkeyEvent.test( event.type ) ) {\n\t\t\treturn event.charCode != null ? event.charCode : event.keyCode;\n\t\t}\n\n\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\tif ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {\n\t\t\tif ( button & 1 ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ( button & 2 ) {\n\t\t\t\treturn 3;\n\t\t\t}\n\n\t\t\tif ( button & 4 ) {\n\t\t\t\treturn 2;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn event.which;\n\t}\n}, jQuery.event.addProp );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t/* eslint-disable max-len */\n\n\t// See https://github.com/eslint/eslint/issues/3229\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,\n\n\t/* eslint-enable */\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase()  !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), doc, node );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1></$2>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = div.offsetWidth === 36 || \"absolute\";\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t//   .css('filter') (IE 9 only, #12537)\n\t//   .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trcustomProp = /^--/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\n\tcssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style;\n\n// Return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( name ) {\n\n\t// Shortcut for names that are not vendor prefixed\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a property mapped along what jQuery.cssProps suggests or to\n// a vendor prefixed property.\nfunction finalPropName( name ) {\n\tvar ret = jQuery.cssProps[ name ];\n\tif ( !ret ) {\n\t\tret = jQuery.cssProps[ name ] = vendorPropName( name ) || name;\n\t}\n\treturn ret;\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\tif ( box === \"margin\" ) {\n\t\t\tdelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\t\t) );\n\t}\n\n\treturn delta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\t\tval = curCSS( elem, dimension, styles ),\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox;\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\t// Check for style in case a browser which returns unreliable values\n\t// for getComputedStyle silently falls back to the reliable elem.style\n\tvalueIsBorderBox = valueIsBorderBox &&\n\t\t( support.boxSizingReliable() || val === elem.style[ dimension ] );\n\n\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t// This happens for inline elements with no explicit setting (gh-3571)\n\t// Support: Android <=4.1 - 4.3 only\n\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\tif ( val === \"auto\" ||\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) {\n\n\t\tval = elem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ];\n\n\t\t// offsetWidth/offsetHeight provide border-box values\n\t\tvalueIsBorderBox = true;\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\t\t\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra && boxModelAdjustment(\n\t\t\t\t\telem,\n\t\t\t\t\tdimension,\n\t\t\t\t\textra,\n\t\t\t\t\tisBorderBox,\n\t\t\t\t\tstyles\n\t\t\t\t);\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && support.scrollboxSize() === styles.position ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 &&\n\t\t\t\t( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = classesToArray( value );\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = Date.now();\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\t\"throws\": true\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\"  ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" ).prop( {\n\t\t\t\t\tcharset: s.scriptCharset,\n\t\t\t\t\tsrc: s.url\n\t\t\t\t} ).on(\n\t\t\t\t\t\"load error\",\n\t\t\t\t\tcallback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t//    documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( ( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n} );\n\njQuery.fn.extend( {\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\n\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t}\n} );\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( !noGlobal ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n"
  },
  {
    "path": "tests/benchmarks/highlighting-speed-src/miniz.c",
    "content": "/**************************************************************************\n *\n * Copyright 2013-2014 RAD Game Tools and Valve Software\n * Copyright 2010-2014 Rich Geldreich and Tenacious Software LLC\n * 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 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 **************************************************************************/\n\n#include \"miniz.h\"\n\ntypedef unsigned char mz_validate_uint16[sizeof(mz_uint16) == 2 ? 1 : -1];\ntypedef unsigned char mz_validate_uint32[sizeof(mz_uint32) == 4 ? 1 : -1];\ntypedef unsigned char mz_validate_uint64[sizeof(mz_uint64) == 8 ? 1 : -1];\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* ------------------- zlib-style API's */\n\nmz_ulong mz_adler32(mz_ulong adler, const unsigned char *ptr, size_t buf_len)\n{\n    mz_uint32 i, s1 = (mz_uint32)(adler & 0xffff), s2 = (mz_uint32)(adler >> 16);\n    size_t block_len = buf_len % 5552;\n    if (!ptr)\n        return MZ_ADLER32_INIT;\n    while (buf_len)\n    {\n        for (i = 0; i + 7 < block_len; i += 8, ptr += 8)\n        {\n            s1 += ptr[0], s2 += s1;\n            s1 += ptr[1], s2 += s1;\n            s1 += ptr[2], s2 += s1;\n            s1 += ptr[3], s2 += s1;\n            s1 += ptr[4], s2 += s1;\n            s1 += ptr[5], s2 += s1;\n            s1 += ptr[6], s2 += s1;\n            s1 += ptr[7], s2 += s1;\n        }\n        for (; i < block_len; ++i)\n            s1 += *ptr++, s2 += s1;\n        s1 %= 65521U, s2 %= 65521U;\n        buf_len -= block_len;\n        block_len = 5552;\n    }\n    return (s2 << 16) + s1;\n}\n\n/* Karl Malbrain's compact CRC-32. See \"A compact CCITT crc16 and crc32 C implementation that balances processor cache usage against speed\": http://www.geocities.com/malbrain/ */\n#if 0\n    mz_ulong mz_crc32(mz_ulong crc, const mz_uint8 *ptr, size_t buf_len)\n    {\n        static const mz_uint32 s_crc32[16] = { 0, 0x1db71064, 0x3b6e20c8, 0x26d930ac, 0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,\n                                               0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c, 0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c };\n        mz_uint32 crcu32 = (mz_uint32)crc;\n        if (!ptr)\n            return MZ_CRC32_INIT;\n        crcu32 = ~crcu32;\n        while (buf_len--)\n        {\n            mz_uint8 b = *ptr++;\n            crcu32 = (crcu32 >> 4) ^ s_crc32[(crcu32 & 0xF) ^ (b & 0xF)];\n            crcu32 = (crcu32 >> 4) ^ s_crc32[(crcu32 & 0xF) ^ (b >> 4)];\n        }\n        return ~crcu32;\n    }\n#else\n/* Faster, but larger CPU cache footprint.\n */\nmz_ulong mz_crc32(mz_ulong crc, const mz_uint8 *ptr, size_t buf_len)\n{\n    static const mz_uint32 s_crc_table[256] =\n        {\n          0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535,\n          0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD,\n          0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, 0x1ADAD47D,\n          0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC,\n          0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4,\n          0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C,\n          0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC,\n          0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,\n          0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB,\n          0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F,\n          0x9FBFE4A5, 0xE8B8D433, 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB,\n          0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,\n          0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA,\n          0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE,\n          0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A,\n          0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,\n          0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409,\n          0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n          0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739,\n          0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,\n          0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, 0xF00F9344, 0x8708A3D2, 0x1E01F268,\n          0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0,\n          0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8,\n          0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,\n          0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF,\n          0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, 0xCC0C7795, 0xBB0B4703,\n          0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7,\n          0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A,\n          0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE,\n          0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242,\n          0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, 0x88085AE6,\n          0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,\n          0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D,\n          0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5,\n          0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605,\n          0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n          0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D\n        };\n\n    mz_uint32 crc32 = (mz_uint32)crc ^ 0xFFFFFFFF;\n    const mz_uint8 *pByte_buf = (const mz_uint8 *)ptr;\n\n    while (buf_len >= 4)\n    {\n        crc32 = (crc32 >> 8) ^ s_crc_table[(crc32 ^ pByte_buf[0]) & 0xFF];\n        crc32 = (crc32 >> 8) ^ s_crc_table[(crc32 ^ pByte_buf[1]) & 0xFF];\n        crc32 = (crc32 >> 8) ^ s_crc_table[(crc32 ^ pByte_buf[2]) & 0xFF];\n        crc32 = (crc32 >> 8) ^ s_crc_table[(crc32 ^ pByte_buf[3]) & 0xFF];\n        pByte_buf += 4;\n        buf_len -= 4;\n    }\n\n    while (buf_len)\n    {\n        crc32 = (crc32 >> 8) ^ s_crc_table[(crc32 ^ pByte_buf[0]) & 0xFF];\n        ++pByte_buf;\n        --buf_len;\n    }\n\n    return ~crc32;\n}\n#endif\n\nvoid mz_free(void *p)\n{\n    MZ_FREE(p);\n}\n\nvoid *miniz_def_alloc_func(void *opaque, size_t items, size_t size)\n{\n    (void)opaque, (void)items, (void)size;\n    return MZ_MALLOC(items * size);\n}\nvoid miniz_def_free_func(void *opaque, void *address)\n{\n    (void)opaque, (void)address;\n    MZ_FREE(address);\n}\nvoid *miniz_def_realloc_func(void *opaque, void *address, size_t items, size_t size)\n{\n    (void)opaque, (void)address, (void)items, (void)size;\n    return MZ_REALLOC(address, items * size);\n}\n\nconst char *mz_version(void)\n{\n    return MZ_VERSION;\n}\n\n#ifndef MINIZ_NO_ZLIB_APIS\n\nint mz_deflateInit(mz_streamp pStream, int level)\n{\n    return mz_deflateInit2(pStream, level, MZ_DEFLATED, MZ_DEFAULT_WINDOW_BITS, 9, MZ_DEFAULT_STRATEGY);\n}\n\nint mz_deflateInit2(mz_streamp pStream, int level, int method, int window_bits, int mem_level, int strategy)\n{\n    tdefl_compressor *pComp;\n    mz_uint comp_flags = TDEFL_COMPUTE_ADLER32 | tdefl_create_comp_flags_from_zip_params(level, window_bits, strategy);\n\n    if (!pStream)\n        return MZ_STREAM_ERROR;\n    if ((method != MZ_DEFLATED) || ((mem_level < 1) || (mem_level > 9)) || ((window_bits != MZ_DEFAULT_WINDOW_BITS) && (-window_bits != MZ_DEFAULT_WINDOW_BITS)))\n        return MZ_PARAM_ERROR;\n\n    pStream->data_type = 0;\n    pStream->adler = MZ_ADLER32_INIT;\n    pStream->msg = NULL;\n    pStream->reserved = 0;\n    pStream->total_in = 0;\n    pStream->total_out = 0;\n    if (!pStream->zalloc)\n        pStream->zalloc = miniz_def_alloc_func;\n    if (!pStream->zfree)\n        pStream->zfree = miniz_def_free_func;\n\n    pComp = (tdefl_compressor *)pStream->zalloc(pStream->opaque, 1, sizeof(tdefl_compressor));\n    if (!pComp)\n        return MZ_MEM_ERROR;\n\n    pStream->state = (struct mz_internal_state *)pComp;\n\n    if (tdefl_init(pComp, NULL, NULL, comp_flags) != TDEFL_STATUS_OKAY)\n    {\n        mz_deflateEnd(pStream);\n        return MZ_PARAM_ERROR;\n    }\n\n    return MZ_OK;\n}\n\nint mz_deflateReset(mz_streamp pStream)\n{\n    if ((!pStream) || (!pStream->state) || (!pStream->zalloc) || (!pStream->zfree))\n        return MZ_STREAM_ERROR;\n    pStream->total_in = pStream->total_out = 0;\n    tdefl_init((tdefl_compressor *)pStream->state, NULL, NULL, ((tdefl_compressor *)pStream->state)->m_flags);\n    return MZ_OK;\n}\n\nint mz_deflate(mz_streamp pStream, int flush)\n{\n    size_t in_bytes, out_bytes;\n    mz_ulong orig_total_in, orig_total_out;\n    int mz_status = MZ_OK;\n\n    if ((!pStream) || (!pStream->state) || (flush < 0) || (flush > MZ_FINISH) || (!pStream->next_out))\n        return MZ_STREAM_ERROR;\n    if (!pStream->avail_out)\n        return MZ_BUF_ERROR;\n\n    if (flush == MZ_PARTIAL_FLUSH)\n        flush = MZ_SYNC_FLUSH;\n\n    if (((tdefl_compressor *)pStream->state)->m_prev_return_status == TDEFL_STATUS_DONE)\n        return (flush == MZ_FINISH) ? MZ_STREAM_END : MZ_BUF_ERROR;\n\n    orig_total_in = pStream->total_in;\n    orig_total_out = pStream->total_out;\n    for (;;)\n    {\n        tdefl_status defl_status;\n        in_bytes = pStream->avail_in;\n        out_bytes = pStream->avail_out;\n\n        defl_status = tdefl_compress((tdefl_compressor *)pStream->state, pStream->next_in, &in_bytes, pStream->next_out, &out_bytes, (tdefl_flush)flush);\n        pStream->next_in += (mz_uint)in_bytes;\n        pStream->avail_in -= (mz_uint)in_bytes;\n        pStream->total_in += (mz_uint)in_bytes;\n        pStream->adler = tdefl_get_adler32((tdefl_compressor *)pStream->state);\n\n        pStream->next_out += (mz_uint)out_bytes;\n        pStream->avail_out -= (mz_uint)out_bytes;\n        pStream->total_out += (mz_uint)out_bytes;\n\n        if (defl_status < 0)\n        {\n            mz_status = MZ_STREAM_ERROR;\n            break;\n        }\n        else if (defl_status == TDEFL_STATUS_DONE)\n        {\n            mz_status = MZ_STREAM_END;\n            break;\n        }\n        else if (!pStream->avail_out)\n            break;\n        else if ((!pStream->avail_in) && (flush != MZ_FINISH))\n        {\n            if ((flush) || (pStream->total_in != orig_total_in) || (pStream->total_out != orig_total_out))\n                break;\n            return MZ_BUF_ERROR; /* Can't make forward progress without some input.\n */\n        }\n    }\n    return mz_status;\n}\n\nint mz_deflateEnd(mz_streamp pStream)\n{\n    if (!pStream)\n        return MZ_STREAM_ERROR;\n    if (pStream->state)\n    {\n        pStream->zfree(pStream->opaque, pStream->state);\n        pStream->state = NULL;\n    }\n    return MZ_OK;\n}\n\nmz_ulong mz_deflateBound(mz_streamp pStream, mz_ulong source_len)\n{\n    (void)pStream;\n    /* This is really over conservative. (And lame, but it's actually pretty tricky to compute a true upper bound given the way tdefl's blocking works.) */\n    return MZ_MAX(128 + (source_len * 110) / 100, 128 + source_len + ((source_len / (31 * 1024)) + 1) * 5);\n}\n\nint mz_compress2(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len, int level)\n{\n    int status;\n    mz_stream stream;\n    memset(&stream, 0, sizeof(stream));\n\n    /* In case mz_ulong is 64-bits (argh I hate longs). */\n    if ((source_len | *pDest_len) > 0xFFFFFFFFU)\n        return MZ_PARAM_ERROR;\n\n    stream.next_in = pSource;\n    stream.avail_in = (mz_uint32)source_len;\n    stream.next_out = pDest;\n    stream.avail_out = (mz_uint32)*pDest_len;\n\n    status = mz_deflateInit(&stream, level);\n    if (status != MZ_OK)\n        return status;\n\n    status = mz_deflate(&stream, MZ_FINISH);\n    if (status != MZ_STREAM_END)\n    {\n        mz_deflateEnd(&stream);\n        return (status == MZ_OK) ? MZ_BUF_ERROR : status;\n    }\n\n    *pDest_len = stream.total_out;\n    return mz_deflateEnd(&stream);\n}\n\nint mz_compress(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len)\n{\n    return mz_compress2(pDest, pDest_len, pSource, source_len, MZ_DEFAULT_COMPRESSION);\n}\n\nmz_ulong mz_compressBound(mz_ulong source_len)\n{\n    return mz_deflateBound(NULL, source_len);\n}\n\ntypedef struct\n{\n    tinfl_decompressor m_decomp;\n    mz_uint m_dict_ofs, m_dict_avail, m_first_call, m_has_flushed;\n    int m_window_bits;\n    mz_uint8 m_dict[TINFL_LZ_DICT_SIZE];\n    tinfl_status m_last_status;\n} inflate_state;\n\nint mz_inflateInit2(mz_streamp pStream, int window_bits)\n{\n    inflate_state *pDecomp;\n    if (!pStream)\n        return MZ_STREAM_ERROR;\n    if ((window_bits != MZ_DEFAULT_WINDOW_BITS) && (-window_bits != MZ_DEFAULT_WINDOW_BITS))\n        return MZ_PARAM_ERROR;\n\n    pStream->data_type = 0;\n    pStream->adler = 0;\n    pStream->msg = NULL;\n    pStream->total_in = 0;\n    pStream->total_out = 0;\n    pStream->reserved = 0;\n    if (!pStream->zalloc)\n        pStream->zalloc = miniz_def_alloc_func;\n    if (!pStream->zfree)\n        pStream->zfree = miniz_def_free_func;\n\n    pDecomp = (inflate_state *)pStream->zalloc(pStream->opaque, 1, sizeof(inflate_state));\n    if (!pDecomp)\n        return MZ_MEM_ERROR;\n\n    pStream->state = (struct mz_internal_state *)pDecomp;\n\n    tinfl_init(&pDecomp->m_decomp);\n    pDecomp->m_dict_ofs = 0;\n    pDecomp->m_dict_avail = 0;\n    pDecomp->m_last_status = TINFL_STATUS_NEEDS_MORE_INPUT;\n    pDecomp->m_first_call = 1;\n    pDecomp->m_has_flushed = 0;\n    pDecomp->m_window_bits = window_bits;\n\n    return MZ_OK;\n}\n\nint mz_inflateInit(mz_streamp pStream)\n{\n    return mz_inflateInit2(pStream, MZ_DEFAULT_WINDOW_BITS);\n}\n\nint mz_inflate(mz_streamp pStream, int flush)\n{\n    inflate_state *pState;\n    mz_uint n, first_call, decomp_flags = TINFL_FLAG_COMPUTE_ADLER32;\n    size_t in_bytes, out_bytes, orig_avail_in;\n    tinfl_status status;\n\n    if ((!pStream) || (!pStream->state))\n        return MZ_STREAM_ERROR;\n    if (flush == MZ_PARTIAL_FLUSH)\n        flush = MZ_SYNC_FLUSH;\n    if ((flush) && (flush != MZ_SYNC_FLUSH) && (flush != MZ_FINISH))\n        return MZ_STREAM_ERROR;\n\n    pState = (inflate_state *)pStream->state;\n    if (pState->m_window_bits > 0)\n        decomp_flags |= TINFL_FLAG_PARSE_ZLIB_HEADER;\n    orig_avail_in = pStream->avail_in;\n\n    first_call = pState->m_first_call;\n    pState->m_first_call = 0;\n    if (pState->m_last_status < 0)\n        return MZ_DATA_ERROR;\n\n    if (pState->m_has_flushed && (flush != MZ_FINISH))\n        return MZ_STREAM_ERROR;\n    pState->m_has_flushed |= (flush == MZ_FINISH);\n\n    if ((flush == MZ_FINISH) && (first_call))\n    {\n        /* MZ_FINISH on the first call implies that the input and output buffers are large enough to hold the entire compressed/decompressed file. */\n        decomp_flags |= TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF;\n        in_bytes = pStream->avail_in;\n        out_bytes = pStream->avail_out;\n        status = tinfl_decompress(&pState->m_decomp, pStream->next_in, &in_bytes, pStream->next_out, pStream->next_out, &out_bytes, decomp_flags);\n        pState->m_last_status = status;\n        pStream->next_in += (mz_uint)in_bytes;\n        pStream->avail_in -= (mz_uint)in_bytes;\n        pStream->total_in += (mz_uint)in_bytes;\n        pStream->adler = tinfl_get_adler32(&pState->m_decomp);\n        pStream->next_out += (mz_uint)out_bytes;\n        pStream->avail_out -= (mz_uint)out_bytes;\n        pStream->total_out += (mz_uint)out_bytes;\n\n        if (status < 0)\n            return MZ_DATA_ERROR;\n        else if (status != TINFL_STATUS_DONE)\n        {\n            pState->m_last_status = TINFL_STATUS_FAILED;\n            return MZ_BUF_ERROR;\n        }\n        return MZ_STREAM_END;\n    }\n    /* flush != MZ_FINISH then we must assume there's more input. */\n    if (flush != MZ_FINISH)\n        decomp_flags |= TINFL_FLAG_HAS_MORE_INPUT;\n\n    if (pState->m_dict_avail)\n    {\n        n = MZ_MIN(pState->m_dict_avail, pStream->avail_out);\n        memcpy(pStream->next_out, pState->m_dict + pState->m_dict_ofs, n);\n        pStream->next_out += n;\n        pStream->avail_out -= n;\n        pStream->total_out += n;\n        pState->m_dict_avail -= n;\n        pState->m_dict_ofs = (pState->m_dict_ofs + n) & (TINFL_LZ_DICT_SIZE - 1);\n        return ((pState->m_last_status == TINFL_STATUS_DONE) && (!pState->m_dict_avail)) ? MZ_STREAM_END : MZ_OK;\n    }\n\n    for (;;)\n    {\n        in_bytes = pStream->avail_in;\n        out_bytes = TINFL_LZ_DICT_SIZE - pState->m_dict_ofs;\n\n        status = tinfl_decompress(&pState->m_decomp, pStream->next_in, &in_bytes, pState->m_dict, pState->m_dict + pState->m_dict_ofs, &out_bytes, decomp_flags);\n        pState->m_last_status = status;\n\n        pStream->next_in += (mz_uint)in_bytes;\n        pStream->avail_in -= (mz_uint)in_bytes;\n        pStream->total_in += (mz_uint)in_bytes;\n        pStream->adler = tinfl_get_adler32(&pState->m_decomp);\n\n        pState->m_dict_avail = (mz_uint)out_bytes;\n\n        n = MZ_MIN(pState->m_dict_avail, pStream->avail_out);\n        memcpy(pStream->next_out, pState->m_dict + pState->m_dict_ofs, n);\n        pStream->next_out += n;\n        pStream->avail_out -= n;\n        pStream->total_out += n;\n        pState->m_dict_avail -= n;\n        pState->m_dict_ofs = (pState->m_dict_ofs + n) & (TINFL_LZ_DICT_SIZE - 1);\n\n        if (status < 0)\n            return MZ_DATA_ERROR; /* Stream is corrupted (there could be some uncompressed data left in the output dictionary - oh well). */\n        else if ((status == TINFL_STATUS_NEEDS_MORE_INPUT) && (!orig_avail_in))\n            return MZ_BUF_ERROR; /* Signal caller that we can't make forward progress without supplying more input or by setting flush to MZ_FINISH. */\n        else if (flush == MZ_FINISH)\n        {\n            /* The output buffer MUST be large to hold the remaining uncompressed data when flush==MZ_FINISH. */\n            if (status == TINFL_STATUS_DONE)\n                return pState->m_dict_avail ? MZ_BUF_ERROR : MZ_STREAM_END;\n            /* status here must be TINFL_STATUS_HAS_MORE_OUTPUT, which means there's at least 1 more byte on the way. If there's no more room left in the output buffer then something is wrong. */\n            else if (!pStream->avail_out)\n                return MZ_BUF_ERROR;\n        }\n        else if ((status == TINFL_STATUS_DONE) || (!pStream->avail_in) || (!pStream->avail_out) || (pState->m_dict_avail))\n            break;\n    }\n\n    return ((status == TINFL_STATUS_DONE) && (!pState->m_dict_avail)) ? MZ_STREAM_END : MZ_OK;\n}\n\nint mz_inflateEnd(mz_streamp pStream)\n{\n    if (!pStream)\n        return MZ_STREAM_ERROR;\n    if (pStream->state)\n    {\n        pStream->zfree(pStream->opaque, pStream->state);\n        pStream->state = NULL;\n    }\n    return MZ_OK;\n}\n\nint mz_uncompress(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len)\n{\n    mz_stream stream;\n    int status;\n    memset(&stream, 0, sizeof(stream));\n\n    /* In case mz_ulong is 64-bits (argh I hate longs). */\n    if ((source_len | *pDest_len) > 0xFFFFFFFFU)\n        return MZ_PARAM_ERROR;\n\n    stream.next_in = pSource;\n    stream.avail_in = (mz_uint32)source_len;\n    stream.next_out = pDest;\n    stream.avail_out = (mz_uint32)*pDest_len;\n\n    status = mz_inflateInit(&stream);\n    if (status != MZ_OK)\n        return status;\n\n    status = mz_inflate(&stream, MZ_FINISH);\n    if (status != MZ_STREAM_END)\n    {\n        mz_inflateEnd(&stream);\n        return ((status == MZ_BUF_ERROR) && (!stream.avail_in)) ? MZ_DATA_ERROR : status;\n    }\n    *pDest_len = stream.total_out;\n\n    return mz_inflateEnd(&stream);\n}\n\nconst char *mz_error(int err)\n{\n    static struct\n    {\n        int m_err;\n        const char *m_pDesc;\n    } s_error_descs[] =\n        {\n          { MZ_OK, \"\" }, { MZ_STREAM_END, \"stream end\" }, { MZ_NEED_DICT, \"need dictionary\" }, { MZ_ERRNO, \"file error\" }, { MZ_STREAM_ERROR, \"stream error\" }, { MZ_DATA_ERROR, \"data error\" }, { MZ_MEM_ERROR, \"out of memory\" }, { MZ_BUF_ERROR, \"buf error\" }, { MZ_VERSION_ERROR, \"version error\" }, { MZ_PARAM_ERROR, \"parameter error\" }\n        };\n    mz_uint i;\n    for (i = 0; i < sizeof(s_error_descs) / sizeof(s_error_descs[0]); ++i)\n        if (s_error_descs[i].m_err == err)\n            return s_error_descs[i].m_pDesc;\n    return NULL;\n}\n\n#endif /*MINIZ_NO_ZLIB_APIS */\n\n#ifdef __cplusplus\n}\n#endif\n\n/*\n  This is free and unencumbered software released into the public domain.\n\n  Anyone is free to copy, modify, publish, use, compile, sell, or\n  distribute this software, either in source code form or as a compiled\n  binary, for any purpose, commercial or non-commercial, and by any\n  means.\n\n  In jurisdictions that recognize copyright laws, the author or authors\n  of this software dedicate any and all copyright interest in the\n  software to the public domain. We make this dedication for the benefit\n  of the public at large and to the detriment of our heirs and\n  successors. We intend this dedication to be an overt act of\n  relinquishment in perpetuity of all present and future rights to this\n  software under copyright law.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n  IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR\n  OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,\n  ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n  OTHER DEALINGS IN THE SOFTWARE.\n\n  For more information, please refer to <http://unlicense.org/>\n*/\n"
  },
  {
    "path": "tests/benchmarks/highlighting-speed-src/numpy_test_multiarray.py",
    "content": "import collections.abc\nimport tempfile\nimport sys\nimport shutil\nimport warnings\nimport operator\nimport io\nimport itertools\nimport functools\nimport ctypes\nimport os\nimport gc\nimport weakref\nimport pytest\nfrom contextlib import contextmanager\n\nfrom numpy.compat import pickle\n\nimport pathlib\nimport builtins\nfrom decimal import Decimal\n\nimport numpy as np\nfrom numpy.compat import strchar\nimport numpy.core._multiarray_tests as _multiarray_tests\nfrom numpy.testing import (\n    assert_, assert_raises, assert_warns, assert_equal, assert_almost_equal,\n    assert_array_equal, assert_raises_regex, assert_array_almost_equal,\n    assert_allclose, IS_PYPY, HAS_REFCOUNT, assert_array_less, runstring,\n    temppath, suppress_warnings, break_cycles,\n    )\nfrom numpy.testing._private.utils import _no_tracing\nfrom numpy.core.tests._locales import CommaDecimalPointLocale\n\n# Need to test an object that does not fully implement math interface\nfrom datetime import timedelta, datetime\n\n\ndef _aligned_zeros(shape, dtype=float, order=\"C\", align=None):\n    \"\"\"\n    Allocate a new ndarray with aligned memory.\n\n    The ndarray is guaranteed *not* aligned to twice the requested alignment.\n    Eg, if align=4, guarantees it is not aligned to 8. If align=None uses\n    dtype.alignment.\"\"\"\n    dtype = np.dtype(dtype)\n    if dtype == np.dtype(object):\n        # Can't do this, fall back to standard allocation (which\n        # should always be sufficiently aligned)\n        if align is not None:\n            raise ValueError(\"object array alignment not supported\")\n        return np.zeros(shape, dtype=dtype, order=order)\n    if align is None:\n        align = dtype.alignment\n    if not hasattr(shape, '__len__'):\n        shape = (shape,)\n    size = functools.reduce(operator.mul, shape) * dtype.itemsize\n    buf = np.empty(size + 2*align + 1, np.uint8)\n\n    ptr = buf.__array_interface__['data'][0]\n    offset = ptr % align\n    if offset != 0:\n        offset = align - offset\n    if (ptr % (2*align)) == 0:\n        offset += align\n\n    # Note: slices producing 0-size arrays do not necessarily change\n    # data pointer --- so we use and allocate size+1\n    buf = buf[offset:offset+size+1][:-1]\n    data = np.ndarray(shape, dtype, buf, order=order)\n    data.fill(0)\n    return data\n\n\nclass TestFlags:\n    def setup(self):\n        self.a = np.arange(10)\n\n    def test_writeable(self):\n        mydict = locals()\n        self.a.flags.writeable = False\n        assert_raises(ValueError, runstring, 'self.a[0] = 3', mydict)\n        assert_raises(ValueError, runstring, 'self.a[0:1].itemset(3)', mydict)\n        self.a.flags.writeable = True\n        self.a[0] = 5\n        self.a[0] = 0\n\n    def test_writeable_any_base(self):\n        # Ensure that any base being writeable is sufficient to change flag;\n        # this is especially interesting for arrays from an array interface.\n        arr = np.arange(10)\n\n        class subclass(np.ndarray):\n            pass\n\n        # Create subclass so base will not be collapsed, this is OK to change\n        view1 = arr.view(subclass)\n        view2 = view1[...]\n        arr.flags.writeable = False\n        view2.flags.writeable = False\n        view2.flags.writeable = True  # Can be set to True again.\n\n        arr = np.arange(10)\n\n        class frominterface:\n            def __init__(self, arr):\n                self.arr = arr\n                self.__array_interface__ = arr.__array_interface__\n\n        view1 = np.asarray(frominterface)\n        view2 = view1[...]\n        view2.flags.writeable = False\n        view2.flags.writeable = True\n\n        view1.flags.writeable = False\n        view2.flags.writeable = False\n        with assert_raises(ValueError):\n            # Must assume not writeable, since only base is not:\n            view2.flags.writeable = True\n\n    def test_writeable_from_readonly(self):\n        # gh-9440 - make sure fromstring, from buffer on readonly buffers\n        # set writeable False\n        data = b'\\x00' * 100\n        vals = np.frombuffer(data, 'B')\n        assert_raises(ValueError, vals.setflags, write=True)\n        types = np.dtype( [('vals', 'u1'), ('res3', 'S4')] )\n        values = np.core.records.fromstring(data, types)\n        vals = values['vals']\n        assert_raises(ValueError, vals.setflags, write=True)\n\n    def test_writeable_from_buffer(self):\n        data = bytearray(b'\\x00' * 100)\n        vals = np.frombuffer(data, 'B')\n        assert_(vals.flags.writeable)\n        vals.setflags(write=False)\n        assert_(vals.flags.writeable is False)\n        vals.setflags(write=True)\n        assert_(vals.flags.writeable)\n        types = np.dtype( [('vals', 'u1'), ('res3', 'S4')] )\n        values = np.core.records.fromstring(data, types)\n        vals = values['vals']\n        assert_(vals.flags.writeable)\n        vals.setflags(write=False)\n        assert_(vals.flags.writeable is False)\n        vals.setflags(write=True)\n        assert_(vals.flags.writeable)\n\n    @pytest.mark.skipif(IS_PYPY, reason=\"PyPy always copies\")\n    def test_writeable_pickle(self):\n        import pickle\n        # Small arrays will be copied without setting base.\n        # See condition for using PyArray_SetBaseObject in\n        # array_setstate.\n        a = np.arange(1000)\n        for v in range(pickle.HIGHEST_PROTOCOL):\n            vals = pickle.loads(pickle.dumps(a, v))\n            assert_(vals.flags.writeable)\n            assert_(isinstance(vals.base, bytes))\n\n    def test_writeable_from_c_data(self):\n        # Test that the writeable flag can be changed for an array wrapping\n        # low level C-data, but not owning its data.\n        # Also see that this is deprecated to change from python.\n        from numpy.core._multiarray_tests import get_c_wrapping_array\n\n        arr_writeable = get_c_wrapping_array(True)\n        assert not arr_writeable.flags.owndata\n        assert arr_writeable.flags.writeable\n        view = arr_writeable[...]\n\n        # Toggling the writeable flag works on the view:\n        view.flags.writeable = False\n        assert not view.flags.writeable\n        view.flags.writeable = True\n        assert view.flags.writeable\n        # Flag can be unset on the arr_writeable:\n        arr_writeable.flags.writeable = False\n\n        arr_readonly = get_c_wrapping_array(False)\n        assert not arr_readonly.flags.owndata\n        assert not arr_readonly.flags.writeable\n\n        for arr in [arr_writeable, arr_readonly]:\n            view = arr[...]\n            view.flags.writeable = False  # make sure it is readonly\n            arr.flags.writeable = False\n            assert not arr.flags.writeable\n\n            with assert_raises(ValueError):\n                view.flags.writeable = True\n\n            with warnings.catch_warnings():\n                warnings.simplefilter(\"error\", DeprecationWarning)\n                with assert_raises(DeprecationWarning):\n                    arr.flags.writeable = True\n\n            with assert_warns(DeprecationWarning):\n                arr.flags.writeable = True\n\n    def test_warnonwrite(self):\n        a = np.arange(10)\n        a.flags._warn_on_write = True\n        with warnings.catch_warnings(record=True) as w:\n            warnings.filterwarnings('always')\n            a[1] = 10\n            a[2] = 10\n            # only warn once\n            assert_(len(w) == 1)\n\n    def test_otherflags(self):\n        assert_equal(self.a.flags.carray, True)\n        assert_equal(self.a.flags['C'], True)\n        assert_equal(self.a.flags.farray, False)\n        assert_equal(self.a.flags.behaved, True)\n        assert_equal(self.a.flags.fnc, False)\n        assert_equal(self.a.flags.forc, True)\n        assert_equal(self.a.flags.owndata, True)\n        assert_equal(self.a.flags.writeable, True)\n        assert_equal(self.a.flags.aligned, True)\n        with assert_warns(DeprecationWarning):\n            assert_equal(self.a.flags.updateifcopy, False)\n        with assert_warns(DeprecationWarning):\n            assert_equal(self.a.flags['U'], False)\n            assert_equal(self.a.flags['UPDATEIFCOPY'], False)\n        assert_equal(self.a.flags.writebackifcopy, False)\n        assert_equal(self.a.flags['X'], False)\n        assert_equal(self.a.flags['WRITEBACKIFCOPY'], False)\n\n    def test_string_align(self):\n        a = np.zeros(4, dtype=np.dtype('|S4'))\n        assert_(a.flags.aligned)\n        # not power of two are accessed byte-wise and thus considered aligned\n        a = np.zeros(5, dtype=np.dtype('|S4'))\n        assert_(a.flags.aligned)\n\n    def test_void_align(self):\n        a = np.zeros(4, dtype=np.dtype([(\"a\", \"i4\"), (\"b\", \"i4\")]))\n        assert_(a.flags.aligned)\n\n\nclass TestHash:\n    # see #3793\n    def test_int(self):\n        for st, ut, s in [(np.int8, np.uint8, 8),\n                          (np.int16, np.uint16, 16),\n                          (np.int32, np.uint32, 32),\n                          (np.int64, np.uint64, 64)]:\n            for i in range(1, s):\n                assert_equal(hash(st(-2**i)), hash(-2**i),\n                             err_msg=\"%r: -2**%d\" % (st, i))\n                assert_equal(hash(st(2**(i - 1))), hash(2**(i - 1)),\n                             err_msg=\"%r: 2**%d\" % (st, i - 1))\n                assert_equal(hash(st(2**i - 1)), hash(2**i - 1),\n                             err_msg=\"%r: 2**%d - 1\" % (st, i))\n\n                i = max(i - 1, 1)\n                assert_equal(hash(ut(2**(i - 1))), hash(2**(i - 1)),\n                             err_msg=\"%r: 2**%d\" % (ut, i - 1))\n                assert_equal(hash(ut(2**i - 1)), hash(2**i - 1),\n                             err_msg=\"%r: 2**%d - 1\" % (ut, i))\n\n\nclass TestAttributes:\n    def setup(self):\n        self.one = np.arange(10)\n        self.two = np.arange(20).reshape(4, 5)\n        self.three = np.arange(60, dtype=np.float64).reshape(2, 5, 6)\n\n    def test_attributes(self):\n        assert_equal(self.one.shape, (10,))\n        assert_equal(self.two.shape, (4, 5))\n        assert_equal(self.three.shape, (2, 5, 6))\n        self.three.shape = (10, 3, 2)\n        assert_equal(self.three.shape, (10, 3, 2))\n        self.three.shape = (2, 5, 6)\n        assert_equal(self.one.strides, (self.one.itemsize,))\n        num = self.two.itemsize\n        assert_equal(self.two.strides, (5*num, num))\n        num = self.three.itemsize\n        assert_equal(self.three.strides, (30*num, 6*num, num))\n        assert_equal(self.one.ndim, 1)\n        assert_equal(self.two.ndim, 2)\n        assert_equal(self.three.ndim, 3)\n        num = self.two.itemsize\n        assert_equal(self.two.size, 20)\n        assert_equal(self.two.nbytes, 20*num)\n        assert_equal(self.two.itemsize, self.two.dtype.itemsize)\n        assert_equal(self.two.base, np.arange(20))\n\n    def test_dtypeattr(self):\n        assert_equal(self.one.dtype, np.dtype(np.int_))\n        assert_equal(self.three.dtype, np.dtype(np.float_))\n        assert_equal(self.one.dtype.char, 'l')\n        assert_equal(self.three.dtype.char, 'd')\n        assert_(self.three.dtype.str[0] in '<>')\n        assert_equal(self.one.dtype.str[1], 'i')\n        assert_equal(self.three.dtype.str[1], 'f')\n\n    def test_int_subclassing(self):\n        # Regression test for https://github.com/numpy/numpy/pull/3526\n\n        numpy_int = np.int_(0)\n\n        # int_ doesn't inherit from Python int, because it's not fixed-width\n        assert_(not isinstance(numpy_int, int))\n\n    def test_stridesattr(self):\n        x = self.one\n\n        def make_array(size, offset, strides):\n            return np.ndarray(size, buffer=x, dtype=int,\n                              offset=offset*x.itemsize,\n                              strides=strides*x.itemsize)\n\n        assert_equal(make_array(4, 4, -1), np.array([4, 3, 2, 1]))\n        assert_raises(ValueError, make_array, 4, 4, -2)\n        assert_raises(ValueError, make_array, 4, 2, -1)\n        assert_raises(ValueError, make_array, 8, 3, 1)\n        assert_equal(make_array(8, 3, 0), np.array([3]*8))\n        # Check behavior reported in gh-2503:\n        assert_raises(ValueError, make_array, (2, 3), 5, np.array([-2, -3]))\n        make_array(0, 0, 10)\n\n    def test_set_stridesattr(self):\n        x = self.one\n\n        def make_array(size, offset, strides):\n            try:\n                r = np.ndarray([size], dtype=int, buffer=x,\n                               offset=offset*x.itemsize)\n            except Exception as e:\n                raise RuntimeError(e)\n            r.strides = strides = strides*x.itemsize\n            return r\n\n        assert_equal(make_array(4, 4, -1), np.array([4, 3, 2, 1]))\n        assert_equal(make_array(7, 3, 1), np.array([3, 4, 5, 6, 7, 8, 9]))\n        assert_raises(ValueError, make_array, 4, 4, -2)\n        assert_raises(ValueError, make_array, 4, 2, -1)\n        assert_raises(RuntimeError, make_array, 8, 3, 1)\n        # Check that the true extent of the array is used.\n        # Test relies on as_strided base not exposing a buffer.\n        x = np.lib.stride_tricks.as_strided(np.arange(1), (10, 10), (0, 0))\n\n        def set_strides(arr, strides):\n            arr.strides = strides\n\n        assert_raises(ValueError, set_strides, x, (10*x.itemsize, x.itemsize))\n\n        # Test for offset calculations:\n        x = np.lib.stride_tricks.as_strided(np.arange(10, dtype=np.int8)[-1],\n                                                    shape=(10,), strides=(-1,))\n        assert_raises(ValueError, set_strides, x[::-1], -1)\n        a = x[::-1]\n        a.strides = 1\n        a[::2].strides = 2\n\n        # test 0d\n        arr_0d = np.array(0)\n        arr_0d.strides = ()\n        assert_raises(TypeError, set_strides, arr_0d, None)\n\n    def test_fill(self):\n        for t in \"?bhilqpBHILQPfdgFDGO\":\n            x = np.empty((3, 2, 1), t)\n            y = np.empty((3, 2, 1), t)\n            x.fill(1)\n            y[...] = 1\n            assert_equal(x, y)\n\n    def test_fill_max_uint64(self):\n        x = np.empty((3, 2, 1), dtype=np.uint64)\n        y = np.empty((3, 2, 1), dtype=np.uint64)\n        value = 2**64 - 1\n        y[...] = value\n        x.fill(value)\n        assert_array_equal(x, y)\n\n    def test_fill_struct_array(self):\n        # Filling from a scalar\n        x = np.array([(0, 0.0), (1, 1.0)], dtype='i4,f8')\n        x.fill(x[0])\n        assert_equal(x['f1'][1], x['f1'][0])\n        # Filling from a tuple that can be converted\n        # to a scalar\n        x = np.zeros(2, dtype=[('a', 'f8'), ('b', 'i4')])\n        x.fill((3.5, -2))\n        assert_array_equal(x['a'], [3.5, 3.5])\n        assert_array_equal(x['b'], [-2, -2])\n\n\nclass TestArrayConstruction:\n    def test_array(self):\n        d = np.ones(6)\n        r = np.array([d, d])\n        assert_equal(r, np.ones((2, 6)))\n\n        d = np.ones(6)\n        tgt = np.ones((2, 6))\n        r = np.array([d, d])\n        assert_equal(r, tgt)\n        tgt[1] = 2\n        r = np.array([d, d + 1])\n        assert_equal(r, tgt)\n\n        d = np.ones(6)\n        r = np.array([[d, d]])\n        assert_equal(r, np.ones((1, 2, 6)))\n\n        d = np.ones(6)\n        r = np.array([[d, d], [d, d]])\n        assert_equal(r, np.ones((2, 2, 6)))\n\n        d = np.ones((6, 6))\n        r = np.array([d, d])\n        assert_equal(r, np.ones((2, 6, 6)))\n\n        d = np.ones((6, ))\n        r = np.array([[d, d + 1], d + 2], dtype=object)\n        assert_equal(len(r), 2)\n        assert_equal(r[0], [d, d + 1])\n        assert_equal(r[1], d + 2)\n\n        tgt = np.ones((2, 3), dtype=bool)\n        tgt[0, 2] = False\n        tgt[1, 0:2] = False\n        r = np.array([[True, True, False], [False, False, True]])\n        assert_equal(r, tgt)\n        r = np.array([[True, False], [True, False], [False, True]])\n        assert_equal(r, tgt.T)\n\n    def test_array_empty(self):\n        assert_raises(TypeError, np.array)\n\n    def test_array_copy_false(self):\n        d = np.array([1, 2, 3])\n        e = np.array(d, copy=False)\n        d[1] = 3\n        assert_array_equal(e, [1, 3, 3])\n        e = np.array(d, copy=False, order='F')\n        d[1] = 4\n        assert_array_equal(e, [1, 4, 3])\n        e[2] = 7\n        assert_array_equal(d, [1, 4, 7])\n\n    def test_array_copy_true(self):\n        d = np.array([[1,2,3], [1, 2, 3]])\n        e = np.array(d, copy=True)\n        d[0, 1] = 3\n        e[0, 2] = -7\n        assert_array_equal(e, [[1, 2, -7], [1, 2, 3]])\n        assert_array_equal(d, [[1, 3, 3], [1, 2, 3]])\n        e = np.array(d, copy=True, order='F')\n        d[0, 1] = 5\n        e[0, 2] = 7\n        assert_array_equal(e, [[1, 3, 7], [1, 2, 3]])\n        assert_array_equal(d, [[1, 5, 3], [1,2,3]])\n\n    def test_array_cont(self):\n        d = np.ones(10)[::2]\n        assert_(np.ascontiguousarray(d).flags.c_contiguous)\n        assert_(np.ascontiguousarray(d).flags.f_contiguous)\n        assert_(np.asfortranarray(d).flags.c_contiguous)\n        assert_(np.asfortranarray(d).flags.f_contiguous)\n        d = np.ones((10, 10))[::2,::2]\n        assert_(np.ascontiguousarray(d).flags.c_contiguous)\n        assert_(np.asfortranarray(d).flags.f_contiguous)\n\n\nclass TestAssignment:\n    def test_assignment_broadcasting(self):\n        a = np.arange(6).reshape(2, 3)\n\n        # Broadcasting the input to the output\n        a[...] = np.arange(3)\n        assert_equal(a, [[0, 1, 2], [0, 1, 2]])\n        a[...] = np.arange(2).reshape(2, 1)\n        assert_equal(a, [[0, 0, 0], [1, 1, 1]])\n\n        # For compatibility with <= 1.5, a limited version of broadcasting\n        # the output to the input.\n        #\n        # This behavior is inconsistent with NumPy broadcasting\n        # in general, because it only uses one of the two broadcasting\n        # rules (adding a new \"1\" dimension to the left of the shape),\n        # applied to the output instead of an input. In NumPy 2.0, this kind\n        # of broadcasting assignment will likely be disallowed.\n        a[...] = np.arange(6)[::-1].reshape(1, 2, 3)\n        assert_equal(a, [[5, 4, 3], [2, 1, 0]])\n        # The other type of broadcasting would require a reduction operation.\n\n        def assign(a, b):\n            a[...] = b\n\n        assert_raises(ValueError, assign, a, np.arange(12).reshape(2, 2, 3))\n\n    def test_assignment_errors(self):\n        # Address issue #2276\n        class C:\n            pass\n        a = np.zeros(1)\n\n        def assign(v):\n            a[0] = v\n\n        assert_raises((AttributeError, TypeError), assign, C())\n        assert_raises(ValueError, assign, [1])\n\n    def test_unicode_assignment(self):\n        # gh-5049\n        from numpy.core.numeric import set_string_function\n\n        @contextmanager\n        def inject_str(s):\n            \"\"\" replace ndarray.__str__ temporarily \"\"\"\n            set_string_function(lambda x: s, repr=False)\n            try:\n                yield\n            finally:\n                set_string_function(None, repr=False)\n\n        a1d = np.array([u'test'])\n        a0d = np.array(u'done')\n        with inject_str(u'bad'):\n            a1d[0] = a0d  # previously this would invoke __str__\n        assert_equal(a1d[0], u'done')\n\n        # this would crash for the same reason\n        np.array([np.array(u'\\xe5\\xe4\\xf6')])\n\n    def test_stringlike_empty_list(self):\n        # gh-8902\n        u = np.array([u'done'])\n        b = np.array([b'done'])\n\n        class bad_sequence:\n            def __getitem__(self): pass\n            def __len__(self): raise RuntimeError\n\n        assert_raises(ValueError, operator.setitem, u, 0, [])\n        assert_raises(ValueError, operator.setitem, b, 0, [])\n\n        assert_raises(ValueError, operator.setitem, u, 0, bad_sequence())\n        assert_raises(ValueError, operator.setitem, b, 0, bad_sequence())\n\n    def test_longdouble_assignment(self):\n        # only relevant if longdouble is larger than float\n        # we're looking for loss of precision\n\n        for dtype in (np.longdouble, np.longcomplex):\n            # gh-8902\n            tinyb = np.nextafter(np.longdouble(0), 1).astype(dtype)\n            tinya = np.nextafter(np.longdouble(0), -1).astype(dtype)\n\n            # construction\n            tiny1d = np.array([tinya])\n            assert_equal(tiny1d[0], tinya)\n\n            # scalar = scalar\n            tiny1d[0] = tinyb\n            assert_equal(tiny1d[0], tinyb)\n\n            # 0d = scalar\n            tiny1d[0, ...] = tinya\n            assert_equal(tiny1d[0], tinya)\n\n            # 0d = 0d\n            tiny1d[0, ...] = tinyb[...]\n            assert_equal(tiny1d[0], tinyb)\n\n            # scalar = 0d\n            tiny1d[0] = tinyb[...]\n            assert_equal(tiny1d[0], tinyb)\n\n            arr = np.array([np.array(tinya)])\n            assert_equal(arr[0], tinya)\n\n    def test_cast_to_string(self):\n        # cast to str should do \"str(scalar)\", not \"str(scalar.item())\"\n        # Example: In python2, str(float) is truncated, so we want to avoid\n        # str(np.float64(...).item()) as this would incorrectly truncate.\n        a = np.zeros(1, dtype='S20')\n        a[:] = np.array(['1.12345678901234567890'], dtype='f8')\n        assert_equal(a[0], b\"1.1234567890123457\")\n\n\nclass TestDtypedescr:\n    def test_construction(self):\n        d1 = np.dtype('i4')\n        assert_equal(d1, np.dtype(np.int32))\n        d2 = np.dtype('f8')\n        assert_equal(d2, np.dtype(np.float64))\n\n    def test_byteorders(self):\n        assert_(np.dtype('<i4') != np.dtype('>i4'))\n        assert_(np.dtype([('a', '<i4')]) != np.dtype([('a', '>i4')]))\n\n    def test_structured_non_void(self):\n        fields = [('a', '<i2'), ('b', '<i2')]\n        dt_int = np.dtype(('i4', fields))\n        assert_equal(str(dt_int), \"(numpy.int32, [('a', '<i2'), ('b', '<i2')])\")\n\n        # gh-9821\n        arr_int = np.zeros(4, dt_int)\n        assert_equal(repr(arr_int),\n            \"array([0, 0, 0, 0], dtype=(numpy.int32, [('a', '<i2'), ('b', '<i2')]))\")\n\n\nclass TestZeroRank:\n    def setup(self):\n        self.d = np.array(0), np.array('x', object)\n\n    def test_ellipsis_subscript(self):\n        a, b = self.d\n        assert_equal(a[...], 0)\n        assert_equal(b[...], 'x')\n        assert_(a[...].base is a)  # `a[...] is a` in numpy <1.9.\n        assert_(b[...].base is b)  # `b[...] is b` in numpy <1.9.\n\n    def test_empty_subscript(self):\n        a, b = self.d\n        assert_equal(a[()], 0)\n        assert_equal(b[()], 'x')\n        assert_(type(a[()]) is a.dtype.type)\n        assert_(type(b[()]) is str)\n\n    def test_invalid_subscript(self):\n        a, b = self.d\n        assert_raises(IndexError, lambda x: x[0], a)\n        assert_raises(IndexError, lambda x: x[0], b)\n        assert_raises(IndexError, lambda x: x[np.array([], int)], a)\n        assert_raises(IndexError, lambda x: x[np.array([], int)], b)\n\n    def test_ellipsis_subscript_assignment(self):\n        a, b = self.d\n        a[...] = 42\n        assert_equal(a, 42)\n        b[...] = ''\n        assert_equal(b.item(), '')\n\n    def test_empty_subscript_assignment(self):\n        a, b = self.d\n        a[()] = 42\n        assert_equal(a, 42)\n        b[()] = ''\n        assert_equal(b.item(), '')\n\n    def test_invalid_subscript_assignment(self):\n        a, b = self.d\n\n        def assign(x, i, v):\n            x[i] = v\n\n        assert_raises(IndexError, assign, a, 0, 42)\n        assert_raises(IndexError, assign, b, 0, '')\n        assert_raises(ValueError, assign, a, (), '')\n\n    def test_newaxis(self):\n        a, b = self.d\n        assert_equal(a[np.newaxis].shape, (1,))\n        assert_equal(a[..., np.newaxis].shape, (1,))\n        assert_equal(a[np.newaxis, ...].shape, (1,))\n        assert_equal(a[..., np.newaxis].shape, (1,))\n        assert_equal(a[np.newaxis, ..., np.newaxis].shape, (1, 1))\n        assert_equal(a[..., np.newaxis, np.newaxis].shape, (1, 1))\n        assert_equal(a[np.newaxis, np.newaxis, ...].shape, (1, 1))\n        assert_equal(a[(np.newaxis,)*10].shape, (1,)*10)\n\n    def test_invalid_newaxis(self):\n        a, b = self.d\n\n        def subscript(x, i):\n            x[i]\n\n        assert_raises(IndexError, subscript, a, (np.newaxis, 0))\n        assert_raises(IndexError, subscript, a, (np.newaxis,)*50)\n\n    def test_constructor(self):\n        x = np.ndarray(())\n        x[()] = 5\n        assert_equal(x[()], 5)\n        y = np.ndarray((), buffer=x)\n        y[()] = 6\n        assert_equal(x[()], 6)\n\n        # strides and shape must be the same length\n        with pytest.raises(ValueError):\n            np.ndarray((2,), strides=())\n        with pytest.raises(ValueError):\n            np.ndarray((), strides=(2,))\n\n    def test_output(self):\n        x = np.array(2)\n        assert_raises(ValueError, np.add, x, [1], x)\n\n    def test_real_imag(self):\n        # contiguity checks are for gh-11245\n        x = np.array(1j)\n        xr = x.real\n        xi = x.imag\n\n        assert_equal(xr, np.array(0))\n        assert_(type(xr) is np.ndarray)\n        assert_equal(xr.flags.contiguous, True)\n        assert_equal(xr.flags.f_contiguous, True)\n\n        assert_equal(xi, np.array(1))\n        assert_(type(xi) is np.ndarray)\n        assert_equal(xi.flags.contiguous, True)\n        assert_equal(xi.flags.f_contiguous, True)\n\n\nclass TestScalarIndexing:\n    def setup(self):\n        self.d = np.array([0, 1])[0]\n\n    def test_ellipsis_subscript(self):\n        a = self.d\n        assert_equal(a[...], 0)\n        assert_equal(a[...].shape, ())\n\n    def test_empty_subscript(self):\n        a = self.d\n        assert_equal(a[()], 0)\n        assert_equal(a[()].shape, ())\n\n    def test_invalid_subscript(self):\n        a = self.d\n        assert_raises(IndexError, lambda x: x[0], a)\n        assert_raises(IndexError, lambda x: x[np.array([], int)], a)\n\n    def test_invalid_subscript_assignment(self):\n        a = self.d\n\n        def assign(x, i, v):\n            x[i] = v\n\n        assert_raises(TypeError, assign, a, 0, 42)\n\n    def test_newaxis(self):\n        a = self.d\n        assert_equal(a[np.newaxis].shape, (1,))\n        assert_equal(a[..., np.newaxis].shape, (1,))\n        assert_equal(a[np.newaxis, ...].shape, (1,))\n        assert_equal(a[..., np.newaxis].shape, (1,))\n        assert_equal(a[np.newaxis, ..., np.newaxis].shape, (1, 1))\n        assert_equal(a[..., np.newaxis, np.newaxis].shape, (1, 1))\n        assert_equal(a[np.newaxis, np.newaxis, ...].shape, (1, 1))\n        assert_equal(a[(np.newaxis,)*10].shape, (1,)*10)\n\n    def test_invalid_newaxis(self):\n        a = self.d\n\n        def subscript(x, i):\n            x[i]\n\n        assert_raises(IndexError, subscript, a, (np.newaxis, 0))\n        assert_raises(IndexError, subscript, a, (np.newaxis,)*50)\n\n    def test_overlapping_assignment(self):\n        # With positive strides\n        a = np.arange(4)\n        a[:-1] = a[1:]\n        assert_equal(a, [1, 2, 3, 3])\n\n        a = np.arange(4)\n        a[1:] = a[:-1]\n        assert_equal(a, [0, 0, 1, 2])\n\n        # With positive and negative strides\n        a = np.arange(4)\n        a[:] = a[::-1]\n        assert_equal(a, [3, 2, 1, 0])\n\n        a = np.arange(6).reshape(2, 3)\n        a[::-1,:] = a[:, ::-1]\n        assert_equal(a, [[5, 4, 3], [2, 1, 0]])\n\n        a = np.arange(6).reshape(2, 3)\n        a[::-1, ::-1] = a[:, ::-1]\n        assert_equal(a, [[3, 4, 5], [0, 1, 2]])\n\n        # With just one element overlapping\n        a = np.arange(5)\n        a[:3] = a[2:]\n        assert_equal(a, [2, 3, 4, 3, 4])\n\n        a = np.arange(5)\n        a[2:] = a[:3]\n        assert_equal(a, [0, 1, 0, 1, 2])\n\n        a = np.arange(5)\n        a[2::-1] = a[2:]\n        assert_equal(a, [4, 3, 2, 3, 4])\n\n        a = np.arange(5)\n        a[2:] = a[2::-1]\n        assert_equal(a, [0, 1, 2, 1, 0])\n\n        a = np.arange(5)\n        a[2::-1] = a[:1:-1]\n        assert_equal(a, [2, 3, 4, 3, 4])\n\n        a = np.arange(5)\n        a[:1:-1] = a[2::-1]\n        assert_equal(a, [0, 1, 0, 1, 2])\n\n\nclass TestCreation:\n    \"\"\"\n    Test the np.array constructor\n    \"\"\"\n    def test_from_attribute(self):\n        class x:\n            def __array__(self, dtype=None):\n                pass\n\n        assert_raises(ValueError, np.array, x())\n\n    def test_from_string(self):\n        types = np.typecodes['AllInteger'] + np.typecodes['Float']\n        nstr = ['123', '123']\n        result = np.array([123, 123], dtype=int)\n        for type in types:\n            msg = 'String conversion for %s' % type\n            assert_equal(np.array(nstr, dtype=type), result, err_msg=msg)\n\n    def test_void(self):\n        arr = np.array([], dtype='V')\n        assert_equal(arr.dtype.kind, 'V')\n\n    def test_too_big_error(self):\n        # 45341 is the smallest integer greater than sqrt(2**31 - 1).\n        # 3037000500 is the smallest integer greater than sqrt(2**63 - 1).\n        # We want to make sure that the square byte array with those dimensions\n        # is too big on 32 or 64 bit systems respectively.\n        if np.iinfo('intp').max == 2**31 - 1:\n            shape = (46341, 46341)\n        elif np.iinfo('intp').max == 2**63 - 1:\n            shape = (3037000500, 3037000500)\n        else:\n            return\n        assert_raises(ValueError, np.empty, shape, dtype=np.int8)\n        assert_raises(ValueError, np.zeros, shape, dtype=np.int8)\n        assert_raises(ValueError, np.ones, shape, dtype=np.int8)\n\n    @pytest.mark.skipif(np.dtype(np.intp).itemsize != 8,\n                        reason=\"malloc may not fail on 32 bit systems\")\n    def test_malloc_fails(self):\n        # This test is guaranteed to fail due to a too large allocation\n        with assert_raises(np.core._exceptions._ArrayMemoryError):\n            np.empty(np.iinfo(np.intp).max, dtype=np.uint8)\n\n    def test_zeros(self):\n        types = np.typecodes['AllInteger'] + np.typecodes['AllFloat']\n        for dt in types:\n            d = np.zeros((13,), dtype=dt)\n            assert_equal(np.count_nonzero(d), 0)\n            # true for ieee floats\n            assert_equal(d.sum(), 0)\n            assert_(not d.any())\n\n            d = np.zeros(2, dtype='(2,4)i4')\n            assert_equal(np.count_nonzero(d), 0)\n            assert_equal(d.sum(), 0)\n            assert_(not d.any())\n\n            d = np.zeros(2, dtype='4i4')\n            assert_equal(np.count_nonzero(d), 0)\n            assert_equal(d.sum(), 0)\n            assert_(not d.any())\n\n            d = np.zeros(2, dtype='(2,4)i4, (2,4)i4')\n            assert_equal(np.count_nonzero(d), 0)\n\n    @pytest.mark.slow\n    def test_zeros_big(self):\n        # test big array as they might be allocated different by the system\n        types = np.typecodes['AllInteger'] + np.typecodes['AllFloat']\n        for dt in types:\n            d = np.zeros((30 * 1024**2,), dtype=dt)\n            assert_(not d.any())\n            # This test can fail on 32-bit systems due to insufficient\n            # contiguous memory. Deallocating the previous array increases the\n            # chance of success.\n            del(d)\n\n    def test_zeros_obj(self):\n        # test initialization from PyLong(0)\n        d = np.zeros((13,), dtype=object)\n        assert_array_equal(d, [0] * 13)\n        assert_equal(np.count_nonzero(d), 0)\n\n    def test_zeros_obj_obj(self):\n        d = np.zeros(10, dtype=[('k', object, 2)])\n        assert_array_equal(d['k'], 0)\n\n    def test_zeros_like_like_zeros(self):\n        # test zeros_like returns the same as zeros\n        for c in np.typecodes['All']:\n            if c == 'V':\n                continue\n            d = np.zeros((3,3), dtype=c)\n            assert_array_equal(np.zeros_like(d), d)\n            assert_equal(np.zeros_like(d).dtype, d.dtype)\n        # explicitly check some special cases\n        d = np.zeros((3,3), dtype='S5')\n        assert_array_equal(np.zeros_like(d), d)\n        assert_equal(np.zeros_like(d).dtype, d.dtype)\n        d = np.zeros((3,3), dtype='U5')\n        assert_array_equal(np.zeros_like(d), d)\n        assert_equal(np.zeros_like(d).dtype, d.dtype)\n\n        d = np.zeros((3,3), dtype='<i4')\n        assert_array_equal(np.zeros_like(d), d)\n        assert_equal(np.zeros_like(d).dtype, d.dtype)\n        d = np.zeros((3,3), dtype='>i4')\n        assert_array_equal(np.zeros_like(d), d)\n        assert_equal(np.zeros_like(d).dtype, d.dtype)\n\n        d = np.zeros((3,3), dtype='<M8[s]')\n        assert_array_equal(np.zeros_like(d), d)\n        assert_equal(np.zeros_like(d).dtype, d.dtype)\n        d = np.zeros((3,3), dtype='>M8[s]')\n        assert_array_equal(np.zeros_like(d), d)\n        assert_equal(np.zeros_like(d).dtype, d.dtype)\n\n        d = np.zeros((3,3), dtype='f4,f4')\n        assert_array_equal(np.zeros_like(d), d)\n        assert_equal(np.zeros_like(d).dtype, d.dtype)\n\n    def test_empty_unicode(self):\n        # don't throw decode errors on garbage memory\n        for i in range(5, 100, 5):\n            d = np.empty(i, dtype='U')\n            str(d)\n\n    def test_sequence_non_homogenous(self):\n        assert_equal(np.array([4, 2**80]).dtype, object)\n        assert_equal(np.array([4, 2**80, 4]).dtype, object)\n        assert_equal(np.array([2**80, 4]).dtype, object)\n        assert_equal(np.array([2**80] * 3).dtype, object)\n        assert_equal(np.array([[1, 1],[1j, 1j]]).dtype, complex)\n        assert_equal(np.array([[1j, 1j],[1, 1]]).dtype, complex)\n        assert_equal(np.array([[1, 1, 1],[1, 1j, 1.], [1, 1, 1]]).dtype, complex)\n\n    def test_non_sequence_sequence(self):\n        \"\"\"Should not segfault.\n\n        Class Fail breaks the sequence protocol for new style classes, i.e.,\n        those derived from object. Class Map is a mapping type indicated by\n        raising a ValueError. At some point we may raise a warning instead\n        of an error in the Fail case.\n\n        \"\"\"\n        class Fail:\n            def __len__(self):\n                return 1\n\n            def __getitem__(self, index):\n                raise ValueError()\n\n        class Map:\n            def __len__(self):\n                return 1\n\n            def __getitem__(self, index):\n                raise KeyError()\n\n        a = np.array([Map()])\n        assert_(a.shape == (1,))\n        assert_(a.dtype == np.dtype(object))\n        assert_raises(ValueError, np.array, [Fail()])\n\n    def test_no_len_object_type(self):\n        # gh-5100, want object array from iterable object without len()\n        class Point2:\n            def __init__(self):\n                pass\n\n            def __getitem__(self, ind):\n                if ind in [0, 1]:\n                    return ind\n                else:\n                    raise IndexError()\n        d = np.array([Point2(), Point2(), Point2()])\n        assert_equal(d.dtype, np.dtype(object))\n\n    def test_false_len_sequence(self):\n        # gh-7264, segfault for this example\n        class C:\n            def __getitem__(self, i):\n                raise IndexError\n            def __len__(self):\n                return 42\n\n        a = np.array(C()) # segfault?\n        assert_equal(len(a), 0)\n\n    def test_false_len_iterable(self):\n        # Special case where a bad __getitem__ makes us fall back on __iter__:\n        class C:\n            def __getitem__(self, x):\n                raise Exception\n            def __iter__(self):\n                return iter(())\n            def __len__(self):\n                return 2\n\n        a = np.empty(2)\n        with assert_raises(ValueError):\n            a[:] = C()  # Segfault!\n\n    def test_failed_len_sequence(self):\n        # gh-7393\n        class A:\n            def __init__(self, data):\n                self._data = data\n            def __getitem__(self, item):\n                return type(self)(self._data[item])\n            def __len__(self):\n                return len(self._data)\n\n        # len(d) should give 3, but len(d[0]) will fail\n        d = A([1,2,3])\n        assert_equal(len(np.array(d)), 3)\n\n    def test_array_too_big(self):\n        # Test that array creation succeeds for arrays addressable by intp\n        # on the byte level and fails for too large arrays.\n        buf = np.zeros(100)\n\n        max_bytes = np.iinfo(np.intp).max\n        for dtype in [\"intp\", \"S20\", \"b\"]:\n            dtype = np.dtype(dtype)\n            itemsize = dtype.itemsize\n\n            np.ndarray(buffer=buf, strides=(0,),\n                       shape=(max_bytes//itemsize,), dtype=dtype)\n            assert_raises(ValueError, np.ndarray, buffer=buf, strides=(0,),\n                          shape=(max_bytes//itemsize + 1,), dtype=dtype)\n\n    def _ragged_creation(self, seq):\n        # without dtype=object, the ragged object should raise\n        with assert_warns(np.VisibleDeprecationWarning):\n            a = np.array(seq)\n        b = np.array(seq, dtype=object)\n        assert_equal(a, b)\n        return b\n\n    def test_ragged_ndim_object(self):\n        # Lists of mismatching depths are treated as object arrays\n        a = self._ragged_creation([[1], 2, 3])\n        assert_equal(a.shape, (3,))\n        assert_equal(a.dtype, object)\n\n        a = self._ragged_creation([1, [2], 3])\n        assert_equal(a.shape, (3,))\n        assert_equal(a.dtype, object)\n\n        a = self._ragged_creation([1, 2, [3]])\n        assert_equal(a.shape, (3,))\n        assert_equal(a.dtype, object)\n\n    def test_ragged_shape_object(self):\n        # The ragged dimension of a list is turned into an object array\n        a = self._ragged_creation([[1, 1], [2], [3]])\n        assert_equal(a.shape, (3,))\n        assert_equal(a.dtype, object)\n\n        a = self._ragged_creation([[1], [2, 2], [3]])\n        assert_equal(a.shape, (3,))\n        assert_equal(a.dtype, object)\n\n        a = self._ragged_creation([[1], [2], [3, 3]])\n        assert a.shape == (3,)\n        assert a.dtype == object\n\n    def test_array_of_ragged_array(self):\n        outer = np.array([None, None])\n        outer[0] = outer[1] = np.array([1, 2, 3])\n        assert np.array(outer).shape == (2,)\n        assert np.array([outer]).shape == (1, 2)\n\n        outer_ragged = np.array([None, None])\n        outer_ragged[0] = np.array([1, 2, 3])\n        outer_ragged[1] = np.array([1, 2, 3, 4])\n        # should both of these emit deprecation warnings?\n        assert np.array(outer_ragged).shape == (2,)\n        assert np.array([outer_ragged]).shape == (1, 2,)\n\n    def test_deep_nonragged_object(self):\n        # None of these should raise, even though they are missing dtype=object\n        a = np.array([[[Decimal(1)]]])\n        a = np.array([1, Decimal(1)])\n        a = np.array([[1], [Decimal(1)]])\n\nclass TestStructured:\n    def test_subarray_field_access(self):\n        a = np.zeros((3, 5), dtype=[('a', ('i4', (2, 2)))])\n        a['a'] = np.arange(60).reshape(3, 5, 2, 2)\n\n        # Since the subarray is always in C-order, a transpose\n        # does not swap the subarray:\n        assert_array_equal(a.T['a'], a['a'].transpose(1, 0, 2, 3))\n\n        # In Fortran order, the subarray gets appended\n        # like in all other cases, not prepended as a special case\n        b = a.copy(order='F')\n        assert_equal(a['a'].shape, b['a'].shape)\n        assert_equal(a.T['a'].shape, a.T.copy()['a'].shape)\n\n    def test_subarray_comparison(self):\n        # Check that comparisons between record arrays with\n        # multi-dimensional field types work properly\n        a = np.rec.fromrecords(\n            [([1, 2, 3], 'a', [[1, 2], [3, 4]]), ([3, 3, 3], 'b', [[0, 0], [0, 0]])],\n            dtype=[('a', ('f4', 3)), ('b', object), ('c', ('i4', (2, 2)))])\n        b = a.copy()\n        assert_equal(a == b, [True, True])\n        assert_equal(a != b, [False, False])\n        b[1].b = 'c'\n        assert_equal(a == b, [True, False])\n        assert_equal(a != b, [False, True])\n        for i in range(3):\n            b[0].a = a[0].a\n            b[0].a[i] = 5\n            assert_equal(a == b, [False, False])\n            assert_equal(a != b, [True, True])\n        for i in range(2):\n            for j in range(2):\n                b = a.copy()\n                b[0].c[i, j] = 10\n                assert_equal(a == b, [False, True])\n                assert_equal(a != b, [True, False])\n\n        # Check that broadcasting with a subarray works\n        a = np.array([[(0,)], [(1,)]], dtype=[('a', 'f8')])\n        b = np.array([(0,), (0,), (1,)], dtype=[('a', 'f8')])\n        assert_equal(a == b, [[True, True, False], [False, False, True]])\n        assert_equal(b == a, [[True, True, False], [False, False, True]])\n        a = np.array([[(0,)], [(1,)]], dtype=[('a', 'f8', (1,))])\n        b = np.array([(0,), (0,), (1,)], dtype=[('a', 'f8', (1,))])\n        assert_equal(a == b, [[True, True, False], [False, False, True]])\n        assert_equal(b == a, [[True, True, False], [False, False, True]])\n        a = np.array([[([0, 0],)], [([1, 1],)]], dtype=[('a', 'f8', (2,))])\n        b = np.array([([0, 0],), ([0, 1],), ([1, 1],)], dtype=[('a', 'f8', (2,))])\n        assert_equal(a == b, [[True, False, False], [False, False, True]])\n        assert_equal(b == a, [[True, False, False], [False, False, True]])\n\n        # Check that broadcasting Fortran-style arrays with a subarray work\n        a = np.array([[([0, 0],)], [([1, 1],)]], dtype=[('a', 'f8', (2,))], order='F')\n        b = np.array([([0, 0],), ([0, 1],), ([1, 1],)], dtype=[('a', 'f8', (2,))])\n        assert_equal(a == b, [[True, False, False], [False, False, True]])\n        assert_equal(b == a, [[True, False, False], [False, False, True]])\n\n        # Check that incompatible sub-array shapes don't result to broadcasting\n        x = np.zeros((1,), dtype=[('a', ('f4', (1, 2))), ('b', 'i1')])\n        y = np.zeros((1,), dtype=[('a', ('f4', (2,))), ('b', 'i1')])\n        # This comparison invokes deprecated behaviour, and will probably\n        # start raising an error eventually. What we really care about in this\n        # test is just that it doesn't return True.\n        with suppress_warnings() as sup:\n            sup.filter(FutureWarning, \"elementwise == comparison failed\")\n            assert_equal(x == y, False)\n\n        x = np.zeros((1,), dtype=[('a', ('f4', (2, 1))), ('b', 'i1')])\n        y = np.zeros((1,), dtype=[('a', ('f4', (2,))), ('b', 'i1')])\n        # This comparison invokes deprecated behaviour, and will probably\n        # start raising an error eventually. What we really care about in this\n        # test is just that it doesn't return True.\n        with suppress_warnings() as sup:\n            sup.filter(FutureWarning, \"elementwise == comparison failed\")\n            assert_equal(x == y, False)\n\n        # Check that structured arrays that are different only in\n        # byte-order work\n        a = np.array([(5, 42), (10, 1)], dtype=[('a', '>i8'), ('b', '<f8')])\n        b = np.array([(5, 43), (10, 1)], dtype=[('a', '<i8'), ('b', '>f8')])\n        assert_equal(a == b, [False, True])\n\n    def test_casting(self):\n        # Check that casting a structured array to change its byte order\n        # works\n        a = np.array([(1,)], dtype=[('a', '<i4')])\n        assert_(np.can_cast(a.dtype, [('a', '>i4')], casting='unsafe'))\n        b = a.astype([('a', '>i4')])\n        assert_equal(b, a.byteswap().newbyteorder())\n        assert_equal(a['a'][0], b['a'][0])\n\n        # Check that equality comparison works on structured arrays if\n        # they are 'equiv'-castable\n        a = np.array([(5, 42), (10, 1)], dtype=[('a', '>i4'), ('b', '<f8')])\n        b = np.array([(5, 42), (10, 1)], dtype=[('a', '<i4'), ('b', '>f8')])\n        assert_(np.can_cast(a.dtype, b.dtype, casting='equiv'))\n        assert_equal(a == b, [True, True])\n\n        # Check that 'equiv' casting can change byte order\n        assert_(np.can_cast(a.dtype, b.dtype, casting='equiv'))\n        c = a.astype(b.dtype, casting='equiv')\n        assert_equal(a == c, [True, True])\n\n        # Check that 'safe' casting can change byte order and up-cast\n        # fields\n        t = [('a', '<i8'), ('b', '>f8')]\n        assert_(np.can_cast(a.dtype, t, casting='safe'))\n        c = a.astype(t, casting='safe')\n        assert_equal((c == np.array([(5, 42), (10, 1)], dtype=t)),\n                     [True, True])\n\n        # Check that 'same_kind' casting can change byte order and\n        # change field widths within a \"kind\"\n        t = [('a', '<i4'), ('b', '>f4')]\n        assert_(np.can_cast(a.dtype, t, casting='same_kind'))\n        c = a.astype(t, casting='same_kind')\n        assert_equal((c == np.array([(5, 42), (10, 1)], dtype=t)),\n                     [True, True])\n\n        # Check that casting fails if the casting rule should fail on\n        # any of the fields\n        t = [('a', '>i8'), ('b', '<f4')]\n        assert_(not np.can_cast(a.dtype, t, casting='safe'))\n        assert_raises(TypeError, a.astype, t, casting='safe')\n        t = [('a', '>i2'), ('b', '<f8')]\n        assert_(not np.can_cast(a.dtype, t, casting='equiv'))\n        assert_raises(TypeError, a.astype, t, casting='equiv')\n        t = [('a', '>i8'), ('b', '<i2')]\n        assert_(not np.can_cast(a.dtype, t, casting='same_kind'))\n        assert_raises(TypeError, a.astype, t, casting='same_kind')\n        assert_(not np.can_cast(a.dtype, b.dtype, casting='no'))\n        assert_raises(TypeError, a.astype, b.dtype, casting='no')\n\n        # Check that non-'unsafe' casting can't change the set of field names\n        for casting in ['no', 'safe', 'equiv', 'same_kind']:\n            t = [('a', '>i4')]\n            assert_(not np.can_cast(a.dtype, t, casting=casting))\n            t = [('a', '>i4'), ('b', '<f8'), ('c', 'i4')]\n            assert_(not np.can_cast(a.dtype, t, casting=casting))\n\n    def test_objview(self):\n        # https://github.com/numpy/numpy/issues/3286\n        a = np.array([], dtype=[('a', 'f'), ('b', 'f'), ('c', 'O')])\n        a[['a', 'b']]  # TypeError?\n\n        # https://github.com/numpy/numpy/issues/3253\n        dat2 = np.zeros(3, [('A', 'i'), ('B', '|O')])\n        dat2[['B', 'A']]  # TypeError?\n\n    def test_setfield(self):\n        # https://github.com/numpy/numpy/issues/3126\n        struct_dt = np.dtype([('elem', 'i4', 5),])\n        dt = np.dtype([('field', 'i4', 10),('struct', struct_dt)])\n        x = np.zeros(1, dt)\n        x[0]['field'] = np.ones(10, dtype='i4')\n        x[0]['struct'] = np.ones(1, dtype=struct_dt)\n        assert_equal(x[0]['field'], np.ones(10, dtype='i4'))\n\n    def test_setfield_object(self):\n        # make sure object field assignment with ndarray value\n        # on void scalar mimics setitem behavior\n        b = np.zeros(1, dtype=[('x', 'O')])\n        # next line should work identically to b['x'][0] = np.arange(3)\n        b[0]['x'] = np.arange(3)\n        assert_equal(b[0]['x'], np.arange(3))\n\n        # check that broadcasting check still works\n        c = np.zeros(1, dtype=[('x', 'O', 5)])\n\n        def testassign():\n            c[0]['x'] = np.arange(3)\n\n        assert_raises(ValueError, testassign)\n\n    def test_zero_width_string(self):\n        # Test for PR #6430 / issues #473, #4955, #2585\n\n        dt = np.dtype([('I', int), ('S', 'S0')])\n\n        x = np.zeros(4, dtype=dt)\n\n        assert_equal(x['S'], [b'', b'', b'', b''])\n        assert_equal(x['S'].itemsize, 0)\n\n        x['S'] = ['a', 'b', 'c', 'd']\n        assert_equal(x['S'], [b'', b'', b'', b''])\n        assert_equal(x['I'], [0, 0, 0, 0])\n\n        # Variation on test case from #4955\n        x['S'][x['I'] == 0] = 'hello'\n        assert_equal(x['S'], [b'', b'', b'', b''])\n        assert_equal(x['I'], [0, 0, 0, 0])\n\n        # Variation on test case from #2585\n        x['S'] = 'A'\n        assert_equal(x['S'], [b'', b'', b'', b''])\n        assert_equal(x['I'], [0, 0, 0, 0])\n\n        # Allow zero-width dtypes in ndarray constructor\n        y = np.ndarray(4, dtype=x['S'].dtype)\n        assert_equal(y.itemsize, 0)\n        assert_equal(x['S'], y)\n\n        # More tests for indexing an array with zero-width fields\n        assert_equal(np.zeros(4, dtype=[('a', 'S0,S0'),\n                                        ('b', 'u1')])['a'].itemsize, 0)\n        assert_equal(np.empty(3, dtype='S0,S0').itemsize, 0)\n        assert_equal(np.zeros(4, dtype='S0,u1')['f0'].itemsize, 0)\n\n        xx = x['S'].reshape((2, 2))\n        assert_equal(xx.itemsize, 0)\n        assert_equal(xx, [[b'', b''], [b'', b'']])\n        # check for no uninitialized memory due to viewing S0 array\n        assert_equal(xx[:].dtype, xx.dtype)\n        assert_array_equal(eval(repr(xx), dict(array=np.array)), xx)\n\n        b = io.BytesIO()\n        np.save(b, xx)\n\n        b.seek(0)\n        yy = np.load(b)\n        assert_equal(yy.itemsize, 0)\n        assert_equal(xx, yy)\n\n        with temppath(suffix='.npy') as tmp:\n            np.save(tmp, xx)\n            yy = np.load(tmp)\n            assert_equal(yy.itemsize, 0)\n            assert_equal(xx, yy)\n\n    def test_base_attr(self):\n        a = np.zeros(3, dtype='i4,f4')\n        b = a[0]\n        assert_(b.base is a)\n\n    def test_assignment(self):\n        def testassign(arr, v):\n            c = arr.copy()\n            c[0] = v  # assign using setitem\n            c[1:] = v # assign using \"dtype_transfer\" code paths\n            return c\n\n        dt = np.dtype([('foo', 'i8'), ('bar', 'i8')])\n        arr = np.ones(2, dt)\n        v1 = np.array([(2,3)], dtype=[('foo', 'i8'), ('bar', 'i8')])\n        v2 = np.array([(2,3)], dtype=[('bar', 'i8'), ('foo', 'i8')])\n        v3 = np.array([(2,3)], dtype=[('bar', 'i8'), ('baz', 'i8')])\n        v4 = np.array([(2,)],  dtype=[('bar', 'i8')])\n        v5 = np.array([(2,3)], dtype=[('foo', 'f8'), ('bar', 'f8')])\n        w = arr.view({'names': ['bar'], 'formats': ['i8'], 'offsets': [8]})\n\n        ans = np.array([(2,3),(2,3)], dtype=dt)\n        assert_equal(testassign(arr, v1), ans)\n        assert_equal(testassign(arr, v2), ans)\n        assert_equal(testassign(arr, v3), ans)\n        assert_raises(ValueError, lambda: testassign(arr, v4))\n        assert_equal(testassign(arr, v5), ans)\n        w[:] = 4\n        assert_equal(arr, np.array([(1,4),(1,4)], dtype=dt))\n\n        # test field-reordering, assignment by position, and self-assignment\n        a = np.array([(1,2,3)],\n                     dtype=[('foo', 'i8'), ('bar', 'i8'), ('baz', 'f4')])\n        a[['foo', 'bar']] = a[['bar', 'foo']]\n        assert_equal(a[0].item(), (2,1,3))\n\n        # test that this works even for 'simple_unaligned' structs\n        # (ie, that PyArray_EquivTypes cares about field order too)\n        a = np.array([(1,2)], dtype=[('a', 'i4'), ('b', 'i4')])\n        a[['a', 'b']] = a[['b', 'a']]\n        assert_equal(a[0].item(), (2,1))\n    \n    def test_scalar_assignment(self):\n        with assert_raises(ValueError):\n            arr = np.arange(25).reshape(5, 5)                                                                               \n            arr.itemset(3)  \n\n    def test_structuredscalar_indexing(self):\n        # test gh-7262\n        x = np.empty(shape=1, dtype=\"(2)3S,(2)3U\")\n        assert_equal(x[[\"f0\",\"f1\"]][0], x[0][[\"f0\",\"f1\"]])\n        assert_equal(x[0], x[0][()])\n\n    def test_multiindex_titles(self):\n        a = np.zeros(4, dtype=[(('a', 'b'), 'i'), ('c', 'i'), ('d', 'i')])\n        assert_raises(KeyError, lambda : a[['a','c']])\n        assert_raises(KeyError, lambda : a[['a','a']])\n        assert_raises(ValueError, lambda : a[['b','b']])  # field exists, but repeated\n        a[['b','c']]  # no exception\n\n\nclass TestBool:\n    def test_test_interning(self):\n        a0 = np.bool_(0)\n        b0 = np.bool_(False)\n        assert_(a0 is b0)\n        a1 = np.bool_(1)\n        b1 = np.bool_(True)\n        assert_(a1 is b1)\n        assert_(np.array([True])[0] is a1)\n        assert_(np.array(True)[()] is a1)\n\n    def test_sum(self):\n        d = np.ones(101, dtype=bool)\n        assert_equal(d.sum(), d.size)\n        assert_equal(d[::2].sum(), d[::2].size)\n        assert_equal(d[::-2].sum(), d[::-2].size)\n\n        d = np.frombuffer(b'\\xff\\xff' * 100, dtype=bool)\n        assert_equal(d.sum(), d.size)\n        assert_equal(d[::2].sum(), d[::2].size)\n        assert_equal(d[::-2].sum(), d[::-2].size)\n\n    def check_count_nonzero(self, power, length):\n        powers = [2 ** i for i in range(length)]\n        for i in range(2**power):\n            l = [(i & x) != 0 for x in powers]\n            a = np.array(l, dtype=bool)\n            c = builtins.sum(l)\n            assert_equal(np.count_nonzero(a), c)\n            av = a.view(np.uint8)\n            av *= 3\n            assert_equal(np.count_nonzero(a), c)\n            av *= 4\n            assert_equal(np.count_nonzero(a), c)\n            av[av != 0] = 0xFF\n            assert_equal(np.count_nonzero(a), c)\n\n    def test_count_nonzero(self):\n        # check all 12 bit combinations in a length 17 array\n        # covers most cases of the 16 byte unrolled code\n        self.check_count_nonzero(12, 17)\n\n    @pytest.mark.slow\n    def test_count_nonzero_all(self):\n        # check all combinations in a length 17 array\n        # covers all cases of the 16 byte unrolled code\n        self.check_count_nonzero(17, 17)\n\n    def test_count_nonzero_unaligned(self):\n        # prevent mistakes as e.g. gh-4060\n        for o in range(7):\n            a = np.zeros((18,), dtype=bool)[o+1:]\n            a[:o] = True\n            assert_equal(np.count_nonzero(a), builtins.sum(a.tolist()))\n            a = np.ones((18,), dtype=bool)[o+1:]\n            a[:o] = False\n            assert_equal(np.count_nonzero(a), builtins.sum(a.tolist()))\n\n    def _test_cast_from_flexible(self, dtype):\n        # empty string -> false\n        for n in range(3):\n            v = np.array(b'', (dtype, n))\n            assert_equal(bool(v), False)\n            assert_equal(bool(v[()]), False)\n            assert_equal(v.astype(bool), False)\n            assert_(isinstance(v.astype(bool), np.ndarray))\n            assert_(v[()].astype(bool) is np.False_)\n\n        # anything else -> true\n        for n in range(1, 4):\n            for val in [b'a', b'0', b' ']:\n                v = np.array(val, (dtype, n))\n                assert_equal(bool(v), True)\n                assert_equal(bool(v[()]), True)\n                assert_equal(v.astype(bool), True)\n                assert_(isinstance(v.astype(bool), np.ndarray))\n                assert_(v[()].astype(bool) is np.True_)\n\n    def test_cast_from_void(self):\n        self._test_cast_from_flexible(np.void)\n\n    @pytest.mark.xfail(reason=\"See gh-9847\")\n    def test_cast_from_unicode(self):\n        self._test_cast_from_flexible(np.unicode_)\n\n    @pytest.mark.xfail(reason=\"See gh-9847\")\n    def test_cast_from_bytes(self):\n        self._test_cast_from_flexible(np.bytes_)\n\n\nclass TestZeroSizeFlexible:\n    @staticmethod\n    def _zeros(shape, dtype=str):\n        dtype = np.dtype(dtype)\n        if dtype == np.void:\n            return np.zeros(shape, dtype=(dtype, 0))\n\n        # not constructable directly\n        dtype = np.dtype([('x', dtype, 0)])\n        return np.zeros(shape, dtype=dtype)['x']\n\n    def test_create(self):\n        zs = self._zeros(10, bytes)\n        assert_equal(zs.itemsize, 0)\n        zs = self._zeros(10, np.void)\n        assert_equal(zs.itemsize, 0)\n        zs = self._zeros(10, str)\n        assert_equal(zs.itemsize, 0)\n\n    def _test_sort_partition(self, name, kinds, **kwargs):\n        # Previously, these would all hang\n        for dt in [bytes, np.void, str]:\n            zs = self._zeros(10, dt)\n            sort_method = getattr(zs, name)\n            sort_func = getattr(np, name)\n            for kind in kinds:\n                sort_method(kind=kind, **kwargs)\n                sort_func(zs, kind=kind, **kwargs)\n\n    def test_sort(self):\n        self._test_sort_partition('sort', kinds='qhs')\n\n    def test_argsort(self):\n        self._test_sort_partition('argsort', kinds='qhs')\n\n    def test_partition(self):\n        self._test_sort_partition('partition', kinds=['introselect'], kth=2)\n\n    def test_argpartition(self):\n        self._test_sort_partition('argpartition', kinds=['introselect'], kth=2)\n\n    def test_resize(self):\n        # previously an error\n        for dt in [bytes, np.void, str]:\n            zs = self._zeros(10, dt)\n            zs.resize(25)\n            zs.resize((10, 10))\n\n    def test_view(self):\n        for dt in [bytes, np.void, str]:\n            zs = self._zeros(10, dt)\n\n            # viewing as itself should be allowed\n            assert_equal(zs.view(dt).dtype, np.dtype(dt))\n\n            # viewing as any non-empty type gives an empty result\n            assert_equal(zs.view((dt, 1)).shape, (0,))\n\n    def test_dumps(self):\n        zs = self._zeros(10, int)\n        assert_equal(zs, pickle.loads(zs.dumps()))\n\n    def test_pickle(self):\n        for proto in range(2, pickle.HIGHEST_PROTOCOL + 1):\n            for dt in [bytes, np.void, str]:\n                zs = self._zeros(10, dt)\n                p = pickle.dumps(zs, protocol=proto)\n                zs2 = pickle.loads(p)\n\n                assert_equal(zs.dtype, zs2.dtype)\n\n    @pytest.mark.skipif(pickle.HIGHEST_PROTOCOL < 5,\n                        reason=\"requires pickle protocol 5\")\n    def test_pickle_with_buffercallback(self):\n        array = np.arange(10)\n        buffers = []\n        bytes_string = pickle.dumps(array, buffer_callback=buffers.append,\n                                    protocol=5)\n        array_from_buffer = pickle.loads(bytes_string, buffers=buffers)\n        # when using pickle protocol 5 with buffer callbacks,\n        # array_from_buffer is reconstructed from a buffer holding a view\n        # to the initial array's data, so modifying an element in array\n        # should modify it in array_from_buffer too.\n        array[0] = -1\n        assert array_from_buffer[0] == -1, array_from_buffer[0]\n\n\nclass TestMethods:\n\n    sort_kinds = ['quicksort', 'heapsort', 'stable']\n\n    def test_compress(self):\n        tgt = [[5, 6, 7, 8, 9]]\n        arr = np.arange(10).reshape(2, 5)\n        out = arr.compress([0, 1], axis=0)\n        assert_equal(out, tgt)\n\n        tgt = [[1, 3], [6, 8]]\n        out = arr.compress([0, 1, 0, 1, 0], axis=1)\n        assert_equal(out, tgt)\n\n        tgt = [[1], [6]]\n        arr = np.arange(10).reshape(2, 5)\n        out = arr.compress([0, 1], axis=1)\n        assert_equal(out, tgt)\n\n        arr = np.arange(10).reshape(2, 5)\n        out = arr.compress([0, 1])\n        assert_equal(out, 1)\n\n    def test_choose(self):\n        x = 2*np.ones((3,), dtype=int)\n        y = 3*np.ones((3,), dtype=int)\n        x2 = 2*np.ones((2, 3), dtype=int)\n        y2 = 3*np.ones((2, 3), dtype=int)\n        ind = np.array([0, 0, 1])\n\n        A = ind.choose((x, y))\n        assert_equal(A, [2, 2, 3])\n\n        A = ind.choose((x2, y2))\n        assert_equal(A, [[2, 2, 3], [2, 2, 3]])\n\n        A = ind.choose((x, y2))\n        assert_equal(A, [[2, 2, 3], [2, 2, 3]])\n\n        oned = np.ones(1)\n        # gh-12031, caused SEGFAULT\n        assert_raises(TypeError, oned.choose,np.void(0), [oned])\n\n        # gh-6272 check overlap on out\n        x = np.arange(5)\n        y = np.choose([0,0,0], [x[:3], x[:3], x[:3]], out=x[1:4], mode='wrap')\n        assert_equal(y, np.array([0, 1, 2]))\n\n    def test_prod(self):\n        ba = [1, 2, 10, 11, 6, 5, 4]\n        ba2 = [[1, 2, 3, 4], [5, 6, 7, 9], [10, 3, 4, 5]]\n\n        for ctype in [np.int16, np.uint16, np.int32, np.uint32,\n                      np.float32, np.float64, np.complex64, np.complex128]:\n            a = np.array(ba, ctype)\n            a2 = np.array(ba2, ctype)\n            if ctype in ['1', 'b']:\n                assert_raises(ArithmeticError, a.prod)\n                assert_raises(ArithmeticError, a2.prod, axis=1)\n            else:\n                assert_equal(a.prod(axis=0), 26400)\n                assert_array_equal(a2.prod(axis=0),\n                                   np.array([50, 36, 84, 180], ctype))\n                assert_array_equal(a2.prod(axis=-1),\n                                   np.array([24, 1890, 600], ctype))\n\n    def test_repeat(self):\n        m = np.array([1, 2, 3, 4, 5, 6])\n        m_rect = m.reshape((2, 3))\n\n        A = m.repeat([1, 3, 2, 1, 1, 2])\n        assert_equal(A, [1, 2, 2, 2, 3,\n                         3, 4, 5, 6, 6])\n\n        A = m.repeat(2)\n        assert_equal(A, [1, 1, 2, 2, 3, 3,\n                         4, 4, 5, 5, 6, 6])\n\n        A = m_rect.repeat([2, 1], axis=0)\n        assert_equal(A, [[1, 2, 3],\n                         [1, 2, 3],\n                         [4, 5, 6]])\n\n        A = m_rect.repeat([1, 3, 2], axis=1)\n        assert_equal(A, [[1, 2, 2, 2, 3, 3],\n                         [4, 5, 5, 5, 6, 6]])\n\n        A = m_rect.repeat(2, axis=0)\n        assert_equal(A, [[1, 2, 3],\n                         [1, 2, 3],\n                         [4, 5, 6],\n                         [4, 5, 6]])\n\n        A = m_rect.repeat(2, axis=1)\n        assert_equal(A, [[1, 1, 2, 2, 3, 3],\n                         [4, 4, 5, 5, 6, 6]])\n\n    def test_reshape(self):\n        arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])\n\n        tgt = [[1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 12]]\n        assert_equal(arr.reshape(2, 6), tgt)\n\n        tgt = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]\n        assert_equal(arr.reshape(3, 4), tgt)\n\n        tgt = [[1, 10, 8, 6], [4, 2, 11, 9], [7, 5, 3, 12]]\n        assert_equal(arr.reshape((3, 4), order='F'), tgt)\n\n        tgt = [[1, 4, 7, 10], [2, 5, 8, 11], [3, 6, 9, 12]]\n        assert_equal(arr.T.reshape((3, 4), order='C'), tgt)\n\n    def test_round(self):\n        def check_round(arr, expected, *round_args):\n            assert_equal(arr.round(*round_args), expected)\n            # With output array\n            out = np.zeros_like(arr)\n            res = arr.round(*round_args, out=out)\n            assert_equal(out, expected)\n            assert_equal(out, res)\n\n        check_round(np.array([1.2, 1.5]), [1, 2])\n        check_round(np.array(1.5), 2)\n        check_round(np.array([12.2, 15.5]), [10, 20], -1)\n        check_round(np.array([12.15, 15.51]), [12.2, 15.5], 1)\n        # Complex rounding\n        check_round(np.array([4.5 + 1.5j]), [4 + 2j])\n        check_round(np.array([12.5 + 15.5j]), [10 + 20j], -1)\n\n    def test_squeeze(self):\n        a = np.array([[[1], [2], [3]]])\n        assert_equal(a.squeeze(), [1, 2, 3])\n        assert_equal(a.squeeze(axis=(0,)), [[1], [2], [3]])\n        assert_raises(ValueError, a.squeeze, axis=(1,))\n        assert_equal(a.squeeze(axis=(2,)), [[1, 2, 3]])\n\n    def test_transpose(self):\n        a = np.array([[1, 2], [3, 4]])\n        assert_equal(a.transpose(), [[1, 3], [2, 4]])\n        assert_raises(ValueError, lambda: a.transpose(0))\n        assert_raises(ValueError, lambda: a.transpose(0, 0))\n        assert_raises(ValueError, lambda: a.transpose(0, 1, 2))\n\n    def test_sort(self):\n        # test ordering for floats and complex containing nans. It is only\n        # necessary to check the less-than comparison, so sorts that\n        # only follow the insertion sort path are sufficient. We only\n        # test doubles and complex doubles as the logic is the same.\n\n        # check doubles\n        msg = \"Test real sort order with nans\"\n        a = np.array([np.nan, 1, 0])\n        b = np.sort(a)\n        assert_equal(b, a[::-1], msg)\n        # check complex\n        msg = \"Test complex sort order with nans\"\n        a = np.zeros(9, dtype=np.complex128)\n        a.real += [np.nan, np.nan, np.nan, 1, 0, 1, 1, 0, 0]\n        a.imag += [np.nan, 1, 0, np.nan, np.nan, 1, 0, 1, 0]\n        b = np.sort(a)\n        assert_equal(b, a[::-1], msg)\n\n    # all c scalar sorts use the same code with different types\n    # so it suffices to run a quick check with one type. The number\n    # of sorted items must be greater than ~50 to check the actual\n    # algorithm because quick and merge sort fall over to insertion\n    # sort for small arrays.\n\n    @pytest.mark.parametrize('dtype', [np.uint8, np.uint16, np.uint32, np.uint64,\n                                       np.float16, np.float32, np.float64,\n                                       np.longdouble])\n    def test_sort_unsigned(self, dtype):\n        a = np.arange(101, dtype=dtype)\n        b = a[::-1].copy()\n        for kind in self.sort_kinds:\n            msg = \"scalar sort, kind=%s\" % kind\n            c = a.copy()\n            c.sort(kind=kind)\n            assert_equal(c, a, msg)\n            c = b.copy()\n            c.sort(kind=kind)\n            assert_equal(c, a, msg)\n\n    @pytest.mark.parametrize('dtype',\n                             [np.int8, np.int16, np.int32, np.int64, np.float16,\n                              np.float32, np.float64, np.longdouble])\n    def test_sort_signed(self, dtype):\n        a = np.arange(-50, 51, dtype=dtype)\n        b = a[::-1].copy()\n        for kind in self.sort_kinds:\n            msg = \"scalar sort, kind=%s\" % (kind)\n            c = a.copy()\n            c.sort(kind=kind)\n            assert_equal(c, a, msg)\n            c = b.copy()\n            c.sort(kind=kind)\n            assert_equal(c, a, msg)\n\n    @pytest.mark.parametrize('dtype', [np.float32, np.float64, np.longdouble])\n    @pytest.mark.parametrize('part', ['real', 'imag'])\n    def test_sort_complex(self, part, dtype):\n        # test complex sorts. These use the same code as the scalars\n        # but the compare function differs.\n        cdtype = {\n            np.single: np.csingle,\n            np.double: np.cdouble,\n            np.longdouble: np.clongdouble,\n        }[dtype]\n        a = np.arange(-50, 51, dtype=dtype)\n        b = a[::-1].copy()\n        ai = (a * (1+1j)).astype(cdtype)\n        bi = (b * (1+1j)).astype(cdtype)\n        setattr(ai, part, 1)\n        setattr(bi, part, 1)\n        for kind in self.sort_kinds:\n            msg = \"complex sort, %s part == 1, kind=%s\" % (part, kind)\n            c = ai.copy()\n            c.sort(kind=kind)\n            assert_equal(c, ai, msg)\n            c = bi.copy()\n            c.sort(kind=kind)\n            assert_equal(c, ai, msg)\n\n    def test_sort_complex_byte_swapping(self):\n        # test sorting of complex arrays requiring byte-swapping, gh-5441\n        for endianness in '<>':\n            for dt in np.typecodes['Complex']:\n                arr = np.array([1+3.j, 2+2.j, 3+1.j], dtype=endianness + dt)\n                c = arr.copy()\n                c.sort()\n                msg = 'byte-swapped complex sort, dtype={0}'.format(dt)\n                assert_equal(c, arr, msg)\n\n    @pytest.mark.parametrize('dtype', [np.bytes_, np.unicode_])\n    def test_sort_string(self, dtype):\n        # np.array will perform the encoding to bytes for us in the bytes test\n        a = np.array(['aaaaaaaa' + chr(i) for i in range(101)], dtype=dtype)\n        b = a[::-1].copy()\n        for kind in self.sort_kinds:\n            msg = \"kind=%s\" % kind\n            c = a.copy()\n            c.sort(kind=kind)\n            assert_equal(c, a, msg)\n            c = b.copy()\n            c.sort(kind=kind)\n            assert_equal(c, a, msg)\n\n    def test_sort_object(self):\n        # test object array sorts.\n        a = np.empty((101,), dtype=object)\n        a[:] = list(range(101))\n        b = a[::-1]\n        for kind in ['q', 'h', 'm']:\n            msg = \"kind=%s\" % kind\n            c = a.copy()\n            c.sort(kind=kind)\n            assert_equal(c, a, msg)\n            c = b.copy()\n            c.sort(kind=kind)\n            assert_equal(c, a, msg)\n\n    def test_sort_structured(self):\n        # test record array sorts.\n        dt = np.dtype([('f', float), ('i', int)])\n        a = np.array([(i, i) for i in range(101)], dtype=dt)\n        b = a[::-1]\n        for kind in ['q', 'h', 'm']:\n            msg = \"kind=%s\" % kind\n            c = a.copy()\n            c.sort(kind=kind)\n            assert_equal(c, a, msg)\n            c = b.copy()\n            c.sort(kind=kind)\n            assert_equal(c, a, msg)\n\n    @pytest.mark.parametrize('dtype', ['datetime64[D]', 'timedelta64[D]'])\n    def test_sort_time(self, dtype):\n        # test datetime64 and timedelta64 sorts.\n        a = np.arange(0, 101, dtype=dtype)\n        b = a[::-1]\n        for kind in ['q', 'h', 'm']:\n            msg = \"kind=%s\" % kind\n            c = a.copy()\n            c.sort(kind=kind)\n            assert_equal(c, a, msg)\n            c = b.copy()\n            c.sort(kind=kind)\n            assert_equal(c, a, msg)\n\n    def test_sort_axis(self):\n        # check axis handling. This should be the same for all type\n        # specific sorts, so we only check it for one type and one kind\n        a = np.array([[3, 2], [1, 0]])\n        b = np.array([[1, 0], [3, 2]])\n        c = np.array([[2, 3], [0, 1]])\n        d = a.copy()\n        d.sort(axis=0)\n        assert_equal(d, b, \"test sort with axis=0\")\n        d = a.copy()\n        d.sort(axis=1)\n        assert_equal(d, c, \"test sort with axis=1\")\n        d = a.copy()\n        d.sort()\n        assert_equal(d, c, \"test sort with default axis\")\n\n    def test_sort_size_0(self):\n        # check axis handling for multidimensional empty arrays\n        a = np.array([])\n        a.shape = (3, 2, 1, 0)\n        for axis in range(-a.ndim, a.ndim):\n            msg = 'test empty array sort with axis={0}'.format(axis)\n            assert_equal(np.sort(a, axis=axis), a, msg)\n        msg = 'test empty array sort with axis=None'\n        assert_equal(np.sort(a, axis=None), a.ravel(), msg)\n\n    def test_sort_bad_ordering(self):\n        # test generic class with bogus ordering,\n        # should not segfault.\n        class Boom:\n            def __lt__(self, other):\n                return True\n\n        a = np.array([Boom()] * 100, dtype=object)\n        for kind in self.sort_kinds:\n            msg = \"kind=%s\" % kind\n            c = a.copy()\n            c.sort(kind=kind)\n            assert_equal(c, a, msg)\n\n    def test_void_sort(self):\n        # gh-8210 - previously segfaulted\n        for i in range(4):\n            rand = np.random.randint(256, size=4000, dtype=np.uint8)\n            arr = rand.view('V4')\n            arr[::-1].sort()\n\n        dt = np.dtype([('val', 'i4', (1,))])\n        for i in range(4):\n            rand = np.random.randint(256, size=4000, dtype=np.uint8)\n            arr = rand.view(dt)\n            arr[::-1].sort()\n\n    def test_sort_raises(self):\n        #gh-9404\n        arr = np.array([0, datetime.now(), 1], dtype=object)\n        for kind in self.sort_kinds:\n            assert_raises(TypeError, arr.sort, kind=kind)\n        #gh-3879\n        class Raiser:\n            def raises_anything(*args, **kwargs):\n                raise TypeError(\"SOMETHING ERRORED\")\n            __eq__ = __ne__ = __lt__ = __gt__ = __ge__ = __le__ = raises_anything\n        arr = np.array([[Raiser(), n] for n in range(10)]).reshape(-1)\n        np.random.shuffle(arr)\n        for kind in self.sort_kinds:\n            assert_raises(TypeError, arr.sort, kind=kind)\n\n    def test_sort_degraded(self):\n        # test degraded dataset would take minutes to run with normal qsort\n        d = np.arange(1000000)\n        do = d.copy()\n        x = d\n        # create a median of 3 killer where each median is the sorted second\n        # last element of the quicksort partition\n        while x.size > 3:\n            mid = x.size // 2\n            x[mid], x[-2] = x[-2], x[mid]\n            x = x[:-2]\n\n        assert_equal(np.sort(d), do)\n        assert_equal(d[np.argsort(d)], do)\n\n    def test_copy(self):\n        def assert_fortran(arr):\n            assert_(arr.flags.fortran)\n            assert_(arr.flags.f_contiguous)\n            assert_(not arr.flags.c_contiguous)\n\n        def assert_c(arr):\n            assert_(not arr.flags.fortran)\n            assert_(not arr.flags.f_contiguous)\n            assert_(arr.flags.c_contiguous)\n\n        a = np.empty((2, 2), order='F')\n        # Test copying a Fortran array\n        assert_c(a.copy())\n        assert_c(a.copy('C'))\n        assert_fortran(a.copy('F'))\n        assert_fortran(a.copy('A'))\n\n        # Now test starting with a C array.\n        a = np.empty((2, 2), order='C')\n        assert_c(a.copy())\n        assert_c(a.copy('C'))\n        assert_fortran(a.copy('F'))\n        assert_c(a.copy('A'))\n\n    def test_sort_order(self):\n        # Test sorting an array with fields\n        x1 = np.array([21, 32, 14])\n        x2 = np.array(['my', 'first', 'name'])\n        x3 = np.array([3.1, 4.5, 6.2])\n        r = np.rec.fromarrays([x1, x2, x3], names='id,word,number')\n\n        r.sort(order=['id'])\n        assert_equal(r.id, np.array([14, 21, 32]))\n        assert_equal(r.word, np.array(['name', 'my', 'first']))\n        assert_equal(r.number, np.array([6.2, 3.1, 4.5]))\n\n        r.sort(order=['word'])\n        assert_equal(r.id, np.array([32, 21, 14]))\n        assert_equal(r.word, np.array(['first', 'my', 'name']))\n        assert_equal(r.number, np.array([4.5, 3.1, 6.2]))\n\n        r.sort(order=['number'])\n        assert_equal(r.id, np.array([21, 32, 14]))\n        assert_equal(r.word, np.array(['my', 'first', 'name']))\n        assert_equal(r.number, np.array([3.1, 4.5, 6.2]))\n\n        assert_raises_regex(ValueError, 'duplicate',\n            lambda: r.sort(order=['id', 'id']))\n\n        if sys.byteorder == 'little':\n            strtype = '>i2'\n        else:\n            strtype = '<i2'\n        mydtype = [('name', strchar + '5'), ('col2', strtype)]\n        r = np.array([('a', 1), ('b', 255), ('c', 3), ('d', 258)],\n                     dtype=mydtype)\n        r.sort(order='col2')\n        assert_equal(r['col2'], [1, 3, 255, 258])\n        assert_equal(r, np.array([('a', 1), ('c', 3), ('b', 255), ('d', 258)],\n                                 dtype=mydtype))\n\n    def test_argsort(self):\n        # all c scalar argsorts use the same code with different types\n        # so it suffices to run a quick check with one type. The number\n        # of sorted items must be greater than ~50 to check the actual\n        # algorithm because quick and merge sort fall over to insertion\n        # sort for small arrays.\n\n        for dtype in [np.int32, np.uint32, np.float32]:\n            a = np.arange(101, dtype=dtype)\n            b = a[::-1].copy()\n            for kind in self.sort_kinds:\n                msg = \"scalar argsort, kind=%s, dtype=%s\" % (kind, dtype)\n                assert_equal(a.copy().argsort(kind=kind), a, msg)\n                assert_equal(b.copy().argsort(kind=kind), b, msg)\n\n        # test complex argsorts. These use the same code as the scalars\n        # but the compare function differs.\n        ai = a*1j + 1\n        bi = b*1j + 1\n        for kind in self.sort_kinds:\n            msg = \"complex argsort, kind=%s\" % kind\n            assert_equal(ai.copy().argsort(kind=kind), a, msg)\n            assert_equal(bi.copy().argsort(kind=kind), b, msg)\n        ai = a + 1j\n        bi = b + 1j\n        for kind in self.sort_kinds:\n            msg = \"complex argsort, kind=%s\" % kind\n            assert_equal(ai.copy().argsort(kind=kind), a, msg)\n            assert_equal(bi.copy().argsort(kind=kind), b, msg)\n\n        # test argsort of complex arrays requiring byte-swapping, gh-5441\n        for endianness in '<>':\n            for dt in np.typecodes['Complex']:\n                arr = np.array([1+3.j, 2+2.j, 3+1.j], dtype=endianness + dt)\n                msg = 'byte-swapped complex argsort, dtype={0}'.format(dt)\n                assert_equal(arr.argsort(),\n                             np.arange(len(arr), dtype=np.intp), msg)\n\n        # test string argsorts.\n        s = 'aaaaaaaa'\n        a = np.array([s + chr(i) for i in range(101)])\n        b = a[::-1].copy()\n        r = np.arange(101)\n        rr = r[::-1]\n        for kind in self.sort_kinds:\n            msg = \"string argsort, kind=%s\" % kind\n            assert_equal(a.copy().argsort(kind=kind), r, msg)\n            assert_equal(b.copy().argsort(kind=kind), rr, msg)\n\n        # test unicode argsorts.\n        s = 'aaaaaaaa'\n        a = np.array([s + chr(i) for i in range(101)], dtype=np.unicode_)\n        b = a[::-1]\n        r = np.arange(101)\n        rr = r[::-1]\n        for kind in self.sort_kinds:\n            msg = \"unicode argsort, kind=%s\" % kind\n            assert_equal(a.copy().argsort(kind=kind), r, msg)\n            assert_equal(b.copy().argsort(kind=kind), rr, msg)\n\n        # test object array argsorts.\n        a = np.empty((101,), dtype=object)\n        a[:] = list(range(101))\n        b = a[::-1]\n        r = np.arange(101)\n        rr = r[::-1]\n        for kind in self.sort_kinds:\n            msg = \"object argsort, kind=%s\" % kind\n            assert_equal(a.copy().argsort(kind=kind), r, msg)\n            assert_equal(b.copy().argsort(kind=kind), rr, msg)\n\n        # test structured array argsorts.\n        dt = np.dtype([('f', float), ('i', int)])\n        a = np.array([(i, i) for i in range(101)], dtype=dt)\n        b = a[::-1]\n        r = np.arange(101)\n        rr = r[::-1]\n        for kind in self.sort_kinds:\n            msg = \"structured array argsort, kind=%s\" % kind\n            assert_equal(a.copy().argsort(kind=kind), r, msg)\n            assert_equal(b.copy().argsort(kind=kind), rr, msg)\n\n        # test datetime64 argsorts.\n        a = np.arange(0, 101, dtype='datetime64[D]')\n        b = a[::-1]\n        r = np.arange(101)\n        rr = r[::-1]\n        for kind in ['q', 'h', 'm']:\n            msg = \"datetime64 argsort, kind=%s\" % kind\n            assert_equal(a.copy().argsort(kind=kind), r, msg)\n            assert_equal(b.copy().argsort(kind=kind), rr, msg)\n\n        # test timedelta64 argsorts.\n        a = np.arange(0, 101, dtype='timedelta64[D]')\n        b = a[::-1]\n        r = np.arange(101)\n        rr = r[::-1]\n        for kind in ['q', 'h', 'm']:\n            msg = \"timedelta64 argsort, kind=%s\" % kind\n            assert_equal(a.copy().argsort(kind=kind), r, msg)\n            assert_equal(b.copy().argsort(kind=kind), rr, msg)\n\n        # check axis handling. This should be the same for all type\n        # specific argsorts, so we only check it for one type and one kind\n        a = np.array([[3, 2], [1, 0]])\n        b = np.array([[1, 1], [0, 0]])\n        c = np.array([[1, 0], [1, 0]])\n        assert_equal(a.copy().argsort(axis=0), b)\n        assert_equal(a.copy().argsort(axis=1), c)\n        assert_equal(a.copy().argsort(), c)\n\n        # check axis handling for multidimensional empty arrays\n        a = np.array([])\n        a.shape = (3, 2, 1, 0)\n        for axis in range(-a.ndim, a.ndim):\n            msg = 'test empty array argsort with axis={0}'.format(axis)\n            assert_equal(np.argsort(a, axis=axis),\n                         np.zeros_like(a, dtype=np.intp), msg)\n        msg = 'test empty array argsort with axis=None'\n        assert_equal(np.argsort(a, axis=None),\n                     np.zeros_like(a.ravel(), dtype=np.intp), msg)\n\n        # check that stable argsorts are stable\n        r = np.arange(100)\n        # scalars\n        a = np.zeros(100)\n        assert_equal(a.argsort(kind='m'), r)\n        # complex\n        a = np.zeros(100, dtype=complex)\n        assert_equal(a.argsort(kind='m'), r)\n        # string\n        a = np.array(['aaaaaaaaa' for i in range(100)])\n        assert_equal(a.argsort(kind='m'), r)\n        # unicode\n        a = np.array(['aaaaaaaaa' for i in range(100)], dtype=np.unicode_)\n        assert_equal(a.argsort(kind='m'), r)\n\n    def test_sort_unicode_kind(self):\n        d = np.arange(10)\n        k = b'\\xc3\\xa4'.decode(\"UTF8\")\n        assert_raises(ValueError, d.sort, kind=k)\n        assert_raises(ValueError, d.argsort, kind=k)\n\n    def test_searchsorted(self):\n        # test for floats and complex containing nans. The logic is the\n        # same for all float types so only test double types for now.\n        # The search sorted routines use the compare functions for the\n        # array type, so this checks if that is consistent with the sort\n        # order.\n\n        # check double\n        a = np.array([0, 1, np.nan])\n        msg = \"Test real searchsorted with nans, side='l'\"\n        b = a.searchsorted(a, side='l')\n        assert_equal(b, np.arange(3), msg)\n        msg = \"Test real searchsorted with nans, side='r'\"\n        b = a.searchsorted(a, side='r')\n        assert_equal(b, np.arange(1, 4), msg)\n        # check keyword arguments\n        a.searchsorted(v=1)\n        # check double complex\n        a = np.zeros(9, dtype=np.complex128)\n        a.real += [0, 0, 1, 1, 0, 1, np.nan, np.nan, np.nan]\n        a.imag += [0, 1, 0, 1, np.nan, np.nan, 0, 1, np.nan]\n        msg = \"Test complex searchsorted with nans, side='l'\"\n        b = a.searchsorted(a, side='l')\n        assert_equal(b, np.arange(9), msg)\n        msg = \"Test complex searchsorted with nans, side='r'\"\n        b = a.searchsorted(a, side='r')\n        assert_equal(b, np.arange(1, 10), msg)\n        msg = \"Test searchsorted with little endian, side='l'\"\n        a = np.array([0, 128], dtype='<i4')\n        b = a.searchsorted(np.array(128, dtype='<i4'))\n        assert_equal(b, 1, msg)\n        msg = \"Test searchsorted with big endian, side='l'\"\n        a = np.array([0, 128], dtype='>i4')\n        b = a.searchsorted(np.array(128, dtype='>i4'))\n        assert_equal(b, 1, msg)\n\n        # Check 0 elements\n        a = np.ones(0)\n        b = a.searchsorted([0, 1, 2], 'l')\n        assert_equal(b, [0, 0, 0])\n        b = a.searchsorted([0, 1, 2], 'r')\n        assert_equal(b, [0, 0, 0])\n        a = np.ones(1)\n        # Check 1 element\n        b = a.searchsorted([0, 1, 2], 'l')\n        assert_equal(b, [0, 0, 1])\n        b = a.searchsorted([0, 1, 2], 'r')\n        assert_equal(b, [0, 1, 1])\n        # Check all elements equal\n        a = np.ones(2)\n        b = a.searchsorted([0, 1, 2], 'l')\n        assert_equal(b, [0, 0, 2])\n        b = a.searchsorted([0, 1, 2], 'r')\n        assert_equal(b, [0, 2, 2])\n\n        # Test searching unaligned array\n        a = np.arange(10)\n        aligned = np.empty(a.itemsize * a.size + 1, 'uint8')\n        unaligned = aligned[1:].view(a.dtype)\n        unaligned[:] = a\n        # Test searching unaligned array\n        b = unaligned.searchsorted(a, 'l')\n        assert_equal(b, a)\n        b = unaligned.searchsorted(a, 'r')\n        assert_equal(b, a + 1)\n        # Test searching for unaligned keys\n        b = a.searchsorted(unaligned, 'l')\n        assert_equal(b, a)\n        b = a.searchsorted(unaligned, 'r')\n        assert_equal(b, a + 1)\n\n        # Test smart resetting of binsearch indices\n        a = np.arange(5)\n        b = a.searchsorted([6, 5, 4], 'l')\n        assert_equal(b, [5, 5, 4])\n        b = a.searchsorted([6, 5, 4], 'r')\n        assert_equal(b, [5, 5, 5])\n\n        # Test all type specific binary search functions\n        types = ''.join((np.typecodes['AllInteger'], np.typecodes['AllFloat'],\n                         np.typecodes['Datetime'], '?O'))\n        for dt in types:\n            if dt == 'M':\n                dt = 'M8[D]'\n            if dt == '?':\n                a = np.arange(2, dtype=dt)\n                out = np.arange(2)\n            else:\n                a = np.arange(0, 5, dtype=dt)\n                out = np.arange(5)\n            b = a.searchsorted(a, 'l')\n            assert_equal(b, out)\n            b = a.searchsorted(a, 'r')\n            assert_equal(b, out + 1)\n            # Test empty array, use a fresh array to get warnings in\n            # valgrind if access happens.\n            e = np.ndarray(shape=0, buffer=b'', dtype=dt)\n            b = e.searchsorted(a, 'l')\n            assert_array_equal(b, np.zeros(len(a), dtype=np.intp))\n            b = a.searchsorted(e, 'l')\n            assert_array_equal(b, np.zeros(0, dtype=np.intp))\n\n    def test_searchsorted_unicode(self):\n        # Test searchsorted on unicode strings.\n\n        # 1.6.1 contained a string length miscalculation in\n        # arraytypes.c.src:UNICODE_compare() which manifested as\n        # incorrect/inconsistent results from searchsorted.\n        a = np.array(['P:\\\\20x_dapi_cy3\\\\20x_dapi_cy3_20100185_1',\n                      'P:\\\\20x_dapi_cy3\\\\20x_dapi_cy3_20100186_1',\n                      'P:\\\\20x_dapi_cy3\\\\20x_dapi_cy3_20100187_1',\n                      'P:\\\\20x_dapi_cy3\\\\20x_dapi_cy3_20100189_1',\n                      'P:\\\\20x_dapi_cy3\\\\20x_dapi_cy3_20100190_1',\n                      'P:\\\\20x_dapi_cy3\\\\20x_dapi_cy3_20100191_1',\n                      'P:\\\\20x_dapi_cy3\\\\20x_dapi_cy3_20100192_1',\n                      'P:\\\\20x_dapi_cy3\\\\20x_dapi_cy3_20100193_1',\n                      'P:\\\\20x_dapi_cy3\\\\20x_dapi_cy3_20100194_1',\n                      'P:\\\\20x_dapi_cy3\\\\20x_dapi_cy3_20100195_1',\n                      'P:\\\\20x_dapi_cy3\\\\20x_dapi_cy3_20100196_1',\n                      'P:\\\\20x_dapi_cy3\\\\20x_dapi_cy3_20100197_1',\n                      'P:\\\\20x_dapi_cy3\\\\20x_dapi_cy3_20100198_1',\n                      'P:\\\\20x_dapi_cy3\\\\20x_dapi_cy3_20100199_1'],\n                     dtype=np.unicode_)\n        ind = np.arange(len(a))\n        assert_equal([a.searchsorted(v, 'left') for v in a], ind)\n        assert_equal([a.searchsorted(v, 'right') for v in a], ind + 1)\n        assert_equal([a.searchsorted(a[i], 'left') for i in ind], ind)\n        assert_equal([a.searchsorted(a[i], 'right') for i in ind], ind + 1)\n\n    def test_searchsorted_with_invalid_sorter(self):\n        a = np.array([5, 2, 1, 3, 4])\n        s = np.argsort(a)\n        assert_raises(TypeError, np.searchsorted, a, 0,\n                      sorter=np.array((1, (2, 3)), dtype=object))\n        assert_raises(TypeError, np.searchsorted, a, 0, sorter=[1.1])\n        assert_raises(ValueError, np.searchsorted, a, 0, sorter=[1, 2, 3, 4])\n        assert_raises(ValueError, np.searchsorted, a, 0, sorter=[1, 2, 3, 4, 5, 6])\n\n        # bounds check\n        assert_raises(ValueError, np.searchsorted, a, 4, sorter=[0, 1, 2, 3, 5])\n        assert_raises(ValueError, np.searchsorted, a, 0, sorter=[-1, 0, 1, 2, 3])\n        assert_raises(ValueError, np.searchsorted, a, 0, sorter=[4, 0, -1, 2, 3])\n\n    def test_searchsorted_with_sorter(self):\n        a = np.random.rand(300)\n        s = a.argsort()\n        b = np.sort(a)\n        k = np.linspace(0, 1, 20)\n        assert_equal(b.searchsorted(k), a.searchsorted(k, sorter=s))\n\n        a = np.array([0, 1, 2, 3, 5]*20)\n        s = a.argsort()\n        k = [0, 1, 2, 3, 5]\n        expected = [0, 20, 40, 60, 80]\n        assert_equal(a.searchsorted(k, side='l', sorter=s), expected)\n        expected = [20, 40, 60, 80, 100]\n        assert_equal(a.searchsorted(k, side='r', sorter=s), expected)\n\n        # Test searching unaligned array\n        keys = np.arange(10)\n        a = keys.copy()\n        np.random.shuffle(s)\n        s = a.argsort()\n        aligned = np.empty(a.itemsize * a.size + 1, 'uint8')\n        unaligned = aligned[1:].view(a.dtype)\n        # Test searching unaligned array\n        unaligned[:] = a\n        b = unaligned.searchsorted(keys, 'l', s)\n        assert_equal(b, keys)\n        b = unaligned.searchsorted(keys, 'r', s)\n        assert_equal(b, keys + 1)\n        # Test searching for unaligned keys\n        unaligned[:] = keys\n        b = a.searchsorted(unaligned, 'l', s)\n        assert_equal(b, keys)\n        b = a.searchsorted(unaligned, 'r', s)\n        assert_equal(b, keys + 1)\n\n        # Test all type specific indirect binary search functions\n        types = ''.join((np.typecodes['AllInteger'], np.typecodes['AllFloat'],\n                         np.typecodes['Datetime'], '?O'))\n        for dt in types:\n            if dt == 'M':\n                dt = 'M8[D]'\n            if dt == '?':\n                a = np.array([1, 0], dtype=dt)\n                # We want the sorter array to be of a type that is different\n                # from np.intp in all platforms, to check for #4698\n                s = np.array([1, 0], dtype=np.int16)\n                out = np.array([1, 0])\n            else:\n                a = np.array([3, 4, 1, 2, 0], dtype=dt)\n                # We want the sorter array to be of a type that is different\n                # from np.intp in all platforms, to check for #4698\n                s = np.array([4, 2, 3, 0, 1], dtype=np.int16)\n                out = np.array([3, 4, 1, 2, 0], dtype=np.intp)\n            b = a.searchsorted(a, 'l', s)\n            assert_equal(b, out)\n            b = a.searchsorted(a, 'r', s)\n            assert_equal(b, out + 1)\n            # Test empty array, use a fresh array to get warnings in\n            # valgrind if access happens.\n            e = np.ndarray(shape=0, buffer=b'', dtype=dt)\n            b = e.searchsorted(a, 'l', s[:0])\n            assert_array_equal(b, np.zeros(len(a), dtype=np.intp))\n            b = a.searchsorted(e, 'l', s)\n            assert_array_equal(b, np.zeros(0, dtype=np.intp))\n\n        # Test non-contiguous sorter array\n        a = np.array([3, 4, 1, 2, 0])\n        srt = np.empty((10,), dtype=np.intp)\n        srt[1::2] = -1\n        srt[::2] = [4, 2, 3, 0, 1]\n        s = srt[::2]\n        out = np.array([3, 4, 1, 2, 0], dtype=np.intp)\n        b = a.searchsorted(a, 'l', s)\n        assert_equal(b, out)\n        b = a.searchsorted(a, 'r', s)\n        assert_equal(b, out + 1)\n\n    def test_searchsorted_return_type(self):\n        # Functions returning indices should always return base ndarrays\n        class A(np.ndarray):\n            pass\n        a = np.arange(5).view(A)\n        b = np.arange(1, 3).view(A)\n        s = np.arange(5).view(A)\n        assert_(not isinstance(a.searchsorted(b, 'l'), A))\n        assert_(not isinstance(a.searchsorted(b, 'r'), A))\n        assert_(not isinstance(a.searchsorted(b, 'l', s), A))\n        assert_(not isinstance(a.searchsorted(b, 'r', s), A))\n\n    def test_argpartition_out_of_range(self):\n        # Test out of range values in kth raise an error, gh-5469\n        d = np.arange(10)\n        assert_raises(ValueError, d.argpartition, 10)\n        assert_raises(ValueError, d.argpartition, -11)\n        # Test also for generic type argpartition, which uses sorting\n        # and used to not bound check kth\n        d_obj = np.arange(10, dtype=object)\n        assert_raises(ValueError, d_obj.argpartition, 10)\n        assert_raises(ValueError, d_obj.argpartition, -11)\n\n    def test_partition_out_of_range(self):\n        # Test out of range values in kth raise an error, gh-5469\n        d = np.arange(10)\n        assert_raises(ValueError, d.partition, 10)\n        assert_raises(ValueError, d.partition, -11)\n        # Test also for generic type partition, which uses sorting\n        # and used to not bound check kth\n        d_obj = np.arange(10, dtype=object)\n        assert_raises(ValueError, d_obj.partition, 10)\n        assert_raises(ValueError, d_obj.partition, -11)\n\n    def test_argpartition_integer(self):\n        # Test non-integer values in kth raise an error/\n        d = np.arange(10)\n        assert_raises(TypeError, d.argpartition, 9.)\n        # Test also for generic type argpartition, which uses sorting\n        # and used to not bound check kth\n        d_obj = np.arange(10, dtype=object)\n        assert_raises(TypeError, d_obj.argpartition, 9.)\n\n    def test_partition_integer(self):\n        # Test out of range values in kth raise an error, gh-5469\n        d = np.arange(10)\n        assert_raises(TypeError, d.partition, 9.)\n        # Test also for generic type partition, which uses sorting\n        # and used to not bound check kth\n        d_obj = np.arange(10, dtype=object)\n        assert_raises(TypeError, d_obj.partition, 9.)\n\n    def test_partition_empty_array(self):\n        # check axis handling for multidimensional empty arrays\n        a = np.array([])\n        a.shape = (3, 2, 1, 0)\n        for axis in range(-a.ndim, a.ndim):\n            msg = 'test empty array partition with axis={0}'.format(axis)\n            assert_equal(np.partition(a, 0, axis=axis), a, msg)\n        msg = 'test empty array partition with axis=None'\n        assert_equal(np.partition(a, 0, axis=None), a.ravel(), msg)\n\n    def test_argpartition_empty_array(self):\n        # check axis handling for multidimensional empty arrays\n        a = np.array([])\n        a.shape = (3, 2, 1, 0)\n        for axis in range(-a.ndim, a.ndim):\n            msg = 'test empty array argpartition with axis={0}'.format(axis)\n            assert_equal(np.partition(a, 0, axis=axis),\n                         np.zeros_like(a, dtype=np.intp), msg)\n        msg = 'test empty array argpartition with axis=None'\n        assert_equal(np.partition(a, 0, axis=None),\n                     np.zeros_like(a.ravel(), dtype=np.intp), msg)\n\n    def test_partition(self):\n        d = np.arange(10)\n        assert_raises(TypeError, np.partition, d, 2, kind=1)\n        assert_raises(ValueError, np.partition, d, 2, kind=\"nonsense\")\n        assert_raises(ValueError, np.argpartition, d, 2, kind=\"nonsense\")\n        assert_raises(ValueError, d.partition, 2, axis=0, kind=\"nonsense\")\n        assert_raises(ValueError, d.argpartition, 2, axis=0, kind=\"nonsense\")\n        for k in (\"introselect\",):\n            d = np.array([])\n            assert_array_equal(np.partition(d, 0, kind=k), d)\n            assert_array_equal(np.argpartition(d, 0, kind=k), d)\n            d = np.ones(1)\n            assert_array_equal(np.partition(d, 0, kind=k)[0], d)\n            assert_array_equal(d[np.argpartition(d, 0, kind=k)],\n                               np.partition(d, 0, kind=k))\n\n            # kth not modified\n            kth = np.array([30, 15, 5])\n            okth = kth.copy()\n            np.partition(np.arange(40), kth)\n            assert_array_equal(kth, okth)\n\n            for r in ([2, 1], [1, 2], [1, 1]):\n                d = np.array(r)\n                tgt = np.sort(d)\n                assert_array_equal(np.partition(d, 0, kind=k)[0], tgt[0])\n                assert_array_equal(np.partition(d, 1, kind=k)[1], tgt[1])\n                assert_array_equal(d[np.argpartition(d, 0, kind=k)],\n                                   np.partition(d, 0, kind=k))\n                assert_array_equal(d[np.argpartition(d, 1, kind=k)],\n                                   np.partition(d, 1, kind=k))\n                for i in range(d.size):\n                    d[i:].partition(0, kind=k)\n                assert_array_equal(d, tgt)\n\n            for r in ([3, 2, 1], [1, 2, 3], [2, 1, 3], [2, 3, 1],\n                      [1, 1, 1], [1, 2, 2], [2, 2, 1], [1, 2, 1]):\n                d = np.array(r)\n                tgt = np.sort(d)\n                assert_array_equal(np.partition(d, 0, kind=k)[0], tgt[0])\n                assert_array_equal(np.partition(d, 1, kind=k)[1], tgt[1])\n                assert_array_equal(np.partition(d, 2, kind=k)[2], tgt[2])\n                assert_array_equal(d[np.argpartition(d, 0, kind=k)],\n                                   np.partition(d, 0, kind=k))\n                assert_array_equal(d[np.argpartition(d, 1, kind=k)],\n                                   np.partition(d, 1, kind=k))\n                assert_array_equal(d[np.argpartition(d, 2, kind=k)],\n                                   np.partition(d, 2, kind=k))\n                for i in range(d.size):\n                    d[i:].partition(0, kind=k)\n                assert_array_equal(d, tgt)\n\n            d = np.ones(50)\n            assert_array_equal(np.partition(d, 0, kind=k), d)\n            assert_array_equal(d[np.argpartition(d, 0, kind=k)],\n                               np.partition(d, 0, kind=k))\n\n            # sorted\n            d = np.arange(49)\n            assert_equal(np.partition(d, 5, kind=k)[5], 5)\n            assert_equal(np.partition(d, 15, kind=k)[15], 15)\n            assert_array_equal(d[np.argpartition(d, 5, kind=k)],\n                               np.partition(d, 5, kind=k))\n            assert_array_equal(d[np.argpartition(d, 15, kind=k)],\n                               np.partition(d, 15, kind=k))\n\n            # rsorted\n            d = np.arange(47)[::-1]\n            assert_equal(np.partition(d, 6, kind=k)[6], 6)\n            assert_equal(np.partition(d, 16, kind=k)[16], 16)\n            assert_array_equal(d[np.argpartition(d, 6, kind=k)],\n                               np.partition(d, 6, kind=k))\n            assert_array_equal(d[np.argpartition(d, 16, kind=k)],\n                               np.partition(d, 16, kind=k))\n\n            assert_array_equal(np.partition(d, -6, kind=k),\n                               np.partition(d, 41, kind=k))\n            assert_array_equal(np.partition(d, -16, kind=k),\n                               np.partition(d, 31, kind=k))\n            assert_array_equal(d[np.argpartition(d, -6, kind=k)],\n                               np.partition(d, 41, kind=k))\n\n            # median of 3 killer, O(n^2) on pure median 3 pivot quickselect\n            # exercises the median of median of 5 code used to keep O(n)\n            d = np.arange(1000000)\n            x = np.roll(d, d.size // 2)\n            mid = x.size // 2 + 1\n            assert_equal(np.partition(x, mid)[mid], mid)\n            d = np.arange(1000001)\n            x = np.roll(d, d.size // 2 + 1)\n            mid = x.size // 2 + 1\n            assert_equal(np.partition(x, mid)[mid], mid)\n\n            # max\n            d = np.ones(10)\n            d[1] = 4\n            assert_equal(np.partition(d, (2, -1))[-1], 4)\n            assert_equal(np.partition(d, (2, -1))[2], 1)\n            assert_equal(d[np.argpartition(d, (2, -1))][-1], 4)\n            assert_equal(d[np.argpartition(d, (2, -1))][2], 1)\n            d[1] = np.nan\n            assert_(np.isnan(d[np.argpartition(d, (2, -1))][-1]))\n            assert_(np.isnan(np.partition(d, (2, -1))[-1]))\n\n            # equal elements\n            d = np.arange(47) % 7\n            tgt = np.sort(np.arange(47) % 7)\n            np.random.shuffle(d)\n            for i in range(d.size):\n                assert_equal(np.partition(d, i, kind=k)[i], tgt[i])\n            assert_array_equal(d[np.argpartition(d, 6, kind=k)],\n                               np.partition(d, 6, kind=k))\n            assert_array_equal(d[np.argpartition(d, 16, kind=k)],\n                               np.partition(d, 16, kind=k))\n            for i in range(d.size):\n                d[i:].partition(0, kind=k)\n            assert_array_equal(d, tgt)\n\n            d = np.array([0, 1, 2, 3, 4, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,\n                          7, 7, 7, 7, 7, 9])\n            kth = [0, 3, 19, 20]\n            assert_equal(np.partition(d, kth, kind=k)[kth], (0, 3, 7, 7))\n            assert_equal(d[np.argpartition(d, kth, kind=k)][kth], (0, 3, 7, 7))\n\n            d = np.array([2, 1])\n            d.partition(0, kind=k)\n            assert_raises(ValueError, d.partition, 2)\n            assert_raises(np.AxisError, d.partition, 3, axis=1)\n            assert_raises(ValueError, np.partition, d, 2)\n            assert_raises(np.AxisError, np.partition, d, 2, axis=1)\n            assert_raises(ValueError, d.argpartition, 2)\n            assert_raises(np.AxisError, d.argpartition, 3, axis=1)\n            assert_raises(ValueError, np.argpartition, d, 2)\n            assert_raises(np.AxisError, np.argpartition, d, 2, axis=1)\n            d = np.arange(10).reshape((2, 5))\n            d.partition(1, axis=0, kind=k)\n            d.partition(4, axis=1, kind=k)\n            np.partition(d, 1, axis=0, kind=k)\n            np.partition(d, 4, axis=1, kind=k)\n            np.partition(d, 1, axis=None, kind=k)\n            np.partition(d, 9, axis=None, kind=k)\n            d.argpartition(1, axis=0, kind=k)\n            d.argpartition(4, axis=1, kind=k)\n            np.argpartition(d, 1, axis=0, kind=k)\n            np.argpartition(d, 4, axis=1, kind=k)\n            np.argpartition(d, 1, axis=None, kind=k)\n            np.argpartition(d, 9, axis=None, kind=k)\n            assert_raises(ValueError, d.partition, 2, axis=0)\n            assert_raises(ValueError, d.partition, 11, axis=1)\n            assert_raises(TypeError, d.partition, 2, axis=None)\n            assert_raises(ValueError, np.partition, d, 9, axis=1)\n            assert_raises(ValueError, np.partition, d, 11, axis=None)\n            assert_raises(ValueError, d.argpartition, 2, axis=0)\n            assert_raises(ValueError, d.argpartition, 11, axis=1)\n            assert_raises(ValueError, np.argpartition, d, 9, axis=1)\n            assert_raises(ValueError, np.argpartition, d, 11, axis=None)\n\n            td = [(dt, s) for dt in [np.int32, np.float32, np.complex64]\n                  for s in (9, 16)]\n            for dt, s in td:\n                aae = assert_array_equal\n                at = assert_\n\n                d = np.arange(s, dtype=dt)\n                np.random.shuffle(d)\n                d1 = np.tile(np.arange(s, dtype=dt), (4, 1))\n                map(np.random.shuffle, d1)\n                d0 = np.transpose(d1)\n                for i in range(d.size):\n                    p = np.partition(d, i, kind=k)\n                    assert_equal(p[i], i)\n                    # all before are smaller\n                    assert_array_less(p[:i], p[i])\n                    # all after are larger\n                    assert_array_less(p[i], p[i + 1:])\n                    aae(p, d[np.argpartition(d, i, kind=k)])\n\n                    p = np.partition(d1, i, axis=1, kind=k)\n                    aae(p[:, i], np.array([i] * d1.shape[0], dtype=dt))\n                    # array_less does not seem to work right\n                    at((p[:, :i].T <= p[:, i]).all(),\n                       msg=\"%d: %r <= %r\" % (i, p[:, i], p[:, :i].T))\n                    at((p[:, i + 1:].T > p[:, i]).all(),\n                       msg=\"%d: %r < %r\" % (i, p[:, i], p[:, i + 1:].T))\n                    aae(p, d1[np.arange(d1.shape[0])[:, None],\n                        np.argpartition(d1, i, axis=1, kind=k)])\n\n                    p = np.partition(d0, i, axis=0, kind=k)\n                    aae(p[i, :], np.array([i] * d1.shape[0], dtype=dt))\n                    # array_less does not seem to work right\n                    at((p[:i, :] <= p[i, :]).all(),\n                       msg=\"%d: %r <= %r\" % (i, p[i, :], p[:i, :]))\n                    at((p[i + 1:, :] > p[i, :]).all(),\n                       msg=\"%d: %r < %r\" % (i, p[i, :], p[:, i + 1:]))\n                    aae(p, d0[np.argpartition(d0, i, axis=0, kind=k),\n                        np.arange(d0.shape[1])[None, :]])\n\n                    # check inplace\n                    dc = d.copy()\n                    dc.partition(i, kind=k)\n                    assert_equal(dc, np.partition(d, i, kind=k))\n                    dc = d0.copy()\n                    dc.partition(i, axis=0, kind=k)\n                    assert_equal(dc, np.partition(d0, i, axis=0, kind=k))\n                    dc = d1.copy()\n                    dc.partition(i, axis=1, kind=k)\n                    assert_equal(dc, np.partition(d1, i, axis=1, kind=k))\n\n    def assert_partitioned(self, d, kth):\n        prev = 0\n        for k in np.sort(kth):\n            assert_array_less(d[prev:k], d[k], err_msg='kth %d' % k)\n            assert_((d[k:] >= d[k]).all(),\n                    msg=\"kth %d, %r not greater equal %d\" % (k, d[k:], d[k]))\n            prev = k + 1\n\n    def test_partition_iterative(self):\n            d = np.arange(17)\n            kth = (0, 1, 2, 429, 231)\n            assert_raises(ValueError, d.partition, kth)\n            assert_raises(ValueError, d.argpartition, kth)\n            d = np.arange(10).reshape((2, 5))\n            assert_raises(ValueError, d.partition, kth, axis=0)\n            assert_raises(ValueError, d.partition, kth, axis=1)\n            assert_raises(ValueError, np.partition, d, kth, axis=1)\n            assert_raises(ValueError, np.partition, d, kth, axis=None)\n\n            d = np.array([3, 4, 2, 1])\n            p = np.partition(d, (0, 3))\n            self.assert_partitioned(p, (0, 3))\n            self.assert_partitioned(d[np.argpartition(d, (0, 3))], (0, 3))\n\n            assert_array_equal(p, np.partition(d, (-3, -1)))\n            assert_array_equal(p, d[np.argpartition(d, (-3, -1))])\n\n            d = np.arange(17)\n            np.random.shuffle(d)\n            d.partition(range(d.size))\n            assert_array_equal(np.arange(17), d)\n            np.random.shuffle(d)\n            assert_array_equal(np.arange(17), d[d.argpartition(range(d.size))])\n\n            # test unsorted kth\n            d = np.arange(17)\n            np.random.shuffle(d)\n            keys = np.array([1, 3, 8, -2])\n            np.random.shuffle(d)\n            p = np.partition(d, keys)\n            self.assert_partitioned(p, keys)\n            p = d[np.argpartition(d, keys)]\n            self.assert_partitioned(p, keys)\n            np.random.shuffle(keys)\n            assert_array_equal(np.partition(d, keys), p)\n            assert_array_equal(d[np.argpartition(d, keys)], p)\n\n            # equal kth\n            d = np.arange(20)[::-1]\n            self.assert_partitioned(np.partition(d, [5]*4), [5])\n            self.assert_partitioned(np.partition(d, [5]*4 + [6, 13]),\n                                    [5]*4 + [6, 13])\n            self.assert_partitioned(d[np.argpartition(d, [5]*4)], [5])\n            self.assert_partitioned(d[np.argpartition(d, [5]*4 + [6, 13])],\n                                    [5]*4 + [6, 13])\n\n            d = np.arange(12)\n            np.random.shuffle(d)\n            d1 = np.tile(np.arange(12), (4, 1))\n            map(np.random.shuffle, d1)\n            d0 = np.transpose(d1)\n\n            kth = (1, 6, 7, -1)\n            p = np.partition(d1, kth, axis=1)\n            pa = d1[np.arange(d1.shape[0])[:, None],\n                    d1.argpartition(kth, axis=1)]\n            assert_array_equal(p, pa)\n            for i in range(d1.shape[0]):\n                self.assert_partitioned(p[i,:], kth)\n            p = np.partition(d0, kth, axis=0)\n            pa = d0[np.argpartition(d0, kth, axis=0),\n                    np.arange(d0.shape[1])[None,:]]\n            assert_array_equal(p, pa)\n            for i in range(d0.shape[1]):\n                self.assert_partitioned(p[:, i], kth)\n\n    def test_partition_cdtype(self):\n        d = np.array([('Galahad', 1.7, 38), ('Arthur', 1.8, 41),\n                   ('Lancelot', 1.9, 38)],\n                  dtype=[('name', '|S10'), ('height', '<f8'), ('age', '<i4')])\n\n        tgt = np.sort(d, order=['age', 'height'])\n        assert_array_equal(np.partition(d, range(d.size),\n                                        order=['age', 'height']),\n                           tgt)\n        assert_array_equal(d[np.argpartition(d, range(d.size),\n                                             order=['age', 'height'])],\n                           tgt)\n        for k in range(d.size):\n            assert_equal(np.partition(d, k, order=['age', 'height'])[k],\n                        tgt[k])\n            assert_equal(d[np.argpartition(d, k, order=['age', 'height'])][k],\n                         tgt[k])\n\n        d = np.array(['Galahad', 'Arthur', 'zebra', 'Lancelot'])\n        tgt = np.sort(d)\n        assert_array_equal(np.partition(d, range(d.size)), tgt)\n        for k in range(d.size):\n            assert_equal(np.partition(d, k)[k], tgt[k])\n            assert_equal(d[np.argpartition(d, k)][k], tgt[k])\n\n    def test_partition_unicode_kind(self):\n        d = np.arange(10)\n        k = b'\\xc3\\xa4'.decode(\"UTF8\")\n        assert_raises(ValueError, d.partition, 2, kind=k)\n        assert_raises(ValueError, d.argpartition, 2, kind=k)\n\n    def test_partition_fuzz(self):\n        # a few rounds of random data testing\n        for j in range(10, 30):\n            for i in range(1, j - 2):\n                d = np.arange(j)\n                np.random.shuffle(d)\n                d = d % np.random.randint(2, 30)\n                idx = np.random.randint(d.size)\n                kth = [0, idx, i, i + 1]\n                tgt = np.sort(d)[kth]\n                assert_array_equal(np.partition(d, kth)[kth], tgt,\n                                   err_msg=\"data: %r\\n kth: %r\" % (d, kth))\n\n    def test_argpartition_gh5524(self):\n        #  A test for functionality of argpartition on lists.\n        d = [6,7,3,2,9,0]\n        p = np.argpartition(d,1)\n        self.assert_partitioned(np.array(d)[p],[1])\n\n    def test_flatten(self):\n        x0 = np.array([[1, 2, 3], [4, 5, 6]], np.int32)\n        x1 = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]], np.int32)\n        y0 = np.array([1, 2, 3, 4, 5, 6], np.int32)\n        y0f = np.array([1, 4, 2, 5, 3, 6], np.int32)\n        y1 = np.array([1, 2, 3, 4, 5, 6, 7, 8], np.int32)\n        y1f = np.array([1, 5, 3, 7, 2, 6, 4, 8], np.int32)\n        assert_equal(x0.flatten(), y0)\n        assert_equal(x0.flatten('F'), y0f)\n        assert_equal(x0.flatten('F'), x0.T.flatten())\n        assert_equal(x1.flatten(), y1)\n        assert_equal(x1.flatten('F'), y1f)\n        assert_equal(x1.flatten('F'), x1.T.flatten())\n\n\n    @pytest.mark.parametrize('func', (np.dot, np.matmul))\n    def test_arr_mult(self, func):\n        a = np.array([[1, 0], [0, 1]])\n        b = np.array([[0, 1], [1, 0]])\n        c = np.array([[9, 1], [1, -9]])\n        d = np.arange(24).reshape(4, 6)\n        ddt = np.array(\n            [[  55,  145,  235,  325],\n             [ 145,  451,  757, 1063],\n             [ 235,  757, 1279, 1801],\n             [ 325, 1063, 1801, 2539]]\n        )\n        dtd = np.array(\n            [[504, 540, 576, 612, 648, 684],\n             [540, 580, 620, 660, 700, 740],\n             [576, 620, 664, 708, 752, 796],\n             [612, 660, 708, 756, 804, 852],\n             [648, 700, 752, 804, 856, 908],\n             [684, 740, 796, 852, 908, 964]]\n        )\n\n\n        # gemm vs syrk optimizations\n        for et in [np.float32, np.float64, np.complex64, np.complex128]:\n            eaf = a.astype(et)\n            assert_equal(func(eaf, eaf), eaf)\n            assert_equal(func(eaf.T, eaf), eaf)\n            assert_equal(func(eaf, eaf.T), eaf)\n            assert_equal(func(eaf.T, eaf.T), eaf)\n            assert_equal(func(eaf.T.copy(), eaf), eaf)\n            assert_equal(func(eaf, eaf.T.copy()), eaf)\n            assert_equal(func(eaf.T.copy(), eaf.T.copy()), eaf)\n\n        # syrk validations\n        for et in [np.float32, np.float64, np.complex64, np.complex128]:\n            eaf = a.astype(et)\n            ebf = b.astype(et)\n            assert_equal(func(ebf, ebf), eaf)\n            assert_equal(func(ebf.T, ebf), eaf)\n            assert_equal(func(ebf, ebf.T), eaf)\n            assert_equal(func(ebf.T, ebf.T), eaf)\n\n        # syrk - different shape, stride, and view validations\n        for et in [np.float32, np.float64, np.complex64, np.complex128]:\n            edf = d.astype(et)\n            assert_equal(\n                func(edf[::-1, :], edf.T),\n                func(edf[::-1, :].copy(), edf.T.copy())\n            )\n            assert_equal(\n                func(edf[:, ::-1], edf.T),\n                func(edf[:, ::-1].copy(), edf.T.copy())\n            )\n            assert_equal(\n                func(edf, edf[::-1, :].T),\n                func(edf, edf[::-1, :].T.copy())\n            )\n            assert_equal(\n                func(edf, edf[:, ::-1].T),\n                func(edf, edf[:, ::-1].T.copy())\n            )\n            assert_equal(\n                func(edf[:edf.shape[0] // 2, :], edf[::2, :].T),\n                func(edf[:edf.shape[0] // 2, :].copy(), edf[::2, :].T.copy())\n            )\n            assert_equal(\n                func(edf[::2, :], edf[:edf.shape[0] // 2, :].T),\n                func(edf[::2, :].copy(), edf[:edf.shape[0] // 2, :].T.copy())\n            )\n\n        # syrk - different shape\n        for et in [np.float32, np.float64, np.complex64, np.complex128]:\n            edf = d.astype(et)\n            eddtf = ddt.astype(et)\n            edtdf = dtd.astype(et)\n            assert_equal(func(edf, edf.T), eddtf)\n            assert_equal(func(edf.T, edf), edtdf)\n\n    @pytest.mark.parametrize('func', (np.dot, np.matmul))\n    @pytest.mark.parametrize('dtype', 'ifdFD')\n    def test_no_dgemv(self, func, dtype):\n        # check vector arg for contiguous before gemv\n        # gh-12156\n        a = np.arange(8.0, dtype=dtype).reshape(2, 4)\n        b = np.broadcast_to(1., (4, 1))\n        ret1 = func(a, b)\n        ret2 = func(a, b.copy())\n        assert_equal(ret1, ret2)\n\n        ret1 = func(b.T, a.T)\n        ret2 = func(b.T.copy(), a.T)\n        assert_equal(ret1, ret2)\n\n        # check for unaligned data\n        dt = np.dtype(dtype)\n        a = np.zeros(8 * dt.itemsize // 2 + 1, dtype='int16')[1:].view(dtype)\n        a = a.reshape(2, 4)\n        b = a[0]\n        # make sure it is not aligned\n        assert_(a.__array_interface__['data'][0] % dt.itemsize != 0)\n        ret1 = func(a, b)\n        ret2 = func(a.copy(), b.copy())\n        assert_equal(ret1, ret2)\n\n        ret1 = func(b.T, a.T)\n        ret2 = func(b.T.copy(), a.T.copy())\n        assert_equal(ret1, ret2)\n\n    def test_dot(self):\n        a = np.array([[1, 0], [0, 1]])\n        b = np.array([[0, 1], [1, 0]])\n        c = np.array([[9, 1], [1, -9]])\n        # function versus methods\n        assert_equal(np.dot(a, b), a.dot(b))\n        assert_equal(np.dot(np.dot(a, b), c), a.dot(b).dot(c))\n\n        # test passing in an output array\n        c = np.zeros_like(a)\n        a.dot(b, c)\n        assert_equal(c, np.dot(a, b))\n\n        # test keyword args\n        c = np.zeros_like(a)\n        a.dot(b=b, out=c)\n        assert_equal(c, np.dot(a, b))\n\n    def test_dot_type_mismatch(self):\n        c = 1.\n        A = np.array((1,1), dtype='i,i')\n\n        assert_raises(TypeError, np.dot, c, A)\n        assert_raises(TypeError, np.dot, A, c)\n\n    def test_dot_out_mem_overlap(self):\n        np.random.seed(1)\n\n        # Test BLAS and non-BLAS code paths, including all dtypes\n        # that dot() supports\n        dtypes = [np.dtype(code) for code in np.typecodes['All']\n                  if code not in 'USVM']\n        for dtype in dtypes:\n            a = np.random.rand(3, 3).astype(dtype)\n\n            # Valid dot() output arrays must be aligned\n            b = _aligned_zeros((3, 3), dtype=dtype)\n            b[...] = np.random.rand(3, 3)\n\n            y = np.dot(a, b)\n            x = np.dot(a, b, out=b)\n            assert_equal(x, y, err_msg=repr(dtype))\n\n            # Check invalid output array\n            assert_raises(ValueError, np.dot, a, b, out=b[::2])\n            assert_raises(ValueError, np.dot, a, b, out=b.T)\n\n    def test_dot_matmul_out(self):\n        # gh-9641\n        class Sub(np.ndarray):\n            pass\n        a = np.ones((2, 2)).view(Sub)\n        b = np.ones((2, 2)).view(Sub)\n        out = np.ones((2, 2))\n\n        # make sure out can be any ndarray (not only subclass of inputs)\n        np.dot(a, b, out=out)\n        np.matmul(a, b, out=out)\n\n    def test_dot_matmul_inner_array_casting_fails(self):\n\n        class A:\n            def __array__(self, *args, **kwargs):\n                raise NotImplementedError\n\n        # Don't override the error from calling __array__()\n        assert_raises(NotImplementedError, np.dot, A(), A())\n        assert_raises(NotImplementedError, np.matmul, A(), A())\n        assert_raises(NotImplementedError, np.inner, A(), A())\n\n    def test_matmul_out(self):\n        # overlapping memory\n        a = np.arange(18).reshape(2, 3, 3)\n        b = np.matmul(a, a)\n        c = np.matmul(a, a, out=a)\n        assert_(c is a)\n        assert_equal(c, b)\n        a = np.arange(18).reshape(2, 3, 3)\n        c = np.matmul(a, a, out=a[::-1, ...])\n        assert_(c.base is a.base)\n        assert_equal(c, b)\n\n    def test_diagonal(self):\n        a = np.arange(12).reshape((3, 4))\n        assert_equal(a.diagonal(), [0, 5, 10])\n        assert_equal(a.diagonal(0), [0, 5, 10])\n        assert_equal(a.diagonal(1), [1, 6, 11])\n        assert_equal(a.diagonal(-1), [4, 9])\n        assert_raises(np.AxisError, a.diagonal, axis1=0, axis2=5)\n        assert_raises(np.AxisError, a.diagonal, axis1=5, axis2=0)\n        assert_raises(np.AxisError, a.diagonal, axis1=5, axis2=5)\n        assert_raises(ValueError, a.diagonal, axis1=1, axis2=1)\n\n        b = np.arange(8).reshape((2, 2, 2))\n        assert_equal(b.diagonal(), [[0, 6], [1, 7]])\n        assert_equal(b.diagonal(0), [[0, 6], [1, 7]])\n        assert_equal(b.diagonal(1), [[2], [3]])\n        assert_equal(b.diagonal(-1), [[4], [5]])\n        assert_raises(ValueError, b.diagonal, axis1=0, axis2=0)\n        assert_equal(b.diagonal(0, 1, 2), [[0, 3], [4, 7]])\n        assert_equal(b.diagonal(0, 0, 1), [[0, 6], [1, 7]])\n        assert_equal(b.diagonal(offset=1, axis1=0, axis2=2), [[1], [3]])\n        # Order of axis argument doesn't matter:\n        assert_equal(b.diagonal(0, 2, 1), [[0, 3], [4, 7]])\n\n    def test_diagonal_view_notwriteable(self):\n        a = np.eye(3).diagonal()\n        assert_(not a.flags.writeable)\n        assert_(not a.flags.owndata)\n\n        a = np.diagonal(np.eye(3))\n        assert_(not a.flags.writeable)\n        assert_(not a.flags.owndata)\n\n        a = np.diag(np.eye(3))\n        assert_(not a.flags.writeable)\n        assert_(not a.flags.owndata)\n\n    def test_diagonal_memleak(self):\n        # Regression test for a bug that crept in at one point\n        a = np.zeros((100, 100))\n        if HAS_REFCOUNT:\n            assert_(sys.getrefcount(a) < 50)\n        for i in range(100):\n            a.diagonal()\n        if HAS_REFCOUNT:\n            assert_(sys.getrefcount(a) < 50)\n\n    def test_size_zero_memleak(self):\n        # Regression test for issue 9615\n        # Exercises a special-case code path for dot products of length\n        # zero in cblasfuncs (making it is specific to floating dtypes).\n        a = np.array([], dtype=np.float64)\n        x = np.array(2.0)\n        for _ in range(100):\n            np.dot(a, a, out=x)\n        if HAS_REFCOUNT:\n            assert_(sys.getrefcount(x) < 50)\n\n    def test_trace(self):\n        a = np.arange(12).reshape((3, 4))\n        assert_equal(a.trace(), 15)\n        assert_equal(a.trace(0), 15)\n        assert_equal(a.trace(1), 18)\n        assert_equal(a.trace(-1), 13)\n\n        b = np.arange(8).reshape((2, 2, 2))\n        assert_equal(b.trace(), [6, 8])\n        assert_equal(b.trace(0), [6, 8])\n        assert_equal(b.trace(1), [2, 3])\n        assert_equal(b.trace(-1), [4, 5])\n        assert_equal(b.trace(0, 0, 1), [6, 8])\n        assert_equal(b.trace(0, 0, 2), [5, 9])\n        assert_equal(b.trace(0, 1, 2), [3, 11])\n        assert_equal(b.trace(offset=1, axis1=0, axis2=2), [1, 3])\n\n    def test_trace_subclass(self):\n        # The class would need to overwrite trace to ensure single-element\n        # output also has the right subclass.\n        class MyArray(np.ndarray):\n            pass\n\n        b = np.arange(8).reshape((2, 2, 2)).view(MyArray)\n        t = b.trace()\n        assert_(isinstance(t, MyArray))\n\n    def test_put(self):\n        icodes = np.typecodes['AllInteger']\n        fcodes = np.typecodes['AllFloat']\n        for dt in icodes + fcodes + 'O':\n            tgt = np.array([0, 1, 0, 3, 0, 5], dtype=dt)\n\n            # test 1-d\n            a = np.zeros(6, dtype=dt)\n            a.put([1, 3, 5], [1, 3, 5])\n            assert_equal(a, tgt)\n\n            # test 2-d\n            a = np.zeros((2, 3), dtype=dt)\n            a.put([1, 3, 5], [1, 3, 5])\n            assert_equal(a, tgt.reshape(2, 3))\n\n        for dt in '?':\n            tgt = np.array([False, True, False, True, False, True], dtype=dt)\n\n            # test 1-d\n            a = np.zeros(6, dtype=dt)\n            a.put([1, 3, 5], [True]*3)\n            assert_equal(a, tgt)\n\n            # test 2-d\n            a = np.zeros((2, 3), dtype=dt)\n            a.put([1, 3, 5], [True]*3)\n            assert_equal(a, tgt.reshape(2, 3))\n\n        # check must be writeable\n        a = np.zeros(6)\n        a.flags.writeable = False\n        assert_raises(ValueError, a.put, [1, 3, 5], [1, 3, 5])\n\n        # when calling np.put, make sure a\n        # TypeError is raised if the object\n        # isn't an ndarray\n        bad_array = [1, 2, 3]\n        assert_raises(TypeError, np.put, bad_array, [0, 2], 5)\n\n    def test_ravel(self):\n        a = np.array([[0, 1], [2, 3]])\n        assert_equal(a.ravel(), [0, 1, 2, 3])\n        assert_(not a.ravel().flags.owndata)\n        assert_equal(a.ravel('F'), [0, 2, 1, 3])\n        assert_equal(a.ravel(order='C'), [0, 1, 2, 3])\n        assert_equal(a.ravel(order='F'), [0, 2, 1, 3])\n        assert_equal(a.ravel(order='A'), [0, 1, 2, 3])\n        assert_(not a.ravel(order='A').flags.owndata)\n        assert_equal(a.ravel(order='K'), [0, 1, 2, 3])\n        assert_(not a.ravel(order='K').flags.owndata)\n        assert_equal(a.ravel(), a.reshape(-1))\n\n        a = np.array([[0, 1], [2, 3]], order='F')\n        assert_equal(a.ravel(), [0, 1, 2, 3])\n        assert_equal(a.ravel(order='A'), [0, 2, 1, 3])\n        assert_equal(a.ravel(order='K'), [0, 2, 1, 3])\n        assert_(not a.ravel(order='A').flags.owndata)\n        assert_(not a.ravel(order='K').flags.owndata)\n        assert_equal(a.ravel(), a.reshape(-1))\n        assert_equal(a.ravel(order='A'), a.reshape(-1, order='A'))\n\n        a = np.array([[0, 1], [2, 3]])[::-1, :]\n        assert_equal(a.ravel(), [2, 3, 0, 1])\n        assert_equal(a.ravel(order='C'), [2, 3, 0, 1])\n        assert_equal(a.ravel(order='F'), [2, 0, 3, 1])\n        assert_equal(a.ravel(order='A'), [2, 3, 0, 1])\n        # 'K' doesn't reverse the axes of negative strides\n        assert_equal(a.ravel(order='K'), [2, 3, 0, 1])\n        assert_(a.ravel(order='K').flags.owndata)\n\n        # Test simple 1-d copy behaviour:\n        a = np.arange(10)[::2]\n        assert_(a.ravel('K').flags.owndata)\n        assert_(a.ravel('C').flags.owndata)\n        assert_(a.ravel('F').flags.owndata)\n\n        # Not contiguous and 1-sized axis with non matching stride\n        a = np.arange(2**3 * 2)[::2]\n        a = a.reshape(2, 1, 2, 2).swapaxes(-1, -2)\n        strides = list(a.strides)\n        strides[1] = 123\n        a.strides = strides\n        assert_(a.ravel(order='K').flags.owndata)\n        assert_equal(a.ravel('K'), np.arange(0, 15, 2))\n\n        # contiguous and 1-sized axis with non matching stride works:\n        a = np.arange(2**3)\n        a = a.reshape(2, 1, 2, 2).swapaxes(-1, -2)\n        strides = list(a.strides)\n        strides[1] = 123\n        a.strides = strides\n        assert_(np.may_share_memory(a.ravel(order='K'), a))\n        assert_equal(a.ravel(order='K'), np.arange(2**3))\n\n        # Test negative strides (not very interesting since non-contiguous):\n        a = np.arange(4)[::-1].reshape(2, 2)\n        assert_(a.ravel(order='C').flags.owndata)\n        assert_(a.ravel(order='K').flags.owndata)\n        assert_equal(a.ravel('C'), [3, 2, 1, 0])\n        assert_equal(a.ravel('K'), [3, 2, 1, 0])\n\n        # 1-element tidy strides test (NPY_RELAXED_STRIDES_CHECKING):\n        a = np.array([[1]])\n        a.strides = (123, 432)\n        # If the stride is not 8, NPY_RELAXED_STRIDES_CHECKING is messing\n        # them up on purpose:\n        if np.ones(1).strides == (8,):\n            assert_(np.may_share_memory(a.ravel('K'), a))\n            assert_equal(a.ravel('K').strides, (a.dtype.itemsize,))\n\n        for order in ('C', 'F', 'A', 'K'):\n            # 0-d corner case:\n            a = np.array(0)\n            assert_equal(a.ravel(order), [0])\n            assert_(np.may_share_memory(a.ravel(order), a))\n\n        # Test that certain non-inplace ravels work right (mostly) for 'K':\n        b = np.arange(2**4 * 2)[::2].reshape(2, 2, 2, 2)\n        a = b[..., ::2]\n        assert_equal(a.ravel('K'), [0, 4, 8, 12, 16, 20, 24, 28])\n        assert_equal(a.ravel('C'), [0, 4, 8, 12, 16, 20, 24, 28])\n        assert_equal(a.ravel('A'), [0, 4, 8, 12, 16, 20, 24, 28])\n        assert_equal(a.ravel('F'), [0, 16, 8, 24, 4, 20, 12, 28])\n\n        a = b[::2, ...]\n        assert_equal(a.ravel('K'), [0, 2, 4, 6, 8, 10, 12, 14])\n        assert_equal(a.ravel('C'), [0, 2, 4, 6, 8, 10, 12, 14])\n        assert_equal(a.ravel('A'), [0, 2, 4, 6, 8, 10, 12, 14])\n        assert_equal(a.ravel('F'), [0, 8, 4, 12, 2, 10, 6, 14])\n\n    def test_ravel_subclass(self):\n        class ArraySubclass(np.ndarray):\n            pass\n\n        a = np.arange(10).view(ArraySubclass)\n        assert_(isinstance(a.ravel('C'), ArraySubclass))\n        assert_(isinstance(a.ravel('F'), ArraySubclass))\n        assert_(isinstance(a.ravel('A'), ArraySubclass))\n        assert_(isinstance(a.ravel('K'), ArraySubclass))\n\n        a = np.arange(10)[::2].view(ArraySubclass)\n        assert_(isinstance(a.ravel('C'), ArraySubclass))\n        assert_(isinstance(a.ravel('F'), ArraySubclass))\n        assert_(isinstance(a.ravel('A'), ArraySubclass))\n        assert_(isinstance(a.ravel('K'), ArraySubclass))\n\n    def test_swapaxes(self):\n        a = np.arange(1*2*3*4).reshape(1, 2, 3, 4).copy()\n        idx = np.indices(a.shape)\n        assert_(a.flags['OWNDATA'])\n        b = a.copy()\n        # check exceptions\n        assert_raises(np.AxisError, a.swapaxes, -5, 0)\n        assert_raises(np.AxisError, a.swapaxes, 4, 0)\n        assert_raises(np.AxisError, a.swapaxes, 0, -5)\n        assert_raises(np.AxisError, a.swapaxes, 0, 4)\n\n        for i in range(-4, 4):\n            for j in range(-4, 4):\n                for k, src in enumerate((a, b)):\n                    c = src.swapaxes(i, j)\n                    # check shape\n                    shape = list(src.shape)\n                    shape[i] = src.shape[j]\n                    shape[j] = src.shape[i]\n                    assert_equal(c.shape, shape, str((i, j, k)))\n                    # check array contents\n                    i0, i1, i2, i3 = [dim-1 for dim in c.shape]\n                    j0, j1, j2, j3 = [dim-1 for dim in src.shape]\n                    assert_equal(src[idx[j0], idx[j1], idx[j2], idx[j3]],\n                                 c[idx[i0], idx[i1], idx[i2], idx[i3]],\n                                 str((i, j, k)))\n                    # check a view is always returned, gh-5260\n                    assert_(not c.flags['OWNDATA'], str((i, j, k)))\n                    # check on non-contiguous input array\n                    if k == 1:\n                        b = c\n\n    def test_conjugate(self):\n        a = np.array([1-1j, 1+1j, 23+23.0j])\n        ac = a.conj()\n        assert_equal(a.real, ac.real)\n        assert_equal(a.imag, -ac.imag)\n        assert_equal(ac, a.conjugate())\n        assert_equal(ac, np.conjugate(a))\n\n        a = np.array([1-1j, 1+1j, 23+23.0j], 'F')\n        ac = a.conj()\n        assert_equal(a.real, ac.real)\n        assert_equal(a.imag, -ac.imag)\n        assert_equal(ac, a.conjugate())\n        assert_equal(ac, np.conjugate(a))\n\n        a = np.array([1, 2, 3])\n        ac = a.conj()\n        assert_equal(a, ac)\n        assert_equal(ac, a.conjugate())\n        assert_equal(ac, np.conjugate(a))\n\n        a = np.array([1.0, 2.0, 3.0])\n        ac = a.conj()\n        assert_equal(a, ac)\n        assert_equal(ac, a.conjugate())\n        assert_equal(ac, np.conjugate(a))\n\n        a = np.array([1-1j, 1+1j, 1, 2.0], object)\n        ac = a.conj()\n        assert_equal(ac, [k.conjugate() for k in a])\n        assert_equal(ac, a.conjugate())\n        assert_equal(ac, np.conjugate(a))\n\n        a = np.array([1-1j, 1, 2.0, 'f'], object)\n        assert_raises(TypeError, lambda: a.conj())\n        assert_raises(TypeError, lambda: a.conjugate())\n\n    def test__complex__(self):\n        dtypes = ['i1', 'i2', 'i4', 'i8',\n                  'u1', 'u2', 'u4', 'u8',\n                  'f', 'd', 'g', 'F', 'D', 'G',\n                  '?', 'O']\n        for dt in dtypes:\n            a = np.array(7, dtype=dt)\n            b = np.array([7], dtype=dt)\n            c = np.array([[[[[7]]]]], dtype=dt)\n\n            msg = 'dtype: {0}'.format(dt)\n            ap = complex(a)\n            assert_equal(ap, a, msg)\n            bp = complex(b)\n            assert_equal(bp, b, msg)\n            cp = complex(c)\n            assert_equal(cp, c, msg)\n\n    def test__complex__should_not_work(self):\n        dtypes = ['i1', 'i2', 'i4', 'i8',\n                  'u1', 'u2', 'u4', 'u8',\n                  'f', 'd', 'g', 'F', 'D', 'G',\n                  '?', 'O']\n        for dt in dtypes:\n            a = np.array([1, 2, 3], dtype=dt)\n            assert_raises(TypeError, complex, a)\n\n        dt = np.dtype([('a', 'f8'), ('b', 'i1')])\n        b = np.array((1.0, 3), dtype=dt)\n        assert_raises(TypeError, complex, b)\n\n        c = np.array([(1.0, 3), (2e-3, 7)], dtype=dt)\n        assert_raises(TypeError, complex, c)\n\n        d = np.array('1+1j')\n        assert_raises(TypeError, complex, d)\n\n        e = np.array(['1+1j'], 'U')\n        assert_raises(TypeError, complex, e)\n\nclass TestCequenceMethods:\n    def test_array_contains(self):\n        assert_(4.0 in np.arange(16.).reshape(4,4))\n        assert_(20.0 not in np.arange(16.).reshape(4,4))\n\nclass TestBinop:\n    def test_inplace(self):\n        # test refcount 1 inplace conversion\n        assert_array_almost_equal(np.array([0.5]) * np.array([1.0, 2.0]),\n                                  [0.5, 1.0])\n\n        d = np.array([0.5, 0.5])[::2]\n        assert_array_almost_equal(d * (d * np.array([1.0, 2.0])),\n                                  [0.25, 0.5])\n\n        a = np.array([0.5])\n        b = np.array([0.5])\n        c = a + b\n        c = a - b\n        c = a * b\n        c = a / b\n        assert_equal(a, b)\n        assert_almost_equal(c, 1.)\n\n        c = a + b * 2. / b * a - a / b\n        assert_equal(a, b)\n        assert_equal(c, 0.5)\n\n        # true divide\n        a = np.array([5])\n        b = np.array([3])\n        c = (a * a) / b\n\n        assert_almost_equal(c, 25 / 3)\n        assert_equal(a, 5)\n        assert_equal(b, 3)\n\n    # ndarray.__rop__ always calls ufunc\n    # ndarray.__iop__ always calls ufunc\n    # ndarray.__op__, __rop__:\n    #   - defer if other has __array_ufunc__ and it is None\n    #           or other is not a subclass and has higher array priority\n    #   - else, call ufunc\n    def test_ufunc_binop_interaction(self):\n        # Python method name (without underscores)\n        #   -> (numpy ufunc, has_in_place_version, preferred_dtype)\n        ops = {\n            'add':      (np.add, True, float),\n            'sub':      (np.subtract, True, float),\n            'mul':      (np.multiply, True, float),\n            'truediv':  (np.true_divide, True, float),\n            'floordiv': (np.floor_divide, True, float),\n            'mod':      (np.remainder, True, float),\n            'divmod':   (np.divmod, False, float),\n            'pow':      (np.power, True, int),\n            'lshift':   (np.left_shift, True, int),\n            'rshift':   (np.right_shift, True, int),\n            'and':      (np.bitwise_and, True, int),\n            'xor':      (np.bitwise_xor, True, int),\n            'or':       (np.bitwise_or, True, int),\n            'matmul':   (np.matmul, False, float),\n            # 'ge':       (np.less_equal, False),\n            # 'gt':       (np.less, False),\n            # 'le':       (np.greater_equal, False),\n            # 'lt':       (np.greater, False),\n            # 'eq':       (np.equal, False),\n            # 'ne':       (np.not_equal, False),\n        }\n\n        class Coerced(Exception):\n            pass\n\n        def array_impl(self):\n            raise Coerced\n\n        def op_impl(self, other):\n            return \"forward\"\n\n        def rop_impl(self, other):\n            return \"reverse\"\n\n        def iop_impl(self, other):\n            return \"in-place\"\n\n        def array_ufunc_impl(self, ufunc, method, *args, **kwargs):\n            return (\"__array_ufunc__\", ufunc, method, args, kwargs)\n\n        # Create an object with the given base, in the given module, with a\n        # bunch of placeholder __op__ methods, and optionally a\n        # __array_ufunc__ and __array_priority__.\n        def make_obj(base, array_priority=False, array_ufunc=False,\n                     alleged_module=\"__main__\"):\n            class_namespace = {\"__array__\": array_impl}\n            if array_priority is not False:\n                class_namespace[\"__array_priority__\"] = array_priority\n            for op in ops:\n                class_namespace[\"__{0}__\".format(op)] = op_impl\n                class_namespace[\"__r{0}__\".format(op)] = rop_impl\n                class_namespace[\"__i{0}__\".format(op)] = iop_impl\n            if array_ufunc is not False:\n                class_namespace[\"__array_ufunc__\"] = array_ufunc\n            eval_namespace = {\"base\": base,\n                              \"class_namespace\": class_namespace,\n                              \"__name__\": alleged_module,\n                              }\n            MyType = eval(\"type('MyType', (base,), class_namespace)\",\n                          eval_namespace)\n            if issubclass(MyType, np.ndarray):\n                # Use this range to avoid special case weirdnesses around\n                # divide-by-0, pow(x, 2), overflow due to pow(big, big), etc.\n                return np.arange(3, 7).reshape(2, 2).view(MyType)\n            else:\n                return MyType()\n\n        def check(obj, binop_override_expected, ufunc_override_expected,\n                  inplace_override_expected, check_scalar=True):\n            for op, (ufunc, has_inplace, dtype) in ops.items():\n                err_msg = ('op: %s, ufunc: %s, has_inplace: %s, dtype: %s'\n                           % (op, ufunc, has_inplace, dtype))\n                check_objs = [np.arange(3, 7, dtype=dtype).reshape(2, 2)]\n                if check_scalar:\n                    check_objs.append(check_objs[0][0])\n                for arr in check_objs:\n                    arr_method = getattr(arr, \"__{0}__\".format(op))\n\n                    def first_out_arg(result):\n                        if op == \"divmod\":\n                            assert_(isinstance(result, tuple))\n                            return result[0]\n                        else:\n                            return result\n\n                    # arr __op__ obj\n                    if binop_override_expected:\n                        assert_equal(arr_method(obj), NotImplemented, err_msg)\n                    elif ufunc_override_expected:\n                        assert_equal(arr_method(obj)[0], \"__array_ufunc__\",\n                                     err_msg)\n                    else:\n                        if (isinstance(obj, np.ndarray) and\n                            (type(obj).__array_ufunc__ is\n                             np.ndarray.__array_ufunc__)):\n                            # __array__ gets ignored\n                            res = first_out_arg(arr_method(obj))\n                            assert_(res.__class__ is obj.__class__, err_msg)\n                        else:\n                            assert_raises((TypeError, Coerced),\n                                          arr_method, obj, err_msg=err_msg)\n                    # obj __op__ arr\n                    arr_rmethod = getattr(arr, \"__r{0}__\".format(op))\n                    if ufunc_override_expected:\n                        res = arr_rmethod(obj)\n                        assert_equal(res[0], \"__array_ufunc__\",\n                                     err_msg=err_msg)\n                        assert_equal(res[1], ufunc, err_msg=err_msg)\n                    else:\n                        if (isinstance(obj, np.ndarray) and\n                                (type(obj).__array_ufunc__ is\n                                 np.ndarray.__array_ufunc__)):\n                            # __array__ gets ignored\n                            res = first_out_arg(arr_rmethod(obj))\n                            assert_(res.__class__ is obj.__class__, err_msg)\n                        else:\n                            # __array_ufunc__ = \"asdf\" creates a TypeError\n                            assert_raises((TypeError, Coerced),\n                                          arr_rmethod, obj, err_msg=err_msg)\n\n                    # arr __iop__ obj\n                    # array scalars don't have in-place operators\n                    if has_inplace and isinstance(arr, np.ndarray):\n                        arr_imethod = getattr(arr, \"__i{0}__\".format(op))\n                        if inplace_override_expected:\n                            assert_equal(arr_method(obj), NotImplemented,\n                                         err_msg=err_msg)\n                        elif ufunc_override_expected:\n                            res = arr_imethod(obj)\n                            assert_equal(res[0], \"__array_ufunc__\", err_msg)\n                            assert_equal(res[1], ufunc, err_msg)\n                            assert_(type(res[-1][\"out\"]) is tuple, err_msg)\n                            assert_(res[-1][\"out\"][0] is arr, err_msg)\n                        else:\n                            if (isinstance(obj, np.ndarray) and\n                                    (type(obj).__array_ufunc__ is\n                                    np.ndarray.__array_ufunc__)):\n                                # __array__ gets ignored\n                                assert_(arr_imethod(obj) is arr, err_msg)\n                            else:\n                                assert_raises((TypeError, Coerced),\n                                              arr_imethod, obj,\n                                              err_msg=err_msg)\n\n                    op_fn = getattr(operator, op, None)\n                    if op_fn is None:\n                        op_fn = getattr(operator, op + \"_\", None)\n                    if op_fn is None:\n                        op_fn = getattr(builtins, op)\n                    assert_equal(op_fn(obj, arr), \"forward\", err_msg)\n                    if not isinstance(obj, np.ndarray):\n                        if binop_override_expected:\n                            assert_equal(op_fn(arr, obj), \"reverse\", err_msg)\n                        elif ufunc_override_expected:\n                            assert_equal(op_fn(arr, obj)[0], \"__array_ufunc__\",\n                                         err_msg)\n                    if ufunc_override_expected:\n                        assert_equal(ufunc(obj, arr)[0], \"__array_ufunc__\",\n                                     err_msg)\n\n        # No array priority, no array_ufunc -> nothing called\n        check(make_obj(object), False, False, False)\n        # Negative array priority, no array_ufunc -> nothing called\n        # (has to be very negative, because scalar priority is -1000000.0)\n        check(make_obj(object, array_priority=-2**30), False, False, False)\n        # Positive array priority, no array_ufunc -> binops and iops only\n        check(make_obj(object, array_priority=1), True, False, True)\n        # ndarray ignores array_priority for ndarray subclasses\n        check(make_obj(np.ndarray, array_priority=1), False, False, False,\n              check_scalar=False)\n        # Positive array_priority and array_ufunc -> array_ufunc only\n        check(make_obj(object, array_priority=1,\n                       array_ufunc=array_ufunc_impl), False, True, False)\n        check(make_obj(np.ndarray, array_priority=1,\n                       array_ufunc=array_ufunc_impl), False, True, False)\n        # array_ufunc set to None -> defer binops only\n        check(make_obj(object, array_ufunc=None), True, False, False)\n        check(make_obj(np.ndarray, array_ufunc=None), True, False, False,\n              check_scalar=False)\n\n    def test_ufunc_override_normalize_signature(self):\n        # gh-5674\n        class SomeClass:\n            def __array_ufunc__(self, ufunc, method, *inputs, **kw):\n                return kw\n\n        a = SomeClass()\n        kw = np.add(a, [1])\n        assert_('sig' not in kw and 'signature' not in kw)\n        kw = np.add(a, [1], sig='ii->i')\n        assert_('sig' not in kw and 'signature' in kw)\n        assert_equal(kw['signature'], 'ii->i')\n        kw = np.add(a, [1], signature='ii->i')\n        assert_('sig' not in kw and 'signature' in kw)\n        assert_equal(kw['signature'], 'ii->i')\n\n    def test_array_ufunc_index(self):\n        # Check that index is set appropriately, also if only an output\n        # is passed on (latter is another regression tests for github bug 4753)\n        # This also checks implicitly that 'out' is always a tuple.\n        class CheckIndex:\n            def __array_ufunc__(self, ufunc, method, *inputs, **kw):\n                for i, a in enumerate(inputs):\n                    if a is self:\n                        return i\n                # calls below mean we must be in an output.\n                for j, a in enumerate(kw['out']):\n                    if a is self:\n                        return (j,)\n\n        a = CheckIndex()\n        dummy = np.arange(2.)\n        # 1 input, 1 output\n        assert_equal(np.sin(a), 0)\n        assert_equal(np.sin(dummy, a), (0,))\n        assert_equal(np.sin(dummy, out=a), (0,))\n        assert_equal(np.sin(dummy, out=(a,)), (0,))\n        assert_equal(np.sin(a, a), 0)\n        assert_equal(np.sin(a, out=a), 0)\n        assert_equal(np.sin(a, out=(a,)), 0)\n        # 1 input, 2 outputs\n        assert_equal(np.modf(dummy, a), (0,))\n        assert_equal(np.modf(dummy, None, a), (1,))\n        assert_equal(np.modf(dummy, dummy, a), (1,))\n        assert_equal(np.modf(dummy, out=(a, None)), (0,))\n        assert_equal(np.modf(dummy, out=(a, dummy)), (0,))\n        assert_equal(np.modf(dummy, out=(None, a)), (1,))\n        assert_equal(np.modf(dummy, out=(dummy, a)), (1,))\n        assert_equal(np.modf(a, out=(dummy, a)), 0)\n        with assert_raises(TypeError):\n            # Out argument must be tuple, since there are multiple outputs\n            np.modf(dummy, out=a)\n\n        assert_raises(ValueError, np.modf, dummy, out=(a,))\n\n        # 2 inputs, 1 output\n        assert_equal(np.add(a, dummy), 0)\n        assert_equal(np.add(dummy, a), 1)\n        assert_equal(np.add(dummy, dummy, a), (0,))\n        assert_equal(np.add(dummy, a, a), 1)\n        assert_equal(np.add(dummy, dummy, out=a), (0,))\n        assert_equal(np.add(dummy, dummy, out=(a,)), (0,))\n        assert_equal(np.add(a, dummy, out=a), 0)\n\n    def test_out_override(self):\n        # regression test for github bug 4753\n        class OutClass(np.ndarray):\n            def __array_ufunc__(self, ufunc, method, *inputs, **kw):\n                if 'out' in kw:\n                    tmp_kw = kw.copy()\n                    tmp_kw.pop('out')\n                    func = getattr(ufunc, method)\n                    kw['out'][0][...] = func(*inputs, **tmp_kw)\n\n        A = np.array([0]).view(OutClass)\n        B = np.array([5])\n        C = np.array([6])\n        np.multiply(C, B, A)\n        assert_equal(A[0], 30)\n        assert_(isinstance(A, OutClass))\n        A[0] = 0\n        np.multiply(C, B, out=A)\n        assert_equal(A[0], 30)\n        assert_(isinstance(A, OutClass))\n\n    def test_pow_override_with_errors(self):\n        # regression test for gh-9112\n        class PowerOnly(np.ndarray):\n            def __array_ufunc__(self, ufunc, method, *inputs, **kw):\n                if ufunc is not np.power:\n                    raise NotImplementedError\n                return \"POWER!\"\n        # explicit cast to float, to ensure the fast power path is taken.\n        a = np.array(5., dtype=np.float64).view(PowerOnly)\n        assert_equal(a ** 2.5, \"POWER!\")\n        with assert_raises(NotImplementedError):\n            a ** 0.5\n        with assert_raises(NotImplementedError):\n            a ** 0\n        with assert_raises(NotImplementedError):\n            a ** 1\n        with assert_raises(NotImplementedError):\n            a ** -1\n        with assert_raises(NotImplementedError):\n            a ** 2\n\n    def test_pow_array_object_dtype(self):\n        # test pow on arrays of object dtype\n        class SomeClass:\n            def __init__(self, num=None):\n                self.num = num\n\n            # want to ensure a fast pow path is not taken\n            def __mul__(self, other):\n                raise AssertionError('__mul__ should not be called')\n\n            def __div__(self, other):\n                raise AssertionError('__div__ should not be called')\n\n            def __pow__(self, exp):\n                return SomeClass(num=self.num ** exp)\n\n            def __eq__(self, other):\n                if isinstance(other, SomeClass):\n                    return self.num == other.num\n\n            __rpow__ = __pow__\n\n        def pow_for(exp, arr):\n            return np.array([x ** exp for x in arr])\n\n        obj_arr = np.array([SomeClass(1), SomeClass(2), SomeClass(3)])\n\n        assert_equal(obj_arr ** 0.5, pow_for(0.5, obj_arr))\n        assert_equal(obj_arr ** 0, pow_for(0, obj_arr))\n        assert_equal(obj_arr ** 1, pow_for(1, obj_arr))\n        assert_equal(obj_arr ** -1, pow_for(-1, obj_arr))\n        assert_equal(obj_arr ** 2, pow_for(2, obj_arr))\n\n    def test_pos_array_ufunc_override(self):\n        class A(np.ndarray):\n            def __array_ufunc__(self, ufunc, method, *inputs, **kwargs):\n                return getattr(ufunc, method)(*[i.view(np.ndarray) for\n                                                i in inputs], **kwargs)\n        tst = np.array('foo').view(A)\n        with assert_raises(TypeError):\n            +tst\n\n\nclass TestTemporaryElide:\n    # elision is only triggered on relatively large arrays\n\n    def test_extension_incref_elide(self):\n        # test extension (e.g. cython) calling PyNumber_* slots without\n        # increasing the reference counts\n        #\n        # def incref_elide(a):\n        #    d = input.copy() # refcount 1\n        #    return d, d + d # PyNumber_Add without increasing refcount\n        from numpy.core._multiarray_tests import incref_elide\n        d = np.ones(100000)\n        orig, res = incref_elide(d)\n        d + d\n        # the return original should not be changed to an inplace operation\n        assert_array_equal(orig, d)\n        assert_array_equal(res, d + d)\n\n    def test_extension_incref_elide_stack(self):\n        # scanning if the refcount == 1 object is on the python stack to check\n        # that we are called directly from python is flawed as object may still\n        # be above the stack pointer and we have no access to the top of it\n        #\n        # def incref_elide_l(d):\n        #    return l[4] + l[4] # PyNumber_Add without increasing refcount\n        from numpy.core._multiarray_tests import incref_elide_l\n        # padding with 1 makes sure the object on the stack is not overwritten\n        l = [1, 1, 1, 1, np.ones(100000)]\n        res = incref_elide_l(l)\n        # the return original should not be changed to an inplace operation\n        assert_array_equal(l[4], np.ones(100000))\n        assert_array_equal(res, l[4] + l[4])\n\n    def test_temporary_with_cast(self):\n        # check that we don't elide into a temporary which would need casting\n        d = np.ones(200000, dtype=np.int64)\n        assert_equal(((d + d) + 2**222).dtype, np.dtype('O'))\n\n        r = ((d + d) / 2)\n        assert_equal(r.dtype, np.dtype('f8'))\n\n        r = np.true_divide((d + d), 2)\n        assert_equal(r.dtype, np.dtype('f8'))\n\n        r = ((d + d) / 2.)\n        assert_equal(r.dtype, np.dtype('f8'))\n\n        r = ((d + d) // 2)\n        assert_equal(r.dtype, np.dtype(np.int64))\n\n        # commutative elision into the astype result\n        f = np.ones(100000, dtype=np.float32)\n        assert_equal(((f + f) + f.astype(np.float64)).dtype, np.dtype('f8'))\n\n        # no elision into lower type\n        d = f.astype(np.float64)\n        assert_equal(((f + f) + d).dtype, d.dtype)\n        l = np.ones(100000, dtype=np.longdouble)\n        assert_equal(((d + d) + l).dtype, l.dtype)\n\n        # test unary abs with different output dtype\n        for dt in (np.complex64, np.complex128, np.clongdouble):\n            c = np.ones(100000, dtype=dt)\n            r = abs(c * 2.0)\n            assert_equal(r.dtype, np.dtype('f%d' % (c.itemsize // 2)))\n\n    def test_elide_broadcast(self):\n        # test no elision on broadcast to higher dimension\n        # only triggers elision code path in debug mode as triggering it in\n        # normal mode needs 256kb large matching dimension, so a lot of memory\n        d = np.ones((2000, 1), dtype=int)\n        b = np.ones((2000), dtype=bool)\n        r = (1 - d) + b\n        assert_equal(r, 1)\n        assert_equal(r.shape, (2000, 2000))\n\n    def test_elide_scalar(self):\n        # check inplace op does not create ndarray from scalars\n        a = np.bool_()\n        assert_(type(~(a & a)) is np.bool_)\n\n    def test_elide_scalar_readonly(self):\n        # The imaginary part of a real array is readonly. This needs to go\n        # through fast_scalar_power which is only called for powers of\n        # +1, -1, 0, 0.5, and 2, so use 2. Also need valid refcount for\n        # elision which can be gotten for the imaginary part of a real\n        # array. Should not error.\n        a = np.empty(100000, dtype=np.float64)\n        a.imag ** 2\n\n    def test_elide_readonly(self):\n        # don't try to elide readonly temporaries\n        r = np.asarray(np.broadcast_to(np.zeros(1), 100000).flat) * 0.0\n        assert_equal(r, 0)\n\n    def test_elide_updateifcopy(self):\n        a = np.ones(2**20)[::2]\n        b = a.flat.__array__() + 1\n        del b\n        assert_equal(a, 1)\n\n\nclass TestCAPI:\n    def test_IsPythonScalar(self):\n        from numpy.core._multiarray_tests import IsPythonScalar\n        assert_(IsPythonScalar(b'foobar'))\n        assert_(IsPythonScalar(1))\n        assert_(IsPythonScalar(2**80))\n        assert_(IsPythonScalar(2.))\n        assert_(IsPythonScalar(\"a\"))\n\n\nclass TestSubscripting:\n    def test_test_zero_rank(self):\n        x = np.array([1, 2, 3])\n        assert_(isinstance(x[0], np.int_))\n        assert_(type(x[0, ...]) is np.ndarray)\n\n\nclass TestPickling:\n    @pytest.mark.skipif(pickle.HIGHEST_PROTOCOL >= 5,\n                        reason=('this tests the error messages when trying to'\n                                'protocol 5 although it is not available'))\n    def test_correct_protocol5_error_message(self):\n        array = np.arange(10)\n\n        if sys.version_info[:2] in ((3, 6), (3, 7)):\n            # For the specific case of python3.6 and 3.7, raise a clear import\n            # error about the pickle5 backport when trying to use protocol=5\n            # without the pickle5 package\n            with pytest.raises(ImportError):\n                array.__reduce_ex__(5)\n\n        elif sys.version_info[:2] < (3, 6):\n            # when calling __reduce_ex__ explicitly with protocol=5 on python\n            # raise a ValueError saying that protocol 5 is not available for\n            # this python version\n            with pytest.raises(ValueError):\n                array.__reduce_ex__(5)\n\n    def test_record_array_with_object_dtype(self):\n        my_object = object()\n\n        arr_with_object = np.array(\n                [(my_object, 1, 2.0)],\n                dtype=[('a', object), ('b', int), ('c', float)])\n        arr_without_object = np.array(\n                [('xxx', 1, 2.0)],\n                dtype=[('a', str), ('b', int), ('c', float)])\n\n        for proto in range(2, pickle.HIGHEST_PROTOCOL + 1):\n            depickled_arr_with_object = pickle.loads(\n                    pickle.dumps(arr_with_object, protocol=proto))\n            depickled_arr_without_object = pickle.loads(\n                    pickle.dumps(arr_without_object, protocol=proto))\n\n            assert_equal(arr_with_object.dtype,\n                         depickled_arr_with_object.dtype)\n            assert_equal(arr_without_object.dtype,\n                         depickled_arr_without_object.dtype)\n\n    @pytest.mark.skipif(pickle.HIGHEST_PROTOCOL < 5,\n                        reason=\"requires pickle protocol 5\")\n    def test_f_contiguous_array(self):\n        f_contiguous_array = np.array([[1, 2, 3], [4, 5, 6]], order='F')\n        buffers = []\n\n        # When using pickle protocol 5, Fortran-contiguous arrays can be\n        # serialized using out-of-band buffers\n        bytes_string = pickle.dumps(f_contiguous_array, protocol=5,\n                                    buffer_callback=buffers.append)\n\n        assert len(buffers) > 0\n\n        depickled_f_contiguous_array = pickle.loads(bytes_string,\n                                                    buffers=buffers)\n\n        assert_equal(f_contiguous_array, depickled_f_contiguous_array)\n\n    def test_non_contiguous_array(self):\n        non_contiguous_array = np.arange(12).reshape(3, 4)[:, :2]\n        assert not non_contiguous_array.flags.c_contiguous\n        assert not non_contiguous_array.flags.f_contiguous\n\n        # make sure non-contiguous arrays can be pickled-depickled\n        # using any protocol\n        for proto in range(2, pickle.HIGHEST_PROTOCOL + 1):\n            depickled_non_contiguous_array = pickle.loads(\n                    pickle.dumps(non_contiguous_array, protocol=proto))\n\n            assert_equal(non_contiguous_array, depickled_non_contiguous_array)\n\n    def test_roundtrip(self):\n        for proto in range(2, pickle.HIGHEST_PROTOCOL + 1):\n            carray = np.array([[2, 9], [7, 0], [3, 8]])\n            DATA = [\n                carray,\n                np.transpose(carray),\n                np.array([('xxx', 1, 2.0)], dtype=[('a', (str, 3)), ('b', int),\n                                                   ('c', float)])\n            ]\n\n            refs = [weakref.ref(a) for a in DATA]\n            for a in DATA:\n                assert_equal(\n                        a, pickle.loads(pickle.dumps(a, protocol=proto)),\n                        err_msg=\"%r\" % a)\n            del a, DATA, carray\n            break_cycles()\n            # check for reference leaks (gh-12793)\n            for ref in refs:\n                assert ref() is None\n\n    def _loads(self, obj):\n        return pickle.loads(obj, encoding='latin1')\n\n    # version 0 pickles, using protocol=2 to pickle\n    # version 0 doesn't have a version field\n    def test_version0_int8(self):\n        s = b'\\x80\\x02cnumpy.core._internal\\n_reconstruct\\nq\\x01cnumpy\\nndarray\\nq\\x02K\\x00\\x85U\\x01b\\x87Rq\\x03(K\\x04\\x85cnumpy\\ndtype\\nq\\x04U\\x02i1K\\x00K\\x01\\x87Rq\\x05(U\\x01|NNJ\\xff\\xff\\xff\\xffJ\\xff\\xff\\xff\\xfftb\\x89U\\x04\\x01\\x02\\x03\\x04tb.'\n        a = np.array([1, 2, 3, 4], dtype=np.int8)\n        p = self._loads(s)\n        assert_equal(a, p)\n\n    def test_version0_float32(self):\n        s = b'\\x80\\x02cnumpy.core._internal\\n_reconstruct\\nq\\x01cnumpy\\nndarray\\nq\\x02K\\x00\\x85U\\x01b\\x87Rq\\x03(K\\x04\\x85cnumpy\\ndtype\\nq\\x04U\\x02f4K\\x00K\\x01\\x87Rq\\x05(U\\x01<NNJ\\xff\\xff\\xff\\xffJ\\xff\\xff\\xff\\xfftb\\x89U\\x10\\x00\\x00\\x80?\\x00\\x00\\x00@\\x00\\x00@@\\x00\\x00\\x80@tb.'\n        a = np.array([1.0, 2.0, 3.0, 4.0], dtype=np.float32)\n        p = self._loads(s)\n        assert_equal(a, p)\n\n    def test_version0_object(self):\n        s = b'\\x80\\x02cnumpy.core._internal\\n_reconstruct\\nq\\x01cnumpy\\nndarray\\nq\\x02K\\x00\\x85U\\x01b\\x87Rq\\x03(K\\x02\\x85cnumpy\\ndtype\\nq\\x04U\\x02O8K\\x00K\\x01\\x87Rq\\x05(U\\x01|NNJ\\xff\\xff\\xff\\xffJ\\xff\\xff\\xff\\xfftb\\x89]q\\x06(}q\\x07U\\x01aK\\x01s}q\\x08U\\x01bK\\x02setb.'\n        a = np.array([{'a': 1}, {'b': 2}])\n        p = self._loads(s)\n        assert_equal(a, p)\n\n    # version 1 pickles, using protocol=2 to pickle\n    def test_version1_int8(self):\n        s = b'\\x80\\x02cnumpy.core._internal\\n_reconstruct\\nq\\x01cnumpy\\nndarray\\nq\\x02K\\x00\\x85U\\x01b\\x87Rq\\x03(K\\x01K\\x04\\x85cnumpy\\ndtype\\nq\\x04U\\x02i1K\\x00K\\x01\\x87Rq\\x05(K\\x01U\\x01|NNJ\\xff\\xff\\xff\\xffJ\\xff\\xff\\xff\\xfftb\\x89U\\x04\\x01\\x02\\x03\\x04tb.'\n        a = np.array([1, 2, 3, 4], dtype=np.int8)\n        p = self._loads(s)\n        assert_equal(a, p)\n\n    def test_version1_float32(self):\n        s = b'\\x80\\x02cnumpy.core._internal\\n_reconstruct\\nq\\x01cnumpy\\nndarray\\nq\\x02K\\x00\\x85U\\x01b\\x87Rq\\x03(K\\x01K\\x04\\x85cnumpy\\ndtype\\nq\\x04U\\x02f4K\\x00K\\x01\\x87Rq\\x05(K\\x01U\\x01<NNJ\\xff\\xff\\xff\\xffJ\\xff\\xff\\xff\\xfftb\\x89U\\x10\\x00\\x00\\x80?\\x00\\x00\\x00@\\x00\\x00@@\\x00\\x00\\x80@tb.'\n        a = np.array([1.0, 2.0, 3.0, 4.0], dtype=np.float32)\n        p = self._loads(s)\n        assert_equal(a, p)\n\n    def test_version1_object(self):\n        s = b'\\x80\\x02cnumpy.core._internal\\n_reconstruct\\nq\\x01cnumpy\\nndarray\\nq\\x02K\\x00\\x85U\\x01b\\x87Rq\\x03(K\\x01K\\x02\\x85cnumpy\\ndtype\\nq\\x04U\\x02O8K\\x00K\\x01\\x87Rq\\x05(K\\x01U\\x01|NNJ\\xff\\xff\\xff\\xffJ\\xff\\xff\\xff\\xfftb\\x89]q\\x06(}q\\x07U\\x01aK\\x01s}q\\x08U\\x01bK\\x02setb.'\n        a = np.array([{'a': 1}, {'b': 2}])\n        p = self._loads(s)\n        assert_equal(a, p)\n\n    def test_subarray_int_shape(self):\n        s = b\"cnumpy.core.multiarray\\n_reconstruct\\np0\\n(cnumpy\\nndarray\\np1\\n(I0\\ntp2\\nS'b'\\np3\\ntp4\\nRp5\\n(I1\\n(I1\\ntp6\\ncnumpy\\ndtype\\np7\\n(S'V6'\\np8\\nI0\\nI1\\ntp9\\nRp10\\n(I3\\nS'|'\\np11\\nN(S'a'\\np12\\ng3\\ntp13\\n(dp14\\ng12\\n(g7\\n(S'V4'\\np15\\nI0\\nI1\\ntp16\\nRp17\\n(I3\\nS'|'\\np18\\n(g7\\n(S'i1'\\np19\\nI0\\nI1\\ntp20\\nRp21\\n(I3\\nS'|'\\np22\\nNNNI-1\\nI-1\\nI0\\ntp23\\nb(I2\\nI2\\ntp24\\ntp25\\nNNI4\\nI1\\nI0\\ntp26\\nbI0\\ntp27\\nsg3\\n(g7\\n(S'V2'\\np28\\nI0\\nI1\\ntp29\\nRp30\\n(I3\\nS'|'\\np31\\n(g21\\nI2\\ntp32\\nNNI2\\nI1\\nI0\\ntp33\\nbI4\\ntp34\\nsI6\\nI1\\nI0\\ntp35\\nbI00\\nS'\\\\x01\\\\x01\\\\x01\\\\x01\\\\x01\\\\x02'\\np36\\ntp37\\nb.\"\n        a = np.array([(1, (1, 2))], dtype=[('a', 'i1', (2, 2)), ('b', 'i1', 2)])\n        p = self._loads(s)\n        assert_equal(a, p)\n\n    def test_datetime64_byteorder(self):\n        original = np.array([['2015-02-24T00:00:00.000000000']], dtype='datetime64[ns]')\n\n        original_byte_reversed = original.copy(order='K')\n        original_byte_reversed.dtype = original_byte_reversed.dtype.newbyteorder('S')\n        original_byte_reversed.byteswap(inplace=True)\n\n        new = pickle.loads(pickle.dumps(original_byte_reversed))\n\n        assert_equal(original.dtype, new.dtype)\n\n\nclass TestFancyIndexing:\n    def test_list(self):\n        x = np.ones((1, 1))\n        x[:, [0]] = 2.0\n        assert_array_equal(x, np.array([[2.0]]))\n\n        x = np.ones((1, 1, 1))\n        x[:, :, [0]] = 2.0\n        assert_array_equal(x, np.array([[[2.0]]]))\n\n    def test_tuple(self):\n        x = np.ones((1, 1))\n        x[:, (0,)] = 2.0\n        assert_array_equal(x, np.array([[2.0]]))\n        x = np.ones((1, 1, 1))\n        x[:, :, (0,)] = 2.0\n        assert_array_equal(x, np.array([[[2.0]]]))\n\n    def test_mask(self):\n        x = np.array([1, 2, 3, 4])\n        m = np.array([0, 1, 0, 0], bool)\n        assert_array_equal(x[m], np.array([2]))\n\n    def test_mask2(self):\n        x = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])\n        m = np.array([0, 1], bool)\n        m2 = np.array([[0, 1, 0, 0], [1, 0, 0, 0]], bool)\n        m3 = np.array([[0, 1, 0, 0], [0, 0, 0, 0]], bool)\n        assert_array_equal(x[m], np.array([[5, 6, 7, 8]]))\n        assert_array_equal(x[m2], np.array([2, 5]))\n        assert_array_equal(x[m3], np.array([2]))\n\n    def test_assign_mask(self):\n        x = np.array([1, 2, 3, 4])\n        m = np.array([0, 1, 0, 0], bool)\n        x[m] = 5\n        assert_array_equal(x, np.array([1, 5, 3, 4]))\n\n    def test_assign_mask2(self):\n        xorig = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])\n        m = np.array([0, 1], bool)\n        m2 = np.array([[0, 1, 0, 0], [1, 0, 0, 0]], bool)\n        m3 = np.array([[0, 1, 0, 0], [0, 0, 0, 0]], bool)\n        x = xorig.copy()\n        x[m] = 10\n        assert_array_equal(x, np.array([[1, 2, 3, 4], [10, 10, 10, 10]]))\n        x = xorig.copy()\n        x[m2] = 10\n        assert_array_equal(x, np.array([[1, 10, 3, 4], [10, 6, 7, 8]]))\n        x = xorig.copy()\n        x[m3] = 10\n        assert_array_equal(x, np.array([[1, 10, 3, 4], [5, 6, 7, 8]]))\n\n\nclass TestStringCompare:\n    def test_string(self):\n        g1 = np.array([\"This\", \"is\", \"example\"])\n        g2 = np.array([\"This\", \"was\", \"example\"])\n        assert_array_equal(g1 == g2, [g1[i] == g2[i] for i in [0, 1, 2]])\n        assert_array_equal(g1 != g2, [g1[i] != g2[i] for i in [0, 1, 2]])\n        assert_array_equal(g1 <= g2, [g1[i] <= g2[i] for i in [0, 1, 2]])\n        assert_array_equal(g1 >= g2, [g1[i] >= g2[i] for i in [0, 1, 2]])\n        assert_array_equal(g1 < g2, [g1[i] < g2[i] for i in [0, 1, 2]])\n        assert_array_equal(g1 > g2, [g1[i] > g2[i] for i in [0, 1, 2]])\n\n    def test_mixed(self):\n        g1 = np.array([\"spam\", \"spa\", \"spammer\", \"and eggs\"])\n        g2 = \"spam\"\n        assert_array_equal(g1 == g2, [x == g2 for x in g1])\n        assert_array_equal(g1 != g2, [x != g2 for x in g1])\n        assert_array_equal(g1 < g2, [x < g2 for x in g1])\n        assert_array_equal(g1 > g2, [x > g2 for x in g1])\n        assert_array_equal(g1 <= g2, [x <= g2 for x in g1])\n        assert_array_equal(g1 >= g2, [x >= g2 for x in g1])\n\n    def test_unicode(self):\n        g1 = np.array([u\"This\", u\"is\", u\"example\"])\n        g2 = np.array([u\"This\", u\"was\", u\"example\"])\n        assert_array_equal(g1 == g2, [g1[i] == g2[i] for i in [0, 1, 2]])\n        assert_array_equal(g1 != g2, [g1[i] != g2[i] for i in [0, 1, 2]])\n        assert_array_equal(g1 <= g2, [g1[i] <= g2[i] for i in [0, 1, 2]])\n        assert_array_equal(g1 >= g2, [g1[i] >= g2[i] for i in [0, 1, 2]])\n        assert_array_equal(g1 < g2,  [g1[i] < g2[i] for i in [0, 1, 2]])\n        assert_array_equal(g1 > g2,  [g1[i] > g2[i] for i in [0, 1, 2]])\n\n\nclass TestArgmax:\n\n    nan_arr = [\n        ([0, 1, 2, 3, np.nan], 4),\n        ([0, 1, 2, np.nan, 3], 3),\n        ([np.nan, 0, 1, 2, 3], 0),\n        ([np.nan, 0, np.nan, 2, 3], 0),\n        ([0, 1, 2, 3, complex(0, np.nan)], 4),\n        ([0, 1, 2, 3, complex(np.nan, 0)], 4),\n        ([0, 1, 2, complex(np.nan, 0), 3], 3),\n        ([0, 1, 2, complex(0, np.nan), 3], 3),\n        ([complex(0, np.nan), 0, 1, 2, 3], 0),\n        ([complex(np.nan, np.nan), 0, 1, 2, 3], 0),\n        ([complex(np.nan, 0), complex(np.nan, 2), complex(np.nan, 1)], 0),\n        ([complex(np.nan, np.nan), complex(np.nan, 2), complex(np.nan, 1)], 0),\n        ([complex(np.nan, 0), complex(np.nan, 2), complex(np.nan, np.nan)], 0),\n\n        ([complex(0, 0), complex(0, 2), complex(0, 1)], 1),\n        ([complex(1, 0), complex(0, 2), complex(0, 1)], 0),\n        ([complex(1, 0), complex(0, 2), complex(1, 1)], 2),\n\n        ([np.datetime64('1923-04-14T12:43:12'),\n          np.datetime64('1994-06-21T14:43:15'),\n          np.datetime64('2001-10-15T04:10:32'),\n          np.datetime64('1995-11-25T16:02:16'),\n          np.datetime64('2005-01-04T03:14:12'),\n          np.datetime64('2041-12-03T14:05:03')], 5),\n        ([np.datetime64('1935-09-14T04:40:11'),\n          np.datetime64('1949-10-12T12:32:11'),\n          np.datetime64('2010-01-03T05:14:12'),\n          np.datetime64('2015-11-20T12:20:59'),\n          np.datetime64('1932-09-23T10:10:13'),\n          np.datetime64('2014-10-10T03:50:30')], 3),\n        # Assorted tests with NaTs\n        ([np.datetime64('NaT'),\n          np.datetime64('NaT'),\n          np.datetime64('2010-01-03T05:14:12'),\n          np.datetime64('NaT'),\n          np.datetime64('2015-09-23T10:10:13'),\n          np.datetime64('1932-10-10T03:50:30')], 0),\n        ([np.datetime64('2059-03-14T12:43:12'),\n          np.datetime64('1996-09-21T14:43:15'),\n          np.datetime64('NaT'),\n          np.datetime64('2022-12-25T16:02:16'),\n          np.datetime64('1963-10-04T03:14:12'),\n          np.datetime64('2013-05-08T18:15:23')], 2),\n        ([np.timedelta64(2, 's'),\n          np.timedelta64(1, 's'),\n          np.timedelta64('NaT', 's'),\n          np.timedelta64(3, 's')], 2),\n        ([np.timedelta64('NaT', 's')] * 3, 0),\n\n        ([timedelta(days=5, seconds=14), timedelta(days=2, seconds=35),\n          timedelta(days=-1, seconds=23)], 0),\n        ([timedelta(days=1, seconds=43), timedelta(days=10, seconds=5),\n          timedelta(days=5, seconds=14)], 1),\n        ([timedelta(days=10, seconds=24), timedelta(days=10, seconds=5),\n          timedelta(days=10, seconds=43)], 2),\n\n        ([False, False, False, False, True], 4),\n        ([False, False, False, True, False], 3),\n        ([True, False, False, False, False], 0),\n        ([True, False, True, False, False], 0),\n    ]\n\n    def test_all(self):\n        a = np.random.normal(0, 1, (4, 5, 6, 7, 8))\n        for i in range(a.ndim):\n            amax = a.max(i)\n            aargmax = a.argmax(i)\n            axes = list(range(a.ndim))\n            axes.remove(i)\n            assert_(np.all(amax == aargmax.choose(*a.transpose(i,*axes))))\n\n    def test_combinations(self):\n        for arr, pos in self.nan_arr:\n            with suppress_warnings() as sup:\n                sup.filter(RuntimeWarning,\n                           \"invalid value encountered in reduce\")\n                max_val = np.max(arr)\n\n            assert_equal(np.argmax(arr), pos, err_msg=\"%r\" % arr)\n            assert_equal(arr[np.argmax(arr)], max_val, err_msg=\"%r\" % arr)\n\n    def test_output_shape(self):\n        # see also gh-616\n        a = np.ones((10, 5))\n        # Check some simple shape mismatches\n        out = np.ones(11, dtype=np.int_)\n        assert_raises(ValueError, a.argmax, -1, out)\n\n        out = np.ones((2, 5), dtype=np.int_)\n        assert_raises(ValueError, a.argmax, -1, out)\n\n        # these could be relaxed possibly (used to allow even the previous)\n        out = np.ones((1, 10), dtype=np.int_)\n        assert_raises(ValueError, a.argmax, -1, out)\n\n        out = np.ones(10, dtype=np.int_)\n        a.argmax(-1, out=out)\n        assert_equal(out, a.argmax(-1))\n\n    def test_argmax_unicode(self):\n        d = np.zeros(6031, dtype='<U9')\n        d[5942] = \"as\"\n        assert_equal(d.argmax(), 5942)\n\n    def test_np_vs_ndarray(self):\n        # make sure both ndarray.argmax and numpy.argmax support out/axis args\n        a = np.random.normal(size=(2,3))\n\n        # check positional args\n        out1 = np.zeros(2, dtype=int)\n        out2 = np.zeros(2, dtype=int)\n        assert_equal(a.argmax(1, out1), np.argmax(a, 1, out2))\n        assert_equal(out1, out2)\n\n        # check keyword args\n        out1 = np.zeros(3, dtype=int)\n        out2 = np.zeros(3, dtype=int)\n        assert_equal(a.argmax(out=out1, axis=0), np.argmax(a, out=out2, axis=0))\n        assert_equal(out1, out2)\n\n    @pytest.mark.leaks_references(reason=\"replaces None with NULL.\")\n    def test_object_argmax_with_NULLs(self):\n        # See gh-6032\n        a = np.empty(4, dtype='O')\n        ctypes.memset(a.ctypes.data, 0, a.nbytes)\n        assert_equal(a.argmax(), 0)\n        a[3] = 10\n        assert_equal(a.argmax(), 3)\n        a[1] = 30\n        assert_equal(a.argmax(), 1)\n\n\nclass TestArgmin:\n\n    nan_arr = [\n        ([0, 1, 2, 3, np.nan], 4),\n        ([0, 1, 2, np.nan, 3], 3),\n        ([np.nan, 0, 1, 2, 3], 0),\n        ([np.nan, 0, np.nan, 2, 3], 0),\n        ([0, 1, 2, 3, complex(0, np.nan)], 4),\n        ([0, 1, 2, 3, complex(np.nan, 0)], 4),\n        ([0, 1, 2, complex(np.nan, 0), 3], 3),\n        ([0, 1, 2, complex(0, np.nan), 3], 3),\n        ([complex(0, np.nan), 0, 1, 2, 3], 0),\n        ([complex(np.nan, np.nan), 0, 1, 2, 3], 0),\n        ([complex(np.nan, 0), complex(np.nan, 2), complex(np.nan, 1)], 0),\n        ([complex(np.nan, np.nan), complex(np.nan, 2), complex(np.nan, 1)], 0),\n        ([complex(np.nan, 0), complex(np.nan, 2), complex(np.nan, np.nan)], 0),\n\n        ([complex(0, 0), complex(0, 2), complex(0, 1)], 0),\n        ([complex(1, 0), complex(0, 2), complex(0, 1)], 2),\n        ([complex(1, 0), complex(0, 2), complex(1, 1)], 1),\n\n        ([np.datetime64('1923-04-14T12:43:12'),\n          np.datetime64('1994-06-21T14:43:15'),\n          np.datetime64('2001-10-15T04:10:32'),\n          np.datetime64('1995-11-25T16:02:16'),\n          np.datetime64('2005-01-04T03:14:12'),\n          np.datetime64('2041-12-03T14:05:03')], 0),\n        ([np.datetime64('1935-09-14T04:40:11'),\n          np.datetime64('1949-10-12T12:32:11'),\n          np.datetime64('2010-01-03T05:14:12'),\n          np.datetime64('2014-11-20T12:20:59'),\n          np.datetime64('2015-09-23T10:10:13'),\n          np.datetime64('1932-10-10T03:50:30')], 5),\n        # Assorted tests with NaTs\n        ([np.datetime64('NaT'),\n          np.datetime64('NaT'),\n          np.datetime64('2010-01-03T05:14:12'),\n          np.datetime64('NaT'),\n          np.datetime64('2015-09-23T10:10:13'),\n          np.datetime64('1932-10-10T03:50:30')], 0),\n        ([np.datetime64('2059-03-14T12:43:12'),\n          np.datetime64('1996-09-21T14:43:15'),\n          np.datetime64('NaT'),\n          np.datetime64('2022-12-25T16:02:16'),\n          np.datetime64('1963-10-04T03:14:12'),\n          np.datetime64('2013-05-08T18:15:23')], 2),\n        ([np.timedelta64(2, 's'),\n          np.timedelta64(1, 's'),\n          np.timedelta64('NaT', 's'),\n          np.timedelta64(3, 's')], 2),\n        ([np.timedelta64('NaT', 's')] * 3, 0),\n\n        ([timedelta(days=5, seconds=14), timedelta(days=2, seconds=35),\n          timedelta(days=-1, seconds=23)], 2),\n        ([timedelta(days=1, seconds=43), timedelta(days=10, seconds=5),\n          timedelta(days=5, seconds=14)], 0),\n        ([timedelta(days=10, seconds=24), timedelta(days=10, seconds=5),\n          timedelta(days=10, seconds=43)], 1),\n\n        ([True, True, True, True, False], 4),\n        ([True, True, True, False, True], 3),\n        ([False, True, True, True, True], 0),\n        ([False, True, False, True, True], 0),\n    ]\n\n    def test_all(self):\n        a = np.random.normal(0, 1, (4, 5, 6, 7, 8))\n        for i in range(a.ndim):\n            amin = a.min(i)\n            aargmin = a.argmin(i)\n            axes = list(range(a.ndim))\n            axes.remove(i)\n            assert_(np.all(amin == aargmin.choose(*a.transpose(i,*axes))))\n\n    def test_combinations(self):\n        for arr, pos in self.nan_arr:\n            with suppress_warnings() as sup:\n                sup.filter(RuntimeWarning,\n                           \"invalid value encountered in reduce\")\n                min_val = np.min(arr)\n\n            assert_equal(np.argmin(arr), pos, err_msg=\"%r\" % arr)\n            assert_equal(arr[np.argmin(arr)], min_val, err_msg=\"%r\" % arr)\n\n    def test_minimum_signed_integers(self):\n\n        a = np.array([1, -2**7, -2**7 + 1], dtype=np.int8)\n        assert_equal(np.argmin(a), 1)\n\n        a = np.array([1, -2**15, -2**15 + 1], dtype=np.int16)\n        assert_equal(np.argmin(a), 1)\n\n        a = np.array([1, -2**31, -2**31 + 1], dtype=np.int32)\n        assert_equal(np.argmin(a), 1)\n\n        a = np.array([1, -2**63, -2**63 + 1], dtype=np.int64)\n        assert_equal(np.argmin(a), 1)\n\n    def test_output_shape(self):\n        # see also gh-616\n        a = np.ones((10, 5))\n        # Check some simple shape mismatches\n        out = np.ones(11, dtype=np.int_)\n        assert_raises(ValueError, a.argmin, -1, out)\n\n        out = np.ones((2, 5), dtype=np.int_)\n        assert_raises(ValueError, a.argmin, -1, out)\n\n        # these could be relaxed possibly (used to allow even the previous)\n        out = np.ones((1, 10), dtype=np.int_)\n        assert_raises(ValueError, a.argmin, -1, out)\n\n        out = np.ones(10, dtype=np.int_)\n        a.argmin(-1, out=out)\n        assert_equal(out, a.argmin(-1))\n\n    def test_argmin_unicode(self):\n        d = np.ones(6031, dtype='<U9')\n        d[6001] = \"0\"\n        assert_equal(d.argmin(), 6001)\n\n    def test_np_vs_ndarray(self):\n        # make sure both ndarray.argmin and numpy.argmin support out/axis args\n        a = np.random.normal(size=(2, 3))\n\n        # check positional args\n        out1 = np.zeros(2, dtype=int)\n        out2 = np.ones(2, dtype=int)\n        assert_equal(a.argmin(1, out1), np.argmin(a, 1, out2))\n        assert_equal(out1, out2)\n\n        # check keyword args\n        out1 = np.zeros(3, dtype=int)\n        out2 = np.ones(3, dtype=int)\n        assert_equal(a.argmin(out=out1, axis=0), np.argmin(a, out=out2, axis=0))\n        assert_equal(out1, out2)\n\n    @pytest.mark.leaks_references(reason=\"replaces None with NULL.\")\n    def test_object_argmin_with_NULLs(self):\n        # See gh-6032\n        a = np.empty(4, dtype='O')\n        ctypes.memset(a.ctypes.data, 0, a.nbytes)\n        assert_equal(a.argmin(), 0)\n        a[3] = 30\n        assert_equal(a.argmin(), 3)\n        a[1] = 10\n        assert_equal(a.argmin(), 1)\n\n\nclass TestMinMax:\n\n    def test_scalar(self):\n        assert_raises(np.AxisError, np.amax, 1, 1)\n        assert_raises(np.AxisError, np.amin, 1, 1)\n\n        assert_equal(np.amax(1, axis=0), 1)\n        assert_equal(np.amin(1, axis=0), 1)\n        assert_equal(np.amax(1, axis=None), 1)\n        assert_equal(np.amin(1, axis=None), 1)\n\n    def test_axis(self):\n        assert_raises(np.AxisError, np.amax, [1, 2, 3], 1000)\n        assert_equal(np.amax([[1, 2, 3]], axis=1), 3)\n\n    def test_datetime(self):\n        # Do not ignore NaT\n        for dtype in ('m8[s]', 'm8[Y]'):\n            a = np.arange(10).astype(dtype)\n            assert_equal(np.amin(a), a[0])\n            assert_equal(np.amax(a), a[9])\n            a[3] = 'NaT'\n            assert_equal(np.amin(a), a[3])\n            assert_equal(np.amax(a), a[3])\n\n\nclass TestNewaxis:\n    def test_basic(self):\n        sk = np.array([0, -0.1, 0.1])\n        res = 250*sk[:, np.newaxis]\n        assert_almost_equal(res.ravel(), 250*sk)\n\n\nclass TestClip:\n    def _check_range(self, x, cmin, cmax):\n        assert_(np.all(x >= cmin))\n        assert_(np.all(x <= cmax))\n\n    def _clip_type(self, type_group, array_max,\n                   clip_min, clip_max, inplace=False,\n                   expected_min=None, expected_max=None):\n        if expected_min is None:\n            expected_min = clip_min\n        if expected_max is None:\n            expected_max = clip_max\n\n        for T in np.sctypes[type_group]:\n            if sys.byteorder == 'little':\n                byte_orders = ['=', '>']\n            else:\n                byte_orders = ['<', '=']\n\n            for byteorder in byte_orders:\n                dtype = np.dtype(T).newbyteorder(byteorder)\n\n                x = (np.random.random(1000) * array_max).astype(dtype)\n                if inplace:\n                    # The tests that call us pass clip_min and clip_max that\n                    # might not fit in the destination dtype. They were written\n                    # assuming the previous unsafe casting, which now must be\n                    # passed explicitly to avoid a warning.\n                    x.clip(clip_min, clip_max, x, casting='unsafe')\n                else:\n                    x = x.clip(clip_min, clip_max)\n                    byteorder = '='\n\n                if x.dtype.byteorder == '|':\n                    byteorder = '|'\n                assert_equal(x.dtype.byteorder, byteorder)\n                self._check_range(x, expected_min, expected_max)\n        return x\n\n    def test_basic(self):\n        for inplace in [False, True]:\n            self._clip_type(\n                'float', 1024, -12.8, 100.2, inplace=inplace)\n            self._clip_type(\n                'float', 1024, 0, 0, inplace=inplace)\n\n            self._clip_type(\n                'int', 1024, -120, 100, inplace=inplace)\n            self._clip_type(\n                'int', 1024, 0, 0, inplace=inplace)\n\n            self._clip_type(\n                'uint', 1024, 0, 0, inplace=inplace)\n            self._clip_type(\n                'uint', 1024, -120, 100, inplace=inplace, expected_min=0)\n\n    def test_record_array(self):\n        rec = np.array([(-5, 2.0, 3.0), (5.0, 4.0, 3.0)],\n                       dtype=[('x', '<f8'), ('y', '<f8'), ('z', '<f8')])\n        y = rec['x'].clip(-0.3, 0.5)\n        self._check_range(y, -0.3, 0.5)\n\n    def test_max_or_min(self):\n        val = np.array([0, 1, 2, 3, 4, 5, 6, 7])\n        x = val.clip(3)\n        assert_(np.all(x >= 3))\n        x = val.clip(min=3)\n        assert_(np.all(x >= 3))\n        x = val.clip(max=4)\n        assert_(np.all(x <= 4))\n\n    def test_nan(self):\n        input_arr = np.array([-2., np.nan, 0.5, 3., 0.25, np.nan])\n        result = input_arr.clip(-1, 1)\n        expected = np.array([-1., np.nan, 0.5, 1., 0.25, np.nan])\n        assert_array_equal(result, expected)\n\n\nclass TestCompress:\n    def test_axis(self):\n        tgt = [[5, 6, 7, 8, 9]]\n        arr = np.arange(10).reshape(2, 5)\n        out = np.compress([0, 1], arr, axis=0)\n        assert_equal(out, tgt)\n\n        tgt = [[1, 3], [6, 8]]\n        out = np.compress([0, 1, 0, 1, 0], arr, axis=1)\n        assert_equal(out, tgt)\n\n    def test_truncate(self):\n        tgt = [[1], [6]]\n        arr = np.arange(10).reshape(2, 5)\n        out = np.compress([0, 1], arr, axis=1)\n        assert_equal(out, tgt)\n\n    def test_flatten(self):\n        arr = np.arange(10).reshape(2, 5)\n        out = np.compress([0, 1], arr)\n        assert_equal(out, 1)\n\n\nclass TestPutmask:\n    def tst_basic(self, x, T, mask, val):\n        np.putmask(x, mask, val)\n        assert_equal(x[mask], np.array(val, T))\n\n    def test_ip_types(self):\n        unchecked_types = [bytes, str, np.void]\n\n        x = np.random.random(1000)*100\n        mask = x < 40\n\n        for val in [-100, 0, 15]:\n            for types in np.sctypes.values():\n                for T in types:\n                    if T not in unchecked_types:\n                        self.tst_basic(x.copy().astype(T), T, mask, val)\n\n            # Also test string of a length which uses an untypical length\n            dt = np.dtype(\"S3\")\n            self.tst_basic(x.astype(dt), dt.type, mask, dt.type(val)[:3])\n\n    def test_mask_size(self):\n        assert_raises(ValueError, np.putmask, np.array([1, 2, 3]), [True], 5)\n\n    @pytest.mark.parametrize('dtype', ('>i4', '<i4'))\n    def test_byteorder(self, dtype):\n        x = np.array([1, 2, 3], dtype)\n        np.putmask(x, [True, False, True], -1)\n        assert_array_equal(x, [-1, 2, -1])\n\n    def test_record_array(self):\n        # Note mixed byteorder.\n        rec = np.array([(-5, 2.0, 3.0), (5.0, 4.0, 3.0)],\n                      dtype=[('x', '<f8'), ('y', '>f8'), ('z', '<f8')])\n        np.putmask(rec['x'], [True, False], 10)\n        assert_array_equal(rec['x'], [10, 5])\n        assert_array_equal(rec['y'], [2, 4])\n        assert_array_equal(rec['z'], [3, 3])\n        np.putmask(rec['y'], [True, False], 11)\n        assert_array_equal(rec['x'], [10, 5])\n        assert_array_equal(rec['y'], [11, 4])\n        assert_array_equal(rec['z'], [3, 3])\n\n    def test_overlaps(self):\n        # gh-6272 check overlap\n        x = np.array([True, False, True, False])\n        np.putmask(x[1:4], [True, True, True], x[:3])\n        assert_equal(x, np.array([True, True, False, True]))\n\n        x = np.array([True, False, True, False])\n        np.putmask(x[1:4], x[:3], [True, False, True])\n        assert_equal(x, np.array([True, True, True, True]))\n\n\nclass TestTake:\n    def tst_basic(self, x):\n        ind = list(range(x.shape[0]))\n        assert_array_equal(x.take(ind, axis=0), x)\n\n    def test_ip_types(self):\n        unchecked_types = [bytes, str, np.void]\n\n        x = np.random.random(24)*100\n        x.shape = 2, 3, 4\n        for types in np.sctypes.values():\n            for T in types:\n                if T not in unchecked_types:\n                    self.tst_basic(x.copy().astype(T))\n\n            # Also test string of a length which uses an untypical length\n            self.tst_basic(x.astype(\"S3\"))\n\n    def test_raise(self):\n        x = np.random.random(24)*100\n        x.shape = 2, 3, 4\n        assert_raises(IndexError, x.take, [0, 1, 2], axis=0)\n        assert_raises(IndexError, x.take, [-3], axis=0)\n        assert_array_equal(x.take([-1], axis=0)[0], x[1])\n\n    def test_clip(self):\n        x = np.random.random(24)*100\n        x.shape = 2, 3, 4\n        assert_array_equal(x.take([-1], axis=0, mode='clip')[0], x[0])\n        assert_array_equal(x.take([2], axis=0, mode='clip')[0], x[1])\n\n    def test_wrap(self):\n        x = np.random.random(24)*100\n        x.shape = 2, 3, 4\n        assert_array_equal(x.take([-1], axis=0, mode='wrap')[0], x[1])\n        assert_array_equal(x.take([2], axis=0, mode='wrap')[0], x[0])\n        assert_array_equal(x.take([3], axis=0, mode='wrap')[0], x[1])\n\n    @pytest.mark.parametrize('dtype', ('>i4', '<i4'))\n    def test_byteorder(self, dtype):\n        x = np.array([1, 2, 3], dtype)\n        assert_array_equal(x.take([0, 2, 1]), [1, 3, 2])\n\n    def test_record_array(self):\n        # Note mixed byteorder.\n        rec = np.array([(-5, 2.0, 3.0), (5.0, 4.0, 3.0)],\n                      dtype=[('x', '<f8'), ('y', '>f8'), ('z', '<f8')])\n        rec1 = rec.take([1])\n        assert_(rec1['x'] == 5.0 and rec1['y'] == 4.0)\n\n    def test_out_overlap(self):\n        # gh-6272 check overlap on out\n        x = np.arange(5)\n        y = np.take(x, [1, 2, 3], out=x[2:5], mode='wrap')\n        assert_equal(y, np.array([1, 2, 3]))\n\nclass TestLexsort:\n    @pytest.mark.parametrize('dtype',[\n        np.uint8, np.uint16, np.uint32, np.uint64,\n        np.int8, np.int16, np.int32, np.int64,\n        np.float16, np.float32, np.float64\n    ])\n    def test_basic(self, dtype):\n        a = np.array([1, 2, 1, 3, 1, 5], dtype=dtype)\n        b = np.array([0, 4, 5, 6, 2, 3], dtype=dtype)\n        idx = np.lexsort((b, a))\n        expected_idx = np.array([0, 4, 2, 1, 3, 5])\n        assert_array_equal(idx, expected_idx)\n        assert_array_equal(a[idx], np.sort(a))\n\n    def test_mixed(self):\n        a = np.array([1, 2, 1, 3, 1, 5])\n        b = np.array([0, 4, 5, 6, 2, 3], dtype='datetime64[D]')\n\n        idx = np.lexsort((b, a))\n        expected_idx = np.array([0, 4, 2, 1, 3, 5])\n        assert_array_equal(idx, expected_idx)\n\n    def test_datetime(self):\n        a = np.array([0,0,0], dtype='datetime64[D]')\n        b = np.array([2,1,0], dtype='datetime64[D]')\n        idx = np.lexsort((b, a))\n        expected_idx = np.array([2, 1, 0])\n        assert_array_equal(idx, expected_idx)\n\n        a = np.array([0,0,0], dtype='timedelta64[D]')\n        b = np.array([2,1,0], dtype='timedelta64[D]')\n        idx = np.lexsort((b, a))\n        expected_idx = np.array([2, 1, 0])\n        assert_array_equal(idx, expected_idx)\n\n    def test_object(self):  # gh-6312\n        a = np.random.choice(10, 1000)\n        b = np.random.choice(['abc', 'xy', 'wz', 'efghi', 'qwst', 'x'], 1000)\n\n        for u in a, b:\n            left = np.lexsort((u.astype('O'),))\n            right = np.argsort(u, kind='mergesort')\n            assert_array_equal(left, right)\n\n        for u, v in (a, b), (b, a):\n            idx = np.lexsort((u, v))\n            assert_array_equal(idx, np.lexsort((u.astype('O'), v)))\n            assert_array_equal(idx, np.lexsort((u, v.astype('O'))))\n            u, v = np.array(u, dtype='object'), np.array(v, dtype='object')\n            assert_array_equal(idx, np.lexsort((u, v)))\n\n    def test_invalid_axis(self): # gh-7528\n        x = np.linspace(0., 1., 42*3).reshape(42, 3)\n        assert_raises(np.AxisError, np.lexsort, x, axis=2)\n\nclass TestIO:\n    \"\"\"Test tofile, fromfile, tobytes, and fromstring\"\"\"\n\n    def setup(self):\n        shape = (2, 4, 3)\n        rand = np.random.random\n        self.x = rand(shape) + rand(shape).astype(complex)*1j\n        self.x[0,:, 1] = [np.nan, np.inf, -np.inf, np.nan]\n        self.dtype = self.x.dtype\n        self.tempdir = tempfile.mkdtemp()\n        self.filename = tempfile.mktemp(dir=self.tempdir)\n\n    def teardown(self):\n        shutil.rmtree(self.tempdir)\n\n    def test_nofile(self):\n        # this should probably be supported as a file\n        # but for now test for proper errors\n        b = io.BytesIO()\n        assert_raises(IOError, np.fromfile, b, np.uint8, 80)\n        d = np.ones(7)\n        assert_raises(IOError, lambda x: x.tofile(b), d)\n\n    def test_bool_fromstring(self):\n        v = np.array([True, False, True, False], dtype=np.bool_)\n        y = np.fromstring('1 0 -2.3 0.0', sep=' ', dtype=np.bool_)\n        assert_array_equal(v, y)\n\n    def test_uint64_fromstring(self):\n        d = np.fromstring(\"9923372036854775807 104783749223640\",\n                          dtype=np.uint64, sep=' ')\n        e = np.array([9923372036854775807, 104783749223640], dtype=np.uint64)\n        assert_array_equal(d, e)\n\n    def test_int64_fromstring(self):\n        d = np.fromstring(\"-25041670086757 104783749223640\",\n                          dtype=np.int64, sep=' ')\n        e = np.array([-25041670086757, 104783749223640], dtype=np.int64)\n        assert_array_equal(d, e)\n\n    def test_empty_files_binary(self):\n        with open(self.filename, 'w') as f:\n            pass\n        y = np.fromfile(self.filename)\n        assert_(y.size == 0, \"Array not empty\")\n\n    def test_empty_files_text(self):\n        with open(self.filename, 'wb') as f:\n            pass\n        y = np.fromfile(self.filename, sep=\" \")\n        assert_(y.size == 0, \"Array not empty\")\n\n    def test_roundtrip_file(self):\n        with open(self.filename, 'wb') as f:\n            self.x.tofile(f)\n        # NB. doesn't work with flush+seek, due to use of C stdio\n        with open(self.filename, 'rb') as f:\n            y = np.fromfile(f, dtype=self.dtype)\n        assert_array_equal(y, self.x.flat)\n\n    def test_roundtrip_filename(self):\n        self.x.tofile(self.filename)\n        y = np.fromfile(self.filename, dtype=self.dtype)\n        assert_array_equal(y, self.x.flat)\n\n    def test_roundtrip_pathlib(self):\n        p = pathlib.Path(self.filename)\n        self.x.tofile(p)\n        y = np.fromfile(p, dtype=self.dtype)\n        assert_array_equal(y, self.x.flat)\n\n    def test_roundtrip_dump_pathlib(self):\n        p = pathlib.Path(self.filename)\n        self.x.dump(p)\n        y = np.load(p, allow_pickle=True)\n        assert_array_equal(y, self.x)\n\n    def test_roundtrip_binary_str(self):\n        s = self.x.tobytes()\n        y = np.frombuffer(s, dtype=self.dtype)\n        assert_array_equal(y, self.x.flat)\n\n        s = self.x.tobytes('F')\n        y = np.frombuffer(s, dtype=self.dtype)\n        assert_array_equal(y, self.x.flatten('F'))\n\n    def test_roundtrip_str(self):\n        x = self.x.real.ravel()\n        s = \"@\".join(map(str, x))\n        y = np.fromstring(s, sep=\"@\")\n        # NB. str imbues less precision\n        nan_mask = ~np.isfinite(x)\n        assert_array_equal(x[nan_mask], y[nan_mask])\n        assert_array_almost_equal(x[~nan_mask], y[~nan_mask], decimal=5)\n\n    def test_roundtrip_repr(self):\n        x = self.x.real.ravel()\n        s = \"@\".join(map(repr, x))\n        y = np.fromstring(s, sep=\"@\")\n        assert_array_equal(x, y)\n\n    def test_unseekable_fromfile(self):\n        # gh-6246\n        self.x.tofile(self.filename)\n\n        def fail(*args, **kwargs):\n            raise IOError('Can not tell or seek')\n\n        with io.open(self.filename, 'rb', buffering=0) as f:\n            f.seek = fail\n            f.tell = fail\n            assert_raises(IOError, np.fromfile, f, dtype=self.dtype)\n\n    def test_io_open_unbuffered_fromfile(self):\n        # gh-6632\n        self.x.tofile(self.filename)\n        with io.open(self.filename, 'rb', buffering=0) as f:\n            y = np.fromfile(f, dtype=self.dtype)\n            assert_array_equal(y, self.x.flat)\n\n    def test_largish_file(self):\n        # check the fallocate path on files > 16MB\n        d = np.zeros(4 * 1024 ** 2)\n        d.tofile(self.filename)\n        assert_equal(os.path.getsize(self.filename), d.nbytes)\n        assert_array_equal(d, np.fromfile(self.filename))\n        # check offset\n        with open(self.filename, \"r+b\") as f:\n            f.seek(d.nbytes)\n            d.tofile(f)\n            assert_equal(os.path.getsize(self.filename), d.nbytes * 2)\n        # check append mode (gh-8329)\n        open(self.filename, \"w\").close() # delete file contents\n        with open(self.filename, \"ab\") as f:\n            d.tofile(f)\n        assert_array_equal(d, np.fromfile(self.filename))\n        with open(self.filename, \"ab\") as f:\n            d.tofile(f)\n        assert_equal(os.path.getsize(self.filename), d.nbytes * 2)\n\n    def test_io_open_buffered_fromfile(self):\n        # gh-6632\n        self.x.tofile(self.filename)\n        with io.open(self.filename, 'rb', buffering=-1) as f:\n            y = np.fromfile(f, dtype=self.dtype)\n        assert_array_equal(y, self.x.flat)\n\n    def test_file_position_after_fromfile(self):\n        # gh-4118\n        sizes = [io.DEFAULT_BUFFER_SIZE//8,\n                 io.DEFAULT_BUFFER_SIZE,\n                 io.DEFAULT_BUFFER_SIZE*8]\n\n        for size in sizes:\n            with open(self.filename, 'wb') as f:\n                f.seek(size-1)\n                f.write(b'\\0')\n\n            for mode in ['rb', 'r+b']:\n                err_msg = \"%d %s\" % (size, mode)\n\n                with open(self.filename, mode) as f:\n                    f.read(2)\n                    np.fromfile(f, dtype=np.float64, count=1)\n                    pos = f.tell()\n                assert_equal(pos, 10, err_msg=err_msg)\n\n    def test_file_position_after_tofile(self):\n        # gh-4118\n        sizes = [io.DEFAULT_BUFFER_SIZE//8,\n                 io.DEFAULT_BUFFER_SIZE,\n                 io.DEFAULT_BUFFER_SIZE*8]\n\n        for size in sizes:\n            err_msg = \"%d\" % (size,)\n\n            with open(self.filename, 'wb') as f:\n                f.seek(size-1)\n                f.write(b'\\0')\n                f.seek(10)\n                f.write(b'12')\n                np.array([0], dtype=np.float64).tofile(f)\n                pos = f.tell()\n            assert_equal(pos, 10 + 2 + 8, err_msg=err_msg)\n\n            with open(self.filename, 'r+b') as f:\n                f.read(2)\n                f.seek(0, 1)  # seek between read&write required by ANSI C\n                np.array([0], dtype=np.float64).tofile(f)\n                pos = f.tell()\n            assert_equal(pos, 10, err_msg=err_msg)\n\n    def test_load_object_array_fromfile(self):\n        # gh-12300\n        with open(self.filename, 'w') as f:\n            # Ensure we have a file with consistent contents\n            pass\n\n        with open(self.filename, 'rb') as f:\n            assert_raises_regex(ValueError, \"Cannot read into object array\",\n                                np.fromfile, f, dtype=object)\n\n        assert_raises_regex(ValueError, \"Cannot read into object array\",\n                            np.fromfile, self.filename, dtype=object)\n\n    def test_fromfile_offset(self):\n        with open(self.filename, 'wb') as f:\n            self.x.tofile(f)\n\n        with open(self.filename, 'rb') as f:\n            y = np.fromfile(f, dtype=self.dtype, offset=0)\n            assert_array_equal(y, self.x.flat)\n\n        with open(self.filename, 'rb') as f:\n            count_items = len(self.x.flat) // 8\n            offset_items = len(self.x.flat) // 4\n            offset_bytes = self.dtype.itemsize * offset_items\n            y = np.fromfile(f, dtype=self.dtype, count=count_items, offset=offset_bytes)\n            assert_array_equal(y, self.x.flat[offset_items:offset_items+count_items])\n\n            # subsequent seeks should stack\n            offset_bytes = self.dtype.itemsize\n            z = np.fromfile(f, dtype=self.dtype, offset=offset_bytes)\n            assert_array_equal(z, self.x.flat[offset_items+count_items+1:])\n\n        with open(self.filename, 'wb') as f:\n            self.x.tofile(f, sep=\",\")\n\n        with open(self.filename, 'rb') as f:\n            assert_raises_regex(\n                    TypeError,\n                    \"'offset' argument only permitted for binary files\",\n                    np.fromfile, self.filename, dtype=self.dtype,\n                    sep=\",\", offset=1)\n\n    def _check_from(self, s, value, **kw):\n        if 'sep' not in kw:\n            y = np.frombuffer(s, **kw)\n        else:\n            y = np.fromstring(s, **kw)\n        assert_array_equal(y, value)\n\n        with open(self.filename, 'wb') as f:\n            f.write(s)\n        y = np.fromfile(self.filename, **kw)\n        assert_array_equal(y, value)\n\n    def test_nan(self):\n        self._check_from(\n            b\"nan +nan -nan NaN nan(foo) +NaN(BAR) -NAN(q_u_u_x_)\",\n            [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan],\n            sep=' ')\n\n    def test_inf(self):\n        self._check_from(\n            b\"inf +inf -inf infinity -Infinity iNfInItY -inF\",\n            [np.inf, np.inf, -np.inf, np.inf, -np.inf, np.inf, -np.inf],\n            sep=' ')\n\n    def test_numbers(self):\n        self._check_from(b\"1.234 -1.234 .3 .3e55 -123133.1231e+133\",\n                         [1.234, -1.234, .3, .3e55, -123133.1231e+133], sep=' ')\n\n    def test_binary(self):\n        self._check_from(b'\\x00\\x00\\x80?\\x00\\x00\\x00@\\x00\\x00@@\\x00\\x00\\x80@',\n                         np.array([1, 2, 3, 4]),\n                         dtype='<f4')\n\n    @pytest.mark.slow  # takes > 1 minute on mechanical hard drive\n    def test_big_binary(self):\n        \"\"\"Test workarounds for 32-bit limited fwrite, fseek, and ftell\n        calls in windows. These normally would hang doing something like this.\n        See http://projects.scipy.org/numpy/ticket/1660\"\"\"\n        if sys.platform != 'win32':\n            return\n        try:\n            # before workarounds, only up to 2**32-1 worked\n            fourgbplus = 2**32 + 2**16\n            testbytes = np.arange(8, dtype=np.int8)\n            n = len(testbytes)\n            flike = tempfile.NamedTemporaryFile()\n            f = flike.file\n            np.tile(testbytes, fourgbplus // testbytes.nbytes).tofile(f)\n            flike.seek(0)\n            a = np.fromfile(f, dtype=np.int8)\n            flike.close()\n            assert_(len(a) == fourgbplus)\n            # check only start and end for speed:\n            assert_((a[:n] == testbytes).all())\n            assert_((a[-n:] == testbytes).all())\n        except (MemoryError, ValueError):\n            pass\n\n    def test_string(self):\n        self._check_from(b'1,2,3,4', [1., 2., 3., 4.], sep=',')\n\n    def test_counted_string(self):\n        self._check_from(b'1,2,3,4', [1., 2., 3., 4.], count=4, sep=',')\n        self._check_from(b'1,2,3,4', [1., 2., 3.], count=3, sep=',')\n        self._check_from(b'1,2,3,4', [1., 2., 3., 4.], count=-1, sep=',')\n\n    def test_string_with_ws(self):\n        self._check_from(b'1 2  3     4   ', [1, 2, 3, 4], dtype=int, sep=' ')\n\n    def test_counted_string_with_ws(self):\n        self._check_from(b'1 2  3     4   ', [1, 2, 3], count=3, dtype=int,\n                         sep=' ')\n\n    def test_ascii(self):\n        self._check_from(b'1 , 2 , 3 , 4', [1., 2., 3., 4.], sep=',')\n        self._check_from(b'1,2,3,4', [1., 2., 3., 4.], dtype=float, sep=',')\n\n    def test_malformed(self):\n        with assert_warns(DeprecationWarning):\n            self._check_from(b'1.234 1,234', [1.234, 1.], sep=' ')\n\n    def test_long_sep(self):\n        self._check_from(b'1_x_3_x_4_x_5', [1, 3, 4, 5], sep='_x_')\n\n    def test_dtype(self):\n        v = np.array([1, 2, 3, 4], dtype=np.int_)\n        self._check_from(b'1,2,3,4', v, sep=',', dtype=np.int_)\n\n    def test_dtype_bool(self):\n        # can't use _check_from because fromstring can't handle True/False\n        v = np.array([True, False, True, False], dtype=np.bool_)\n        s = b'1,0,-2.3,0'\n        with open(self.filename, 'wb') as f:\n            f.write(s)\n        y = np.fromfile(self.filename, sep=',', dtype=np.bool_)\n        assert_(y.dtype == '?')\n        assert_array_equal(y, v)\n\n    def test_tofile_sep(self):\n        x = np.array([1.51, 2, 3.51, 4], dtype=float)\n        with open(self.filename, 'w') as f:\n            x.tofile(f, sep=',')\n        with open(self.filename, 'r') as f:\n            s = f.read()\n        #assert_equal(s, '1.51,2.0,3.51,4.0')\n        y = np.array([float(p) for p in s.split(',')])\n        assert_array_equal(x,y)\n\n    def test_tofile_format(self):\n        x = np.array([1.51, 2, 3.51, 4], dtype=float)\n        with open(self.filename, 'w') as f:\n            x.tofile(f, sep=',', format='%.2f')\n        with open(self.filename, 'r') as f:\n            s = f.read()\n        assert_equal(s, '1.51,2.00,3.51,4.00')\n\n    def test_locale(self):\n        with CommaDecimalPointLocale():\n            self.test_numbers()\n            self.test_nan()\n            self.test_inf()\n            self.test_counted_string()\n            self.test_ascii()\n            self.test_malformed()\n            self.test_tofile_sep()\n            self.test_tofile_format()\n\n    def test_fromfile_subarray_binary(self):\n        # Test subarray dtypes which are absorbed into the shape\n        x = np.arange(24, dtype=\"i4\").reshape(2, 3, 4)\n        x.tofile(self.filename)\n        res = np.fromfile(self.filename, dtype=\"(3,4)i4\")\n        assert_array_equal(x, res)\n\n        x_str = x.tobytes()\n        with assert_warns(DeprecationWarning):\n            # binary fromstring is deprecated\n            res = np.fromstring(x_str, dtype=\"(3,4)i4\")\n            assert_array_equal(x, res)\n\n\nclass TestFromBuffer:\n    @pytest.mark.parametrize('byteorder', ['<', '>'])\n    @pytest.mark.parametrize('dtype', [float, int, complex])\n    def test_basic(self, byteorder, dtype):\n        dt = np.dtype(dtype).newbyteorder(byteorder)\n        x = (np.random.random((4, 7)) * 5).astype(dt)\n        buf = x.tobytes()\n        assert_array_equal(np.frombuffer(buf, dtype=dt), x.flat)\n\n    def test_empty(self):\n        assert_array_equal(np.frombuffer(b''), np.array([]))\n\n\nclass TestFlat:\n    def setup(self):\n        a0 = np.arange(20.0)\n        a = a0.reshape(4, 5)\n        a0.shape = (4, 5)\n        a.flags.writeable = False\n        self.a = a\n        self.b = a[::2, ::2]\n        self.a0 = a0\n        self.b0 = a0[::2, ::2]\n\n    def test_contiguous(self):\n        testpassed = False\n        try:\n            self.a.flat[12] = 100.0\n        except ValueError:\n            testpassed = True\n        assert_(testpassed)\n        assert_(self.a.flat[12] == 12.0)\n\n    def test_discontiguous(self):\n        testpassed = False\n        try:\n            self.b.flat[4] = 100.0\n        except ValueError:\n            testpassed = True\n        assert_(testpassed)\n        assert_(self.b.flat[4] == 12.0)\n\n    def test___array__(self):\n        c = self.a.flat.__array__()\n        d = self.b.flat.__array__()\n        e = self.a0.flat.__array__()\n        f = self.b0.flat.__array__()\n\n        assert_(c.flags.writeable is False)\n        assert_(d.flags.writeable is False)\n        # for 1.14 all are set to non-writeable on the way to replacing the\n        # UPDATEIFCOPY array returned for non-contiguous arrays.\n        assert_(e.flags.writeable is True)\n        assert_(f.flags.writeable is False)\n        with assert_warns(DeprecationWarning):\n            assert_(c.flags.updateifcopy is False)\n        with assert_warns(DeprecationWarning):\n            assert_(d.flags.updateifcopy is False)\n        with assert_warns(DeprecationWarning):\n            assert_(e.flags.updateifcopy is False)\n        with assert_warns(DeprecationWarning):\n            # UPDATEIFCOPY is removed.\n            assert_(f.flags.updateifcopy is False)\n        assert_(c.flags.writebackifcopy is False)\n        assert_(d.flags.writebackifcopy is False)\n        assert_(e.flags.writebackifcopy is False)\n        assert_(f.flags.writebackifcopy is False)\n\n    @pytest.mark.skipif(not HAS_REFCOUNT, reason=\"Python lacks refcounts\")\n    def test_refcount(self):\n        # includes regression test for reference count error gh-13165\n        inds = [np.intp(0), np.array([True]*self.a.size), np.array([0]), None]\n        indtype = np.dtype(np.intp)\n        rc_indtype = sys.getrefcount(indtype)\n        for ind in inds:\n            rc_ind = sys.getrefcount(ind)\n            for _ in range(100):\n                try:\n                    self.a.flat[ind]\n                except IndexError:\n                    pass\n            assert_(abs(sys.getrefcount(ind) - rc_ind) < 50)\n            assert_(abs(sys.getrefcount(indtype) - rc_indtype) < 50)\n\n\nclass TestResize:\n\n    @_no_tracing\n    def test_basic(self):\n        x = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]])\n        if IS_PYPY:\n            x.resize((5, 5), refcheck=False)\n        else:\n            x.resize((5, 5))\n        assert_array_equal(x.flat[:9],\n                np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]).flat)\n        assert_array_equal(x[9:].flat, 0)\n\n    def test_check_reference(self):\n        x = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]])\n        y = x\n        assert_raises(ValueError, x.resize, (5, 1))\n        del y  # avoid pyflakes unused variable warning.\n\n    @_no_tracing\n    def test_int_shape(self):\n        x = np.eye(3)\n        if IS_PYPY:\n            x.resize(3, refcheck=False)\n        else:\n            x.resize(3)\n        assert_array_equal(x, np.eye(3)[0,:])\n\n    def test_none_shape(self):\n        x = np.eye(3)\n        x.resize(None)\n        assert_array_equal(x, np.eye(3))\n        x.resize()\n        assert_array_equal(x, np.eye(3))\n\n    def test_0d_shape(self):\n        # to it multiple times to test it does not break alloc cache gh-9216\n        for i in range(10):\n            x = np.empty((1,))\n            x.resize(())\n            assert_equal(x.shape, ())\n            assert_equal(x.size, 1)\n            x = np.empty(())\n            x.resize((1,))\n            assert_equal(x.shape, (1,))\n            assert_equal(x.size, 1)\n\n    def test_invalid_arguments(self):\n        assert_raises(TypeError, np.eye(3).resize, 'hi')\n        assert_raises(ValueError, np.eye(3).resize, -1)\n        assert_raises(TypeError, np.eye(3).resize, order=1)\n        assert_raises(TypeError, np.eye(3).resize, refcheck='hi')\n\n    @_no_tracing\n    def test_freeform_shape(self):\n        x = np.eye(3)\n        if IS_PYPY:\n            x.resize(3, 2, 1, refcheck=False)\n        else:\n            x.resize(3, 2, 1)\n        assert_(x.shape == (3, 2, 1))\n\n    @_no_tracing\n    def test_zeros_appended(self):\n        x = np.eye(3)\n        if IS_PYPY:\n            x.resize(2, 3, 3, refcheck=False)\n        else:\n            x.resize(2, 3, 3)\n        assert_array_equal(x[0], np.eye(3))\n        assert_array_equal(x[1], np.zeros((3, 3)))\n\n    @_no_tracing\n    def test_obj_obj(self):\n        # check memory is initialized on resize, gh-4857\n        a = np.ones(10, dtype=[('k', object, 2)])\n        if IS_PYPY:\n            a.resize(15, refcheck=False)\n        else:\n            a.resize(15,)\n        assert_equal(a.shape, (15,))\n        assert_array_equal(a['k'][-5:], 0)\n        assert_array_equal(a['k'][:-5], 1)\n\n    def test_empty_view(self):\n        # check that sizes containing a zero don't trigger a reallocate for\n        # already empty arrays\n        x = np.zeros((10, 0), int)\n        x_view = x[...]\n        x_view.resize((0, 10))\n        x_view.resize((0, 100))\n\n    def test_check_weakref(self):\n        x = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]])\n        xref = weakref.ref(x)\n        assert_raises(ValueError, x.resize, (5, 1))\n        del xref  # avoid pyflakes unused variable warning.\n\n\nclass TestRecord:\n    def test_field_rename(self):\n        dt = np.dtype([('f', float), ('i', int)])\n        dt.names = ['p', 'q']\n        assert_equal(dt.names, ['p', 'q'])\n\n    def test_multiple_field_name_occurrence(self):\n        def test_dtype_init():\n            np.dtype([(\"A\", \"f8\"), (\"B\", \"f8\"), (\"A\", \"f8\")])\n\n        # Error raised when multiple fields have the same name\n        assert_raises(ValueError, test_dtype_init)\n\n    def test_bytes_fields(self):\n        # Bytes are not allowed in field names and not recognized in titles\n        # on Py3\n        assert_raises(TypeError, np.dtype, [(b'a', int)])\n        assert_raises(TypeError, np.dtype, [(('b', b'a'), int)])\n\n        dt = np.dtype([((b'a', 'b'), int)])\n        assert_raises(TypeError, dt.__getitem__, b'a')\n\n        x = np.array([(1,), (2,), (3,)], dtype=dt)\n        assert_raises(IndexError, x.__getitem__, b'a')\n\n        y = x[0]\n        assert_raises(IndexError, y.__getitem__, b'a')\n\n    def test_multiple_field_name_unicode(self):\n        def test_dtype_unicode():\n            np.dtype([(\"\\u20B9\", \"f8\"), (\"B\", \"f8\"), (\"\\u20B9\", \"f8\")])\n\n        # Error raised when multiple fields have the same name(unicode included)\n        assert_raises(ValueError, test_dtype_unicode)\n\n    def test_fromarrays_unicode(self):\n        # A single name string provided to fromarrays() is allowed to be unicode\n        # on both Python 2 and 3:\n        x = np.core.records.fromarrays([[0], [1]], names=u'a,b', formats=u'i4,i4')\n        assert_equal(x['a'][0], 0)\n        assert_equal(x['b'][0], 1)\n\n    def test_unicode_order(self):\n        # Test that we can sort with order as a unicode field name in both Python 2 and\n        # 3:\n        name = u'b'\n        x = np.array([1, 3, 2], dtype=[(name, int)])\n        x.sort(order=name)\n        assert_equal(x[u'b'], np.array([1, 2, 3]))\n\n    def test_field_names(self):\n        # Test unicode and 8-bit / byte strings can be used\n        a = np.zeros((1,), dtype=[('f1', 'i4'),\n                                  ('f2', 'i4'),\n                                  ('f3', [('sf1', 'i4')])])\n        # byte string indexing fails gracefully\n        assert_raises(IndexError, a.__setitem__, b'f1', 1)\n        assert_raises(IndexError, a.__getitem__, b'f1')\n        assert_raises(IndexError, a['f1'].__setitem__, b'sf1', 1)\n        assert_raises(IndexError, a['f1'].__getitem__, b'sf1')\n        b = a.copy()\n        fn1 = str('f1')\n        b[fn1] = 1\n        assert_equal(b[fn1], 1)\n        fnn = str('not at all')\n        assert_raises(ValueError, b.__setitem__, fnn, 1)\n        assert_raises(ValueError, b.__getitem__, fnn)\n        b[0][fn1] = 2\n        assert_equal(b[fn1], 2)\n        # Subfield\n        assert_raises(ValueError, b[0].__setitem__, fnn, 1)\n        assert_raises(ValueError, b[0].__getitem__, fnn)\n        # Subfield\n        fn3 = str('f3')\n        sfn1 = str('sf1')\n        b[fn3][sfn1] = 1\n        assert_equal(b[fn3][sfn1], 1)\n        assert_raises(ValueError, b[fn3].__setitem__, fnn, 1)\n        assert_raises(ValueError, b[fn3].__getitem__, fnn)\n        # multiple subfields\n        fn2 = str('f2')\n        b[fn2] = 3\n\n        assert_equal(b[['f1', 'f2']][0].tolist(), (2, 3))\n        assert_equal(b[['f2', 'f1']][0].tolist(), (3, 2))\n        assert_equal(b[['f1', 'f3']][0].tolist(), (2, (1,)))\n\n        # non-ascii unicode field indexing is well behaved\n        assert_raises(ValueError, a.__setitem__, u'\\u03e0', 1)\n        assert_raises(ValueError, a.__getitem__, u'\\u03e0')\n\n    def test_record_hash(self):\n        a = np.array([(1, 2), (1, 2)], dtype='i1,i2')\n        a.flags.writeable = False\n        b = np.array([(1, 2), (3, 4)], dtype=[('num1', 'i1'), ('num2', 'i2')])\n        b.flags.writeable = False\n        c = np.array([(1, 2), (3, 4)], dtype='i1,i2')\n        c.flags.writeable = False\n        assert_(hash(a[0]) == hash(a[1]))\n        assert_(hash(a[0]) == hash(b[0]))\n        assert_(hash(a[0]) != hash(b[1]))\n        assert_(hash(c[0]) == hash(a[0]) and c[0] == a[0])\n\n    def test_record_no_hash(self):\n        a = np.array([(1, 2), (1, 2)], dtype='i1,i2')\n        assert_raises(TypeError, hash, a[0])\n\n    def test_empty_structure_creation(self):\n        # make sure these do not raise errors (gh-5631)\n        np.array([()], dtype={'names': [], 'formats': [],\n                           'offsets': [], 'itemsize': 12})\n        np.array([(), (), (), (), ()], dtype={'names': [], 'formats': [],\n                                           'offsets': [], 'itemsize': 12})\n\n    def test_multifield_indexing_view(self):\n        a = np.ones(3, dtype=[('a', 'i4'), ('b', 'f4'), ('c', 'u4')])\n        v = a[['a', 'c']]\n        assert_(v.base is a)\n        assert_(v.dtype == np.dtype({'names': ['a', 'c'],\n                                     'formats': ['i4', 'u4'],\n                                     'offsets': [0, 8]}))\n        v[:] = (4,5)\n        assert_equal(a[0].item(), (4, 1, 5))\n\nclass TestView:\n    def test_basic(self):\n        x = np.array([(1, 2, 3, 4), (5, 6, 7, 8)],\n                     dtype=[('r', np.int8), ('g', np.int8),\n                            ('b', np.int8), ('a', np.int8)])\n        # We must be specific about the endianness here:\n        y = x.view(dtype='<i4')\n        # ... and again without the keyword.\n        z = x.view('<i4')\n        assert_array_equal(y, z)\n        assert_array_equal(y, [67305985, 134678021])\n\n\ndef _mean(a, **args):\n    return a.mean(**args)\n\n\ndef _var(a, **args):\n    return a.var(**args)\n\n\ndef _std(a, **args):\n    return a.std(**args)\n\n\nclass TestStats:\n\n    funcs = [_mean, _var, _std]\n\n    def setup(self):\n        np.random.seed(range(3))\n        self.rmat = np.random.random((4, 5))\n        self.cmat = self.rmat + 1j * self.rmat\n        self.omat = np.array([Decimal(repr(r)) for r in self.rmat.flat])\n        self.omat = self.omat.reshape(4, 5)\n\n    def test_python_type(self):\n        for x in (np.float16(1.), 1, 1., 1+0j):\n            assert_equal(np.mean([x]), 1.)\n            assert_equal(np.std([x]), 0.)\n            assert_equal(np.var([x]), 0.)\n\n    def test_keepdims(self):\n        mat = np.eye(3)\n        for f in self.funcs:\n            for axis in [0, 1]:\n                res = f(mat, axis=axis, keepdims=True)\n                assert_(res.ndim == mat.ndim)\n                assert_(res.shape[axis] == 1)\n            for axis in [None]:\n                res = f(mat, axis=axis, keepdims=True)\n                assert_(res.shape == (1, 1))\n\n    def test_out(self):\n        mat = np.eye(3)\n        for f in self.funcs:\n            out = np.zeros(3)\n            tgt = f(mat, axis=1)\n            res = f(mat, axis=1, out=out)\n            assert_almost_equal(res, out)\n            assert_almost_equal(res, tgt)\n        out = np.empty(2)\n        assert_raises(ValueError, f, mat, axis=1, out=out)\n        out = np.empty((2, 2))\n        assert_raises(ValueError, f, mat, axis=1, out=out)\n\n    def test_dtype_from_input(self):\n\n        icodes = np.typecodes['AllInteger']\n        fcodes = np.typecodes['AllFloat']\n\n        # object type\n        for f in self.funcs:\n            mat = np.array([[Decimal(1)]*3]*3)\n            tgt = mat.dtype.type\n            res = f(mat, axis=1).dtype.type\n            assert_(res is tgt)\n            # scalar case\n            res = type(f(mat, axis=None))\n            assert_(res is Decimal)\n\n        # integer types\n        for f in self.funcs:\n            for c in icodes:\n                mat = np.eye(3, dtype=c)\n                tgt = np.float64\n                res = f(mat, axis=1).dtype.type\n                assert_(res is tgt)\n                # scalar case\n                res = f(mat, axis=None).dtype.type\n                assert_(res is tgt)\n\n        # mean for float types\n        for f in [_mean]:\n            for c in fcodes:\n                mat = np.eye(3, dtype=c)\n                tgt = mat.dtype.type\n                res = f(mat, axis=1).dtype.type\n                assert_(res is tgt)\n                # scalar case\n                res = f(mat, axis=None).dtype.type\n                assert_(res is tgt)\n\n        # var, std for float types\n        for f in [_var, _std]:\n            for c in fcodes:\n                mat = np.eye(3, dtype=c)\n                # deal with complex types\n                tgt = mat.real.dtype.type\n                res = f(mat, axis=1).dtype.type\n                assert_(res is tgt)\n                # scalar case\n                res = f(mat, axis=None).dtype.type\n                assert_(res is tgt)\n\n    def test_dtype_from_dtype(self):\n        mat = np.eye(3)\n\n        # stats for integer types\n        # FIXME:\n        # this needs definition as there are lots places along the line\n        # where type casting may take place.\n\n        # for f in self.funcs:\n        #    for c in np.typecodes['AllInteger']:\n        #        tgt = np.dtype(c).type\n        #        res = f(mat, axis=1, dtype=c).dtype.type\n        #        assert_(res is tgt)\n        #        # scalar case\n        #        res = f(mat, axis=None, dtype=c).dtype.type\n        #        assert_(res is tgt)\n\n        # stats for float types\n        for f in self.funcs:\n            for c in np.typecodes['AllFloat']:\n                tgt = np.dtype(c).type\n                res = f(mat, axis=1, dtype=c).dtype.type\n                assert_(res is tgt)\n                # scalar case\n                res = f(mat, axis=None, dtype=c).dtype.type\n                assert_(res is tgt)\n\n    def test_ddof(self):\n        for f in [_var]:\n            for ddof in range(3):\n                dim = self.rmat.shape[1]\n                tgt = f(self.rmat, axis=1) * dim\n                res = f(self.rmat, axis=1, ddof=ddof) * (dim - ddof)\n        for f in [_std]:\n            for ddof in range(3):\n                dim = self.rmat.shape[1]\n                tgt = f(self.rmat, axis=1) * np.sqrt(dim)\n                res = f(self.rmat, axis=1, ddof=ddof) * np.sqrt(dim - ddof)\n                assert_almost_equal(res, tgt)\n                assert_almost_equal(res, tgt)\n\n    def test_ddof_too_big(self):\n        dim = self.rmat.shape[1]\n        for f in [_var, _std]:\n            for ddof in range(dim, dim + 2):\n                with warnings.catch_warnings(record=True) as w:\n                    warnings.simplefilter('always')\n                    res = f(self.rmat, axis=1, ddof=ddof)\n                    assert_(not (res < 0).any())\n                    assert_(len(w) > 0)\n                    assert_(issubclass(w[0].category, RuntimeWarning))\n\n    def test_empty(self):\n        A = np.zeros((0, 3))\n        for f in self.funcs:\n            for axis in [0, None]:\n                with warnings.catch_warnings(record=True) as w:\n                    warnings.simplefilter('always')\n                    assert_(np.isnan(f(A, axis=axis)).all())\n                    assert_(len(w) > 0)\n                    assert_(issubclass(w[0].category, RuntimeWarning))\n            for axis in [1]:\n                with warnings.catch_warnings(record=True) as w:\n                    warnings.simplefilter('always')\n                    assert_equal(f(A, axis=axis), np.zeros([]))\n\n    def test_mean_values(self):\n        for mat in [self.rmat, self.cmat, self.omat]:\n            for axis in [0, 1]:\n                tgt = mat.sum(axis=axis)\n                res = _mean(mat, axis=axis) * mat.shape[axis]\n                assert_almost_equal(res, tgt)\n            for axis in [None]:\n                tgt = mat.sum(axis=axis)\n                res = _mean(mat, axis=axis) * np.prod(mat.shape)\n                assert_almost_equal(res, tgt)\n\n    def test_mean_float16(self):\n        # This fail if the sum inside mean is done in float16 instead\n        # of float32.\n        assert_(_mean(np.ones(100000, dtype='float16')) == 1)\n\n    def test_mean_axis_error(self):\n        # Ensure that AxisError is raised instead of IndexError when axis is\n        # out of bounds, see gh-15817.\n        with assert_raises(np.core._exceptions.AxisError):\n            np.arange(10).mean(axis=2)\n\n    def test_var_values(self):\n        for mat in [self.rmat, self.cmat, self.omat]:\n            for axis in [0, 1, None]:\n                msqr = _mean(mat * mat.conj(), axis=axis)\n                mean = _mean(mat, axis=axis)\n                tgt = msqr - mean * mean.conjugate()\n                res = _var(mat, axis=axis)\n                assert_almost_equal(res, tgt)\n\n    @pytest.mark.parametrize(('complex_dtype', 'ndec'), (\n        ('complex64', 6),\n        ('complex128', 7),\n        ('clongdouble', 7),\n    ))\n    def test_var_complex_values(self, complex_dtype, ndec):\n        # Test fast-paths for every builtin complex type\n        for axis in [0, 1, None]:\n            mat = self.cmat.copy().astype(complex_dtype)\n            msqr = _mean(mat * mat.conj(), axis=axis)\n            mean = _mean(mat, axis=axis)\n            tgt = msqr - mean * mean.conjugate()\n            res = _var(mat, axis=axis)\n            assert_almost_equal(res, tgt, decimal=ndec)\n\n    def test_var_dimensions(self):\n        # _var paths for complex number introduce additions on views that\n        # increase dimensions. Ensure this generalizes to higher dims\n        mat = np.stack([self.cmat]*3)\n        for axis in [0, 1, 2, -1, None]:\n            msqr = _mean(mat * mat.conj(), axis=axis)\n            mean = _mean(mat, axis=axis)\n            tgt = msqr - mean * mean.conjugate()\n            res = _var(mat, axis=axis)\n            assert_almost_equal(res, tgt)\n\n    def test_var_complex_byteorder(self):\n        # Test that var fast-path does not cause failures for complex arrays\n        # with non-native byteorder\n        cmat = self.cmat.copy().astype('complex128')\n        cmat_swapped = cmat.astype(cmat.dtype.newbyteorder())\n        assert_almost_equal(cmat.var(), cmat_swapped.var())\n\n    def test_var_axis_error(self):\n        # Ensure that AxisError is raised instead of IndexError when axis is\n        # out of bounds, see gh-15817.\n        with assert_raises(np.core._exceptions.AxisError):\n            np.arange(10).var(axis=2)\n\n    def test_std_values(self):\n        for mat in [self.rmat, self.cmat, self.omat]:\n            for axis in [0, 1, None]:\n                tgt = np.sqrt(_var(mat, axis=axis))\n                res = _std(mat, axis=axis)\n                assert_almost_equal(res, tgt)\n\n    def test_subclass(self):\n        class TestArray(np.ndarray):\n            def __new__(cls, data, info):\n                result = np.array(data)\n                result = result.view(cls)\n                result.info = info\n                return result\n\n            def __array_finalize__(self, obj):\n                self.info = getattr(obj, \"info\", '')\n\n        dat = TestArray([[1, 2, 3, 4], [5, 6, 7, 8]], 'jubba')\n        res = dat.mean(1)\n        assert_(res.info == dat.info)\n        res = dat.std(1)\n        assert_(res.info == dat.info)\n        res = dat.var(1)\n        assert_(res.info == dat.info)\n\nclass TestVdot:\n    def test_basic(self):\n        dt_numeric = np.typecodes['AllFloat'] + np.typecodes['AllInteger']\n        dt_complex = np.typecodes['Complex']\n\n        # test real\n        a = np.eye(3)\n        for dt in dt_numeric + 'O':\n            b = a.astype(dt)\n            res = np.vdot(b, b)\n            assert_(np.isscalar(res))\n            assert_equal(np.vdot(b, b), 3)\n\n        # test complex\n        a = np.eye(3) * 1j\n        for dt in dt_complex + 'O':\n            b = a.astype(dt)\n            res = np.vdot(b, b)\n            assert_(np.isscalar(res))\n            assert_equal(np.vdot(b, b), 3)\n\n        # test boolean\n        b = np.eye(3, dtype=bool)\n        res = np.vdot(b, b)\n        assert_(np.isscalar(res))\n        assert_equal(np.vdot(b, b), True)\n\n    def test_vdot_array_order(self):\n        a = np.array([[1, 2], [3, 4]], order='C')\n        b = np.array([[1, 2], [3, 4]], order='F')\n        res = np.vdot(a, a)\n\n        # integer arrays are exact\n        assert_equal(np.vdot(a, b), res)\n        assert_equal(np.vdot(b, a), res)\n        assert_equal(np.vdot(b, b), res)\n\n    def test_vdot_uncontiguous(self):\n        for size in [2, 1000]:\n            # Different sizes match different branches in vdot.\n            a = np.zeros((size, 2, 2))\n            b = np.zeros((size, 2, 2))\n            a[:, 0, 0] = np.arange(size)\n            b[:, 0, 0] = np.arange(size) + 1\n            # Make a and b uncontiguous:\n            a = a[..., 0]\n            b = b[..., 0]\n\n            assert_equal(np.vdot(a, b),\n                         np.vdot(a.flatten(), b.flatten()))\n            assert_equal(np.vdot(a, b.copy()),\n                         np.vdot(a.flatten(), b.flatten()))\n            assert_equal(np.vdot(a.copy(), b),\n                         np.vdot(a.flatten(), b.flatten()))\n            assert_equal(np.vdot(a.copy('F'), b),\n                         np.vdot(a.flatten(), b.flatten()))\n            assert_equal(np.vdot(a, b.copy('F')),\n                         np.vdot(a.flatten(), b.flatten()))\n\n\nclass TestDot:\n    def setup(self):\n        np.random.seed(128)\n        self.A = np.random.rand(4, 2)\n        self.b1 = np.random.rand(2, 1)\n        self.b2 = np.random.rand(2)\n        self.b3 = np.random.rand(1, 2)\n        self.b4 = np.random.rand(4)\n        self.N = 7\n\n    def test_dotmatmat(self):\n        A = self.A\n        res = np.dot(A.transpose(), A)\n        tgt = np.array([[1.45046013, 0.86323640],\n                        [0.86323640, 0.84934569]])\n        assert_almost_equal(res, tgt, decimal=self.N)\n\n    def test_dotmatvec(self):\n        A, b1 = self.A, self.b1\n        res = np.dot(A, b1)\n        tgt = np.array([[0.32114320], [0.04889721],\n                        [0.15696029], [0.33612621]])\n        assert_almost_equal(res, tgt, decimal=self.N)\n\n    def test_dotmatvec2(self):\n        A, b2 = self.A, self.b2\n        res = np.dot(A, b2)\n        tgt = np.array([0.29677940, 0.04518649, 0.14468333, 0.31039293])\n        assert_almost_equal(res, tgt, decimal=self.N)\n\n    def test_dotvecmat(self):\n        A, b4 = self.A, self.b4\n        res = np.dot(b4, A)\n        tgt = np.array([1.23495091, 1.12222648])\n        assert_almost_equal(res, tgt, decimal=self.N)\n\n    def test_dotvecmat2(self):\n        b3, A = self.b3, self.A\n        res = np.dot(b3, A.transpose())\n        tgt = np.array([[0.58793804, 0.08957460, 0.30605758, 0.62716383]])\n        assert_almost_equal(res, tgt, decimal=self.N)\n\n    def test_dotvecmat3(self):\n        A, b4 = self.A, self.b4\n        res = np.dot(A.transpose(), b4)\n        tgt = np.array([1.23495091, 1.12222648])\n        assert_almost_equal(res, tgt, decimal=self.N)\n\n    def test_dotvecvecouter(self):\n        b1, b3 = self.b1, self.b3\n        res = np.dot(b1, b3)\n        tgt = np.array([[0.20128610, 0.08400440], [0.07190947, 0.03001058]])\n        assert_almost_equal(res, tgt, decimal=self.N)\n\n    def test_dotvecvecinner(self):\n        b1, b3 = self.b1, self.b3\n        res = np.dot(b3, b1)\n        tgt = np.array([[ 0.23129668]])\n        assert_almost_equal(res, tgt, decimal=self.N)\n\n    def test_dotcolumnvect1(self):\n        b1 = np.ones((3, 1))\n        b2 = [5.3]\n        res = np.dot(b1, b2)\n        tgt = np.array([5.3, 5.3, 5.3])\n        assert_almost_equal(res, tgt, decimal=self.N)\n\n    def test_dotcolumnvect2(self):\n        b1 = np.ones((3, 1)).transpose()\n        b2 = [6.2]\n        res = np.dot(b2, b1)\n        tgt = np.array([6.2, 6.2, 6.2])\n        assert_almost_equal(res, tgt, decimal=self.N)\n\n    def test_dotvecscalar(self):\n        np.random.seed(100)\n        b1 = np.random.rand(1, 1)\n        b2 = np.random.rand(1, 4)\n        res = np.dot(b1, b2)\n        tgt = np.array([[0.15126730, 0.23068496, 0.45905553, 0.00256425]])\n        assert_almost_equal(res, tgt, decimal=self.N)\n\n    def test_dotvecscalar2(self):\n        np.random.seed(100)\n        b1 = np.random.rand(4, 1)\n        b2 = np.random.rand(1, 1)\n        res = np.dot(b1, b2)\n        tgt = np.array([[0.00256425],[0.00131359],[0.00200324],[ 0.00398638]])\n        assert_almost_equal(res, tgt, decimal=self.N)\n\n    def test_all(self):\n        dims = [(), (1,), (1, 1)]\n        dout = [(), (1,), (1, 1), (1,), (), (1,), (1, 1), (1,), (1, 1)]\n        for dim, (dim1, dim2) in zip(dout, itertools.product(dims, dims)):\n            b1 = np.zeros(dim1)\n            b2 = np.zeros(dim2)\n            res = np.dot(b1, b2)\n            tgt = np.zeros(dim)\n            assert_(res.shape == tgt.shape)\n            assert_almost_equal(res, tgt, decimal=self.N)\n\n    def test_vecobject(self):\n        class Vec:\n            def __init__(self, sequence=None):\n                if sequence is None:\n                    sequence = []\n                self.array = np.array(sequence)\n\n            def __add__(self, other):\n                out = Vec()\n                out.array = self.array + other.array\n                return out\n\n            def __sub__(self, other):\n                out = Vec()\n                out.array = self.array - other.array\n                return out\n\n            def __mul__(self, other):  # with scalar\n                out = Vec(self.array.copy())\n                out.array *= other\n                return out\n\n            def __rmul__(self, other):\n                return self*other\n\n        U_non_cont = np.transpose([[1., 1.], [1., 2.]])\n        U_cont = np.ascontiguousarray(U_non_cont)\n        x = np.array([Vec([1., 0.]), Vec([0., 1.])])\n        zeros = np.array([Vec([0., 0.]), Vec([0., 0.])])\n        zeros_test = np.dot(U_cont, x) - np.dot(U_non_cont, x)\n        assert_equal(zeros[0].array, zeros_test[0].array)\n        assert_equal(zeros[1].array, zeros_test[1].array)\n\n    def test_dot_2args(self):\n        from numpy.core.multiarray import dot\n\n        a = np.array([[1, 2], [3, 4]], dtype=float)\n        b = np.array([[1, 0], [1, 1]], dtype=float)\n        c = np.array([[3, 2], [7, 4]], dtype=float)\n\n        d = dot(a, b)\n        assert_allclose(c, d)\n\n    def test_dot_3args(self):\n        from numpy.core.multiarray import dot\n\n        np.random.seed(22)\n        f = np.random.random_sample((1024, 16))\n        v = np.random.random_sample((16, 32))\n\n        r = np.empty((1024, 32))\n        for i in range(12):\n            dot(f, v, r)\n        if HAS_REFCOUNT:\n            assert_equal(sys.getrefcount(r), 2)\n        r2 = dot(f, v, out=None)\n        assert_array_equal(r2, r)\n        assert_(r is dot(f, v, out=r))\n\n        v = v[:, 0].copy()  # v.shape == (16,)\n        r = r[:, 0].copy()  # r.shape == (1024,)\n        r2 = dot(f, v)\n        assert_(r is dot(f, v, r))\n        assert_array_equal(r2, r)\n\n    def test_dot_3args_errors(self):\n        from numpy.core.multiarray import dot\n\n        np.random.seed(22)\n        f = np.random.random_sample((1024, 16))\n        v = np.random.random_sample((16, 32))\n\n        r = np.empty((1024, 31))\n        assert_raises(ValueError, dot, f, v, r)\n\n        r = np.empty((1024,))\n        assert_raises(ValueError, dot, f, v, r)\n\n        r = np.empty((32,))\n        assert_raises(ValueError, dot, f, v, r)\n\n        r = np.empty((32, 1024))\n        assert_raises(ValueError, dot, f, v, r)\n        assert_raises(ValueError, dot, f, v, r.T)\n\n        r = np.empty((1024, 64))\n        assert_raises(ValueError, dot, f, v, r[:, ::2])\n        assert_raises(ValueError, dot, f, v, r[:, :32])\n\n        r = np.empty((1024, 32), dtype=np.float32)\n        assert_raises(ValueError, dot, f, v, r)\n\n        r = np.empty((1024, 32), dtype=int)\n        assert_raises(ValueError, dot, f, v, r)\n\n    def test_dot_array_order(self):\n        a = np.array([[1, 2], [3, 4]], order='C')\n        b = np.array([[1, 2], [3, 4]], order='F')\n        res = np.dot(a, a)\n\n        # integer arrays are exact\n        assert_equal(np.dot(a, b), res)\n        assert_equal(np.dot(b, a), res)\n        assert_equal(np.dot(b, b), res)\n\n    def test_accelerate_framework_sgemv_fix(self):\n\n        def aligned_array(shape, align, dtype, order='C'):\n            d = dtype(0)\n            N = np.prod(shape)\n            tmp = np.zeros(N * d.nbytes + align, dtype=np.uint8)\n            address = tmp.__array_interface__[\"data\"][0]\n            for offset in range(align):\n                if (address + offset) % align == 0:\n                    break\n            tmp = tmp[offset:offset+N*d.nbytes].view(dtype=dtype)\n            return tmp.reshape(shape, order=order)\n\n        def as_aligned(arr, align, dtype, order='C'):\n            aligned = aligned_array(arr.shape, align, dtype, order)\n            aligned[:] = arr[:]\n            return aligned\n\n        def assert_dot_close(A, X, desired):\n            assert_allclose(np.dot(A, X), desired, rtol=1e-5, atol=1e-7)\n\n        m = aligned_array(100, 15, np.float32)\n        s = aligned_array((100, 100), 15, np.float32)\n        np.dot(s, m)  # this will always segfault if the bug is present\n\n        testdata = itertools.product((15,32), (10000,), (200,89), ('C','F'))\n        for align, m, n, a_order in testdata:\n            # Calculation in double precision\n            A_d = np.random.rand(m, n)\n            X_d = np.random.rand(n)\n            desired = np.dot(A_d, X_d)\n            # Calculation with aligned single precision\n            A_f = as_aligned(A_d, align, np.float32, order=a_order)\n            X_f = as_aligned(X_d, align, np.float32)\n            assert_dot_close(A_f, X_f, desired)\n            # Strided A rows\n            A_d_2 = A_d[::2]\n            desired = np.dot(A_d_2, X_d)\n            A_f_2 = A_f[::2]\n            assert_dot_close(A_f_2, X_f, desired)\n            # Strided A columns, strided X vector\n            A_d_22 = A_d_2[:, ::2]\n            X_d_2 = X_d[::2]\n            desired = np.dot(A_d_22, X_d_2)\n            A_f_22 = A_f_2[:, ::2]\n            X_f_2 = X_f[::2]\n            assert_dot_close(A_f_22, X_f_2, desired)\n            # Check the strides are as expected\n            if a_order == 'F':\n                assert_equal(A_f_22.strides, (8, 8 * m))\n            else:\n                assert_equal(A_f_22.strides, (8 * n, 8))\n            assert_equal(X_f_2.strides, (8,))\n            # Strides in A rows + cols only\n            X_f_2c = as_aligned(X_f_2, align, np.float32)\n            assert_dot_close(A_f_22, X_f_2c, desired)\n            # Strides just in A cols\n            A_d_12 = A_d[:, ::2]\n            desired = np.dot(A_d_12, X_d_2)\n            A_f_12 = A_f[:, ::2]\n            assert_dot_close(A_f_12, X_f_2c, desired)\n            # Strides in A cols and X\n            assert_dot_close(A_f_12, X_f_2, desired)\n\n\nclass MatmulCommon:\n    \"\"\"Common tests for '@' operator and numpy.matmul.\n\n    \"\"\"\n    # Should work with these types. Will want to add\n    # \"O\" at some point\n    types = \"?bhilqBHILQefdgFDGO\"\n\n    def test_exceptions(self):\n        dims = [\n            ((1,), (2,)),            # mismatched vector vector\n            ((2, 1,), (2,)),         # mismatched matrix vector\n            ((2,), (1, 2)),          # mismatched vector matrix\n            ((1, 2), (3, 1)),        # mismatched matrix matrix\n            ((1,), ()),              # vector scalar\n            ((), (1)),               # scalar vector\n            ((1, 1), ()),            # matrix scalar\n            ((), (1, 1)),            # scalar matrix\n            ((2, 2, 1), (3, 1, 2)),  # cannot broadcast\n            ]\n\n        for dt, (dm1, dm2) in itertools.product(self.types, dims):\n            a = np.ones(dm1, dtype=dt)\n            b = np.ones(dm2, dtype=dt)\n            assert_raises(ValueError, self.matmul, a, b)\n\n    def test_shapes(self):\n        dims = [\n            ((1, 1), (2, 1, 1)),     # broadcast first argument\n            ((2, 1, 1), (1, 1)),     # broadcast second argument\n            ((2, 1, 1), (2, 1, 1)),  # matrix stack sizes match\n            ]\n\n        for dt, (dm1, dm2) in itertools.product(self.types, dims):\n            a = np.ones(dm1, dtype=dt)\n            b = np.ones(dm2, dtype=dt)\n            res = self.matmul(a, b)\n            assert_(res.shape == (2, 1, 1))\n\n        # vector vector returns scalars.\n        for dt in self.types:\n            a = np.ones((2,), dtype=dt)\n            b = np.ones((2,), dtype=dt)\n            c = self.matmul(a, b)\n            assert_(np.array(c).shape == ())\n\n    def test_result_types(self):\n        mat = np.ones((1,1))\n        vec = np.ones((1,))\n        for dt in self.types:\n            m = mat.astype(dt)\n            v = vec.astype(dt)\n            for arg in [(m, v), (v, m), (m, m)]:\n                res = self.matmul(*arg)\n                assert_(res.dtype == dt)\n\n            # vector vector returns scalars\n            if dt != \"O\":\n                res = self.matmul(v, v)\n                assert_(type(res) is np.dtype(dt).type)\n\n    def test_scalar_output(self):\n        vec1 = np.array([2])\n        vec2 = np.array([3, 4]).reshape(1, -1)\n        tgt = np.array([6, 8])\n        for dt in self.types[1:]:\n            v1 = vec1.astype(dt)\n            v2 = vec2.astype(dt)\n            res = self.matmul(v1, v2)\n            assert_equal(res, tgt)\n            res = self.matmul(v2.T, v1)\n            assert_equal(res, tgt)\n\n        # boolean type\n        vec = np.array([True, True], dtype='?').reshape(1, -1)\n        res = self.matmul(vec[:, 0], vec)\n        assert_equal(res, True)\n\n    def test_vector_vector_values(self):\n        vec1 = np.array([1, 2])\n        vec2 = np.array([3, 4]).reshape(-1, 1)\n        tgt1 = np.array([11])\n        tgt2 = np.array([[3, 6], [4, 8]])\n        for dt in self.types[1:]:\n            v1 = vec1.astype(dt)\n            v2 = vec2.astype(dt)\n            res = self.matmul(v1, v2)\n            assert_equal(res, tgt1)\n            # no broadcast, we must make v1 into a 2d ndarray\n            res = self.matmul(v2, v1.reshape(1, -1))\n            assert_equal(res, tgt2)\n\n        # boolean type\n        vec = np.array([True, True], dtype='?')\n        res = self.matmul(vec, vec)\n        assert_equal(res, True)\n\n    def test_vector_matrix_values(self):\n        vec = np.array([1, 2])\n        mat1 = np.array([[1, 2], [3, 4]])\n        mat2 = np.stack([mat1]*2, axis=0)\n        tgt1 = np.array([7, 10])\n        tgt2 = np.stack([tgt1]*2, axis=0)\n        for dt in self.types[1:]:\n            v = vec.astype(dt)\n            m1 = mat1.astype(dt)\n            m2 = mat2.astype(dt)\n            res = self.matmul(v, m1)\n            assert_equal(res, tgt1)\n            res = self.matmul(v, m2)\n            assert_equal(res, tgt2)\n\n        # boolean type\n        vec = np.array([True, False])\n        mat1 = np.array([[True, False], [False, True]])\n        mat2 = np.stack([mat1]*2, axis=0)\n        tgt1 = np.array([True, False])\n        tgt2 = np.stack([tgt1]*2, axis=0)\n\n        res = self.matmul(vec, mat1)\n        assert_equal(res, tgt1)\n        res = self.matmul(vec, mat2)\n        assert_equal(res, tgt2)\n\n    def test_matrix_vector_values(self):\n        vec = np.array([1, 2])\n        mat1 = np.array([[1, 2], [3, 4]])\n        mat2 = np.stack([mat1]*2, axis=0)\n        tgt1 = np.array([5, 11])\n        tgt2 = np.stack([tgt1]*2, axis=0)\n        for dt in self.types[1:]:\n            v = vec.astype(dt)\n            m1 = mat1.astype(dt)\n            m2 = mat2.astype(dt)\n            res = self.matmul(m1, v)\n            assert_equal(res, tgt1)\n            res = self.matmul(m2, v)\n            assert_equal(res, tgt2)\n\n        # boolean type\n        vec = np.array([True, False])\n        mat1 = np.array([[True, False], [False, True]])\n        mat2 = np.stack([mat1]*2, axis=0)\n        tgt1 = np.array([True, False])\n        tgt2 = np.stack([tgt1]*2, axis=0)\n\n        res = self.matmul(vec, mat1)\n        assert_equal(res, tgt1)\n        res = self.matmul(vec, mat2)\n        assert_equal(res, tgt2)\n\n    def test_matrix_matrix_values(self):\n        mat1 = np.array([[1, 2], [3, 4]])\n        mat2 = np.array([[1, 0], [1, 1]])\n        mat12 = np.stack([mat1, mat2], axis=0)\n        mat21 = np.stack([mat2, mat1], axis=0)\n        tgt11 = np.array([[7, 10], [15, 22]])\n        tgt12 = np.array([[3, 2], [7, 4]])\n        tgt21 = np.array([[1, 2], [4, 6]])\n        tgt12_21 = np.stack([tgt12, tgt21], axis=0)\n        tgt11_12 = np.stack((tgt11, tgt12), axis=0)\n        tgt11_21 = np.stack((tgt11, tgt21), axis=0)\n        for dt in self.types[1:]:\n            m1 = mat1.astype(dt)\n            m2 = mat2.astype(dt)\n            m12 = mat12.astype(dt)\n            m21 = mat21.astype(dt)\n\n            # matrix @ matrix\n            res = self.matmul(m1, m2)\n            assert_equal(res, tgt12)\n            res = self.matmul(m2, m1)\n            assert_equal(res, tgt21)\n\n            # stacked @ matrix\n            res = self.matmul(m12, m1)\n            assert_equal(res, tgt11_21)\n\n            # matrix @ stacked\n            res = self.matmul(m1, m12)\n            assert_equal(res, tgt11_12)\n\n            # stacked @ stacked\n            res = self.matmul(m12, m21)\n            assert_equal(res, tgt12_21)\n\n        # boolean type\n        m1 = np.array([[1, 1], [0, 0]], dtype=np.bool_)\n        m2 = np.array([[1, 0], [1, 1]], dtype=np.bool_)\n        m12 = np.stack([m1, m2], axis=0)\n        m21 = np.stack([m2, m1], axis=0)\n        tgt11 = m1\n        tgt12 = m1\n        tgt21 = np.array([[1, 1], [1, 1]], dtype=np.bool_)\n        tgt12_21 = np.stack([tgt12, tgt21], axis=0)\n        tgt11_12 = np.stack((tgt11, tgt12), axis=0)\n        tgt11_21 = np.stack((tgt11, tgt21), axis=0)\n\n        # matrix @ matrix\n        res = self.matmul(m1, m2)\n        assert_equal(res, tgt12)\n        res = self.matmul(m2, m1)\n        assert_equal(res, tgt21)\n\n        # stacked @ matrix\n        res = self.matmul(m12, m1)\n        assert_equal(res, tgt11_21)\n\n        # matrix @ stacked\n        res = self.matmul(m1, m12)\n        assert_equal(res, tgt11_12)\n\n        # stacked @ stacked\n        res = self.matmul(m12, m21)\n        assert_equal(res, tgt12_21)\n\n\nclass TestMatmul(MatmulCommon):\n    matmul = np.matmul\n\n    def test_out_arg(self):\n        a = np.ones((5, 2), dtype=float)\n        b = np.array([[1, 3], [5, 7]], dtype=float)\n        tgt = np.dot(a, b)\n\n        # test as positional argument\n        msg = \"out positional argument\"\n        out = np.zeros((5, 2), dtype=float)\n        self.matmul(a, b, out)\n        assert_array_equal(out, tgt, err_msg=msg)\n\n        # test as keyword argument\n        msg = \"out keyword argument\"\n        out = np.zeros((5, 2), dtype=float)\n        self.matmul(a, b, out=out)\n        assert_array_equal(out, tgt, err_msg=msg)\n\n        # test out with not allowed type cast (safe casting)\n        msg = \"Cannot cast ufunc .* output\"\n        out = np.zeros((5, 2), dtype=np.int32)\n        assert_raises_regex(TypeError, msg, self.matmul, a, b, out=out)\n\n        # test out with type upcast to complex\n        out = np.zeros((5, 2), dtype=np.complex128)\n        c = self.matmul(a, b, out=out)\n        assert_(c is out)\n        with suppress_warnings() as sup:\n            sup.filter(np.ComplexWarning, '')\n            c = c.astype(tgt.dtype)\n        assert_array_equal(c, tgt)\n\n    def test_out_contiguous(self):\n        a = np.ones((5, 2), dtype=float)\n        b = np.array([[1, 3], [5, 7]], dtype=float)\n        v = np.array([1, 3], dtype=float)\n        tgt = np.dot(a, b)\n        tgt_mv = np.dot(a, v)\n\n        # test out non-contiguous\n        out = np.ones((5, 2, 2), dtype=float)\n        c = self.matmul(a, b, out=out[..., 0])\n        assert c.base is out\n        assert_array_equal(c, tgt)\n        c = self.matmul(a, v, out=out[:, 0, 0])\n        assert_array_equal(c, tgt_mv)\n        c = self.matmul(v, a.T, out=out[:, 0, 0])\n        assert_array_equal(c, tgt_mv)\n\n        # test out contiguous in only last dim\n        out = np.ones((10, 2), dtype=float)\n        c = self.matmul(a, b, out=out[::2, :])\n        assert_array_equal(c, tgt)\n\n        # test transposes of out, args\n        out = np.ones((5, 2), dtype=float)\n        c = self.matmul(b.T, a.T, out=out.T)\n        assert_array_equal(out, tgt)\n\n    m1 = np.arange(15.).reshape(5, 3)\n    m2 = np.arange(21.).reshape(3, 7)\n    m3 = np.arange(30.).reshape(5, 6)[:, ::2]  # non-contiguous\n    vc = np.arange(10.)\n    vr = np.arange(6.)\n    m0 = np.zeros((3, 0))\n    @pytest.mark.parametrize('args', (\n            # matrix-matrix\n            (m1, m2), (m2.T, m1.T), (m2.T.copy(), m1.T), (m2.T, m1.T.copy()),\n            # matrix-matrix-transpose, contiguous and non\n            (m1, m1.T), (m1.T, m1), (m1, m3.T), (m3, m1.T),\n            (m3, m3.T), (m3.T, m3),\n            # matrix-matrix non-contiguous\n            (m3, m2), (m2.T, m3.T), (m2.T.copy(), m3.T),\n            # vector-matrix, matrix-vector, contiguous\n            (m1, vr[:3]), (vc[:5], m1), (m1.T, vc[:5]), (vr[:3], m1.T),\n            # vector-matrix, matrix-vector, vector non-contiguous\n            (m1, vr[::2]), (vc[::2], m1), (m1.T, vc[::2]), (vr[::2], m1.T),\n            # vector-matrix, matrix-vector, matrix non-contiguous\n            (m3, vr[:3]), (vc[:5], m3), (m3.T, vc[:5]), (vr[:3], m3.T),\n            # vector-matrix, matrix-vector, both non-contiguous\n            (m3, vr[::2]), (vc[::2], m3), (m3.T, vc[::2]), (vr[::2], m3.T),\n            # size == 0\n            (m0, m0.T), (m0.T, m0), (m1, m0), (m0.T, m1.T),\n        ))\n    def test_dot_equivalent(self, args):\n        r1 = np.matmul(*args)\n        r2 = np.dot(*args)\n        assert_equal(r1, r2)\n\n        r3 = np.matmul(args[0].copy(), args[1].copy())\n        assert_equal(r1, r3)\n\n    def test_matmul_object(self):\n        import fractions\n\n        f = np.vectorize(fractions.Fraction)\n        def random_ints():\n            return np.random.randint(1, 1000, size=(10, 3, 3))\n        M1 = f(random_ints(), random_ints())\n        M2 = f(random_ints(), random_ints())\n\n        M3 = self.matmul(M1, M2)\n\n        [N1, N2, N3] = [a.astype(float) for a in [M1, M2, M3]]\n\n        assert_allclose(N3, self.matmul(N1, N2))\n\n    def test_matmul_object_type_scalar(self):\n        from fractions import Fraction as F\n        v = np.array([F(2,3), F(5,7)])\n        res = self.matmul(v, v)\n        assert_(type(res) is F)\n\n    def test_matmul_empty(self):\n        a = np.empty((3, 0), dtype=object)\n        b = np.empty((0, 3), dtype=object)\n        c = np.zeros((3, 3))\n        assert_array_equal(np.matmul(a, b), c)\n\n    def test_matmul_exception_multiply(self):\n        # test that matmul fails if `__mul__` is missing\n        class add_not_multiply():\n            def __add__(self, other):\n                return self\n        a = np.full((3,3), add_not_multiply())\n        with assert_raises(TypeError):\n            b = np.matmul(a, a)\n\n    def test_matmul_exception_add(self):\n        # test that matmul fails if `__add__` is missing\n        class multiply_not_add():\n            def __mul__(self, other):\n                return self\n        a = np.full((3,3), multiply_not_add())\n        with assert_raises(TypeError):\n            b = np.matmul(a, a)\n\n    def test_matmul_bool(self):\n        # gh-14439\n        a = np.array([[1, 0],[1, 1]], dtype=bool)\n        assert np.max(a.view(np.uint8)) == 1\n        b = np.matmul(a, a)\n        # matmul with boolean output should always be 0, 1\n        assert np.max(b.view(np.uint8)) == 1\n\n        rg = np.random.default_rng(np.random.PCG64(43))\n        d = rg.integers(2, size=4*5, dtype=np.int8)\n        d = d.reshape(4, 5) > 0\n        out1 = np.matmul(d, d.reshape(5, 4))\n        out2 = np.dot(d, d.reshape(5, 4))\n        assert_equal(out1, out2)\n\n        c = np.matmul(np.zeros((2, 0), dtype=bool), np.zeros(0, dtype=bool))\n        assert not np.any(c)\n\n\nclass TestMatmulOperator(MatmulCommon):\n    import operator\n    matmul = operator.matmul\n\n    def test_array_priority_override(self):\n\n        class A:\n            __array_priority__ = 1000\n\n            def __matmul__(self, other):\n                return \"A\"\n\n            def __rmatmul__(self, other):\n                return \"A\"\n\n        a = A()\n        b = np.ones(2)\n        assert_equal(self.matmul(a, b), \"A\")\n        assert_equal(self.matmul(b, a), \"A\")\n\n    def test_matmul_raises(self):\n        assert_raises(TypeError, self.matmul, np.int8(5), np.int8(5))\n        assert_raises(TypeError, self.matmul, np.void(b'abc'), np.void(b'abc'))\n        assert_raises(ValueError, self.matmul, np.arange(10), np.void(b'abc'))\n\ndef test_matmul_inplace():\n    # It would be nice to support in-place matmul eventually, but for now\n    # we don't have a working implementation, so better just to error out\n    # and nudge people to writing \"a = a @ b\".\n    a = np.eye(3)\n    b = np.eye(3)\n    assert_raises(TypeError, a.__imatmul__, b)\n    import operator\n    assert_raises(TypeError, operator.imatmul, a, b)\n    assert_raises(TypeError, exec, \"a @= b\", globals(), locals())\n\ndef test_matmul_axes():\n    a = np.arange(3*4*5).reshape(3, 4, 5)\n    c = np.matmul(a, a, axes=[(-2, -1), (-1, -2), (1, 2)])\n    assert c.shape == (3, 4, 4)\n    d = np.matmul(a, a, axes=[(-2, -1), (-1, -2), (0, 1)])\n    assert d.shape == (4, 4, 3)\n    e = np.swapaxes(d, 0, 2)\n    assert_array_equal(e, c)\n    f = np.matmul(a, np.arange(3), axes=[(1, 0), (0), (0)])\n    assert f.shape == (4, 5)\n\n\nclass TestInner:\n\n    def test_inner_type_mismatch(self):\n        c = 1.\n        A = np.array((1,1), dtype='i,i')\n\n        assert_raises(TypeError, np.inner, c, A)\n        assert_raises(TypeError, np.inner, A, c)\n\n    def test_inner_scalar_and_vector(self):\n        for dt in np.typecodes['AllInteger'] + np.typecodes['AllFloat'] + '?':\n            sca = np.array(3, dtype=dt)[()]\n            vec = np.array([1, 2], dtype=dt)\n            desired = np.array([3, 6], dtype=dt)\n            assert_equal(np.inner(vec, sca), desired)\n            assert_equal(np.inner(sca, vec), desired)\n\n    def test_vecself(self):\n        # Ticket 844.\n        # Inner product of a vector with itself segfaults or give\n        # meaningless result\n        a = np.zeros(shape=(1, 80), dtype=np.float64)\n        p = np.inner(a, a)\n        assert_almost_equal(p, 0, decimal=14)\n\n    def test_inner_product_with_various_contiguities(self):\n        # github issue 6532\n        for dt in np.typecodes['AllInteger'] + np.typecodes['AllFloat'] + '?':\n            # check an inner product involving a matrix transpose\n            A = np.array([[1, 2], [3, 4]], dtype=dt)\n            B = np.array([[1, 3], [2, 4]], dtype=dt)\n            C = np.array([1, 1], dtype=dt)\n            desired = np.array([4, 6], dtype=dt)\n            assert_equal(np.inner(A.T, C), desired)\n            assert_equal(np.inner(C, A.T), desired)\n            assert_equal(np.inner(B, C), desired)\n            assert_equal(np.inner(C, B), desired)\n            # check a matrix product\n            desired = np.array([[7, 10], [15, 22]], dtype=dt)\n            assert_equal(np.inner(A, B), desired)\n            # check the syrk vs. gemm paths\n            desired = np.array([[5, 11], [11, 25]], dtype=dt)\n            assert_equal(np.inner(A, A), desired)\n            assert_equal(np.inner(A, A.copy()), desired)\n            # check an inner product involving an aliased and reversed view\n            a = np.arange(5).astype(dt)\n            b = a[::-1]\n            desired = np.array(10, dtype=dt).item()\n            assert_equal(np.inner(b, a), desired)\n\n    def test_3d_tensor(self):\n        for dt in np.typecodes['AllInteger'] + np.typecodes['AllFloat'] + '?':\n            a = np.arange(24).reshape(2,3,4).astype(dt)\n            b = np.arange(24, 48).reshape(2,3,4).astype(dt)\n            desired = np.array(\n                [[[[ 158,  182,  206],\n                   [ 230,  254,  278]],\n\n                  [[ 566,  654,  742],\n                   [ 830,  918, 1006]],\n\n                  [[ 974, 1126, 1278],\n                   [1430, 1582, 1734]]],\n\n                 [[[1382, 1598, 1814],\n                   [2030, 2246, 2462]],\n\n                  [[1790, 2070, 2350],\n                   [2630, 2910, 3190]],\n\n                  [[2198, 2542, 2886],\n                   [3230, 3574, 3918]]]],\n                dtype=dt\n            )\n            assert_equal(np.inner(a, b), desired)\n            assert_equal(np.inner(b, a).transpose(2,3,0,1), desired)\n\n\nclass TestAlen:\n    def test_basic(self):\n        with pytest.warns(DeprecationWarning):\n            m = np.array([1, 2, 3])\n            assert_equal(np.alen(m), 3)\n\n            m = np.array([[1, 2, 3], [4, 5, 7]])\n            assert_equal(np.alen(m), 2)\n\n            m = [1, 2, 3]\n            assert_equal(np.alen(m), 3)\n\n            m = [[1, 2, 3], [4, 5, 7]]\n            assert_equal(np.alen(m), 2)\n\n    def test_singleton(self):\n        with pytest.warns(DeprecationWarning):\n            assert_equal(np.alen(5), 1)\n\n\nclass TestChoose:\n    def setup(self):\n        self.x = 2*np.ones((3,), dtype=int)\n        self.y = 3*np.ones((3,), dtype=int)\n        self.x2 = 2*np.ones((2, 3), dtype=int)\n        self.y2 = 3*np.ones((2, 3), dtype=int)\n        self.ind = [0, 0, 1]\n\n    def test_basic(self):\n        A = np.choose(self.ind, (self.x, self.y))\n        assert_equal(A, [2, 2, 3])\n\n    def test_broadcast1(self):\n        A = np.choose(self.ind, (self.x2, self.y2))\n        assert_equal(A, [[2, 2, 3], [2, 2, 3]])\n\n    def test_broadcast2(self):\n        A = np.choose(self.ind, (self.x, self.y2))\n        assert_equal(A, [[2, 2, 3], [2, 2, 3]])\n\n    @pytest.mark.parametrize(\"ops\",\n        [(1000, np.array([1], dtype=np.uint8)),\n         (-1, np.array([1], dtype=np.uint8)),\n         (1., np.float32(3)),\n         (1., np.array([3], dtype=np.float32))],)\n    def test_output_dtype(self, ops):\n        expected_dt = np.result_type(*ops)\n        assert(np.choose([0], ops).dtype == expected_dt)\n\n\nclass TestRepeat:\n    def setup(self):\n        self.m = np.array([1, 2, 3, 4, 5, 6])\n        self.m_rect = self.m.reshape((2, 3))\n\n    def test_basic(self):\n        A = np.repeat(self.m, [1, 3, 2, 1, 1, 2])\n        assert_equal(A, [1, 2, 2, 2, 3,\n                         3, 4, 5, 6, 6])\n\n    def test_broadcast1(self):\n        A = np.repeat(self.m, 2)\n        assert_equal(A, [1, 1, 2, 2, 3, 3,\n                         4, 4, 5, 5, 6, 6])\n\n    def test_axis_spec(self):\n        A = np.repeat(self.m_rect, [2, 1], axis=0)\n        assert_equal(A, [[1, 2, 3],\n                         [1, 2, 3],\n                         [4, 5, 6]])\n\n        A = np.repeat(self.m_rect, [1, 3, 2], axis=1)\n        assert_equal(A, [[1, 2, 2, 2, 3, 3],\n                         [4, 5, 5, 5, 6, 6]])\n\n    def test_broadcast2(self):\n        A = np.repeat(self.m_rect, 2, axis=0)\n        assert_equal(A, [[1, 2, 3],\n                         [1, 2, 3],\n                         [4, 5, 6],\n                         [4, 5, 6]])\n\n        A = np.repeat(self.m_rect, 2, axis=1)\n        assert_equal(A, [[1, 1, 2, 2, 3, 3],\n                         [4, 4, 5, 5, 6, 6]])\n\n\n# TODO: test for multidimensional\nNEIGH_MODE = {'zero': 0, 'one': 1, 'constant': 2, 'circular': 3, 'mirror': 4}\n\n\n@pytest.mark.parametrize('dt', [float, Decimal], ids=['float', 'object'])\nclass TestNeighborhoodIter:\n    # Simple, 2d tests\n    def test_simple2d(self, dt):\n        # Test zero and one padding for simple data type\n        x = np.array([[0, 1], [2, 3]], dtype=dt)\n        r = [np.array([[0, 0, 0], [0, 0, 1]], dtype=dt),\n             np.array([[0, 0, 0], [0, 1, 0]], dtype=dt),\n             np.array([[0, 0, 1], [0, 2, 3]], dtype=dt),\n             np.array([[0, 1, 0], [2, 3, 0]], dtype=dt)]\n        l = _multiarray_tests.test_neighborhood_iterator(\n                x, [-1, 0, -1, 1], x[0], NEIGH_MODE['zero'])\n        assert_array_equal(l, r)\n\n        r = [np.array([[1, 1, 1], [1, 0, 1]], dtype=dt),\n             np.array([[1, 1, 1], [0, 1, 1]], dtype=dt),\n             np.array([[1, 0, 1], [1, 2, 3]], dtype=dt),\n             np.array([[0, 1, 1], [2, 3, 1]], dtype=dt)]\n        l = _multiarray_tests.test_neighborhood_iterator(\n                x, [-1, 0, -1, 1], x[0], NEIGH_MODE['one'])\n        assert_array_equal(l, r)\n\n        r = [np.array([[4, 4, 4], [4, 0, 1]], dtype=dt),\n             np.array([[4, 4, 4], [0, 1, 4]], dtype=dt),\n             np.array([[4, 0, 1], [4, 2, 3]], dtype=dt),\n             np.array([[0, 1, 4], [2, 3, 4]], dtype=dt)]\n        l = _multiarray_tests.test_neighborhood_iterator(\n                x, [-1, 0, -1, 1], 4, NEIGH_MODE['constant'])\n        assert_array_equal(l, r)\n\n    def test_mirror2d(self, dt):\n        x = np.array([[0, 1], [2, 3]], dtype=dt)\n        r = [np.array([[0, 0, 1], [0, 0, 1]], dtype=dt),\n             np.array([[0, 1, 1], [0, 1, 1]], dtype=dt),\n             np.array([[0, 0, 1], [2, 2, 3]], dtype=dt),\n             np.array([[0, 1, 1], [2, 3, 3]], dtype=dt)]\n        l = _multiarray_tests.test_neighborhood_iterator(\n                x, [-1, 0, -1, 1], x[0], NEIGH_MODE['mirror'])\n        assert_array_equal(l, r)\n\n    # Simple, 1d tests\n    def test_simple(self, dt):\n        # Test padding with constant values\n        x = np.linspace(1, 5, 5).astype(dt)\n        r = [[0, 1, 2], [1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 0]]\n        l = _multiarray_tests.test_neighborhood_iterator(\n                x, [-1, 1], x[0], NEIGH_MODE['zero'])\n        assert_array_equal(l, r)\n\n        r = [[1, 1, 2], [1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 1]]\n        l = _multiarray_tests.test_neighborhood_iterator(\n                x, [-1, 1], x[0], NEIGH_MODE['one'])\n        assert_array_equal(l, r)\n\n        r = [[x[4], 1, 2], [1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, x[4]]]\n        l = _multiarray_tests.test_neighborhood_iterator(\n                x, [-1, 1], x[4], NEIGH_MODE['constant'])\n        assert_array_equal(l, r)\n\n    # Test mirror modes\n    def test_mirror(self, dt):\n        x = np.linspace(1, 5, 5).astype(dt)\n        r = np.array([[2, 1, 1, 2, 3], [1, 1, 2, 3, 4], [1, 2, 3, 4, 5],\n                [2, 3, 4, 5, 5], [3, 4, 5, 5, 4]], dtype=dt)\n        l = _multiarray_tests.test_neighborhood_iterator(\n                x, [-2, 2], x[1], NEIGH_MODE['mirror'])\n        assert_([i.dtype == dt for i in l])\n        assert_array_equal(l, r)\n\n    # Circular mode\n    def test_circular(self, dt):\n        x = np.linspace(1, 5, 5).astype(dt)\n        r = np.array([[4, 5, 1, 2, 3], [5, 1, 2, 3, 4], [1, 2, 3, 4, 5],\n                [2, 3, 4, 5, 1], [3, 4, 5, 1, 2]], dtype=dt)\n        l = _multiarray_tests.test_neighborhood_iterator(\n                x, [-2, 2], x[0], NEIGH_MODE['circular'])\n        assert_array_equal(l, r)\n\n\n# Test stacking neighborhood iterators\nclass TestStackedNeighborhoodIter:\n    # Simple, 1d test: stacking 2 constant-padded neigh iterators\n    def test_simple_const(self):\n        dt = np.float64\n        # Test zero and one padding for simple data type\n        x = np.array([1, 2, 3], dtype=dt)\n        r = [np.array([0], dtype=dt),\n             np.array([0], dtype=dt),\n             np.array([1], dtype=dt),\n             np.array([2], dtype=dt),\n             np.array([3], dtype=dt),\n             np.array([0], dtype=dt),\n             np.array([0], dtype=dt)]\n        l = _multiarray_tests.test_neighborhood_iterator_oob(\n                x, [-2, 4], NEIGH_MODE['zero'], [0, 0], NEIGH_MODE['zero'])\n        assert_array_equal(l, r)\n\n        r = [np.array([1, 0, 1], dtype=dt),\n             np.array([0, 1, 2], dtype=dt),\n             np.array([1, 2, 3], dtype=dt),\n             np.array([2, 3, 0], dtype=dt),\n             np.array([3, 0, 1], dtype=dt)]\n        l = _multiarray_tests.test_neighborhood_iterator_oob(\n                x, [-1, 3], NEIGH_MODE['zero'], [-1, 1], NEIGH_MODE['one'])\n        assert_array_equal(l, r)\n\n    # 2nd simple, 1d test: stacking 2 neigh iterators, mixing const padding and\n    # mirror padding\n    def test_simple_mirror(self):\n        dt = np.float64\n        # Stacking zero on top of mirror\n        x = np.array([1, 2, 3], dtype=dt)\n        r = [np.array([0, 1, 1], dtype=dt),\n             np.array([1, 1, 2], dtype=dt),\n             np.array([1, 2, 3], dtype=dt),\n             np.array([2, 3, 3], dtype=dt),\n             np.array([3, 3, 0], dtype=dt)]\n        l = _multiarray_tests.test_neighborhood_iterator_oob(\n                x, [-1, 3], NEIGH_MODE['mirror'], [-1, 1], NEIGH_MODE['zero'])\n        assert_array_equal(l, r)\n\n        # Stacking mirror on top of zero\n        x = np.array([1, 2, 3], dtype=dt)\n        r = [np.array([1, 0, 0], dtype=dt),\n             np.array([0, 0, 1], dtype=dt),\n             np.array([0, 1, 2], dtype=dt),\n             np.array([1, 2, 3], dtype=dt),\n             np.array([2, 3, 0], dtype=dt)]\n        l = _multiarray_tests.test_neighborhood_iterator_oob(\n                x, [-1, 3], NEIGH_MODE['zero'], [-2, 0], NEIGH_MODE['mirror'])\n        assert_array_equal(l, r)\n\n        # Stacking mirror on top of zero: 2nd\n        x = np.array([1, 2, 3], dtype=dt)\n        r = [np.array([0, 1, 2], dtype=dt),\n             np.array([1, 2, 3], dtype=dt),\n             np.array([2, 3, 0], dtype=dt),\n             np.array([3, 0, 0], dtype=dt),\n             np.array([0, 0, 3], dtype=dt)]\n        l = _multiarray_tests.test_neighborhood_iterator_oob(\n                x, [-1, 3], NEIGH_MODE['zero'], [0, 2], NEIGH_MODE['mirror'])\n        assert_array_equal(l, r)\n\n        # Stacking mirror on top of zero: 3rd\n        x = np.array([1, 2, 3], dtype=dt)\n        r = [np.array([1, 0, 0, 1, 2], dtype=dt),\n             np.array([0, 0, 1, 2, 3], dtype=dt),\n             np.array([0, 1, 2, 3, 0], dtype=dt),\n             np.array([1, 2, 3, 0, 0], dtype=dt),\n             np.array([2, 3, 0, 0, 3], dtype=dt)]\n        l = _multiarray_tests.test_neighborhood_iterator_oob(\n                x, [-1, 3], NEIGH_MODE['zero'], [-2, 2], NEIGH_MODE['mirror'])\n        assert_array_equal(l, r)\n\n    # 3rd simple, 1d test: stacking 2 neigh iterators, mixing const padding and\n    # circular padding\n    def test_simple_circular(self):\n        dt = np.float64\n        # Stacking zero on top of mirror\n        x = np.array([1, 2, 3], dtype=dt)\n        r = [np.array([0, 3, 1], dtype=dt),\n             np.array([3, 1, 2], dtype=dt),\n             np.array([1, 2, 3], dtype=dt),\n             np.array([2, 3, 1], dtype=dt),\n             np.array([3, 1, 0], dtype=dt)]\n        l = _multiarray_tests.test_neighborhood_iterator_oob(\n                x, [-1, 3], NEIGH_MODE['circular'], [-1, 1], NEIGH_MODE['zero'])\n        assert_array_equal(l, r)\n\n        # Stacking mirror on top of zero\n        x = np.array([1, 2, 3], dtype=dt)\n        r = [np.array([3, 0, 0], dtype=dt),\n             np.array([0, 0, 1], dtype=dt),\n             np.array([0, 1, 2], dtype=dt),\n             np.array([1, 2, 3], dtype=dt),\n             np.array([2, 3, 0], dtype=dt)]\n        l = _multiarray_tests.test_neighborhood_iterator_oob(\n                x, [-1, 3], NEIGH_MODE['zero'], [-2, 0], NEIGH_MODE['circular'])\n        assert_array_equal(l, r)\n\n        # Stacking mirror on top of zero: 2nd\n        x = np.array([1, 2, 3], dtype=dt)\n        r = [np.array([0, 1, 2], dtype=dt),\n             np.array([1, 2, 3], dtype=dt),\n             np.array([2, 3, 0], dtype=dt),\n             np.array([3, 0, 0], dtype=dt),\n             np.array([0, 0, 1], dtype=dt)]\n        l = _multiarray_tests.test_neighborhood_iterator_oob(\n                x, [-1, 3], NEIGH_MODE['zero'], [0, 2], NEIGH_MODE['circular'])\n        assert_array_equal(l, r)\n\n        # Stacking mirror on top of zero: 3rd\n        x = np.array([1, 2, 3], dtype=dt)\n        r = [np.array([3, 0, 0, 1, 2], dtype=dt),\n             np.array([0, 0, 1, 2, 3], dtype=dt),\n             np.array([0, 1, 2, 3, 0], dtype=dt),\n             np.array([1, 2, 3, 0, 0], dtype=dt),\n             np.array([2, 3, 0, 0, 1], dtype=dt)]\n        l = _multiarray_tests.test_neighborhood_iterator_oob(\n                x, [-1, 3], NEIGH_MODE['zero'], [-2, 2], NEIGH_MODE['circular'])\n        assert_array_equal(l, r)\n\n    # 4th simple, 1d test: stacking 2 neigh iterators, but with lower iterator\n    # being strictly within the array\n    def test_simple_strict_within(self):\n        dt = np.float64\n        # Stacking zero on top of zero, first neighborhood strictly inside the\n        # array\n        x = np.array([1, 2, 3], dtype=dt)\n        r = [np.array([1, 2, 3, 0], dtype=dt)]\n        l = _multiarray_tests.test_neighborhood_iterator_oob(\n                x, [1, 1], NEIGH_MODE['zero'], [-1, 2], NEIGH_MODE['zero'])\n        assert_array_equal(l, r)\n\n        # Stacking mirror on top of zero, first neighborhood strictly inside the\n        # array\n        x = np.array([1, 2, 3], dtype=dt)\n        r = [np.array([1, 2, 3, 3], dtype=dt)]\n        l = _multiarray_tests.test_neighborhood_iterator_oob(\n                x, [1, 1], NEIGH_MODE['zero'], [-1, 2], NEIGH_MODE['mirror'])\n        assert_array_equal(l, r)\n\n        # Stacking mirror on top of zero, first neighborhood strictly inside the\n        # array\n        x = np.array([1, 2, 3], dtype=dt)\n        r = [np.array([1, 2, 3, 1], dtype=dt)]\n        l = _multiarray_tests.test_neighborhood_iterator_oob(\n                x, [1, 1], NEIGH_MODE['zero'], [-1, 2], NEIGH_MODE['circular'])\n        assert_array_equal(l, r)\n\nclass TestWarnings:\n\n    def test_complex_warning(self):\n        x = np.array([1, 2])\n        y = np.array([1-2j, 1+2j])\n\n        with warnings.catch_warnings():\n            warnings.simplefilter(\"error\", np.ComplexWarning)\n            assert_raises(np.ComplexWarning, x.__setitem__, slice(None), y)\n            assert_equal(x, [1, 2])\n\n\nclass TestMinScalarType:\n\n    def test_usigned_shortshort(self):\n        dt = np.min_scalar_type(2**8-1)\n        wanted = np.dtype('uint8')\n        assert_equal(wanted, dt)\n\n    def test_usigned_short(self):\n        dt = np.min_scalar_type(2**16-1)\n        wanted = np.dtype('uint16')\n        assert_equal(wanted, dt)\n\n    def test_usigned_int(self):\n        dt = np.min_scalar_type(2**32-1)\n        wanted = np.dtype('uint32')\n        assert_equal(wanted, dt)\n\n    def test_usigned_longlong(self):\n        dt = np.min_scalar_type(2**63-1)\n        wanted = np.dtype('uint64')\n        assert_equal(wanted, dt)\n\n    def test_object(self):\n        dt = np.min_scalar_type(2**64)\n        wanted = np.dtype('O')\n        assert_equal(wanted, dt)\n\n\nfrom numpy.core._internal import _dtype_from_pep3118\n\n\nclass TestPEP3118Dtype:\n    def _check(self, spec, wanted):\n        dt = np.dtype(wanted)\n        actual = _dtype_from_pep3118(spec)\n        assert_equal(actual, dt,\n                     err_msg=\"spec %r != dtype %r\" % (spec, wanted))\n\n    def test_native_padding(self):\n        align = np.dtype('i').alignment\n        for j in range(8):\n            if j == 0:\n                s = 'bi'\n            else:\n                s = 'b%dxi' % j\n            self._check('@'+s, {'f0': ('i1', 0),\n                                'f1': ('i', align*(1 + j//align))})\n            self._check('='+s, {'f0': ('i1', 0),\n                                'f1': ('i', 1+j)})\n\n    def test_native_padding_2(self):\n        # Native padding should work also for structs and sub-arrays\n        self._check('x3T{xi}', {'f0': (({'f0': ('i', 4)}, (3,)), 4)})\n        self._check('^x3T{xi}', {'f0': (({'f0': ('i', 1)}, (3,)), 1)})\n\n    def test_trailing_padding(self):\n        # Trailing padding should be included, *and*, the item size\n        # should match the alignment if in aligned mode\n        align = np.dtype('i').alignment\n        size = np.dtype('i').itemsize\n\n        def aligned(n):\n            return align*(1 + (n-1)//align)\n\n        base = dict(formats=['i'], names=['f0'])\n\n        self._check('ix',    dict(itemsize=aligned(size + 1), **base))\n        self._check('ixx',   dict(itemsize=aligned(size + 2), **base))\n        self._check('ixxx',  dict(itemsize=aligned(size + 3), **base))\n        self._check('ixxxx', dict(itemsize=aligned(size + 4), **base))\n        self._check('i7x',   dict(itemsize=aligned(size + 7), **base))\n\n        self._check('^ix',    dict(itemsize=size + 1, **base))\n        self._check('^ixx',   dict(itemsize=size + 2, **base))\n        self._check('^ixxx',  dict(itemsize=size + 3, **base))\n        self._check('^ixxxx', dict(itemsize=size + 4, **base))\n        self._check('^i7x',   dict(itemsize=size + 7, **base))\n\n    def test_native_padding_3(self):\n        dt = np.dtype(\n                [('a', 'b'), ('b', 'i'),\n                    ('sub', np.dtype('b,i')), ('c', 'i')],\n                align=True)\n        self._check(\"T{b:a:xxxi:b:T{b:f0:=i:f1:}:sub:xxxi:c:}\", dt)\n\n        dt = np.dtype(\n                [('a', 'b'), ('b', 'i'), ('c', 'b'), ('d', 'b'),\n                    ('e', 'b'), ('sub', np.dtype('b,i', align=True))])\n        self._check(\"T{b:a:=i:b:b:c:b:d:b:e:T{b:f0:xxxi:f1:}:sub:}\", dt)\n\n    def test_padding_with_array_inside_struct(self):\n        dt = np.dtype(\n                [('a', 'b'), ('b', 'i'), ('c', 'b', (3,)),\n                    ('d', 'i')],\n                align=True)\n        self._check(\"T{b:a:xxxi:b:3b:c:xi:d:}\", dt)\n\n    def test_byteorder_inside_struct(self):\n        # The byte order after @T{=i} should be '=', not '@'.\n        # Check this by noting the absence of native alignment.\n        self._check('@T{^i}xi', {'f0': ({'f0': ('i', 0)}, 0),\n                                 'f1': ('i', 5)})\n\n    def test_intra_padding(self):\n        # Natively aligned sub-arrays may require some internal padding\n        align = np.dtype('i').alignment\n        size = np.dtype('i').itemsize\n\n        def aligned(n):\n            return (align*(1 + (n-1)//align))\n\n        self._check('(3)T{ix}', (dict(\n            names=['f0'],\n            formats=['i'],\n            offsets=[0],\n            itemsize=aligned(size + 1)\n        ), (3,)))\n\n    def test_char_vs_string(self):\n        dt = np.dtype('c')\n        self._check('c', dt)\n\n        dt = np.dtype([('f0', 'S1', (4,)), ('f1', 'S4')])\n        self._check('4c4s', dt)\n\n    def test_field_order(self):\n        # gh-9053 - previously, we relied on dictionary key order\n        self._check(\"(0)I:a:f:b:\", [('a', 'I', (0,)), ('b', 'f')])\n        self._check(\"(0)I:b:f:a:\", [('b', 'I', (0,)), ('a', 'f')])\n\n    def test_unnamed_fields(self):\n        self._check('ii',     [('f0', 'i'), ('f1', 'i')])\n        self._check('ii:f0:', [('f1', 'i'), ('f0', 'i')])\n\n        self._check('i', 'i')\n        self._check('i:f0:', [('f0', 'i')])\n\n\nclass TestNewBufferProtocol:\n    \"\"\" Test PEP3118 buffers \"\"\"\n\n    def _check_roundtrip(self, obj):\n        obj = np.asarray(obj)\n        x = memoryview(obj)\n        y = np.asarray(x)\n        y2 = np.array(x)\n        assert_(not y.flags.owndata)\n        assert_(y2.flags.owndata)\n\n        assert_equal(y.dtype, obj.dtype)\n        assert_equal(y.shape, obj.shape)\n        assert_array_equal(obj, y)\n\n        assert_equal(y2.dtype, obj.dtype)\n        assert_equal(y2.shape, obj.shape)\n        assert_array_equal(obj, y2)\n\n    def test_roundtrip(self):\n        x = np.array([1, 2, 3, 4, 5], dtype='i4')\n        self._check_roundtrip(x)\n\n        x = np.array([[1, 2], [3, 4]], dtype=np.float64)\n        self._check_roundtrip(x)\n\n        x = np.zeros((3, 3, 3), dtype=np.float32)[:, 0,:]\n        self._check_roundtrip(x)\n\n        dt = [('a', 'b'),\n              ('b', 'h'),\n              ('c', 'i'),\n              ('d', 'l'),\n              ('dx', 'q'),\n              ('e', 'B'),\n              ('f', 'H'),\n              ('g', 'I'),\n              ('h', 'L'),\n              ('hx', 'Q'),\n              ('i', np.single),\n              ('j', np.double),\n              ('k', np.longdouble),\n              ('ix', np.csingle),\n              ('jx', np.cdouble),\n              ('kx', np.clongdouble),\n              ('l', 'S4'),\n              ('m', 'U4'),\n              ('n', 'V3'),\n              ('o', '?'),\n              ('p', np.half),\n              ]\n        x = np.array(\n                [(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n                    b'aaaa', 'bbbb', b'xxx', True, 1.0)],\n                dtype=dt)\n        self._check_roundtrip(x)\n\n        x = np.array(([[1, 2], [3, 4]],), dtype=[('a', (int, (2, 2)))])\n        self._check_roundtrip(x)\n\n        x = np.array([1, 2, 3], dtype='>i2')\n        self._check_roundtrip(x)\n\n        x = np.array([1, 2, 3], dtype='<i2')\n        self._check_roundtrip(x)\n\n        x = np.array([1, 2, 3], dtype='>i4')\n        self._check_roundtrip(x)\n\n        x = np.array([1, 2, 3], dtype='<i4')\n        self._check_roundtrip(x)\n\n        # check long long can be represented as non-native\n        x = np.array([1, 2, 3], dtype='>q')\n        self._check_roundtrip(x)\n\n        # Native-only data types can be passed through the buffer interface\n        # only in native byte order\n        if sys.byteorder == 'little':\n            x = np.array([1, 2, 3], dtype='>g')\n            assert_raises(ValueError, self._check_roundtrip, x)\n            x = np.array([1, 2, 3], dtype='<g')\n            self._check_roundtrip(x)\n        else:\n            x = np.array([1, 2, 3], dtype='>g')\n            self._check_roundtrip(x)\n            x = np.array([1, 2, 3], dtype='<g')\n            assert_raises(ValueError, self._check_roundtrip, x)\n\n    def test_roundtrip_half(self):\n        half_list = [\n            1.0,\n            -2.0,\n            6.5504 * 10**4,  # (max half precision)\n            2**-14,  # ~= 6.10352 * 10**-5 (minimum positive normal)\n            2**-24,  # ~= 5.96046 * 10**-8 (minimum strictly positive subnormal)\n            0.0,\n            -0.0,\n            float('+inf'),\n            float('-inf'),\n            0.333251953125,  # ~= 1/3\n        ]\n\n        x = np.array(half_list, dtype='>e')\n        self._check_roundtrip(x)\n        x = np.array(half_list, dtype='<e')\n        self._check_roundtrip(x)\n\n    def test_roundtrip_single_types(self):\n        for typ in np.typeDict.values():\n            dtype = np.dtype(typ)\n\n            if dtype.char in 'Mm':\n                # datetimes cannot be used in buffers\n                continue\n            if dtype.char == 'V':\n                # skip void\n                continue\n\n            x = np.zeros(4, dtype=dtype)\n            self._check_roundtrip(x)\n\n            if dtype.char not in 'qQgG':\n                dt = dtype.newbyteorder('<')\n                x = np.zeros(4, dtype=dt)\n                self._check_roundtrip(x)\n\n                dt = dtype.newbyteorder('>')\n                x = np.zeros(4, dtype=dt)\n                self._check_roundtrip(x)\n\n    def test_roundtrip_scalar(self):\n        # Issue #4015.\n        self._check_roundtrip(0)\n\n    def test_invalid_buffer_format(self):\n        # datetime64 cannot be used fully in a buffer yet\n        # Should be fixed in the next Numpy major release\n        dt = np.dtype([('a', 'uint16'), ('b', 'M8[s]')])\n        a = np.empty(3, dt)\n        assert_raises((ValueError, BufferError), memoryview, a)\n        assert_raises((ValueError, BufferError), memoryview, np.array((3), 'M8[D]'))\n\n    def test_export_simple_1d(self):\n        x = np.array([1, 2, 3, 4, 5], dtype='i')\n        y = memoryview(x)\n        assert_equal(y.format, 'i')\n        assert_equal(y.shape, (5,))\n        assert_equal(y.ndim, 1)\n        assert_equal(y.strides, (4,))\n        assert_equal(y.suboffsets, ())\n        assert_equal(y.itemsize, 4)\n\n    def test_export_simple_nd(self):\n        x = np.array([[1, 2], [3, 4]], dtype=np.float64)\n        y = memoryview(x)\n        assert_equal(y.format, 'd')\n        assert_equal(y.shape, (2, 2))\n        assert_equal(y.ndim, 2)\n        assert_equal(y.strides, (16, 8))\n        assert_equal(y.suboffsets, ())\n        assert_equal(y.itemsize, 8)\n\n    def test_export_discontiguous(self):\n        x = np.zeros((3, 3, 3), dtype=np.float32)[:, 0,:]\n        y = memoryview(x)\n        assert_equal(y.format, 'f')\n        assert_equal(y.shape, (3, 3))\n        assert_equal(y.ndim, 2)\n        assert_equal(y.strides, (36, 4))\n        assert_equal(y.suboffsets, ())\n        assert_equal(y.itemsize, 4)\n\n    def test_export_record(self):\n        dt = [('a', 'b'),\n              ('b', 'h'),\n              ('c', 'i'),\n              ('d', 'l'),\n              ('dx', 'q'),\n              ('e', 'B'),\n              ('f', 'H'),\n              ('g', 'I'),\n              ('h', 'L'),\n              ('hx', 'Q'),\n              ('i', np.single),\n              ('j', np.double),\n              ('k', np.longdouble),\n              ('ix', np.csingle),\n              ('jx', np.cdouble),\n              ('kx', np.clongdouble),\n              ('l', 'S4'),\n              ('m', 'U4'),\n              ('n', 'V3'),\n              ('o', '?'),\n              ('p', np.half),\n              ]\n        x = np.array(\n                [(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n                    b'aaaa', 'bbbb', b'   ', True, 1.0)],\n                dtype=dt)\n        y = memoryview(x)\n        assert_equal(y.shape, (1,))\n        assert_equal(y.ndim, 1)\n        assert_equal(y.suboffsets, ())\n\n        sz = sum([np.dtype(b).itemsize for a, b in dt])\n        if np.dtype('l').itemsize == 4:\n            assert_equal(y.format, 'T{b:a:=h:b:i:c:l:d:q:dx:B:e:@H:f:=I:g:L:h:Q:hx:f:i:d:j:^g:k:=Zf:ix:Zd:jx:^Zg:kx:4s:l:=4w:m:3x:n:?:o:@e:p:}')\n        else:\n            assert_equal(y.format, 'T{b:a:=h:b:i:c:q:d:q:dx:B:e:@H:f:=I:g:Q:h:Q:hx:f:i:d:j:^g:k:=Zf:ix:Zd:jx:^Zg:kx:4s:l:=4w:m:3x:n:?:o:@e:p:}')\n        # Cannot test if NPY_RELAXED_STRIDES_CHECKING changes the strides\n        if not (np.ones(1).strides[0] == np.iinfo(np.intp).max):\n            assert_equal(y.strides, (sz,))\n        assert_equal(y.itemsize, sz)\n\n    def test_export_subarray(self):\n        x = np.array(([[1, 2], [3, 4]],), dtype=[('a', ('i', (2, 2)))])\n        y = memoryview(x)\n        assert_equal(y.format, 'T{(2,2)i:a:}')\n        assert_equal(y.shape, ())\n        assert_equal(y.ndim, 0)\n        assert_equal(y.strides, ())\n        assert_equal(y.suboffsets, ())\n        assert_equal(y.itemsize, 16)\n\n    def test_export_endian(self):\n        x = np.array([1, 2, 3], dtype='>i')\n        y = memoryview(x)\n        if sys.byteorder == 'little':\n            assert_equal(y.format, '>i')\n        else:\n            assert_equal(y.format, 'i')\n\n        x = np.array([1, 2, 3], dtype='<i')\n        y = memoryview(x)\n        if sys.byteorder == 'little':\n            assert_equal(y.format, 'i')\n        else:\n            assert_equal(y.format, '<i')\n\n    def test_export_flags(self):\n        # Check SIMPLE flag, see also gh-3613 (exception should be BufferError)\n        assert_raises(ValueError,\n                      _multiarray_tests.get_buffer_info,\n                       np.arange(5)[::2], ('SIMPLE',))\n\n    def test_padding(self):\n        for j in range(8):\n            x = np.array([(1,), (2,)], dtype={'f0': (int, j)})\n            self._check_roundtrip(x)\n\n    def test_reference_leak(self):\n        if HAS_REFCOUNT:\n            count_1 = sys.getrefcount(np.core._internal)\n        a = np.zeros(4)\n        b = memoryview(a)\n        c = np.asarray(b)\n        if HAS_REFCOUNT:\n            count_2 = sys.getrefcount(np.core._internal)\n            assert_equal(count_1, count_2)\n        del c  # avoid pyflakes unused variable warning.\n\n    def test_padded_struct_array(self):\n        dt1 = np.dtype(\n                [('a', 'b'), ('b', 'i'), ('sub', np.dtype('b,i')), ('c', 'i')],\n                align=True)\n        x1 = np.arange(dt1.itemsize, dtype=np.int8).view(dt1)\n        self._check_roundtrip(x1)\n\n        dt2 = np.dtype(\n                [('a', 'b'), ('b', 'i'), ('c', 'b', (3,)), ('d', 'i')],\n                align=True)\n        x2 = np.arange(dt2.itemsize, dtype=np.int8).view(dt2)\n        self._check_roundtrip(x2)\n\n        dt3 = np.dtype(\n                [('a', 'b'), ('b', 'i'), ('c', 'b'), ('d', 'b'),\n                    ('e', 'b'), ('sub', np.dtype('b,i', align=True))])\n        x3 = np.arange(dt3.itemsize, dtype=np.int8).view(dt3)\n        self._check_roundtrip(x3)\n\n    @pytest.mark.valgrind_error(reason=\"leaks buffer info cache temporarily.\")\n    def test_relaxed_strides(self, c=np.ones((1, 10, 10), dtype='i8')):\n        # Note: c defined as parameter so that it is persistent and leak\n        # checks will notice gh-16934 (buffer info cache leak).\n\n        # Check for NPY_RELAXED_STRIDES_CHECKING:\n        if np.ones((10, 1), order=\"C\").flags.f_contiguous:\n            c.strides = (-1, 80, 8)\n\n        assert_(memoryview(c).strides == (800, 80, 8))\n\n        # Writing C-contiguous data to a BytesIO buffer should work\n        fd = io.BytesIO()\n        fd.write(c.data)\n\n        fortran = c.T\n        assert_(memoryview(fortran).strides == (8, 80, 800))\n\n        arr = np.ones((1, 10))\n        if arr.flags.f_contiguous:\n            shape, strides = _multiarray_tests.get_buffer_info(\n                    arr, ['F_CONTIGUOUS'])\n            assert_(strides[0] == 8)\n            arr = np.ones((10, 1), order='F')\n            shape, strides = _multiarray_tests.get_buffer_info(\n                    arr, ['C_CONTIGUOUS'])\n            assert_(strides[-1] == 8)\n\n    @pytest.mark.valgrind_error(reason=\"leaks buffer info cache temporarily.\")\n    @pytest.mark.skipif(not np.ones((10, 1), order=\"C\").flags.f_contiguous,\n            reason=\"Test is unnecessary (but fails) without relaxed strides.\")\n    def test_relaxed_strides_buffer_info_leak(self, arr=np.ones((1, 10))):\n        \"\"\"Test that alternating export of C- and F-order buffers from\n        an array which is both C- and F-order when relaxed strides is\n        active works.\n        This test defines array in the signature to ensure leaking more\n        references every time the test is run (catching the leak with\n        pytest-leaks).\n        \"\"\"\n        for i in range(10):\n            _, s = _multiarray_tests.get_buffer_info(arr, ['F_CONTIGUOUS'])\n            assert s == (8, 8)\n            _, s = _multiarray_tests.get_buffer_info(arr, ['C_CONTIGUOUS'])\n            assert s == (80, 8)\n\n    def test_out_of_order_fields(self):\n        dt = np.dtype(dict(\n            formats=['<i4', '<i4'],\n            names=['one', 'two'],\n            offsets=[4, 0],\n            itemsize=8\n        ))\n\n        # overlapping fields cannot be represented by PEP3118\n        arr = np.empty(1, dt)\n        with assert_raises(ValueError):\n            memoryview(arr)\n\n    def test_max_dims(self):\n        a = np.empty((1,) * 32)\n        self._check_roundtrip(a)\n\n    @pytest.mark.slow\n    def test_error_too_many_dims(self):\n        def make_ctype(shape, scalar_type):\n            t = scalar_type\n            for dim in shape[::-1]:\n                t = dim * t\n            return t\n\n        # construct a memoryview with 33 dimensions\n        c_u8_33d = make_ctype((1,)*33, ctypes.c_uint8)\n        m = memoryview(c_u8_33d())\n        assert_equal(m.ndim, 33)\n\n        assert_raises_regex(\n            RuntimeError, \"ndim\",\n            np.array, m)\n\n        # The above seems to create some deep cycles, clean them up for\n        # easier reference count debugging:\n        del c_u8_33d, m\n        for i in range(33):\n            if gc.collect() == 0:\n                break\n\n    def test_error_pointer_type(self):\n        # gh-6741\n        m = memoryview(ctypes.pointer(ctypes.c_uint8()))\n        assert_('&' in m.format)\n\n        assert_raises_regex(\n            ValueError, \"format string\",\n            np.array, m)\n\n    def test_error_message_unsupported(self):\n        # wchar has no corresponding numpy type - if this changes in future, we\n        # need a better way to construct an invalid memoryview format.\n        t = ctypes.c_wchar * 4\n        with assert_raises(ValueError) as cm:\n            np.array(t())\n\n        exc = cm.exception\n        with assert_raises_regex(\n            NotImplementedError,\n            r\"Unrepresentable .* 'u' \\(UCS-2 strings\\)\"\n        ):\n            raise exc.__cause__\n\n    def test_ctypes_integer_via_memoryview(self):\n        # gh-11150, due to bpo-10746\n        for c_integer in {ctypes.c_int, ctypes.c_long, ctypes.c_longlong}:\n            value = c_integer(42)\n            with warnings.catch_warnings(record=True):\n                warnings.filterwarnings('always', r'.*\\bctypes\\b', RuntimeWarning)\n                np.asarray(value)\n\n    def test_ctypes_struct_via_memoryview(self):\n        # gh-10528\n        class foo(ctypes.Structure):\n            _fields_ = [('a', ctypes.c_uint8), ('b', ctypes.c_uint32)]\n        f = foo(a=1, b=2)\n\n        with warnings.catch_warnings(record=True):\n            warnings.filterwarnings('always', r'.*\\bctypes\\b', RuntimeWarning)\n            arr = np.asarray(f)\n\n        assert_equal(arr['a'], 1)\n        assert_equal(arr['b'], 2)\n        f.a = 3\n        assert_equal(arr['a'], 3)\n\n\nclass TestArrayAttributeDeletion:\n\n    def test_multiarray_writable_attributes_deletion(self):\n        # ticket #2046, should not seqfault, raise AttributeError\n        a = np.ones(2)\n        attr = ['shape', 'strides', 'data', 'dtype', 'real', 'imag', 'flat']\n        with suppress_warnings() as sup:\n            sup.filter(DeprecationWarning, \"Assigning the 'data' attribute\")\n            for s in attr:\n                assert_raises(AttributeError, delattr, a, s)\n\n    def test_multiarray_not_writable_attributes_deletion(self):\n        a = np.ones(2)\n        attr = [\"ndim\", \"flags\", \"itemsize\", \"size\", \"nbytes\", \"base\",\n                \"ctypes\", \"T\", \"__array_interface__\", \"__array_struct__\",\n                \"__array_priority__\", \"__array_finalize__\"]\n        for s in attr:\n            assert_raises(AttributeError, delattr, a, s)\n\n    def test_multiarray_flags_writable_attribute_deletion(self):\n        a = np.ones(2).flags\n        attr = ['writebackifcopy', 'updateifcopy', 'aligned', 'writeable']\n        for s in attr:\n            assert_raises(AttributeError, delattr, a, s)\n\n    def test_multiarray_flags_not_writable_attribute_deletion(self):\n        a = np.ones(2).flags\n        attr = [\"contiguous\", \"c_contiguous\", \"f_contiguous\", \"fortran\",\n                \"owndata\", \"fnc\", \"forc\", \"behaved\", \"carray\", \"farray\",\n                \"num\"]\n        for s in attr:\n            assert_raises(AttributeError, delattr, a, s)\n\n\nclass TestArrayInterface():\n    class Foo:\n        def __init__(self, value):\n            self.value = value\n            self.iface = {'typestr': 'f8'}\n\n        def __float__(self):\n            return float(self.value)\n\n        @property\n        def __array_interface__(self):\n            return self.iface\n\n\n    f = Foo(0.5)\n\n    @pytest.mark.parametrize('val, iface, expected', [\n        (f, {}, 0.5),\n        ([f], {}, [0.5]),\n        ([f, f], {}, [0.5, 0.5]),\n        (f, {'shape': ()}, 0.5),\n        (f, {'shape': None}, TypeError),\n        (f, {'shape': (1, 1)}, [[0.5]]),\n        (f, {'shape': (2,)}, ValueError),\n        (f, {'strides': ()}, 0.5),\n        (f, {'strides': (2,)}, ValueError),\n        (f, {'strides': 16}, TypeError),\n        ])\n    def test_scalar_interface(self, val, iface, expected):\n        # Test scalar coercion within the array interface\n        self.f.iface = {'typestr': 'f8'}\n        self.f.iface.update(iface)\n        if HAS_REFCOUNT:\n            pre_cnt = sys.getrefcount(np.dtype('f8'))\n        if isinstance(expected, type):\n            assert_raises(expected, np.array, val)\n        else:\n            result = np.array(val)\n            assert_equal(np.array(val), expected)\n            assert result.dtype == 'f8'\n            del result\n        if HAS_REFCOUNT:\n            post_cnt = sys.getrefcount(np.dtype('f8'))\n            assert_equal(pre_cnt, post_cnt)\n\ndef test_interface_no_shape():\n    class ArrayLike:\n        array = np.array(1)\n        __array_interface__ = array.__array_interface__\n    assert_equal(np.array(ArrayLike()), 1)\n\n\ndef test_array_interface_itemsize():\n    # See gh-6361\n    my_dtype = np.dtype({'names': ['A', 'B'], 'formats': ['f4', 'f4'],\n                         'offsets': [0, 8], 'itemsize': 16})\n    a = np.ones(10, dtype=my_dtype)\n    descr_t = np.dtype(a.__array_interface__['descr'])\n    typestr_t = np.dtype(a.__array_interface__['typestr'])\n    assert_equal(descr_t.itemsize, typestr_t.itemsize)\n\n\ndef test_array_interface_empty_shape():\n    # See gh-7994\n    arr = np.array([1, 2, 3])\n    interface1 = dict(arr.__array_interface__)\n    interface1['shape'] = ()\n\n    class DummyArray1:\n        __array_interface__ = interface1\n\n    # NOTE: Because Py2 str/Py3 bytes supports the buffer interface, setting\n    # the interface data to bytes would invoke the bug this tests for, that\n    # __array_interface__ with shape=() is not allowed if the data is an object\n    # exposing the buffer interface\n    interface2 = dict(interface1)\n    interface2['data'] = arr[0].tobytes()\n\n    class DummyArray2:\n        __array_interface__ = interface2\n\n    arr1 = np.asarray(DummyArray1())\n    arr2 = np.asarray(DummyArray2())\n    arr3 = arr[:1].reshape(())\n    assert_equal(arr1, arr2)\n    assert_equal(arr1, arr3)\n\ndef test_array_interface_offset():\n    arr = np.array([1, 2, 3], dtype='int32')\n    interface = dict(arr.__array_interface__)\n    interface['data'] = memoryview(arr)\n    interface['shape'] = (2,)\n    interface['offset'] = 4\n\n\n    class DummyArray:\n        __array_interface__ = interface\n\n    arr1 = np.asarray(DummyArray())\n    assert_equal(arr1, arr[1:])\n\ndef test_flat_element_deletion():\n    it = np.ones(3).flat\n    try:\n        del it[1]\n        del it[1:2]\n    except TypeError:\n        pass\n    except Exception:\n        raise AssertionError\n\n\ndef test_scalar_element_deletion():\n    a = np.zeros(2, dtype=[('x', 'int'), ('y', 'int')])\n    assert_raises(ValueError, a[0].__delitem__, 'x')\n\n\nclass TestMemEventHook:\n    def test_mem_seteventhook(self):\n        # The actual tests are within the C code in\n        # multiarray/_multiarray_tests.c.src\n        _multiarray_tests.test_pydatamem_seteventhook_start()\n        # force an allocation and free of a numpy array\n        # needs to be larger then limit of small memory cacher in ctors.c\n        a = np.zeros(1000)\n        del a\n        break_cycles()\n        _multiarray_tests.test_pydatamem_seteventhook_end()\n\nclass TestMapIter:\n    def test_mapiter(self):\n        # The actual tests are within the C code in\n        # multiarray/_multiarray_tests.c.src\n\n        a = np.arange(12).reshape((3, 4)).astype(float)\n        index = ([1, 1, 2, 0],\n                 [0, 0, 2, 3])\n        vals = [50, 50, 30, 16]\n\n        _multiarray_tests.test_inplace_increment(a, index, vals)\n        assert_equal(a, [[0.00, 1., 2.0, 19.],\n                         [104., 5., 6.0, 7.0],\n                         [8.00, 9., 40., 11.]])\n\n        b = np.arange(6).astype(float)\n        index = (np.array([1, 2, 0]),)\n        vals = [50, 4, 100.1]\n        _multiarray_tests.test_inplace_increment(b, index, vals)\n        assert_equal(b, [100.1,  51.,   6.,   3.,   4.,   5.])\n\n\nclass TestAsCArray:\n    def test_1darray(self):\n        array = np.arange(24, dtype=np.double)\n        from_c = _multiarray_tests.test_as_c_array(array, 3)\n        assert_equal(array[3], from_c)\n\n    def test_2darray(self):\n        array = np.arange(24, dtype=np.double).reshape(3, 8)\n        from_c = _multiarray_tests.test_as_c_array(array, 2, 4)\n        assert_equal(array[2, 4], from_c)\n\n    def test_3darray(self):\n        array = np.arange(24, dtype=np.double).reshape(2, 3, 4)\n        from_c = _multiarray_tests.test_as_c_array(array, 1, 2, 3)\n        assert_equal(array[1, 2, 3], from_c)\n\n\nclass TestConversion:\n    def test_array_scalar_relational_operation(self):\n        # All integer\n        for dt1 in np.typecodes['AllInteger']:\n            assert_(1 > np.array(0, dtype=dt1), \"type %s failed\" % (dt1,))\n            assert_(not 1 < np.array(0, dtype=dt1), \"type %s failed\" % (dt1,))\n\n            for dt2 in np.typecodes['AllInteger']:\n                assert_(np.array(1, dtype=dt1) > np.array(0, dtype=dt2),\n                        \"type %s and %s failed\" % (dt1, dt2))\n                assert_(not np.array(1, dtype=dt1) < np.array(0, dtype=dt2),\n                        \"type %s and %s failed\" % (dt1, dt2))\n\n        # Unsigned integers\n        for dt1 in 'BHILQP':\n            assert_(-1 < np.array(1, dtype=dt1), \"type %s failed\" % (dt1,))\n            assert_(not -1 > np.array(1, dtype=dt1), \"type %s failed\" % (dt1,))\n            assert_(-1 != np.array(1, dtype=dt1), \"type %s failed\" % (dt1,))\n\n            # Unsigned vs signed\n            for dt2 in 'bhilqp':\n                assert_(np.array(1, dtype=dt1) > np.array(-1, dtype=dt2),\n                        \"type %s and %s failed\" % (dt1, dt2))\n                assert_(not np.array(1, dtype=dt1) < np.array(-1, dtype=dt2),\n                        \"type %s and %s failed\" % (dt1, dt2))\n                assert_(np.array(1, dtype=dt1) != np.array(-1, dtype=dt2),\n                        \"type %s and %s failed\" % (dt1, dt2))\n\n        # Signed integers and floats\n        for dt1 in 'bhlqp' + np.typecodes['Float']:\n            assert_(1 > np.array(-1, dtype=dt1), \"type %s failed\" % (dt1,))\n            assert_(not 1 < np.array(-1, dtype=dt1), \"type %s failed\" % (dt1,))\n            assert_(-1 == np.array(-1, dtype=dt1), \"type %s failed\" % (dt1,))\n\n            for dt2 in 'bhlqp' + np.typecodes['Float']:\n                assert_(np.array(1, dtype=dt1) > np.array(-1, dtype=dt2),\n                        \"type %s and %s failed\" % (dt1, dt2))\n                assert_(not np.array(1, dtype=dt1) < np.array(-1, dtype=dt2),\n                        \"type %s and %s failed\" % (dt1, dt2))\n                assert_(np.array(-1, dtype=dt1) == np.array(-1, dtype=dt2),\n                        \"type %s and %s failed\" % (dt1, dt2))\n\n    def test_to_bool_scalar(self):\n        assert_equal(bool(np.array([False])), False)\n        assert_equal(bool(np.array([True])), True)\n        assert_equal(bool(np.array([[42]])), True)\n        assert_raises(ValueError, bool, np.array([1, 2]))\n\n        class NotConvertible:\n            def __bool__(self):\n                raise NotImplementedError\n\n        assert_raises(NotImplementedError, bool, np.array(NotConvertible()))\n        assert_raises(NotImplementedError, bool, np.array([NotConvertible()]))\n\n        self_containing = np.array([None])\n        self_containing[0] = self_containing\n        try:\n            Error = RecursionError\n        except NameError:\n            Error = RuntimeError  # python < 3.5\n        assert_raises(Error, bool, self_containing)  # previously stack overflow\n        self_containing[0] = None  # resolve circular reference\n\n    def test_to_int_scalar(self):\n        # gh-9972 means that these aren't always the same\n        int_funcs = (int, lambda x: x.__int__())\n        for int_func in int_funcs:\n            assert_equal(int_func(np.array(0)), 0)\n            assert_equal(int_func(np.array([1])), 1)\n            assert_equal(int_func(np.array([[42]])), 42)\n            assert_raises(TypeError, int_func, np.array([1, 2]))\n\n            # gh-9972\n            assert_equal(4, int_func(np.array('4')))\n            assert_equal(5, int_func(np.bytes_(b'5')))\n            assert_equal(6, int_func(np.unicode_(u'6')))\n\n            class HasTrunc:\n                def __trunc__(self):\n                    return 3\n            assert_equal(3, int_func(np.array(HasTrunc())))\n            assert_equal(3, int_func(np.array([HasTrunc()])))\n\n            class NotConvertible:\n                def __int__(self):\n                    raise NotImplementedError\n            assert_raises(NotImplementedError,\n                int_func, np.array(NotConvertible()))\n            assert_raises(NotImplementedError,\n                int_func, np.array([NotConvertible()]))\n\n\nclass TestWhere:\n    def test_basic(self):\n        dts = [bool, np.int16, np.int32, np.int64, np.double, np.complex128,\n               np.longdouble, np.clongdouble]\n        for dt in dts:\n            c = np.ones(53, dtype=bool)\n            assert_equal(np.where( c, dt(0), dt(1)), dt(0))\n            assert_equal(np.where(~c, dt(0), dt(1)), dt(1))\n            assert_equal(np.where(True, dt(0), dt(1)), dt(0))\n            assert_equal(np.where(False, dt(0), dt(1)), dt(1))\n            d = np.ones_like(c).astype(dt)\n            e = np.zeros_like(d)\n            r = d.astype(dt)\n            c[7] = False\n            r[7] = e[7]\n            assert_equal(np.where(c, e, e), e)\n            assert_equal(np.where(c, d, e), r)\n            assert_equal(np.where(c, d, e[0]), r)\n            assert_equal(np.where(c, d[0], e), r)\n            assert_equal(np.where(c[::2], d[::2], e[::2]), r[::2])\n            assert_equal(np.where(c[1::2], d[1::2], e[1::2]), r[1::2])\n            assert_equal(np.where(c[::3], d[::3], e[::3]), r[::3])\n            assert_equal(np.where(c[1::3], d[1::3], e[1::3]), r[1::3])\n            assert_equal(np.where(c[::-2], d[::-2], e[::-2]), r[::-2])\n            assert_equal(np.where(c[::-3], d[::-3], e[::-3]), r[::-3])\n            assert_equal(np.where(c[1::-3], d[1::-3], e[1::-3]), r[1::-3])\n\n    def test_exotic(self):\n        # object\n        assert_array_equal(np.where(True, None, None), np.array(None))\n        # zero sized\n        m = np.array([], dtype=bool).reshape(0, 3)\n        b = np.array([], dtype=np.float64).reshape(0, 3)\n        assert_array_equal(np.where(m, 0, b), np.array([]).reshape(0, 3))\n\n        # object cast\n        d = np.array([-1.34, -0.16, -0.54, -0.31, -0.08, -0.95, 0.000, 0.313,\n                      0.547, -0.18, 0.876, 0.236, 1.969, 0.310, 0.699, 1.013,\n                      1.267, 0.229, -1.39, 0.487])\n        nan = float('NaN')\n        e = np.array(['5z', '0l', nan, 'Wz', nan, nan, 'Xq', 'cs', nan, nan,\n                     'QN', nan, nan, 'Fd', nan, nan, 'kp', nan, '36', 'i1'],\n                     dtype=object)\n        m = np.array([0, 0, 1, 0, 1, 1, 0, 0, 1, 1,\n                      0, 1, 1, 0, 1, 1, 0, 1, 0, 0], dtype=bool)\n\n        r = e[:]\n        r[np.where(m)] = d[np.where(m)]\n        assert_array_equal(np.where(m, d, e), r)\n\n        r = e[:]\n        r[np.where(~m)] = d[np.where(~m)]\n        assert_array_equal(np.where(m, e, d), r)\n\n        assert_array_equal(np.where(m, e, e), e)\n\n        # minimal dtype result with NaN scalar (e.g required by pandas)\n        d = np.array([1., 2.], dtype=np.float32)\n        e = float('NaN')\n        assert_equal(np.where(True, d, e).dtype, np.float32)\n        e = float('Infinity')\n        assert_equal(np.where(True, d, e).dtype, np.float32)\n        e = float('-Infinity')\n        assert_equal(np.where(True, d, e).dtype, np.float32)\n        # also check upcast\n        e = float(1e150)\n        assert_equal(np.where(True, d, e).dtype, np.float64)\n\n    def test_ndim(self):\n        c = [True, False]\n        a = np.zeros((2, 25))\n        b = np.ones((2, 25))\n        r = np.where(np.array(c)[:,np.newaxis], a, b)\n        assert_array_equal(r[0], a[0])\n        assert_array_equal(r[1], b[0])\n\n        a = a.T\n        b = b.T\n        r = np.where(c, a, b)\n        assert_array_equal(r[:,0], a[:,0])\n        assert_array_equal(r[:,1], b[:,0])\n\n    def test_dtype_mix(self):\n        c = np.array([False, True, False, False, False, False, True, False,\n                     False, False, True, False])\n        a = np.uint32(1)\n        b = np.array([5., 0., 3., 2., -1., -4., 0., -10., 10., 1., 0., 3.],\n                      dtype=np.float64)\n        r = np.array([5., 1., 3., 2., -1., -4., 1., -10., 10., 1., 1., 3.],\n                     dtype=np.float64)\n        assert_equal(np.where(c, a, b), r)\n\n        a = a.astype(np.float32)\n        b = b.astype(np.int64)\n        assert_equal(np.where(c, a, b), r)\n\n        # non bool mask\n        c = c.astype(int)\n        c[c != 0] = 34242324\n        assert_equal(np.where(c, a, b), r)\n        # invert\n        tmpmask = c != 0\n        c[c == 0] = 41247212\n        c[tmpmask] = 0\n        assert_equal(np.where(c, b, a), r)\n\n    def test_foreign(self):\n        c = np.array([False, True, False, False, False, False, True, False,\n                     False, False, True, False])\n        r = np.array([5., 1., 3., 2., -1., -4., 1., -10., 10., 1., 1., 3.],\n                     dtype=np.float64)\n        a = np.ones(1, dtype='>i4')\n        b = np.array([5., 0., 3., 2., -1., -4., 0., -10., 10., 1., 0., 3.],\n                     dtype=np.float64)\n        assert_equal(np.where(c, a, b), r)\n\n        b = b.astype('>f8')\n        assert_equal(np.where(c, a, b), r)\n\n        a = a.astype('<i4')\n        assert_equal(np.where(c, a, b), r)\n\n        c = c.astype('>i4')\n        assert_equal(np.where(c, a, b), r)\n\n    def test_error(self):\n        c = [True, True]\n        a = np.ones((4, 5))\n        b = np.ones((5, 5))\n        assert_raises(ValueError, np.where, c, a, a)\n        assert_raises(ValueError, np.where, c[0], a, b)\n\n    def test_string(self):\n        # gh-4778 check strings are properly filled with nulls\n        a = np.array(\"abc\")\n        b = np.array(\"x\" * 753)\n        assert_equal(np.where(True, a, b), \"abc\")\n        assert_equal(np.where(False, b, a), \"abc\")\n\n        # check native datatype sized strings\n        a = np.array(\"abcd\")\n        b = np.array(\"x\" * 8)\n        assert_equal(np.where(True, a, b), \"abcd\")\n        assert_equal(np.where(False, b, a), \"abcd\")\n\n    def test_empty_result(self):\n        # pass empty where result through an assignment which reads the data of\n        # empty arrays, error detectable with valgrind, see gh-8922\n        x = np.zeros((1, 1))\n        ibad = np.vstack(np.where(x == 99.))\n        assert_array_equal(ibad,\n                           np.atleast_2d(np.array([[],[]], dtype=np.intp)))\n\n    def test_largedim(self):\n        # invalid read regression gh-9304\n        shape = [10, 2, 3, 4, 5, 6]\n        np.random.seed(2)\n        array = np.random.rand(*shape)\n\n        for i in range(10):\n            benchmark = array.nonzero()\n            result = array.nonzero()\n            assert_array_equal(benchmark, result)\n\n\nif not IS_PYPY:\n    # sys.getsizeof() is not valid on PyPy\n    class TestSizeOf:\n\n        def test_empty_array(self):\n            x = np.array([])\n            assert_(sys.getsizeof(x) > 0)\n\n        def check_array(self, dtype):\n            elem_size = dtype(0).itemsize\n\n            for length in [10, 50, 100, 500]:\n                x = np.arange(length, dtype=dtype)\n                assert_(sys.getsizeof(x) > length * elem_size)\n\n        def test_array_int32(self):\n            self.check_array(np.int32)\n\n        def test_array_int64(self):\n            self.check_array(np.int64)\n\n        def test_array_float32(self):\n            self.check_array(np.float32)\n\n        def test_array_float64(self):\n            self.check_array(np.float64)\n\n        def test_view(self):\n            d = np.ones(100)\n            assert_(sys.getsizeof(d[...]) < sys.getsizeof(d))\n\n        def test_reshape(self):\n            d = np.ones(100)\n            assert_(sys.getsizeof(d) < sys.getsizeof(d.reshape(100, 1, 1).copy()))\n\n        @_no_tracing\n        def test_resize(self):\n            d = np.ones(100)\n            old = sys.getsizeof(d)\n            d.resize(50)\n            assert_(old > sys.getsizeof(d))\n            d.resize(150)\n            assert_(old < sys.getsizeof(d))\n\n        def test_error(self):\n            d = np.ones(100)\n            assert_raises(TypeError, d.__sizeof__, \"a\")\n\n\nclass TestHashing:\n\n    def test_arrays_not_hashable(self):\n        x = np.ones(3)\n        assert_raises(TypeError, hash, x)\n\n    def test_collections_hashable(self):\n        x = np.array([])\n        assert_(not isinstance(x, collections.abc.Hashable))\n\n\nclass TestArrayPriority:\n    # This will go away when __array_priority__ is settled, meanwhile\n    # it serves to check unintended changes.\n    op = operator\n    binary_ops = [\n        op.pow, op.add, op.sub, op.mul, op.floordiv, op.truediv, op.mod,\n        op.and_, op.or_, op.xor, op.lshift, op.rshift, op.mod, op.gt,\n        op.ge, op.lt, op.le, op.ne, op.eq\n        ]\n\n    class Foo(np.ndarray):\n        __array_priority__ = 100.\n\n        def __new__(cls, *args, **kwargs):\n            return np.array(*args, **kwargs).view(cls)\n\n    class Bar(np.ndarray):\n        __array_priority__ = 101.\n\n        def __new__(cls, *args, **kwargs):\n            return np.array(*args, **kwargs).view(cls)\n\n    class Other:\n        __array_priority__ = 1000.\n\n        def _all(self, other):\n            return self.__class__()\n\n        __add__ = __radd__ = _all\n        __sub__ = __rsub__ = _all\n        __mul__ = __rmul__ = _all\n        __pow__ = __rpow__ = _all\n        __div__ = __rdiv__ = _all\n        __mod__ = __rmod__ = _all\n        __truediv__ = __rtruediv__ = _all\n        __floordiv__ = __rfloordiv__ = _all\n        __and__ = __rand__ = _all\n        __xor__ = __rxor__ = _all\n        __or__ = __ror__ = _all\n        __lshift__ = __rlshift__ = _all\n        __rshift__ = __rrshift__ = _all\n        __eq__ = _all\n        __ne__ = _all\n        __gt__ = _all\n        __ge__ = _all\n        __lt__ = _all\n        __le__ = _all\n\n    def test_ndarray_subclass(self):\n        a = np.array([1, 2])\n        b = self.Bar([1, 2])\n        for f in self.binary_ops:\n            msg = repr(f)\n            assert_(isinstance(f(a, b), self.Bar), msg)\n            assert_(isinstance(f(b, a), self.Bar), msg)\n\n    def test_ndarray_other(self):\n        a = np.array([1, 2])\n        b = self.Other()\n        for f in self.binary_ops:\n            msg = repr(f)\n            assert_(isinstance(f(a, b), self.Other), msg)\n            assert_(isinstance(f(b, a), self.Other), msg)\n\n    def test_subclass_subclass(self):\n        a = self.Foo([1, 2])\n        b = self.Bar([1, 2])\n        for f in self.binary_ops:\n            msg = repr(f)\n            assert_(isinstance(f(a, b), self.Bar), msg)\n            assert_(isinstance(f(b, a), self.Bar), msg)\n\n    def test_subclass_other(self):\n        a = self.Foo([1, 2])\n        b = self.Other()\n        for f in self.binary_ops:\n            msg = repr(f)\n            assert_(isinstance(f(a, b), self.Other), msg)\n            assert_(isinstance(f(b, a), self.Other), msg)\n\n\nclass TestBytestringArrayNonzero:\n\n    def test_empty_bstring_array_is_falsey(self):\n        assert_(not np.array([''], dtype=str))\n\n    def test_whitespace_bstring_array_is_falsey(self):\n        a = np.array(['spam'], dtype=str)\n        a[0] = '  \\0\\0'\n        assert_(not a)\n\n    def test_all_null_bstring_array_is_falsey(self):\n        a = np.array(['spam'], dtype=str)\n        a[0] = '\\0\\0\\0\\0'\n        assert_(not a)\n\n    def test_null_inside_bstring_array_is_truthy(self):\n        a = np.array(['spam'], dtype=str)\n        a[0] = ' \\0 \\0'\n        assert_(a)\n\n\nclass TestUnicodeEncoding:\n    \"\"\"\n    Tests for encoding related bugs, such as UCS2 vs UCS4, round-tripping\n    issues, etc\n    \"\"\"\n    def test_round_trip(self):\n        \"\"\" Tests that GETITEM, SETITEM, and PyArray_Scalar roundtrip \"\"\"\n        # gh-15363\n        arr = np.zeros(shape=(), dtype=\"U1\")\n        for i in range(1, sys.maxunicode + 1):\n            expected = chr(i)\n            arr[()] = expected\n            assert arr[()] == expected\n            assert arr.item() == expected\n\n    def test_assign_scalar(self):\n        # gh-3258\n        l = np.array(['aa', 'bb'])\n        l[:] = np.unicode_('cc')\n        assert_equal(l, ['cc', 'cc'])\n\n    def test_fill_scalar(self):\n        # gh-7227\n        l = np.array(['aa', 'bb'])\n        l.fill(np.unicode_('cc'))\n        assert_equal(l, ['cc', 'cc'])\n\n\nclass TestUnicodeArrayNonzero:\n\n    def test_empty_ustring_array_is_falsey(self):\n        assert_(not np.array([''], dtype=np.unicode_))\n\n    def test_whitespace_ustring_array_is_falsey(self):\n        a = np.array(['eggs'], dtype=np.unicode_)\n        a[0] = '  \\0\\0'\n        assert_(not a)\n\n    def test_all_null_ustring_array_is_falsey(self):\n        a = np.array(['eggs'], dtype=np.unicode_)\n        a[0] = '\\0\\0\\0\\0'\n        assert_(not a)\n\n    def test_null_inside_ustring_array_is_truthy(self):\n        a = np.array(['eggs'], dtype=np.unicode_)\n        a[0] = ' \\0 \\0'\n        assert_(a)\n\n\nclass TestFormat:\n\n    def test_0d(self):\n        a = np.array(np.pi)\n        assert_equal('{:0.3g}'.format(a), '3.14')\n        assert_equal('{:0.3g}'.format(a[()]), '3.14')\n\n    def test_1d_no_format(self):\n        a = np.array([np.pi])\n        assert_equal('{}'.format(a), str(a))\n\n    def test_1d_format(self):\n        # until gh-5543, ensure that the behaviour matches what it used to be\n        a = np.array([np.pi])\n        assert_raises(TypeError, '{:30}'.format, a)\n\nfrom numpy.testing import IS_PYPY\n\nclass TestCTypes:\n\n    def test_ctypes_is_available(self):\n        test_arr = np.array([[1, 2, 3], [4, 5, 6]])\n\n        assert_equal(ctypes, test_arr.ctypes._ctypes)\n        assert_equal(tuple(test_arr.ctypes.shape), (2, 3))\n\n    def test_ctypes_is_not_available(self):\n        from numpy.core import _internal\n        _internal.ctypes = None\n        try:\n            test_arr = np.array([[1, 2, 3], [4, 5, 6]])\n\n            assert_(isinstance(test_arr.ctypes._ctypes,\n                               _internal._missing_ctypes))\n            assert_equal(tuple(test_arr.ctypes.shape), (2, 3))\n        finally:\n            _internal.ctypes = ctypes\n\n    def _make_readonly(x):\n        x.flags.writeable = False\n        return x\n\n    @pytest.mark.parametrize('arr', [\n        np.array([1, 2, 3]),\n        np.array([['one', 'two'], ['three', 'four']]),\n        np.array((1, 2), dtype='i4,i4'),\n        np.zeros((2,), dtype=\n            np.dtype(dict(\n                formats=['<i4', '<i4'],\n                names=['a', 'b'],\n                offsets=[0, 2],\n                itemsize=6\n            ))\n        ),\n        np.array([None], dtype=object),\n        np.array([]),\n        np.empty((0, 0)),\n        _make_readonly(np.array([1, 2, 3])),\n    ], ids=[\n        '1d',\n        '2d',\n        'structured',\n        'overlapping',\n        'object',\n        'empty',\n        'empty-2d',\n        'readonly'\n    ])\n    def test_ctypes_data_as_holds_reference(self, arr):\n        # gh-9647\n        # create a copy to ensure that pytest does not mess with the refcounts\n        arr = arr.copy()\n\n        arr_ref = weakref.ref(arr)\n\n        ctypes_ptr = arr.ctypes.data_as(ctypes.c_void_p)\n\n        # `ctypes_ptr` should hold onto `arr`\n        del arr\n        break_cycles()\n        assert_(arr_ref() is not None, \"ctypes pointer did not hold onto a reference\")\n\n        # but when the `ctypes_ptr` object dies, so should `arr`\n        del ctypes_ptr\n        if IS_PYPY:\n            # Pypy does not recycle arr objects immediately. Trigger gc to\n            # release arr. Cpython uses refcounts. An explicit call to gc\n            # should not be needed here.\n            break_cycles()\n        assert_(arr_ref() is None, \"unknowable whether ctypes pointer holds a reference\")\n\n    def test_ctypes_as_parameter_holds_reference(self):\n        arr = np.array([None]).copy()\n\n        arr_ref = weakref.ref(arr)\n\n        ctypes_ptr = arr.ctypes._as_parameter_\n\n        # `ctypes_ptr` should hold onto `arr`\n        del arr\n        break_cycles()\n        assert_(arr_ref() is not None, \"ctypes pointer did not hold onto a reference\")\n\n        # but when the `ctypes_ptr` object dies, so should `arr`\n        del ctypes_ptr\n        if IS_PYPY:\n            break_cycles()\n        assert_(arr_ref() is None, \"unknowable whether ctypes pointer holds a reference\")\n\n\nclass TestWritebackIfCopy:\n    # all these tests use the WRITEBACKIFCOPY mechanism\n    def test_argmax_with_out(self):\n        mat = np.eye(5)\n        out = np.empty(5, dtype='i2')\n        res = np.argmax(mat, 0, out=out)\n        assert_equal(res, range(5))\n\n    def test_argmin_with_out(self):\n        mat = -np.eye(5)\n        out = np.empty(5, dtype='i2')\n        res = np.argmin(mat, 0, out=out)\n        assert_equal(res, range(5))\n\n    def test_insert_noncontiguous(self):\n        a = np.arange(6).reshape(2,3).T # force non-c-contiguous\n        # uses arr_insert\n        np.place(a, a>2, [44, 55])\n        assert_equal(a, np.array([[0, 44], [1, 55], [2, 44]]))\n        # hit one of the failing paths\n        assert_raises(ValueError, np.place, a, a>20, [])\n\n    def test_put_noncontiguous(self):\n        a = np.arange(6).reshape(2,3).T # force non-c-contiguous\n        np.put(a, [0, 2], [44, 55])\n        assert_equal(a, np.array([[44, 3], [55, 4], [2, 5]]))\n\n    def test_putmask_noncontiguous(self):\n        a = np.arange(6).reshape(2,3).T # force non-c-contiguous\n        # uses arr_putmask\n        np.putmask(a, a>2, a**2)\n        assert_equal(a, np.array([[0, 9], [1, 16], [2, 25]]))\n\n    def test_take_mode_raise(self):\n        a = np.arange(6, dtype='int')\n        out = np.empty(2, dtype='int')\n        np.take(a, [0, 2], out=out, mode='raise')\n        assert_equal(out, np.array([0, 2]))\n\n    def test_choose_mod_raise(self):\n        a = np.array([[1, 0, 1], [0, 1, 0], [1, 0, 1]])\n        out = np.empty((3,3), dtype='int')\n        choices = [-10, 10]\n        np.choose(a, choices, out=out, mode='raise')\n        assert_equal(out, np.array([[ 10, -10,  10],\n                                    [-10,  10, -10],\n                                    [ 10, -10,  10]]))\n\n    def test_flatiter__array__(self):\n        a = np.arange(9).reshape(3,3)\n        b = a.T.flat\n        c = b.__array__()\n        # triggers the WRITEBACKIFCOPY resolution, assuming refcount semantics\n        del c\n\n    def test_dot_out(self):\n        # if HAVE_CBLAS, will use WRITEBACKIFCOPY\n        a = np.arange(9, dtype=float).reshape(3,3)\n        b = np.dot(a, a, out=a)\n        assert_equal(b, np.array([[15, 18, 21], [42, 54, 66], [69, 90, 111]]))\n\n    def test_view_assign(self):\n        from numpy.core._multiarray_tests import npy_create_writebackifcopy, npy_resolve\n\n        arr = np.arange(9).reshape(3, 3).T\n        arr_wb = npy_create_writebackifcopy(arr)\n        assert_(arr_wb.flags.writebackifcopy)\n        assert_(arr_wb.base is arr)\n        arr_wb[...] = -100\n        npy_resolve(arr_wb)\n        # arr changes after resolve, even though we assigned to arr_wb\n        assert_equal(arr, -100)\n        # after resolve, the two arrays no longer reference each other\n        assert_(arr_wb.ctypes.data != 0)\n        assert_equal(arr_wb.base, None)\n        # assigning to arr_wb does not get transferred to arr\n        arr_wb[...] = 100\n        assert_equal(arr, -100)\n\n    @pytest.mark.leaks_references(\n            reason=\"increments self in dealloc; ignore since deprecated path.\")\n    def test_dealloc_warning(self):\n        with suppress_warnings() as sup:\n            sup.record(RuntimeWarning)\n            arr = np.arange(9).reshape(3, 3)\n            v = arr.T\n            _multiarray_tests.npy_abuse_writebackifcopy(v)\n            assert len(sup.log) == 1\n\n    def test_view_discard_refcount(self):\n        from numpy.core._multiarray_tests import npy_create_writebackifcopy, npy_discard\n\n        arr = np.arange(9).reshape(3, 3).T\n        orig = arr.copy()\n        if HAS_REFCOUNT:\n            arr_cnt = sys.getrefcount(arr)\n        arr_wb = npy_create_writebackifcopy(arr)\n        assert_(arr_wb.flags.writebackifcopy)\n        assert_(arr_wb.base is arr)\n        arr_wb[...] = -100\n        npy_discard(arr_wb)\n        # arr remains unchanged after discard\n        assert_equal(arr, orig)\n        # after discard, the two arrays no longer reference each other\n        assert_(arr_wb.ctypes.data != 0)\n        assert_equal(arr_wb.base, None)\n        if HAS_REFCOUNT:\n            assert_equal(arr_cnt, sys.getrefcount(arr))\n        # assigning to arr_wb does not get transferred to arr\n        arr_wb[...] = 100\n        assert_equal(arr, orig)\n\n\nclass TestArange:\n    def test_infinite(self):\n        assert_raises_regex(\n            ValueError, \"size exceeded\",\n            np.arange, 0, np.inf\n        )\n\n    def test_nan_step(self):\n        assert_raises_regex(\n            ValueError, \"cannot compute length\",\n            np.arange, 0, 1, np.nan\n        )\n\n    def test_zero_step(self):\n        assert_raises(ZeroDivisionError, np.arange, 0, 10, 0)\n        assert_raises(ZeroDivisionError, np.arange, 0.0, 10.0, 0.0)\n\n        # empty range\n        assert_raises(ZeroDivisionError, np.arange, 0, 0, 0)\n        assert_raises(ZeroDivisionError, np.arange, 0.0, 0.0, 0.0)\n\n\nclass TestArrayFinalize:\n    \"\"\" Tests __array_finalize__ \"\"\"\n\n    def test_receives_base(self):\n        # gh-11237\n        class SavesBase(np.ndarray):\n            def __array_finalize__(self, obj):\n                self.saved_base = self.base\n\n        a = np.array(1).view(SavesBase)\n        assert_(a.saved_base is a.base)\n\n    def test_lifetime_on_error(self):\n        # gh-11237\n        class RaisesInFinalize(np.ndarray):\n            def __array_finalize__(self, obj):\n                # crash, but keep this object alive\n                raise Exception(self)\n\n        # a plain object can't be weakref'd\n        class Dummy: pass\n\n        # get a weak reference to an object within an array\n        obj_arr = np.array(Dummy())\n        obj_ref = weakref.ref(obj_arr[()])\n\n        # get an array that crashed in __array_finalize__\n        with assert_raises(Exception) as e:\n            obj_arr.view(RaisesInFinalize)\n\n        obj_subarray = e.exception.args[0]\n        del e\n        assert_(isinstance(obj_subarray, RaisesInFinalize))\n\n        # reference should still be held by obj_arr\n        break_cycles()\n        assert_(obj_ref() is not None, \"object should not already be dead\")\n\n        del obj_arr\n        break_cycles()\n        assert_(obj_ref() is not None, \"obj_arr should not hold the last reference\")\n\n        del obj_subarray\n        break_cycles()\n        assert_(obj_ref() is None, \"no references should remain\")\n\n\ndef test_orderconverter_with_nonASCII_unicode_ordering():\n    # gh-7475\n    a = np.arange(5)\n    assert_raises(ValueError, a.flatten, order=u'\\xe2')\n\n\ndef test_equal_override():\n    # gh-9153: ndarray.__eq__ uses special logic for structured arrays, which\n    # did not respect overrides with __array_priority__ or __array_ufunc__.\n    # The PR fixed this for __array_priority__ and __array_ufunc__ = None.\n    class MyAlwaysEqual:\n        def __eq__(self, other):\n            return \"eq\"\n\n        def __ne__(self, other):\n            return \"ne\"\n\n    class MyAlwaysEqualOld(MyAlwaysEqual):\n        __array_priority__ = 10000\n\n    class MyAlwaysEqualNew(MyAlwaysEqual):\n        __array_ufunc__ = None\n\n    array = np.array([(0, 1), (2, 3)], dtype='i4,i4')\n    for my_always_equal_cls in MyAlwaysEqualOld, MyAlwaysEqualNew:\n        my_always_equal = my_always_equal_cls()\n        assert_equal(my_always_equal == array, 'eq')\n        assert_equal(array == my_always_equal, 'eq')\n        assert_equal(my_always_equal != array, 'ne')\n        assert_equal(array != my_always_equal, 'ne')\n\n\ndef test_npymath_complex():\n    # Smoketest npymath functions\n    from numpy.core._multiarray_tests import (\n        npy_cabs, npy_carg)\n\n    funcs = {npy_cabs: np.absolute,\n             npy_carg: np.angle}\n    vals = (1, np.inf, -np.inf, np.nan)\n    types = (np.complex64, np.complex128, np.clongdouble)\n\n    for fun, npfun in funcs.items():\n        for x, y in itertools.product(vals, vals):\n            for t in types:\n                z = t(complex(x, y))\n                got = fun(z)\n                expected = npfun(z)\n                assert_allclose(got, expected)\n\n\ndef test_npymath_real():\n    # Smoketest npymath functions\n    from numpy.core._multiarray_tests import (\n        npy_log10, npy_cosh, npy_sinh, npy_tan, npy_tanh)\n\n    funcs = {npy_log10: np.log10,\n             npy_cosh: np.cosh,\n             npy_sinh: np.sinh,\n             npy_tan: np.tan,\n             npy_tanh: np.tanh}\n    vals = (1, np.inf, -np.inf, np.nan)\n    types = (np.float32, np.float64, np.longdouble)\n\n    with np.errstate(all='ignore'):\n        for fun, npfun in funcs.items():\n            for x, t in itertools.product(vals, types):\n                z = t(x)\n                got = fun(z)\n                expected = npfun(z)\n                assert_allclose(got, expected)\n\ndef test_uintalignment_and_alignment():\n    # alignment code needs to satisfy these requirements:\n    #  1. numpy structs match C struct layout\n    #  2. ufuncs/casting is safe wrt to aligned access\n    #  3. copy code is safe wrt to \"uint alidned\" access\n    #\n    # Complex types are the main problem, whose alignment may not be the same\n    # as their \"uint alignment\".\n    #\n    # This test might only fail on certain platforms, where uint64 alignment is\n    # not equal to complex64 alignment. The second 2 tests will only fail\n    # for DEBUG=1.\n\n    d1 = np.dtype('u1,c8', align=True)\n    d2 = np.dtype('u4,c8', align=True)\n    d3 = np.dtype({'names': ['a', 'b'], 'formats': ['u1', d1]}, align=True)\n\n    assert_equal(np.zeros(1, dtype=d1)['f1'].flags['ALIGNED'], True)\n    assert_equal(np.zeros(1, dtype=d2)['f1'].flags['ALIGNED'], True)\n    assert_equal(np.zeros(1, dtype='u1,c8')['f1'].flags['ALIGNED'], False)\n\n    # check that C struct matches numpy struct size\n    s = _multiarray_tests.get_struct_alignments()\n    for d, (alignment, size) in zip([d1,d2,d3], s):\n        assert_equal(d.alignment, alignment)\n        assert_equal(d.itemsize, size)\n\n    # check that ufuncs don't complain in debug mode\n    # (this is probably OK if the aligned flag is true above)\n    src = np.zeros((2,2), dtype=d1)['f1']  # 4-byte aligned, often\n    np.exp(src)  # assert fails?\n\n    # check that copy code doesn't complain in debug mode\n    dst = np.zeros((2,2), dtype='c8')\n    dst[:,1] = src[:,1]  # assert in lowlevel_strided_loops fails?\n\nclass TestAlignment:\n    # adapted from scipy._lib.tests.test__util.test__aligned_zeros\n    # Checks that unusual memory alignments don't trip up numpy.\n    # In particular, check RELAXED_STRIDES don't trip alignment assertions in\n    # NDEBUG mode for size-0 arrays (gh-12503)\n\n    def check(self, shape, dtype, order, align):\n        err_msg = repr((shape, dtype, order, align))\n        x = _aligned_zeros(shape, dtype, order, align=align)\n        if align is None:\n            align = np.dtype(dtype).alignment\n        assert_equal(x.__array_interface__['data'][0] % align, 0)\n        if hasattr(shape, '__len__'):\n            assert_equal(x.shape, shape, err_msg)\n        else:\n            assert_equal(x.shape, (shape,), err_msg)\n        assert_equal(x.dtype, dtype)\n        if order == \"C\":\n            assert_(x.flags.c_contiguous, err_msg)\n        elif order == \"F\":\n            if x.size > 0:\n                assert_(x.flags.f_contiguous, err_msg)\n        elif order is None:\n            assert_(x.flags.c_contiguous, err_msg)\n        else:\n            raise ValueError()\n\n    def test_various_alignments(self):\n        for align in [1, 2, 3, 4, 8, 12, 16, 32, 64, None]:\n            for n in [0, 1, 3, 11]:\n                for order in [\"C\", \"F\", None]:\n                    for dtype in list(np.typecodes[\"All\"]) + ['i4,i4,i4']:\n                        if dtype == 'O':\n                            # object dtype can't be misaligned\n                            continue\n                        for shape in [n, (1, 2, 3, n)]:\n                            self.check(shape, np.dtype(dtype), order, align)\n\n    def test_strided_loop_alignments(self):\n        # particularly test that complex64 and float128 use right alignment\n        # code-paths, since these are particularly problematic. It is useful to\n        # turn on USE_DEBUG for this test, so lowlevel-loop asserts are run.\n        for align in [1, 2, 4, 8, 12, 16, None]:\n            xf64 = _aligned_zeros(3, np.float64)\n\n            xc64 = _aligned_zeros(3, np.complex64, align=align)\n            xf128 = _aligned_zeros(3, np.longdouble, align=align)\n\n            # test casting, both to and from misaligned\n            with suppress_warnings() as sup:\n                sup.filter(np.ComplexWarning, \"Casting complex values\")\n                xc64.astype('f8')\n            xf64.astype(np.complex64)\n            test = xc64 + xf64\n\n            xf128.astype('f8')\n            xf64.astype(np.longdouble)\n            test = xf128 + xf64\n\n            test = xf128 + xc64\n\n            # test copy, both to and from misaligned\n            # contig copy\n            xf64[:] = xf64.copy()\n            xc64[:] = xc64.copy()\n            xf128[:] = xf128.copy()\n            # strided copy\n            xf64[::2] = xf64[::2].copy()\n            xc64[::2] = xc64[::2].copy()\n            xf128[::2] = xf128[::2].copy()\n\ndef test_getfield():\n    a = np.arange(32, dtype='uint16')\n    if sys.byteorder == 'little':\n        i = 0\n        j = 1\n    else:\n        i = 1\n        j = 0\n    b = a.getfield('int8', i)\n    assert_equal(b, a)\n    b = a.getfield('int8', j)\n    assert_equal(b, 0)\n    pytest.raises(ValueError, a.getfield, 'uint8', -1)\n    pytest.raises(ValueError, a.getfield, 'uint8', 16)\n    pytest.raises(ValueError, a.getfield, 'uint64', 0)\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-0.txt",
    "content": "I am small file 0\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-1.txt",
    "content": "I am small file 1\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-10.txt",
    "content": "I am small file 10\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-100.txt",
    "content": "I am small file 100\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-11.txt",
    "content": "I am small file 11\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-12.txt",
    "content": "I am small file 12\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-13.txt",
    "content": "I am small file 13\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-14.txt",
    "content": "I am small file 14\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-15.txt",
    "content": "I am small file 15\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-16.txt",
    "content": "I am small file 16\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-17.txt",
    "content": "I am small file 17\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-18.txt",
    "content": "I am small file 18\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-19.txt",
    "content": "I am small file 19\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-2.txt",
    "content": "I am small file 2\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-20.txt",
    "content": "I am small file 20\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-21.txt",
    "content": "I am small file 21\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-22.txt",
    "content": "I am small file 22\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-23.txt",
    "content": "I am small file 23\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-24.txt",
    "content": "I am small file 24\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-25.txt",
    "content": "I am small file 25\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-26.txt",
    "content": "I am small file 26\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-27.txt",
    "content": "I am small file 27\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-28.txt",
    "content": "I am small file 28\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-29.txt",
    "content": "I am small file 29\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-3.txt",
    "content": "I am small file 3\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-30.txt",
    "content": "I am small file 30\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-31.txt",
    "content": "I am small file 31\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-32.txt",
    "content": "I am small file 32\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-33.txt",
    "content": "I am small file 33\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-34.txt",
    "content": "I am small file 34\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-35.txt",
    "content": "I am small file 35\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-36.txt",
    "content": "I am small file 36\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-37.txt",
    "content": "I am small file 37\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-38.txt",
    "content": "I am small file 38\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-39.txt",
    "content": "I am small file 39\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-4.txt",
    "content": "I am small file 4\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-40.txt",
    "content": "I am small file 40\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-41.txt",
    "content": "I am small file 41\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-42.txt",
    "content": "I am small file 42\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-43.txt",
    "content": "I am small file 43\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-44.txt",
    "content": "I am small file 44\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-45.txt",
    "content": "I am small file 45\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-46.txt",
    "content": "I am small file 46\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-47.txt",
    "content": "I am small file 47\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-48.txt",
    "content": "I am small file 48\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-49.txt",
    "content": "I am small file 49\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-5.txt",
    "content": "I am small file 5\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-50.txt",
    "content": "I am small file 50\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-51.txt",
    "content": "I am small file 51\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-52.txt",
    "content": "I am small file 52\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-53.txt",
    "content": "I am small file 53\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-54.txt",
    "content": "I am small file 54\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-55.txt",
    "content": "I am small file 55\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-56.txt",
    "content": "I am small file 56\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-57.txt",
    "content": "I am small file 57\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-58.txt",
    "content": "I am small file 58\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-59.txt",
    "content": "I am small file 59\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-6.txt",
    "content": "I am small file 6\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-60.txt",
    "content": "I am small file 60\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-61.txt",
    "content": "I am small file 61\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-62.txt",
    "content": "I am small file 62\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-63.txt",
    "content": "I am small file 63\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-64.txt",
    "content": "I am small file 64\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-65.txt",
    "content": "I am small file 65\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-66.txt",
    "content": "I am small file 66\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-67.txt",
    "content": "I am small file 67\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-68.txt",
    "content": "I am small file 68\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-69.txt",
    "content": "I am small file 69\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-7.txt",
    "content": "I am small file 7\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-70.txt",
    "content": "I am small file 70\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-71.txt",
    "content": "I am small file 71\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-72.txt",
    "content": "I am small file 72\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-73.txt",
    "content": "I am small file 73\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-74.txt",
    "content": "I am small file 74\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-75.txt",
    "content": "I am small file 75\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-76.txt",
    "content": "I am small file 76\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-77.txt",
    "content": "I am small file 77\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-78.txt",
    "content": "I am small file 78\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-79.txt",
    "content": "I am small file 79\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-8.txt",
    "content": "I am small file 8\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-80.txt",
    "content": "I am small file 80\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-81.txt",
    "content": "I am small file 81\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-82.txt",
    "content": "I am small file 82\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-83.txt",
    "content": "I am small file 83\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-84.txt",
    "content": "I am small file 84\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-85.txt",
    "content": "I am small file 85\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-86.txt",
    "content": "I am small file 86\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-87.txt",
    "content": "I am small file 87\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-88.txt",
    "content": "I am small file 88\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-89.txt",
    "content": "I am small file 89\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-9.txt",
    "content": "I am small file 9\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-90.txt",
    "content": "I am small file 90\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-91.txt",
    "content": "I am small file 91\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-92.txt",
    "content": "I am small file 92\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-93.txt",
    "content": "I am small file 93\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-94.txt",
    "content": "I am small file 94\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-95.txt",
    "content": "I am small file 95\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-96.txt",
    "content": "I am small file 96\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-97.txt",
    "content": "I am small file 97\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-98.txt",
    "content": "I am small file 98\n"
  },
  {
    "path": "tests/benchmarks/many-small-files/small-file-99.txt",
    "content": "I am small file 99\n"
  },
  {
    "path": "tests/benchmarks/run-benchmarks.sh",
    "content": "#!/usr/bin/env bash\n\ncd \"$(dirname \"${BASH_SOURCE[0]}\")\" || exit\n\n# Check that Hyperfine is installed.\nif ! command -v hyperfine > /dev/null 2>&1; then\n\techo \"'hyperfine' does not seem to be installed.\"\n\techo \"You can get it here: https://github.com/sharkdp/hyperfine\"\n\texit 1\nfi\n\n# Check that jq is installed.\nif ! command -v jq > /dev/null 2>&1; then\n\techo \"'jq' does not seem to be installed.\"\n\techo \"You can get it here: https://jqlang.github.io/jq/download/\"\n\texit 1\nfi\n\n# Check that python3 is installed.\nif ! command -v python3 > /dev/null 2>&1; then\n\techo \"'python3' does not seem to be installed.\"\n\techo \"You can get it here: https://www.python.org/downloads/\"\n\texit 1\nfi\n\nget_cargo_target_dir() {\n\tcargo metadata --no-deps --format-version 1 | python3 -c 'import sys, json; print(json.load(sys.stdin)[\"target_directory\"])'\n}\n\nheading() {\n    bold=$(tput bold)$(tput setaf 220)\n    normal=$(tput sgr0)\n    echo\n    printf \"\\n%s%s%s\\n\\n\" \"$bold\" \"$1\" \"$normal\"\n\n    echo -e \"\\n### $1\\n\" >> \"$REPORT\"\n}\n\n# Clean up environment\nunset BAT_CACHE_PATH\nunset BAT_CONFIG_DIR\nunset BAT_CONFIG_PATH\nunset BAT_OPTS\nunset BAT_PAGER\nunset BAT_STYLE\nunset BAT_TABS\nunset BAT_THEME\nunset COLORTERM\nunset NO_COLOR\nunset PAGER\n\n\nRESULT_DIR=\"benchmark-results\"\nREPORT=\"$RESULT_DIR/report.md\"\n\nTARGET_DIR=\"$(get_cargo_target_dir)\"\nTARGET_RELEASE=\"${TARGET_DIR}/release/bat\"\n\n: ${WARMUP_COUNT:=3}\n: ${RUN_COUNT:=10}\n\n# Determine which target to benchmark.\nBAT=''\nfor arg in \"$@\"; do\n\tcase \"$arg\" in\n\t\t--system)  BAT=\"bat\" ;;\n\t\t--release) BAT=\"$TARGET_RELEASE\" ;;\n\t\t--bat=*)   BAT=\"${arg:6}\" ;;\n\tesac\ndone\n\nif [[ -z \"$BAT\" ]]; then\n\techo \"A build of 'bat' must be specified for benchmarking.\"\n\techo \"You can use '--system', '--release' or '--bat=path/to/bat'.\"\n\texit 1\nfi\n\nif ! command -v \"$BAT\" &>/dev/null; then\n\techo \"Could not find the build of bat to benchmark ($BAT).\"\n\tcase \"$BAT\" in\n\t\t\"bat\")             echo \"Make you sure to symlink 'batcat' as 'bat'.\" ;;\n\t\t\"$TARGET_RELEASE\") echo \"Make you sure to 'cargo build --release' first.\" ;;\n\tesac\n\texit 1\nfi\n\n# Run the benchmarks\nmkdir -p \"$RESULT_DIR\"\nrm -f \"$RESULT_DIR\"/*.md\n\necho \"## \\`bat\\` benchmark results\" >> \"$REPORT\"\n\n\nheading \"Startup time\"\nhyperfine \\\n\t\"$(printf \"%q\" \"$BAT\") --no-config\" \\\n\t--command-name \"bat\" \\\n\t--warmup \"$WARMUP_COUNT\" \\\n    --runs \"$RUN_COUNT\" \\\n    --export-markdown \"$RESULT_DIR/startup-time.md\" \\\n    --export-json \"$RESULT_DIR/startup-time.json\"\ncat \"$RESULT_DIR/startup-time.md\" >> \"$REPORT\"\n\n\nheading \"Startup time without syntax highlighting\"\nhyperfine \\\n\t\"$(printf \"%q\" \"$BAT\") --no-config startup-time-src/small-CpuInfo-file.cpuinfo\" \\\n\t--command-name \"bat … small-CpuInfo-file.cpuinfo\" \\\n\t--warmup \"$WARMUP_COUNT\" \\\n    --runs \"$RUN_COUNT\" \\\n    --export-markdown \"$RESULT_DIR/startup-time-without-syntax-highlighting.md\" \\\n    --export-json \"$RESULT_DIR/startup-time-without-syntax-highlighting.json\"\ncat \"$RESULT_DIR/startup-time-without-syntax-highlighting.md\" >> \"$REPORT\"\n\nheading \"Startup time with syntax highlighting\"\nhyperfine \\\n\t\"$(printf \"%q\" \"$BAT\") --no-config --color=always startup-time-src/small-CpuInfo-file.cpuinfo\" \\\n\t--command-name \"bat … --color=always small-CpuInfo-file.cpuinfo\" \\\n\t--warmup \"$WARMUP_COUNT\" \\\n    --runs \"$RUN_COUNT\" \\\n    --export-markdown \"$RESULT_DIR/startup-time-with-syntax-highlighting.md\" \\\n    --export-json \"$RESULT_DIR/startup-time-with-syntax-highlighting.json\"\ncat \"$RESULT_DIR/startup-time-with-syntax-highlighting.md\" >> \"$REPORT\"\n\n\nheading \"Startup time with syntax with dependencies\"\nhyperfine \\\n\t\"$(printf \"%q\" \"$BAT\") --no-config --color=always startup-time-src/small-Markdown-file.md\" \\\n\t--command-name \"bat … small-Markdown-file.md\" \\\n\t--warmup \"$WARMUP_COUNT\" \\\n    --runs \"$RUN_COUNT\" \\\n    --export-markdown \"$RESULT_DIR/startup-time-with-syntax-with-dependencies.md\" \\\n    --export-json \"$RESULT_DIR/startup-time-with-syntax-with-dependencies.json\"\ncat \"$RESULT_DIR/startup-time-with-syntax-with-dependencies.md\" >> \"$REPORT\"\n\n\nheading \"Startup time with indeterminant syntax\"\nhyperfine \\\n\t\"$(printf \"%q\" \"$BAT\") --no-config --color=always startup-time-src/mystery-file\" \\\n\t--shell none \\\n\t--command-name 'bat … mystery-file' \\\n\t--warmup \"$WARMUP_COUNT\" \\\n    --runs \"$RUN_COUNT\" \\\n    --export-markdown \"$RESULT_DIR/startup-time-with-indeterminant-syntax.md\" \\\n    --export-json \"$RESULT_DIR/startup-time-with-indeterminant-syntax.json\"\ncat \"$RESULT_DIR/startup-time-with-indeterminant-syntax.md\" >> \"$REPORT\"\n\nheading \"Startup time with manually set syntax\"\nhyperfine \\\n\t\"$(printf \"%q\" \"$BAT\") --no-config --color=always --language=Dockerfile startup-time-src/mystery-file\" \\\n\t--shell none \\\n\t--command-name 'bat … --language=Dockerfile mystery-file' \\\n\t--warmup \"$WARMUP_COUNT\" \\\n    --runs \"$RUN_COUNT\" \\\n    --export-markdown \"$RESULT_DIR/startup-time-with-manually-set-syntax.md\" \\\n    --export-json \"$RESULT_DIR/startup-time-with-manually-set-syntax.json\"\ncat \"$RESULT_DIR/startup-time-with-manually-set-syntax.md\" >> \"$REPORT\"\n\nheading \"Startup time with mapped syntax\"\nhyperfine \\\n\t\"$(printf \"%q\" \"$BAT\") --no-config --color=always startup-time-src/Containerfile\" \\\n\t--shell none \\\n\t--command-name 'bat … Containerfile' \\\n\t--warmup \"$WARMUP_COUNT\" \\\n    --runs \"$RUN_COUNT\" \\\n    --export-markdown \"$RESULT_DIR/startup-time-with-mapped-syntax.md\" \\\n    --export-json \"$RESULT_DIR/startup-time-with-mapped-syntax.json\"\ncat \"$RESULT_DIR/startup-time-with-mapped-syntax.md\" >> \"$REPORT\"\n\n\nheading \"Plain-text speed\"\nhyperfine \\\n\t\"$(printf \"%q\" \"$BAT\") --no-config --language=txt --style=plain highlighting-speed-src/numpy_test_multiarray.py\" \\\n\t--command-name 'bat … --language=txt numpy_test_multiarray.py' \\\n\t--warmup \"$WARMUP_COUNT\" \\\n    --runs \"$RUN_COUNT\" \\\n    --export-markdown \"$RESULT_DIR/plain-text-speed.md\" \\\n    --export-json \"$RESULT_DIR/plain-text-speed.json\"\ncat \"$RESULT_DIR/plain-text-speed.md\" >> \"$REPORT\"\n\n\nfor wrap in character never; do\n\tfor SRC in highlighting-speed-src/*; do\n\t\tfilename=\"$(basename \"$SRC\")\"\n\n\t\theading \"Syntax highlighting speed --wrap=${wrap}: \\`$filename\\`\"\n\t\thyperfine --warmup \"$WARMUP_COUNT\" \\\n    \t\t--runs \"$RUN_COUNT\" \\\n\t\t\t\"$(printf \"%q\" \"$BAT\") --no-config --style=full --color=always --wrap=${wrap} --terminal-width=80 '$SRC'\" \\\n\t\t\t--command-name \"bat … ${filename}\" \\\n\t\t\t--export-markdown \"$RESULT_DIR/syntax-highlighting-speed-${filename}.md\" \\\n\t\t\t--export-json \"$RESULT_DIR/syntax-highlighting-speed-${filename}.json\"\n\t\tcat \"$RESULT_DIR/syntax-highlighting-speed-${filename}.md\" >> \"$REPORT\"\n\tdone\ndone\n\n\nheading \"Many small files speed (overhead of metadata)\"\nhyperfine \\\n\t\"$(printf \"%q\" \"$BAT\") --no-config --language=txt --style=plain many-small-files/*.txt\" \\\n\t--command-name 'bat … --language=txt *.txt' \\\n\t--warmup \"$WARMUP_COUNT\" \\\n    --runs \"$RUN_COUNT\" \\\n    --export-markdown \"$RESULT_DIR/many-small-files-speed.md\" \\\n    --export-json \"$RESULT_DIR/many-small-files-speed.json\"\ncat \"$RESULT_DIR/many-small-files-speed.md\" >> \"$REPORT\"\n"
  },
  {
    "path": "tests/benchmarks/startup-time-src/Containerfile",
    "content": "FROM docker.io/alpine:latest\nCOPY foo /root/bar\nRUN sleep 60\n"
  },
  {
    "path": "tests/benchmarks/startup-time-src/mystery-file",
    "content": "FROM docker.io/alpine:latest\nCOPY foo /root/bar\nRUN sleep 60\n"
  },
  {
    "path": "tests/benchmarks/startup-time-src/small-CpuInfo-file.cpuinfo",
    "content": "OneColor : AnotherColor\n"
  },
  {
    "path": "tests/benchmarks/startup-time-src/small-Markdown-file.md",
    "content": "# Keep this file small, we want to measure bat startup time, not speed of Markdown highlighting!\n\nThe Markdown syntax definition references ~18 other syntaxes, so without lazy-loading, it will be slow to load.\n"
  },
  {
    "path": "tests/examples/bat-tabs.conf",
    "content": "--tabs=8\n"
  },
  {
    "path": "tests/examples/bat-theme.conf",
    "content": "--theme=TwoDark\n"
  },
  {
    "path": "tests/examples/bat-windows.conf",
    "content": "# Make sure that the pager gets executed\n--paging=always\n\n# Output a dummy message for the integration test and system wide config test.\n--pager=\"echo.bat dummy-pager-from-config\"\n"
  },
  {
    "path": "tests/examples/bat.conf",
    "content": "# Make sure that the pager gets executed\n--paging=always\n\n# Output a dummy message for the integration test and system wide config test.\n--pager=\"echo dummy-pager-from-config\"\n"
  },
  {
    "path": "tests/examples/cache",
    "content": "test\n"
  },
  {
    "path": "tests/examples/cache.c",
    "content": "test\n"
  },
  {
    "path": "tests/examples/cache_source/syntaxes/c.sublime-syntax",
    "content": "%YAML 1.2\n---\nname: C\nfile_extensions: [c, h]\nscope: source.c\n\ncontexts:\n  main:\n    - match: \\b(if|else|for|while)\\b\n      scope: keyword.control.c\n"
  },
  {
    "path": "tests/examples/cache_source/themes/example.tmTheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>name</key>\n\t<string>example</string>\n\t<key>settings</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#222222</string>\n\t\t\t\t<key>caret</key>\n\t\t\t\t<string>#979797</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#F8F8F8</string>\n\t\t\t\t<key>invisibles</key>\n\t\t\t\t<string>#777777</string>\n\t\t\t\t<key>lineHighlight</key>\n\t\t\t\t<string>#000000</string>\n\t\t\t\t<key>selection</key>\n\t\t\t\t<string>#57CCBF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Comment</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>comment</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#777777</string>\n\t\t\t</dict>\n\t\t</dict>\n\t</array>\n\t<key>uuid</key>\n\t<string>0123-4567-89AB-CDEF</string>\n\t<key>colorSpaceName</key>\n\t<string>sRGB</string>\n\t<key>semanticClass</key>\n\t<string>theme</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "tests/examples/empty.txt",
    "content": ""
  },
  {
    "path": "tests/examples/empty_lines.txt",
    "content": "line 1\n\n\n\nline 5\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nline 20\nline 21\n\n\nline 24\n\nline 26\n\n\n\nline 30\n"
  },
  {
    "path": "tests/examples/git/.config/git/config",
    "content": "[user]\n    email = foo@bar.net\n    name = foobar\n"
  },
  {
    "path": "tests/examples/git/.gitconfig",
    "content": "[user]\n    email = foo@bar.net\n    name = foobar\n"
  },
  {
    "path": "tests/examples/git-commit.man",
    "content": "GIT-COMMIT(1)                     Git Manual                     GIT-COMMIT(1)\n\nN\bNA\bAM\bME\bE\n       git-commit - Record changes to the repository\n\nS\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS\n       g\bgi\bit\bt c\bco\bom\bmm\bmi\bit\bt [-\b-a\ba | -\b--\b-i\bin\bnt\bte\ber\bra\bac\bct\bti\biv\bve\be | -\b--\b-p\bpa\bat\btc\bch\bh] [-\b-s\bs] [-\b-v\bv] [-\b-u\bu[_\b<_\bm_\bo_\bd_\be_\b>]] [-\b--\b-a\bam\bme\ben\bnd\bd]\n               [-\b--\b-d\bdr\bry\by-\b-r\bru\bun\bn] [(-\b-c\bc | -\b-C\bC | -\b--\b-s\bsq\bqu\bua\bas\bsh\bh) _\b<_\bc_\bo_\bm_\bm_\bi_\bt_\b> | -\b--\b-f\bfi\bix\bxu\bup\bp [(a\bam\bme\ben\bnd\bd|r\bre\bew\bwo\bor\brd\bd):\b:]_\b<_\bc_\bo_\bm_\bm_\bi_\bt_\b>]\n               [-\b-F\bF _\b<_\bf_\bi_\bl_\be_\b> | -\b-m\bm _\b<_\bm_\bs_\bg_\b>] [-\b--\b-r\bre\bes\bse\bet\bt-\b-a\bau\but\bth\bho\bor\br] [-\b--\b-a\bal\bll\blo\bow\bw-\b-e\bem\bmp\bpt\bty\by]\n               [-\b--\b-a\bal\bll\blo\bow\bw-\b-e\bem\bmp\bpt\bty\by-\b-m\bme\bes\bss\bsa\bag\bge\be] [-\b--\b-n\bno\bo-\b-v\bve\ber\bri\bif\bfy\by] [-\b-e\be] [-\b--\b-a\bau\but\bth\bho\bor\br=\b=_\b<_\ba_\bu_\bt_\bh_\bo_\br_\b>]\n               [-\b--\b-d\bda\bat\bte\be=\b=_\b<_\bd_\ba_\bt_\be_\b>] [-\b--\b-c\bcl\ble\bea\ban\bnu\bup\bp=\b=_\b<_\bm_\bo_\bd_\be_\b>] [-\b--\b-[n\bno\bo-\b-]s\bst\bta\bat\btu\bus\bs]\n               [-\b-i\bi | -\b-o\bo] [-\b--\b-p\bpa\bat\bth\bhs\bsp\bpe\bec\bc-\b-f\bfr\bro\bom\bm-\b-f\bfi\bil\ble\be=\b=_\b<_\bf_\bi_\bl_\be_\b> [-\b--\b-p\bpa\bat\bth\bhs\bsp\bpe\bec\bc-\b-f\bfi\bil\ble\be-\b-n\bnu\bul\bl]]\n               [(-\b--\b-t\btr\bra\bai\bil\ble\ber\br _\b<_\bt_\bo_\bk_\be_\bn_\b>[(=\b=|:\b:)_\b<_\bv_\ba_\bl_\bu_\be_\b>])...] [-\b-S\bS[_\b<_\bk_\be_\by_\bi_\bd_\b>]]\n               [-\b--\b-] [_\b<_\bp_\ba_\bt_\bh_\bs_\bp_\be_\bc_\b>...]\n\nD\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN\n       Create a new commit containing the current contents of the index and\n       the given log message describing the changes. The new commit is a\n       direct child of HEAD, usually the tip of the current branch, and the\n       branch is updated to point to it (unless no branch is associated with\n       the working tree, in which case H\bHE\bEA\bAD\bD is \"detached\" as described in g\bgi\bit\bt-\b-\n       c\bch\bhe\bec\bck\bko\bou\but\bt(1)).\n\n       The content to be committed can be specified in several ways:\n\n        1. by using g\bgi\bit\bt-\b-a\bad\bdd\bd(1) to incrementally \"add\" changes to the index\n           before using the c\bco\bom\bmm\bmi\bit\bt command (Note: even modified files must be\n           \"added\");\n\n        2. by using g\bgi\bit\bt-\b-r\brm\bm(1) to remove files from the working tree and the\n"
  },
  {
    "path": "tests/examples/long-single-line.txt",
    "content": "abcdefghigklmnopqrstuvxyzabcdefghigklmnopqrstuvxyzabcdefghigklmnopqrstuvxyzabcdefghigklmnopqrstuvxyz\n"
  },
  {
    "path": "tests/examples/longline.json",
    "content": "{\"api\":\n    {\"ANGLE_instanced_arrays\":{\"__compat\":{\"mdn_url\":\"https://developer.mozilla.org/docs/Web/API/ANGLE_instanced_arrays\",\"spec_url\":\"https://www.khronos.org/registry/webgl/extensions/ANGLE_instanced_arrays/\",\"support\":{\"chrome\":{\"version_added\":\"32\"},\"chrome_android\":{\"version_added\":\"32\"},\"edge\":{\"version_added\":\"12\"},\"firefox\":{\"version_added\":\"47\"},\"firefox_android\":{\"version_added\":true},\"ie\":{\"version_added\":\"11\"},\"opera\":{\"version_added\":\"19\"},\"opera_android\":{\"version_added\":\"19\"},\"safari\":{\"version_added\":\"8\"},\"safari_ios\":{\"version_added\":\"8\"},\"samsunginternet_android\":{\"version_added\":\"2.0\"},\"webview_android\":{\"version_added\":\"4.4\"}},\"status\":{\"experimental\":false,\"standard_track\":true,\"deprecated\":false}},\"drawArraysInstancedANGLE\":{\"__compat\":{\"mdn_url\":\"https://developer.mozilla.org/docs/Web/API/ANGLE_instanced_arrays/drawArraysInstancedANGLE\",\"spec_url\":\"https://www.khronos.org/registry/webgl/extensions/ANGLE_instanced_arrays/\",\"support\":{\"chrome\":{\"version_added\":\"32\"},\"chrome_android\":{\"version_added\":\"32\"},\"edge\":{\"version_added\":\"12\"},\"firefox\":{\"version_added\":\"47\"},\"firefox_android\":{\"version_added\":true},\"ie\":{\"version_added\":\"11\"},\"opera\":{\"version_added\":\"19\"},\"opera_android\":{\"version_added\":\"19\"},\"safari\":{\"version_added\":\"8\"},\"safari_ios\":{\"version_added\":\"8\"},\"samsunginternet_android\":{\"version_added\":\"2.0\"},\"webview_android\":{\"version_added\":\"4.4\"}},\"status\":{\"experimental\":false,\"standard_track\":true,\"deprecated\":false}}},\"drawElementsInstancedANGLE\":{\"__compat\":{\"mdn_url\":\"https://developer.mozilla.org/docs/Web/API/ANGLE_instanced_arrays/drawElementsInstancedANGLE\",\"spec_url\":\"https://www.khronos.org/registry/webgl/extensions/ANGLE_instanced_arrays/\",\"support\":{\"chrome\":{\"version_added\":\"32\"},\"chrome_android\":{\"version_added\":\"32\"},\"edge\":{\"version_added\":\"12\"},\"firefox\":{\"version_added\":\"47\"},\"firefox_android\":{\"version_added\":true},\"ie\":{\"version_added\":\"11\"},\"opera\":{\"version_added\":\"19\"},\"opera_android\":{\"version_added\":\"19\"},\"safari\":{\"version_added\":\"8\"},\"safari_ios\":{\"version_added\":\"8\"},\"samsunginternet_android\":{\"version_added\":\"2.0\"},\"webview_android\":{\"version_added\":\"4.4\"}},\"status\":{\"experimental\":false,\"standard_track\":true,\"deprecated\":false}}},\"vertexAttribDivisorANGLE\":{\"__compat\":{\"mdn_url\":\"https://developer.mozilla.org/docs/Web/API/ANGLE_instanced_arrays/vertexAttribDivisorANGLE\",\"spec_url\":\"https://www.khronos.org/registry/webgl/extensions/ANGLE_instanced_arrays/\",\"support\":{\"chrome\":{\"version_added\":\"32\"},\"chrome_android\":{\"version_added\":\"32\"},\"edge\":{\"version_added\":\"12\"},\"firefox\":{\"version_added\":\"47\"},\"firefox_android\":{\"version_added\":true},\"ie\":{\"version_added\":\"11\"},\"opera\":{\"version_added\":\"19\"},\"opera_android\":{\"version_added\":\"19\"},\"safari\":{\"version_added\":\"8\"},\"safari_ios\":{\"version_added\":\"8\"},\"samsunginternet_android\":{\"version_added\":\"2.0\"},\"webview_android\":{\"version_added\":\"4.4\"}},\"status\":{\"experimental\":false,\"standard_track\":true,\"deprecated\":false}}}},\"AbortController\":{\"__compat\":{\"mdn_url\":\"https://developer.mozilla.org/docs/Web/API/AbortController\",\"spec_url\":\"https://dom.spec.whatwg.org/#interface-abortcontroller\",\"support\":{\"chrome\":{\"version_added\":\"66\"},\"chrome_android\":{\"version_added\":\"66\"},\"edge\":{\"version_added\":\"16\"},\"firefox\":{\"version_added\":\"57\"},\"firefox_android\":{\"version_added\":\"57\"},\"ie\":{\"version_added\":false},\"nodejs\":{\"version_added\":\"15.0.0\"},\"opera\":{\"version_added\":\"53\"},\"opera_android\":{\"version_added\":\"47\"},\"safari\":[{\"version_added\":\"12.1\"},{\"version_added\":\"11.1\",\"partial_implementation\":true,\"notes\":\"Even though <code>window.AbortController</code> is defined, it doesn't really abort <code>fetch</code> requests. See <a href='https://webkit.org/b/174980'>bug 174980</a>.\"}],\"safari_ios\":[{\"version_added\":\"12.2\"},{\"version_added\":\"11.3\",\"partial_implementation\":true,\"notes\":\"Even though <code>window.AbortController</code> is defined, it doesn't really abort <code>fetch</code> requests. See <a href='https://webkit.org/b/174980'>bug 174980</a>.\"}],\"samsunginternet_android\":{\"version_added\":\"9.0\"},\"webview_android\":{\"version_added\":\"66\"}},\"status\":{\"experimental\":true,\"standard_track\":true,\"deprecated\":false}},\"AbortController\":{\"__compat\":{\"mdn_url\":\"https://developer.mozilla.org/docs/Web/API/AbortController/AbortController\",\"spec_url\":\"https://dom.spec.whatwg.org/#ref-for-dom-abortcontroller-abortcontroller①\",\"description\":\"<code>AbortController()</code> constructor\",\"support\":{\"chrome\":{\"version_added\":\"66\"},\"chrome_android\":{\"version_added\":\"66\"},\"edge\":{\"version_added\":\"16\"},\"firefox\":{\"version_added\":\"57\"},\"firefox_android\":{\"version_added\":\"57\"},\"ie\":{\"version_added\":false},\"nodejs\":{\"version_added\":\"15.0.0\"},\"opera\":{\"version_added\":\"53\"},\"opera_android\":{\"version_added\":\"47\"},\"safari\":[{\"version_added\":\"12.1\"},{\"version_added\":\"11.1\",\"partial_implementation\":true,\"notes\":\"Even though <code>window.AbortController</code> is defined, it doesn't really abort <code>fetch</code> requests. See <a href='https://webkit.org/b/174980'>bug 174980</a>.\"}],\"safari_ios\":[{\"version_added\":\"12.2\"},{\"version_added\":\"11.3\",\"partial_implementation\":true,\"notes\":\"Even though <code>window.AbortController</code> is defined, it doesn't really abort <code>fetch</code> requests. See <a href='https://webkit.org/b/174980'>bug 174980</a>.\"}],\"samsunginternet_android\":{\"version_added\":\"9.0\"},\"webview_android\":{\"version_added\":\"66\"}},\"status\":{\"experimental\":true,\"standard_track\":true,\"deprecated\":false}}},\"abort\":{\"__compat\":{\"mdn_url\":\"https://developer.mozilla.org/docs/Web/API/AbortController/abort\",\"spec_url\":\"https://dom.spec.whatwg.org/#ref-for-dom-abortcontroller-abortcontroller①\",\"support\":{\"chrome\":{\"version_added\":\"66\"},\"chrome_android\":{\"version_added\":\"66\"},\"edge\":{\"version_added\":\"16\"},\"firefox\":{\"version_added\":\"57\"},\"firefox_android\":{\"version_added\":\"57\"},\"ie\":{\"version_added\":false},\"nodejs\":{\"version_added\":\"15.0.0\"},\"opera\":{\"version_added\":\"53\"},\"opera_android\":{\"version_added\":\"47\"},\"safari\":[{\"version_added\":\"12.1\"},{\"version_added\":\"11.1\",\"partial_implementation\":true,\"notes\":\"Even though <code>window.AbortController</code> is defined, it doesn't really abort <code>fetch</code> requests. See <a href='https://webkit.org/b/174980'>bug 174980</a>.\"}],\"safari_ios\":[{\"version_added\":\"12.2\"},{\"version_added\":\"11.3\",\"partial_implementation\":true,\"notes\":\"Even though <code>window.AbortController</code> is defined, it doesn't really abort <code>fetch</code> requests. See <a href='https://webkit.org/b/174980'>bug 174980</a>.\"}],\"samsunginternet_android\":{\"version_added\":\"9.0\"},\"webview_android\":{\"version_added\":\"66\"}},\"status\":{\"experimental\":true,\"standard_track\":true,\"deprecated\":false}}},\"signal\":{\"__compat\":{\"mdn_url\":\"https://developer.mozilla.org/docs/Web/API/AbortController/signal\",\"spec_url\":\"https://dom.spec.whatwg.org/#ref-for-dom-abortcontroller-signal②\",\"support\":{\"chrome\":{\"version_added\":\"66\"},\"chrome_android\":{\"version_added\":\"66\"},\"edge\":{\"version_added\":\"16\"},\"firefox\":{\"version_added\":\"57\"},\"firefox_android\":{\"version_added\":\"57\"},\"ie\":{\"version_added\":false},\"nodejs\":{\"version_added\":\"15.0.0\"},\"opera\":{\"version_added\":\"53\"},\"opera_android\":{\"version_added\":\"47\"},\"safari\":[{\"version_added\":\"12.1\"},{\"version_added\":\"11.1\",\"partial_implementation\":true,\"notes\":\"Even though <code>window.AbortController</code> is defined, it doesn't really abort <code>fetch</code> requests. See <a href='https://webkit.org/b/174980'>bug 174980</a>.\"}],\"safari_ios\":[{\"version_added\":\"12.2\"},{\"version_added\":\"11.3\",\"partial_implementation\":true,\"notes\":\"Even though <code>window.AbortController</code> is defined, it doesn't really abort <code>fetch</code> requests. See <a href='https://webkit.org/b/174980'>bug 174980</a>.\"}],\"samsunginternet_android\":{\"version_added\":\"9.0\"},\"webview_android\":{\"version_added\":\"66\"}},\"status\":{\"experimental\":true,\"standard_track\":true,\"deprecated\":false}}}},\"AbortPaymentEvent\":{\"__compat\":{\"mdn_url\":\"https://developer.mozilla.org/docs/Web/API/AbortPaymentEvent\",\"support\":{\"chrome\":{\"version_added\":\"70\"},\"chrome_android\":{\"version_added\":\"70\"},\"edge\":{\"version_added\":\"79\"},\"firefox\":{\"version_added\":false},\"firefox_android\":{\"version_added\":false},\"ie\":{\"version_added\":false},\"opera\":{\"version_added\":\"57\"},\"opera_android\":{\"version_added\":\"49\"},\"safari\":{\"version_added\":false},\"safari_ios\":{\"version_added\":false},\"samsunginternet_android\":{\"version_added\":\"10.0\"},\"webview_android\":{\"version_added\":false}},\"status\":{\"experimental\":true,\"standard_track\":false,\"deprecated\":false}},\"AbortPaymentEvent\":{\"__compat\":{\"description\":\"<code>AbortPaymentEvent()</code> constructor\",\"mdn_url\":\"https://developer.mozilla.org/docs/Web/API/AbortPaymentEvent/AbortPaymentEvent\",\"support\":{\"chrome\":{\"version_added\":\"70\"},\"chrome_android\":{\"version_added\":\"70\"},\"edge\":{\"version_added\":\"79\"},\"firefox\":{\"version_added\":false},\"firefox_android\":{\"version_added\":false},\"ie\":{\"version_added\":false},\"opera\":{\"version_added\":\"57\"},\"opera_android\":{\"version_added\":\"49\"},\"safari\":{\"version_added\":false},\"safari_ios\":{\"version_added\":false},\"samsunginternet_android\":{\"version_added\":\"10.0\"},\"webview_android\":{\"version_added\":false}},\"status\":{\"experimental\":true,\"standard_track\":false,\"deprecated\":false}}},\"respondWith\":{\"__compat\":{\"mdn_url\":\"https://developer.mozilla.org/docs/Web/API/AbortPaymentEvent/respondWith\",\"support\":{\"chrome\":{\"version_added\":\"70\"},\"chrome_android\":{\"version_added\":\"70\"},\"edge\":{\"version_added\":\"79\"},\"firefox\":{\"version_added\":false},\"firefox_android\":{\"version_added\":false},\"ie\":{\"version_added\":false},\"opera\":{\"version_added\":\"57\"},\"opera_android\":{\"version_added\":\"49\"},\"safari\":{\"version_added\":false},\"safari_ios\":{\"version_added\":false},\"samsunginternet_android\":{\"version_added\":\"10.0\"},\"webview_android\":{\"version_added\":false}},\"status\":{\"experimental\":true,\"standard_track\":false,\"deprecated\":false}}}},\"AbortSignal\":{\"__compat\":{\"mdn_url\":\"https://developer.mozilla.org/docs/Web/API/AbortSignal\",\"spec_url\":\"https://dom.spec.whatwg.org/#interface-AbortSignal\",\"support\":{\"chrome\":{\"version_added\":\"66\"},\"chrome_android\":{\"version_added\":\"66\"},\"edge\":{\"version_added\":\"16\"},\"firefox\":{\"version_added\":\"57\"},\"firefox_android\":{\"version_added\":\"57\"},\"ie\":{\"version_added\":false},\"nodejs\":{\"version_added\":\"15.0.0\"},\"opera\":{\"version_added\":\"53\"},\"opera_android\":{\"version_added\":\"47\"},\"safari\":{\"version_added\":\"11.1\"},\"safari_ios\":{\"version_added\":\"11.3\"},\"samsunginternet_android\":{\"version_added\":\"9.0\"},\"webview_android\":{\"version_added\":\"66\"}},\"status\":{\"experimental\":false,\"standard_track\":true,\"deprecated\":false}},\"abort\":{\"__compat\":{\"mdn_url\":\"https://developer.mozilla.org/docs/Web/API/AbortSignal/abort\",\"spec_url\":\"https://dom.spec.whatwg.org/#ref-for-dom-abortsignal-abort①\",\"support\":{\"chrome\":{\"version_added\":false},\"chrome_android\":{\"version_added\":false},\"edge\":{\"version_added\":false},\"firefox\":{\"version_added\":\"88\"},\"firefox_android\":{\"version_added\":\"88\"},\"ie\":{\"version_added\":false},\"nodejs\":{\"version_added\":false},\"opera\":{\"version_added\":false},\"opera_android\":{\"version_added\":false},\"safari\":{\"version_added\":false},\"safari_ios\":{\"version_added\":false},\"samsunginternet_android\":{\"version_added\":false},\"webview_android\":{\"version_added\":false}},\"status\":{\"experimental\":false,\"standard_track\":true,\"deprecated\":false}}},\"abort_event\":{\"__compat\":{\"description\":\"<code>abort</code> event\",\"mdn_url\":\"https://developer.mozilla.org/docs/Web/API/AbortSignal/abort_event\",\"spec_url\":\"https://dom.spec.whatwg.org/#eventdef-abortsignal-abort\",\"support\":{\"chrome\":{\"version_added\":\"66\"},\"chrome_android\":{\"version_added\":\"66\"},\"edge\":{\"version_added\":\"16\"},\"firefox\":{\"version_added\":\"57\"},\"firefox_android\":{\"version_added\":\"57\"},\"ie\":{\"version_added\":false},\"nodejs\":{\"version_added\":\"15.0.0\"},\"opera\":{\"version_added\":\"53\"},\"opera_android\":{\"version_added\":\"47\"},\"safari\":{\"version_added\":\"11.1\"},\"safari_ios\":{\"version_added\":\"11.3\"},\"samsunginternet_android\":{\"version_added\":\"9.0\"},\"webview_android\":{\"version_added\":\"66\"}},\"status\":{\"experimental\":false,\"standard_track\":true,\"deprecated\":false}}},\"aborted\":{\"__compat\":{\"mdn_url\":\"https://developer.mozilla.org/docs/Web/API/AbortSignal/aborted\",\"spec_url\":\"https://dom.spec.whatwg.org/#ref-for-dom-abortsignal-aborted①\",\"support\":{\"chrome\":{\"version_added\":\"66\"},\"chrome_android\":{\"version_added\":\"66\"},\"edge\":{\"version_added\":\"16\"},\"firefox\":{\"version_added\":\"57\"},\"firefox_android\":{\"version_added\":\"57\"},\"ie\":{\"version_added\":false},\"nodejs\":{\"version_added\":\"15.0.0\"},\"opera\":{\"version_added\":\"53\"},\"opera_android\":{\"version_added\":\"47\"},\"safari\":{\"version_added\":\"11.1\"},\"safari_ios\":{\"version_added\":\"11.3\"},\"samsunginternet_android\":{\"version_added\":\"9.0\"},\"webview_android\":{\"version_added\":\"66\"}},\"status\":{\"experimental\":false,\"standard_track\":true,\"deprecated\":false}}},\"onabort\":{\"__compat\":{\"mdn_url\":\"https://developer.mozilla.org/docs/Web/API/AbortSignal/onabort\",\"spec_url\":\"https://dom.spec.whatwg.org/#abortsignal-onabort\",\"support\":{\"chrome\":{\"version_added\":\"66\"},\"chrome_android\":{\"version_added\":\"66\"},\"edge\":{\"version_added\":\"16\"},\"firefox\":{\"version_added\":\"57\"},\"firefox_android\":{\"version_added\":\"57\"},\"ie\":{\"version_added\":false},\"nodejs\":{\"version_added\":\"15.0.0\"},\"opera\":{\"version_added\":\"53\"},\"opera_android\":{\"version_added\":\"47\"},\"safari\":{\"version_added\":\"11.1\"},\"safari_ios\":{\"version_added\":\"11.3\"},\"samsunginternet_android\":{\"version_added\":\"9.0\"},\"webview_android\":{\"version_added\":\"66\"}},\"status\":{\"experimental\":false,\"standard_track\":true,\"deprecated\":false}}}},\"AbsoluteOrientationSensor\":{\"__compat\":{\"mdn_url\":\"https://developer.mozilla.org/docs/Web/API/AbsoluteOrientationSensor\",\"spec_url\":\"https://w3c.github.io/orientation-sensor/#absoluteorientationsensor-interface\",\"support\":{\"chrome\":{\"version_added\":\"67\"},\"chrome_android\":{\"version_added\":\"67\"},\"edge\":{\"version_added\":\"79\"},\"firefox\":{\"version_added\":false},\"firefox_android\":{\"version_added\":false},\"ie\":{\"version_added\":false},\"opera\":{\"version_added\":\"54\"},\"opera_android\":{\"version_added\":\"48\"},\"safari\":{\"version_added\":false},\"safari_ios\":{\"version_added\":false},\"samsunginternet_android\":{\"version_added\":\"9.0\"},\"webview_android\":{\"version_added\":\"67\"}},\"status\":{\"experimental\":false,\"standard_track\":true,\"deprecated\":false}},\"AbsoluteOrientationSensor\":{\"__compat\":{\"mdn_url\":\"https://developer.mozilla.org/docs/Web/API/AbsoluteOrientationSensor/AbsoluteOrientationSensor\",\"spec_url\":\"https://w3c.github.io/orientation-sensor/#dom-absoluteorientationsensor-absoluteorientationsensor\",\"description\":\"<code>AbsoluteOrientationSensor()</code> constructor\",\"support\":{\"chrome\":{\"version_added\":\"67\"},\"chrome_android\":{\"version_added\":\"67\"},\"edge\":{\"version_added\":\"79\"},\"firefox\":{\"version_added\":false},\"firefox_android\":{\"version_added\":false},\"ie\":{\"version_added\":false},\"opera\":{\"version_added\":\"54\"},\"opera_android\":{\"version_added\":\"48\"},\"safari\":{\"version_added\":false},\"safari_ios\":{\"version_added\":false},\"samsunginternet_android\":{\"version_added\":\"9.0\"},\"webview_android\":{\"version_added\":\"67\"}},\"status\":{\"experimental\":false,\"standard_track\":true,\"deprecated\":false}}}},\"AbstractRange\":{\"__compat\":{\"mdn_url\":\"https://developer.mozilla.org/docs/Web/API/AbstractRange\",\"spec_url\":\"https://dom.spec.whatwg.org/#interface-abstractrange\",\"support\":{\"chrome\":{\"version_added\":\"90\"},\"chrome_android\":{\"version_added\":\"90\"},\"edge\":[{\"version_added\":\"90\"},{\"version_added\":\"18\",\"version_removed\":\"79\"}],\"firefox\":{\"version_added\":\"69\"},\"firefox_android\":{\"version_added\":false},\"ie\":{\"version_added\":false},\"opera\":{\"version_added\":false},\"opera_android\":{\"version_added\":false},\"safari\":{\"version_added\":\"14.1\"},\"safari_ios\":{\"version_added\":\"14.5\"},\"samsunginternet_android\":{\"version_added\":false},\"webview_android\":{\"version_added\":\"90\"}},\"status\":{\"experimental\":false,\"standard_track\":true,\"deprecated\":false}},\"collapsed\":{\"__compat\":{\"mdn_url\":\"https://developer.mozilla.org/docs/Web/API/AbstractRange/collapsed\",\"spec_url\":\"https://dom.spec.whatwg.org/#ref-for-dom-range-collapsed①\",\"support\":{\"chrome\":{\"version_added\":\"90\"},\"chrome_android\":{\"version_added\":\"90\"},\"edge\":[{\"version_added\":\"90\"},{\"version_added\":\"18\",\"version_removed\":\"79\"}],\"firefox\":{\"version_added\":\"69\"},\"firefox_android\":{\"version_added\":false},\"ie\":{\"version_added\":false},\"opera\":{\"version_added\":false},\"opera_android\":\n    {\"version_added\":false}\n"
  },
  {
    "path": "tests/examples/map-syntax_case.Config",
    "content": "{\"test\": \"value\"}\n"
  },
  {
    "path": "tests/examples/multiline.txt",
    "content": "line 1\nline 2\nline 3\nline 4\nline 5\nline 6\nline 7\nline 8\nline 9\nline 10\n"
  },
  {
    "path": "tests/examples/overstrike.txt",
    "content": "B\bBold t\bte\bex\bxt\bt and _\bu_\bn_\bd_\be_\br_\bl_\bi_\bn_\be\n"
  },
  {
    "path": "tests/examples/regression_tests/first_line_fallback.invalid-syntax",
    "content": "#!/usr/bin/env bash\necho \"Hello\"\n"
  },
  {
    "path": "tests/examples/regression_tests/issue_190.md",
    "content": "```javascript\nvar test = \"boom\";\n```\n"
  },
  {
    "path": "tests/examples/regression_tests/issue_2541.txt",
    "content": "\u001b]8;;http://example.com\u001b\\This is a link\u001b]8;;\u001b\\n"
  },
  {
    "path": "tests/examples/regression_tests/issue_28.md",
    "content": "Test\n\n<div>\n</div>\n"
  },
  {
    "path": "tests/examples/regression_tests/issue_314.hs",
    "content": "module Main where\n\nmain :: IO ()\nmain = putStrLn \"Please show my file :c\"\n"
  },
  {
    "path": "tests/examples/regression_tests/issue_914.rb",
    "content": "<<END_DESC\nTest\nEND_DESC\n"
  },
  {
    "path": "tests/examples/regression_tests/issue_915.vue",
    "content": "<style lang=\"stylus\">\n</style>\n"
  },
  {
    "path": "tests/examples/regression_tests/issue_985.js",
    "content": "// This test should be considered a failure if the detected syntax differs between the following two commands:\n/*\n# bat --map-syntax '*.js:Markdown' --file-name 'issue_985.js' < issue_985.js\n# bat --map-syntax '*.js:Markdown' --file-name 'issue_985.js' issue_985.js\n*/\n"
  },
  {
    "path": "tests/examples/single-line.txt",
    "content": "Single Line"
  },
  {
    "path": "tests/examples/sub_directory/dummy.txt",
    "content": ""
  },
  {
    "path": "tests/examples/system_config/bat/config",
    "content": "# Make sure that the pager gets executed\n--paging=always\n\n# Output a dummy message for the integration test.\n--pager=\"echo dummy-pager-from-system-config\"\n"
  },
  {
    "path": "tests/examples/tabs.txt",
    "content": "\t1\t2\t3\t4\n1\t?\n22\t?\n333\t?\n4444\t?\n55555\t?\n666666\t?\n7777777\t?\n88888888\t?\n"
  },
  {
    "path": "tests/examples/test.A—B가",
    "content": ""
  },
  {
    "path": "tests/examples/test.demo.foo.suffix",
    "content": "{\"test\": \"value\"}"
  },
  {
    "path": "tests/examples/test.demo.suffix",
    "content": "{\"test\": \"value\"}"
  },
  {
    "path": "tests/examples/test.json.suffix",
    "content": "{\"test\": \"value\"}"
  },
  {
    "path": "tests/examples/test.json~",
    "content": "{\"test\": \"value\"}"
  },
  {
    "path": "tests/examples/test.txt",
    "content": "hello world\n"
  },
  {
    "path": "tests/examples/test_BOM.txt",
    "content": "﻿hello world\n"
  },
  {
    "path": "tests/examples/this-file-path-is-really-long-and-would-have-broken-the-layout-of-the-header.txt",
    "content": "The header is not broken"
  },
  {
    "path": "tests/examples/unicode-wrap.txt",
    "content": "ビタミンA  ビタミンD  ビタミンE  ビタミンK  ビタミンB1  ビタミンB2  ナイアシン  パントテン酸  ビタミンB6  ビタミンB12  葉酸  ビオチン  ビタミンC\n\n고양이 고양이 고양이 고양이 고양이 고양이 고양이 고양이 고양이 고양이 고양이 고양이 고양이 고양이 고양이 고양이 고양이 고양이 고양이 고양이 고양이 고양이 고양이 고양이 고양이 고양이 고양이 고양이 고양이 고양이 고양이 고양이 고양이 고양이 고양이 고양이 고양이 고양이 고양이 고양이 고양이\n\n1 บวก 2 บวก 3 บวก 4 บวก 5 บวก 6 บวก 7 บวก 8 บวก 9 บวก 10 บวก 11 บวก 12 บวก 13 บวก 14 บวก 15 บวก 16 บวก 17 บวก 18 บวก 19 บวก 20\n\nБельгия Болгария Чехия Дания Германия Эстония Ирландия Греция Испания Франция Хорватия Италия Кипр Латвия Литва Люксембург Венгрия Мальта Нидерланды Австрия Польша Португалия Румыния Словения Словакия Финляндия Швеция Великобритания\n"
  },
  {
    "path": "tests/examples/word-wrap.txt",
    "content": "The quick brown fox jumps over the lazy dog and then runs away\nsuperlongwordthatdefinitelyexceedstheterminalwidthandshouldfallbacktocharacterwrapping\nshort words here\n"
  },
  {
    "path": "tests/github-actions.rs",
    "content": "#[test]\nfn all_jobs_not_missing_any_jobs() {\n    let yaml: serde_yaml::Value =\n        serde_yaml::from_reader(std::fs::File::open(\".github/workflows/CICD.yml\").unwrap())\n            .unwrap();\n    let jobs = yaml.get(\"jobs\").unwrap();\n\n    // Get all jobs that all-jobs depends on:\n    //\n    //   jobs:\n    //     all-jobs:\n    //       needs:\n    //         - this\n    //         - list\n    //         - ...\n    let actual = jobs\n        .get(\"all-jobs\")\n        .unwrap()\n        .get(\"needs\")\n        .unwrap()\n        .as_sequence()\n        .unwrap();\n\n    // Get all jobs used in CI, except the ones we want to ignore:\n    //\n    //   jobs:\n    //     this: ...\n    //     list: ...\n    //     ...\n    let exceptions = [\n        \"all-jobs\", // 'all-jobs' should not reference itself\n        \"winget\",   // only used when publishing a release\n    ];\n    let expected = jobs\n        .as_mapping()\n        .unwrap()\n        .keys()\n        .filter(|k| !exceptions.contains(&k.as_str().unwrap_or_default()))\n        .map(ToOwned::to_owned)\n        .collect::<Vec<_>>();\n\n    // Make sure they match\n    assert_eq!(\n        *actual, expected,\n        \"`all-jobs` should depend on all other jobs\"\n    );\n}\n"
  },
  {
    "path": "tests/integration_tests.rs",
    "content": "use predicates::boolean::PredicateBooleanExt;\nuse predicates::{prelude::predicate, str::PredicateStrExt};\nuse serial_test::serial;\nuse std::path::Path;\nuse std::str::from_utf8;\nuse tempfile::tempdir;\n\n#[cfg(unix)]\nmod unix {\n    pub use std::fs::File;\n    pub use std::io::{self, Write};\n    pub use std::path::PathBuf;\n    pub use std::process::Stdio;\n    pub use std::thread;\n    pub use std::time::Duration;\n\n    pub use assert_cmd::assert::OutputAssertExt;\n    pub use nix::pty::{openpty, OpenptyResult};\n    pub use wait_timeout::ChildExt;\n\n    pub const SAFE_CHILD_PROCESS_CREATION_TIME: Duration = Duration::from_millis(100);\n    pub const CHILD_WAIT_TIMEOUT: Duration = Duration::from_secs(15);\n}\n#[cfg(unix)]\nuse unix::*;\n\nmod utils;\nuse utils::command::{bat, bat_with_config};\n\n#[cfg(unix)]\nuse utils::command::bat_raw_command;\nuse utils::mocked_pagers;\n\nconst EXAMPLES_DIR: &str = \"tests/examples\";\n\nfn get_config() -> &'static str {\n    if cfg!(windows) {\n        \"bat-windows.conf\"\n    } else {\n        \"bat.conf\"\n    }\n}\n\n#[test]\nfn basic() {\n    bat()\n        .arg(\"test.txt\")\n        .assert()\n        .success()\n        .stdout(\"hello world\\n\")\n        .stderr(\"\");\n}\n\n#[test]\nfn stdin() {\n    bat()\n        .write_stdin(\"foo\\nbar\\n\")\n        .assert()\n        .success()\n        .stdout(\"foo\\nbar\\n\");\n}\n\n#[test]\nfn concatenate() {\n    bat()\n        .arg(\"test.txt\")\n        .arg(\"test.txt\")\n        .assert()\n        .success()\n        .stdout(\"hello world\\nhello world\\n\");\n}\n\n#[test]\nfn concatenate_stdin() {\n    bat()\n        .arg(\"test.txt\")\n        .arg(\"-\")\n        .arg(\"test.txt\")\n        .write_stdin(\"stdin\\n\")\n        .assert()\n        .success()\n        .stdout(\"hello world\\nstdin\\nhello world\\n\");\n}\n\n#[test]\nfn concatenate_empty_first() {\n    bat()\n        .arg(\"empty.txt\")\n        .arg(\"test.txt\")\n        .assert()\n        .success()\n        .stdout(\"hello world\\n\");\n}\n\n#[test]\nfn concatenate_empty_last() {\n    bat()\n        .arg(\"test.txt\")\n        .arg(\"empty.txt\")\n        .assert()\n        .success()\n        .stdout(\"hello world\\n\");\n}\n\n#[test]\nfn concatenate_empty_both() {\n    bat()\n        .arg(\"empty.txt\")\n        .arg(\"empty.txt\")\n        .assert()\n        .success()\n        .stdout(\"\");\n}\n\n#[test]\nfn concatenate_empty_between() {\n    bat()\n        .arg(\"test.txt\")\n        .arg(\"empty.txt\")\n        .arg(\"test.txt\")\n        .assert()\n        .success()\n        .stdout(\"hello world\\nhello world\\n\");\n}\n\n#[test]\nfn concatenate_empty_first_and_last() {\n    bat()\n        .arg(\"empty.txt\")\n        .arg(\"test.txt\")\n        .arg(\"empty.txt\")\n        .assert()\n        .success()\n        .stdout(\"hello world\\n\");\n}\n\n#[test]\nfn concatenate_single_line() {\n    bat()\n        .arg(\"single-line.txt\")\n        .arg(\"single-line.txt\")\n        .assert()\n        .success()\n        .stdout(\"Single LineSingle Line\");\n}\n\n#[test]\nfn concatenate_single_line_empty() {\n    bat()\n        .arg(\"single-line.txt\")\n        .arg(\"empty.txt\")\n        .arg(\"single-line.txt\")\n        .assert()\n        .success()\n        .stdout(\"Single LineSingle Line\");\n}\n\n#[test]\nfn line_numbers() {\n    bat()\n        .arg(\"multiline.txt\")\n        .arg(\"--style=numbers\")\n        .arg(\"--decorations=always\")\n        .assert()\n        .success()\n        .stdout(\"   1 line 1\\n   2 line 2\\n   3 line 3\\n   4 line 4\\n   5 line 5\\n   6 line 6\\n   7 line 7\\n   8 line 8\\n   9 line 9\\n  10 line 10\\n\");\n}\n\n// Test that -n on command line shows line numbers even when piping (similar to `cat -n`)\n#[test]\nfn line_numbers_from_cli_in_loop_through_mode() {\n    bat()\n        .arg(\"multiline.txt\")\n        .arg(\"-n\")\n        .assert()\n        .success()\n        .stdout(\"   1 line 1\\n   2 line 2\\n   3 line 3\\n   4 line 4\\n   5 line 5\\n   6 line 6\\n   7 line 7\\n   8 line 8\\n   9 line 9\\n  10 line 10\\n\");\n}\n\n#[test]\nfn style_from_env_var_ignored_and_line_numbers_from_cli_in_loop_through_mode() {\n    bat()\n        .env(\"BAT_STYLE\", \"full\")\n        .arg(\"multiline.txt\")\n        .arg(\"-n\")\n        .arg(\"--decorations=auto\")\n        .assert()\n        .success()\n        .stdout(\"   1 line 1\\n   2 line 2\\n   3 line 3\\n   4 line 4\\n   5 line 5\\n   6 line 6\\n   7 line 7\\n   8 line 8\\n   9 line 9\\n  10 line 10\\n\");\n}\n\n#[test]\nfn numbers_ignored_from_cli_when_followed_by_plain_in_loop_through_mode() {\n    bat()\n        .arg(\"multiline.txt\")\n        .arg(\"-np\")\n        .arg(\"--decorations=auto\")\n        .assert()\n        .success()\n        .stdout(\n            \"line 1\\nline 2\\nline 3\\nline 4\\nline 5\\nline 6\\nline 7\\nline 8\\nline 9\\nline 10\\n\",\n        );\n}\n\n#[test]\nfn numbers_honored_from_cli_when_preceeded_by_plain_in_loop_through_mode() {\n    bat()\n        .arg(\"multiline.txt\")\n        .arg(\"-pn\")\n        .arg(\"--decorations=auto\")\n        .assert()\n        .success()\n        .stdout(\"   1 line 1\\n   2 line 2\\n   3 line 3\\n   4 line 4\\n   5 line 5\\n   6 line 6\\n   7 line 7\\n   8 line 8\\n   9 line 9\\n  10 line 10\\n\");\n}\n\n#[test]\nfn line_range_2_3() {\n    bat()\n        .arg(\"multiline.txt\")\n        .arg(\"--line-range=2:3\")\n        .assert()\n        .success()\n        .stdout(\"line 2\\nline 3\\n\");\n}\n\n#[test]\nfn line_range_up_to_2_from_back() {\n    bat()\n        .arg(\"multiline.txt\")\n        .arg(\"--line-range=:-2\")\n        .assert()\n        .success()\n        .stdout(\"line 1\\nline 2\\nline 3\\nline 4\\nline 5\\nline 6\\nline 7\\nline 8\\n\");\n}\n\n#[test]\nfn line_range_up_to_2_from_back_single_line_is_empty() {\n    bat()\n        .arg(\"single-line.txt\")\n        .arg(\"--line-range=:-2\")\n        .assert()\n        .success()\n        .stdout(\"\");\n}\n\n#[test]\nfn line_range_from_back_last_two() {\n    bat()\n        .arg(\"multiline.txt\")\n        .arg(\"--line-range=-2:\")\n        .assert()\n        .success()\n        .stdout(\"line 9\\nline 10\\n\");\n}\n\n#[test]\nfn line_range_from_back_last_two_single_line_eq_sep() {\n    bat()\n        .arg(\"single-line.txt\")\n        .arg(\"--line-range=-2:\")\n        .assert()\n        .success()\n        .stdout(\"Single Line\");\n}\n\n#[test]\nfn line_range_from_back_last_two_single_line_no_sep() {\n    bat()\n        .arg(\"single-line.txt\")\n        .arg(\"--line-range\")\n        .arg(\"-2:\")\n        .assert()\n        .success()\n        .stdout(\"Single Line\");\n}\n\n#[test]\nfn line_range_first_two() {\n    bat()\n        .arg(\"multiline.txt\")\n        .arg(\"--line-range=:2\")\n        .assert()\n        .success()\n        .stdout(\"line 1\\nline 2\\n\");\n}\n\n#[test]\nfn line_range_last_3() {\n    bat()\n        .arg(\"multiline.txt\")\n        .arg(\"--line-range=8:\")\n        .assert()\n        .success()\n        .stdout(\"line 8\\nline 9\\nline 10\\n\");\n}\n\n#[test]\nfn line_range_multiple() {\n    bat()\n        .arg(\"multiline.txt\")\n        .arg(\"--line-range=1:2\")\n        .arg(\"--line-range=4:4\")\n        .assert()\n        .success()\n        .stdout(\"line 1\\nline 2\\nline 4\\n\");\n}\n\n#[test]\nfn line_range_multiple_with_context() {\n    bat()\n        .arg(\"multiline.txt\")\n        .arg(\"--line-range=2::1\")\n        .arg(\"--line-range=8::1\")\n        .assert()\n        .success()\n        .stdout(\"line 1\\nline 2\\nline 3\\nline 7\\nline 8\\nline 9\\n\");\n}\n\n#[test]\nfn line_range_context_around_single_line() {\n    bat()\n        .arg(\"multiline.txt\")\n        .arg(\"--line-range=5::2\")\n        .assert()\n        .success()\n        .stdout(\"line 3\\nline 4\\nline 5\\nline 6\\nline 7\\n\");\n}\n\n#[test]\nfn line_range_context_around_single_line_minimal() {\n    bat()\n        .arg(\"multiline.txt\")\n        .arg(\"--line-range=5::1\")\n        .assert()\n        .success()\n        .stdout(\"line 4\\nline 5\\nline 6\\n\");\n}\n\n#[test]\nfn line_range_context_around_range() {\n    bat()\n        .arg(\"multiline.txt\")\n        .arg(\"--line-range=4:6:2\")\n        .assert()\n        .success()\n        .stdout(\"line 2\\nline 3\\nline 4\\nline 5\\nline 6\\nline 7\\nline 8\\n\");\n}\n\n#[test]\nfn line_range_context_at_file_boundaries() {\n    bat()\n        .arg(\"multiline.txt\")\n        .arg(\"--line-range=1::2\")\n        .assert()\n        .success()\n        .stdout(\"line 1\\nline 2\\nline 3\\n\");\n}\n\n#[test]\nfn line_range_context_at_end_of_file() {\n    bat()\n        .arg(\"multiline.txt\")\n        .arg(\"--line-range=10::2\")\n        .assert()\n        .success()\n        .stdout(\"line 8\\nline 9\\nline 10\\n\");\n}\n\n#[test]\nfn line_range_context_zero() {\n    bat()\n        .arg(\"multiline.txt\")\n        .arg(\"--line-range=5::0\")\n        .assert()\n        .success()\n        .stdout(\"line 5\\n\");\n}\n\n#[test]\nfn line_range_context_negative_single_line() {\n    bat()\n        .arg(\"multiline.txt\")\n        .arg(\"--line-range=5::-1\")\n        .assert()\n        .failure()\n        .stderr(predicate::str::contains(\n            \"Invalid context number in N::C format\",\n        ));\n}\n\n#[test]\nfn line_range_context_negative_range() {\n    bat()\n        .arg(\"multiline.txt\")\n        .arg(\"--line-range=5:6:-1\")\n        .assert()\n        .failure()\n        .stderr(predicate::str::contains(\n            \"Invalid context number in N:M:C format\",\n        ));\n}\n\n#[test]\nfn line_range_context_non_numeric_single_line() {\n    bat()\n        .arg(\"multiline.txt\")\n        .arg(\"--line-range=10::abc\")\n        .assert()\n        .failure()\n        .stderr(predicate::str::contains(\n            \"Invalid context number in N::C format\",\n        ));\n}\n\n#[test]\nfn line_range_context_non_numeric_range() {\n    bat()\n        .arg(\"multiline.txt\")\n        .arg(\"--line-range=10:12:xyz\")\n        .assert()\n        .failure()\n        .stderr(predicate::str::contains(\n            \"Invalid context number in N:M:C format\",\n        ));\n}\n\n#[test]\nfn line_range_context_very_large() {\n    bat()\n        .arg(\"multiline.txt\")\n        .arg(\"--line-range=10::999999\")\n        .assert()\n        .success()\n        .stdout(\n            \"line 1\\nline 2\\nline 3\\nline 4\\nline 5\\nline 6\\nline 7\\nline 8\\nline 9\\nline 10\\n\",\n        );\n}\n\n#[test]\nfn piped_output_with_implicit_auto_style() {\n    bat()\n        .write_stdin(\"hello\\nworld\\n\")\n        .assert()\n        .success()\n        .stdout(\"hello\\nworld\\n\");\n}\n\n#[test]\nfn piped_output_with_line_number_flag() {\n    bat()\n        .arg(\"--number\")\n        .write_stdin(\"hello\\nworld\\n\")\n        .assert()\n        .success()\n        .stdout(\"   1 hello\\n   2 world\\n\");\n}\n\n#[test]\nfn piped_output_with_line_numbers_style_flag() {\n    bat()\n        .arg(\"--style=numbers\")\n        .write_stdin(\"hello\\nworld\\n\")\n        .assert()\n        .success()\n        .stdout(\"hello\\nworld\\n\");\n}\n\n#[test]\nfn piped_output_with_line_numbers_with_header_grid_style_flag() {\n    // style ignored because non-interactive\n    bat()\n        .arg(\"--style=header,grid,numbers\")\n        .write_stdin(\"hello\\nworld\\n\")\n        .assert()\n        .success()\n        .stdout(\"hello\\nworld\\n\");\n}\n\n#[test]\nfn piped_output_with_auto_style() {\n    bat()\n        .arg(\"--style=auto\")\n        .write_stdin(\"hello\\nworld\\n\")\n        .assert()\n        .success()\n        .stdout(\"hello\\nworld\\n\"); // Should be plain when piped\n}\n\n#[test]\n#[cfg(not(target_os = \"windows\"))]\nfn piped_output_with_default_style_flag() {\n    bat()\n        .arg(\"--style=default\")\n        .arg(\"--decorations=always\")\n        .write_stdin(\"hello\\nworld\\n\")\n        .assert()\n        .success()\n        .stdout(\n            \"─────┬──────────────────────────────────────────────────────────────────────────\n     │ STDIN\n─────┼──────────────────────────────────────────────────────────────────────────\n   1 │ hello\n   2 │ world\n─────┴──────────────────────────────────────────────────────────────────────────\n\",\n        );\n}\n\n#[test]\nfn squeeze_blank() {\n    bat()\n        .arg(\"empty_lines.txt\")\n        .arg(\"--squeeze-blank\")\n        .assert()\n        .success()\n        .stdout(\"line 1\\n\\nline 5\\n\\nline 20\\nline 21\\n\\nline 24\\n\\nline 26\\n\\nline 30\\n\");\n}\n\n#[test]\nfn squeeze_blank_line_numbers() {\n    bat()\n        .arg(\"empty_lines.txt\")\n        .arg(\"--squeeze-blank\")\n        .arg(\"--decorations=always\")\n        .arg(\"--number\")\n        .assert()\n        .success()\n        .stdout(\"   1 line 1\\n   2 \\n   5 line 5\\n   6 \\n  20 line 20\\n  21 line 21\\n  22 \\n  24 line 24\\n  25 \\n  26 line 26\\n  27 \\n  30 line 30\\n\");\n}\n\n#[test]\nfn squeeze_limit() {\n    bat()\n        .arg(\"empty_lines.txt\")\n        .arg(\"--squeeze-blank\")\n        .arg(\"--squeeze-limit=2\")\n        .assert()\n        .success()\n        .stdout(\"line 1\\n\\n\\nline 5\\n\\n\\nline 20\\nline 21\\n\\n\\nline 24\\n\\nline 26\\n\\n\\nline 30\\n\");\n\n    bat()\n        .arg(\"empty_lines.txt\")\n        .arg(\"--squeeze-blank\")\n        .arg(\"--squeeze-limit=5\")\n        .assert()\n        .success()\n        .stdout(\"line 1\\n\\n\\n\\nline 5\\n\\n\\n\\n\\n\\nline 20\\nline 21\\n\\n\\nline 24\\n\\nline 26\\n\\n\\n\\nline 30\\n\");\n}\n\n#[test]\nfn squeeze_limit_line_numbers() {\n    bat()\n        .arg(\"empty_lines.txt\")\n        .arg(\"--squeeze-blank\")\n        .arg(\"--squeeze-limit=2\")\n        .arg(\"--decorations=always\")\n        .arg(\"--number\")\n        .assert()\n        .success()\n        .stdout(\"   1 line 1\\n   2 \\n   3 \\n   5 line 5\\n   6 \\n   7 \\n  20 line 20\\n  21 line 21\\n  22 \\n  23 \\n  24 line 24\\n  25 \\n  26 line 26\\n  27 \\n  28 \\n  30 line 30\\n\");\n\n    bat()\n        .arg(\"empty_lines.txt\")\n        .arg(\"--squeeze-blank\")\n        .arg(\"--squeeze-limit=5\")\n        .arg(\"--decorations=always\")\n        .arg(\"--number\")\n        .assert()\n        .success()\n        .stdout(\"   1 line 1\\n   2 \\n   3 \\n   4 \\n   5 line 5\\n   6 \\n   7 \\n   8 \\n   9 \\n  10 \\n  20 line 20\\n  21 line 21\\n  22 \\n  23 \\n  24 line 24\\n  25 \\n  26 line 26\\n  27 \\n  28 \\n  29 \\n  30 line 30\\n\");\n}\n\n#[test]\nfn list_themes_with_colors() {\n    let default_theme_chunk = \"Monokai Extended\\x1B[0m (default)\";\n    let default_light_theme_chunk = \"Monokai Extended Light\\x1B[0m (default light)\";\n\n    bat()\n        .arg(\"--color=always\")\n        .arg(\"--list-themes\")\n        .assert()\n        .success()\n        .stdout(predicate::str::contains(\"DarkNeon\").normalize())\n        .stdout(predicate::str::contains(default_theme_chunk).normalize())\n        .stdout(predicate::str::contains(default_light_theme_chunk).normalize())\n        .stdout(predicate::str::contains(\"Output the square of a number.\").normalize());\n}\n\n#[test]\nfn list_themes_without_colors() {\n    let default_theme_chunk = \"Monokai Extended (default)\";\n    let default_light_theme_chunk = \"Monokai Extended Light (default light)\";\n\n    bat()\n        .arg(\"--color=never\")\n        .arg(\"--decorations=always\") // trick bat into setting `Config::loop_through` to false\n        .arg(\"--list-themes\")\n        .assert()\n        .success()\n        .stdout(predicate::str::contains(\"DarkNeon\").normalize())\n        .stdout(predicate::str::contains(default_theme_chunk).normalize())\n        .stdout(predicate::str::contains(default_light_theme_chunk).normalize());\n}\n\n#[test]\nfn list_themes_to_piped_output() {\n    bat().arg(\"--list-themes\").assert().success().stdout(\n        predicate::str::contains(\"(default)\")\n            .not()\n            .and(predicate::str::contains(\"(default light)\").not())\n            .and(predicate::str::contains(\"(default dark)\").not()),\n    );\n}\n\n#[test]\nfn list_languages() {\n    bat()\n        .arg(\"--list-languages\")\n        .assert()\n        .success()\n        .stdout(predicate::str::contains(\"Rust\").normalize());\n}\n\n#[test]\n#[cfg_attr(\n    any(not(feature = \"git\"), feature = \"lessopen\", target_os = \"windows\"),\n    ignore\n)]\nfn short_help() {\n    test_help(\"-h\", \"../doc/short-help.txt\");\n}\n\n#[test]\n#[cfg_attr(\n    any(not(feature = \"git\"), feature = \"lessopen\", target_os = \"windows\"),\n    ignore\n)]\nfn long_help() {\n    test_help(\"--help\", \"../doc/long-help.txt\");\n}\n\nfn test_help(arg: &str, expect_file: &str) {\n    let assert = bat().arg(arg).assert();\n    expect_test::expect_file![expect_file]\n        .assert_eq(&String::from_utf8_lossy(&assert.get_output().stdout));\n}\n\n#[test]\nfn short_help_with_highlighting() {\n    bat()\n        .arg(\"-h\")\n        .arg(\"--paging=never\")\n        .arg(\"--color=always\")\n        .assert()\n        .success()\n        .stdout(predicate::str::contains(\"\\x1B[\"))\n        .stdout(predicate::str::contains(\"Usage:\"))\n        .stdout(predicate::str::contains(\"Options:\"));\n}\n\n#[test]\nfn long_help_with_highlighting() {\n    bat()\n        .arg(\"--help\")\n        .arg(\"--paging=never\")\n        .arg(\"--color=always\")\n        .assert()\n        .success()\n        .stdout(predicate::str::contains(\"\\x1B[\"))\n        .stdout(predicate::str::contains(\"Usage:\"))\n        .stdout(predicate::str::contains(\"Options:\"));\n}\n\n#[test]\nfn help_with_color_never() {\n    bat()\n        .arg(\"--help\")\n        .arg(\"--color=never\")\n        .arg(\"--paging=never\")\n        .assert()\n        .success()\n        .stdout(predicate::str::contains(\"\\x1B[\").not())\n        .stdout(predicate::str::contains(\"Usage:\"));\n}\n\n#[cfg(unix)]\nfn setup_temp_file(content: &[u8]) -> io::Result<(PathBuf, tempfile::TempDir)> {\n    let dir = tempfile::tempdir().expect(\"Couldn't create tempdir\");\n    let path = dir.path().join(\"temp_file\");\n    File::create(&path)?.write_all(content)?;\n    Ok((path, dir))\n}\n\n#[cfg(unix)]\n#[test]\nfn basic_io_cycle() -> io::Result<()> {\n    let (filename, dir) = setup_temp_file(b\"I am not empty\")?;\n\n    let file_out = Stdio::from(File::create(&filename)?);\n    let res = bat_raw_command()\n        .arg(\"test.txt\")\n        .arg(&filename)\n        .stdout(file_out)\n        .assert();\n    drop(dir);\n    res.failure();\n    Ok(())\n}\n\n#[cfg(unix)]\n#[test]\nfn first_file_cyclic_is_ok() -> io::Result<()> {\n    let (filename, dir) = setup_temp_file(b\"I am not empty\")?;\n\n    let file_out = Stdio::from(File::create(&filename)?);\n    let res = bat_raw_command()\n        .arg(&filename)\n        .arg(\"test.txt\")\n        .stdout(file_out)\n        .assert();\n    drop(dir);\n    res.success();\n    Ok(())\n}\n\n#[cfg(unix)]\n#[test]\nfn empty_file_cycle_is_ok() -> io::Result<()> {\n    let (filename, dir) = setup_temp_file(b\"I am not empty\")?;\n\n    let file_out = Stdio::from(File::create(&filename)?);\n    let res = bat_raw_command()\n        .arg(\"empty.txt\")\n        .arg(&filename)\n        .stdout(file_out)\n        .assert();\n    drop(dir);\n    res.success();\n    Ok(())\n}\n\n#[cfg(unix)]\n#[test]\nfn stdin_to_stdout_cycle() -> io::Result<()> {\n    let (filename, dir) = setup_temp_file(b\"I am not empty\")?;\n    let file_in = Stdio::from(File::open(&filename)?);\n    let file_out = Stdio::from(File::create(&filename)?);\n    let res = bat_raw_command()\n        .arg(\"test.txt\")\n        .arg(\"-\")\n        .stdin(file_in)\n        .stdout(file_out)\n        .assert();\n    drop(dir);\n    res.failure();\n    Ok(())\n}\n\n#[cfg(unix)]\n#[test]\nfn bat_error_to_stderr() {\n    bat()\n        .arg(\"/tmp\")\n        .assert()\n        .failure()\n        .stderr(predicate::str::contains(\"[bat error]\"));\n}\n\n#[cfg(unix)]\n#[test]\nfn no_args_doesnt_break() {\n    // To simulate bat getting started from the shell, a process is created with stdin and stdout\n    // as the slave end of a pseudo terminal. Although both point to the same \"file\", bat should\n    // not exit, because in this case it is safe to read and write to the same fd, which is why\n    // this test exists.\n\n    let OpenptyResult { master, slave } = openpty(None, None).expect(\"Couldn't open pty.\");\n    let mut master = File::from(master);\n    let stdin_file = File::from(slave);\n    let stdout_file = stdin_file.try_clone().unwrap();\n    let stdin = Stdio::from(stdin_file);\n    let stdout = Stdio::from(stdout_file);\n\n    let mut child = bat_raw_command()\n        .stdin(stdin)\n        .stdout(stdout)\n        .env(\"TERM\", \"dumb\") // Suppresses color detection\n        .spawn()\n        .expect(\"Failed to start.\");\n\n    // Some time for the child process to start and to make sure, that we can poll the exit status.\n    // Although this waiting period is not necessary, it is best to keep it in and be absolutely\n    // sure, that the try_wait does not error later.\n    thread::sleep(SAFE_CHILD_PROCESS_CREATION_TIME);\n\n    // The child process should be running and waiting for input,\n    // therefore no exit status should be available.\n    let exit_status = child\n        .try_wait()\n        .expect(\"Error polling exit status, this should never happen.\");\n    assert!(exit_status.is_none());\n\n    // Write Ctrl-D (end of transmission) to the pty.\n    master\n        .write_all(&[0x04])\n        .expect(\"Couldn't write EOT character to master end.\");\n\n    let exit_status = child\n        .wait_timeout(CHILD_WAIT_TIMEOUT)\n        .expect(\"Error polling exit status, this should never happen.\")\n        .expect(\"Exit status not set, but the child should have exited already.\");\n\n    assert!(exit_status.success());\n}\n\n#[test]\nfn tabs_numbers() {\n    bat()\n        .arg(\"tabs.txt\")\n        .arg(\"--tabs=4\")\n        .arg(\"--style=numbers\")\n        .arg(\"--decorations=always\")\n        .assert()\n        .success()\n        .stdout(\n            \"   1     1   2   3   4\n   2 1   ?\n   3 22  ?\n   4 333 ?\n   5 4444    ?\n   6 55555   ?\n   7 666666  ?\n   8 7777777 ?\n   9 88888888    ?\n\",\n        );\n}\n\n#[test]\nfn tabs_passthrough_wrapped() {\n    bat()\n        .arg(\"tabs.txt\")\n        .arg(\"--tabs=0\")\n        .arg(\"--style=plain\")\n        .arg(\"--decorations=always\")\n        .assert()\n        .success()\n        .stdout(\n            \"\t1\t2\t3\t4\n1\t?\n22\t?\n333\t?\n4444\t?\n55555\t?\n666666\t?\n7777777\t?\n88888888\t?\n\",\n        );\n}\n\n#[test]\nfn tabs_4_wrapped() {\n    bat()\n        .arg(\"tabs.txt\")\n        .arg(\"--tabs=4\")\n        .arg(\"--style=plain\")\n        .arg(\"--decorations=always\")\n        .assert()\n        .success()\n        .stdout(\n            \"    1   2   3   4\n1   ?\n22  ?\n333 ?\n4444    ?\n55555   ?\n666666  ?\n7777777 ?\n88888888    ?\n\",\n        );\n}\n\n#[test]\nfn tabs_8_wrapped() {\n    bat()\n        .arg(\"tabs.txt\")\n        .arg(\"--tabs=8\")\n        .arg(\"--style=plain\")\n        .arg(\"--decorations=always\")\n        .assert()\n        .success()\n        .stdout(\n            \"        1       2       3       4\n1       ?\n22      ?\n333     ?\n4444    ?\n55555   ?\n666666  ?\n7777777 ?\n88888888        ?\n\",\n        );\n}\n\n#[test]\nfn tabs_passthrough() {\n    bat()\n        .arg(\"tabs.txt\")\n        .arg(\"--tabs=0\")\n        .arg(\"--style=plain\")\n        .arg(\"--decorations=always\")\n        .assert()\n        .success()\n        .stdout(\n            \"\t1\t2\t3\t4\n1\t?\n22\t?\n333\t?\n4444\t?\n55555\t?\n666666\t?\n7777777\t?\n88888888\t?\n\",\n        );\n}\n\n#[test]\nfn tabs_4() {\n    bat()\n        .arg(\"tabs.txt\")\n        .arg(\"--tabs=4\")\n        .arg(\"--style=plain\")\n        .arg(\"--decorations=always\")\n        .assert()\n        .success()\n        .stdout(\n            \"    1   2   3   4\n1   ?\n22  ?\n333 ?\n4444    ?\n55555   ?\n666666  ?\n7777777 ?\n88888888    ?\n\",\n        );\n}\n\n#[test]\nfn tabs_8() {\n    bat()\n        .arg(\"tabs.txt\")\n        .arg(\"--tabs=8\")\n        .arg(\"--style=plain\")\n        .arg(\"--decorations=always\")\n        .assert()\n        .success()\n        .stdout(\n            \"        1       2       3       4\n1       ?\n22      ?\n333     ?\n4444    ?\n55555   ?\n666666  ?\n7777777 ?\n88888888        ?\n\",\n        );\n}\n\n#[test]\nfn tabs_4_env_overrides_config() {\n    bat_with_config()\n        .env(\"BAT_CONFIG_PATH\", \"bat-tabs.conf\")\n        .env(\"BAT_TABS\", \"4\")\n        .arg(\"tabs.txt\")\n        .arg(\"--style=plain\")\n        .arg(\"--decorations=always\")\n        .assert()\n        .success()\n        .stdout(\n            \"    1   2   3   4\n1   ?\n22  ?\n333 ?\n4444    ?\n55555   ?\n666666  ?\n7777777 ?\n88888888    ?\n\",\n        );\n}\n\n#[test]\nfn tabs_4_arg_overrides_env() {\n    bat_with_config()\n        .env(\"BAT_CONFIG_PATH\", \"bat-tabs.conf\")\n        .env(\"BAT_TABS\", \"6\")\n        .arg(\"tabs.txt\")\n        .arg(\"--tabs=4\")\n        .arg(\"--style=plain\")\n        .arg(\"--decorations=always\")\n        .assert()\n        .success()\n        .stdout(\n            \"    1   2   3   4\n1   ?\n22  ?\n333 ?\n4444    ?\n55555   ?\n666666  ?\n7777777 ?\n88888888    ?\n\",\n        );\n}\n\n#[test]\nfn tabs_4_arg_overrides_env_noconfig() {\n    bat()\n        .env(\"BAT_TABS\", \"6\")\n        .arg(\"tabs.txt\")\n        .arg(\"--tabs=4\")\n        .arg(\"--style=plain\")\n        .arg(\"--decorations=always\")\n        .assert()\n        .success()\n        .stdout(\n            \"    1   2   3   4\n1   ?\n22  ?\n333 ?\n4444    ?\n55555   ?\n666666  ?\n7777777 ?\n88888888    ?\n\",\n        );\n}\n\n#[test]\nfn fail_non_existing() {\n    bat().arg(\"non-existing-file\").assert().failure();\n}\n\n#[test]\nfn fail_directory() {\n    bat().arg(\"sub_directory\").assert().failure();\n}\n\n#[test]\nfn do_not_exit_directory() {\n    bat()\n        .arg(\"sub_directory\")\n        .arg(\"test.txt\")\n        .assert()\n        .stdout(\"hello world\\n\")\n        .failure();\n}\n\n#[test]\n#[serial]\nfn pager_basic() {\n    mocked_pagers::with_mocked_versions_of_more_and_most_in_path(|| {\n        bat()\n            .env(\"PAGER\", mocked_pagers::from(\"echo pager-output\"))\n            .arg(\"--paging=always\")\n            .arg(\"test.txt\")\n            .assert()\n            .success()\n            .stdout(predicate::str::contains(\"pager-output\\n\").normalize());\n    });\n}\n\n#[test]\n#[serial]\nfn pager_basic_arg() {\n    mocked_pagers::with_mocked_versions_of_more_and_most_in_path(|| {\n        bat()\n            .arg(format!(\n                \"--pager={}\",\n                mocked_pagers::from(\"echo pager-output\")\n            ))\n            .arg(\"--paging=always\")\n            .arg(\"test.txt\")\n            .assert()\n            .success()\n            .stdout(predicate::str::contains(\"pager-output\\n\").normalize());\n    });\n}\n\n#[test]\n#[serial]\nfn pager_overwrite() {\n    mocked_pagers::with_mocked_versions_of_more_and_most_in_path(|| {\n        bat()\n            .env(\"PAGER\", mocked_pagers::from(\"echo other-pager\"))\n            .env(\"BAT_PAGER\", mocked_pagers::from(\"echo pager-output\"))\n            .arg(\"--paging=always\")\n            .arg(\"test.txt\")\n            .assert()\n            .success()\n            .stdout(predicate::str::contains(\"pager-output\\n\").normalize());\n    });\n}\n\n#[test]\nfn pager_disable() {\n    bat()\n        .env(\"PAGER\", \"echo other-pager\")\n        .env(\"BAT_PAGER\", \"\")\n        .arg(\"--paging=always\")\n        .arg(\"test.txt\")\n        .assert()\n        .success()\n        .stdout(predicate::eq(\"hello world\\n\").normalize());\n}\n\n#[test]\n#[serial]\nfn pager_arg_override_env_withconfig() {\n    mocked_pagers::with_mocked_versions_of_more_and_most_in_path(|| {\n        bat_with_config()\n            .env(\"BAT_CONFIG_PATH\", get_config())\n            .env(\"PAGER\", mocked_pagers::from(\"echo another-pager\"))\n            .env(\"BAT_PAGER\", mocked_pagers::from(\"echo other-pager\"))\n            .arg(format!(\n                \"--pager={}\",\n                mocked_pagers::from(\"echo pager-output\")\n            ))\n            .arg(\"--paging=always\")\n            .arg(\"test.txt\")\n            .assert()\n            .success()\n            .stdout(predicate::str::contains(\"pager-output\\n\").normalize());\n    });\n}\n\n#[test]\n#[serial]\nfn pager_arg_override_env_noconfig() {\n    mocked_pagers::with_mocked_versions_of_more_and_most_in_path(|| {\n        bat()\n            .env(\"PAGER\", mocked_pagers::from(\"echo another-pager\"))\n            .env(\"BAT_PAGER\", mocked_pagers::from(\"echo other-pager\"))\n            .arg(format!(\n                \"--pager={}\",\n                mocked_pagers::from(\"echo pager-output\")\n            ))\n            .arg(\"--paging=always\")\n            .arg(\"test.txt\")\n            .assert()\n            .success()\n            .stdout(predicate::str::contains(\"pager-output\\n\").normalize());\n    });\n}\n\n#[test]\n#[serial]\nfn pager_env_bat_pager_override_config() {\n    mocked_pagers::with_mocked_versions_of_more_and_most_in_path(|| {\n        bat_with_config()\n            .env(\"BAT_CONFIG_PATH\", get_config())\n            .env(\"PAGER\", mocked_pagers::from(\"echo other-pager\"))\n            .env(\"BAT_PAGER\", mocked_pagers::from(\"echo pager-output\"))\n            .arg(\"--paging=always\")\n            .arg(\"test.txt\")\n            .assert()\n            .success()\n            .stdout(predicate::str::contains(\"pager-output\\n\").normalize());\n    });\n}\n\n#[test]\n#[serial]\nfn pager_env_pager_nooverride_config() {\n    mocked_pagers::with_mocked_versions_of_more_and_most_in_path(|| {\n        bat_with_config()\n            .env(\"BAT_CONFIG_PATH\", get_config())\n            .env(\"PAGER\", mocked_pagers::from(\"echo other-pager\"))\n            .arg(\"--paging=always\")\n            .arg(\"test.txt\")\n            .assert()\n            .success()\n            .stdout(predicate::str::contains(\"dummy-pager-from-config\\n\").normalize());\n    });\n}\n\n#[test]\nfn env_var_pager_value_bat() {\n    bat()\n        .env(\"PAGER\", \"bat\")\n        .arg(\"--paging=always\")\n        .arg(\"test.txt\")\n        .assert()\n        .success()\n        .stdout(predicate::eq(\"hello world\\n\").normalize());\n}\n\n#[test]\nfn env_var_bat_pager_value_bat() {\n    bat()\n        .env(\"BAT_PAGER\", \"bat\")\n        .arg(\"--paging=always\")\n        .arg(\"test.txt\")\n        .assert()\n        .failure()\n        .stderr(predicate::str::contains(\"bat as a pager is disallowed\"));\n}\n\n#[test]\nfn pager_value_bat() {\n    bat()\n        .arg(\"--pager=bat\")\n        .arg(\"--paging=always\")\n        .arg(\"test.txt\")\n        .assert()\n        .failure()\n        .stderr(predicate::str::contains(\"bat as a pager is disallowed\"));\n}\n\n/// We shall use less instead of most if PAGER is used since PAGER\n/// is a generic env var\n#[test]\n#[serial] // Because of PATH\nfn pager_most_from_pager_env_var() {\n    mocked_pagers::with_mocked_versions_of_more_and_most_in_path(|| {\n        // If the output is not \"I am most\" then we know 'most' is not used\n        bat()\n            .env(\"PAGER\", mocked_pagers::from(\"most\"))\n            .arg(\"--paging=always\")\n            .arg(\"test.txt\")\n            .assert()\n            .success()\n            .stdout(predicate::eq(\"hello world\\n\").normalize());\n    });\n}\n\n/// If the bat-specific BAT_PAGER is used, obey the wish of the user\n/// and allow 'most'\n#[test]\n#[serial] // Because of PATH\nfn pager_most_from_bat_pager_env_var() {\n    mocked_pagers::with_mocked_versions_of_more_and_most_in_path(|| {\n        bat()\n            .env(\"BAT_PAGER\", mocked_pagers::from(\"most\"))\n            .arg(\"--paging=always\")\n            .arg(\"test.txt\")\n            .assert()\n            .success()\n            .stdout(predicate::str::contains(\"I am most\"));\n    });\n}\n\n/// Same reasoning with --pager as with BAT_PAGER\n#[test]\n#[serial] // Because of PATH\nfn pager_most_from_pager_arg() {\n    mocked_pagers::with_mocked_versions_of_more_and_most_in_path(|| {\n        bat()\n            .arg(\"--paging=always\")\n            .arg(format!(\"--pager={}\", mocked_pagers::from(\"most\")))\n            .arg(\"test.txt\")\n            .assert()\n            .success()\n            .stdout(predicate::str::contains(\"I am most\"));\n    });\n}\n\n/// Make sure the logic for 'most' applies even if an argument is passed\n#[test]\n#[serial] // Because of PATH\nfn pager_most_with_arg() {\n    mocked_pagers::with_mocked_versions_of_more_and_most_in_path(|| {\n        bat()\n            .env(\"PAGER\", format!(\"{} -w\", mocked_pagers::from(\"most\")))\n            .arg(\"--paging=always\")\n            .arg(\"test.txt\")\n            .assert()\n            .success()\n            .stdout(predicate::eq(\"hello world\\n\").normalize());\n    });\n}\n\n/// Sanity check that 'more' is treated like 'most'\n#[test]\n#[serial] // Because of PATH\nfn pager_more() {\n    mocked_pagers::with_mocked_versions_of_more_and_most_in_path(|| {\n        bat()\n            .env(\"PAGER\", mocked_pagers::from(\"more\"))\n            .arg(\"--paging=always\")\n            .arg(\"test.txt\")\n            .assert()\n            .success()\n            .stdout(predicate::eq(\"hello world\\n\").normalize());\n    });\n}\n\n#[test]\nfn alias_pager_disable() {\n    bat()\n        .env(\"PAGER\", \"echo other-pager\")\n        .arg(\"-P\")\n        .arg(\"test.txt\")\n        .assert()\n        .success()\n        .stdout(predicate::eq(\"hello world\\n\").normalize());\n}\n\n#[test]\n#[serial]\nfn alias_pager_disable_long_overrides_short() {\n    mocked_pagers::with_mocked_versions_of_more_and_most_in_path(|| {\n        bat()\n            .env(\"PAGER\", mocked_pagers::from(\"echo pager-output\"))\n            .arg(\"-P\")\n            .arg(\"--paging=always\")\n            .arg(\"test.txt\")\n            .assert()\n            .success()\n            .stdout(predicate::str::contains(\"pager-output\\n\").normalize());\n    });\n}\n\n#[test]\nfn disable_pager_if_disable_paging_flag_comes_after_paging() {\n    bat()\n        .env(\"PAGER\", \"echo pager-output\")\n        .arg(\"--paging=always\")\n        .arg(\"-P\")\n        .arg(\"test.txt\")\n        .assert()\n        .success()\n        .stdout(predicate::eq(\"hello world\\n\").normalize());\n}\n\n#[test]\nfn disable_pager_if_pp_flag_comes_after_paging() {\n    bat()\n        .env(\"PAGER\", \"echo pager-output\")\n        .arg(\"--paging=always\")\n        .arg(\"-pp\")\n        .arg(\"test.txt\")\n        .assert()\n        .success()\n        .stdout(predicate::eq(\"hello world\\n\").normalize());\n}\n\n#[test]\n#[serial]\nfn enable_pager_if_disable_paging_flag_comes_before_paging() {\n    mocked_pagers::with_mocked_versions_of_more_and_most_in_path(|| {\n        bat()\n            .env(\"PAGER\", mocked_pagers::from(\"echo pager-output\"))\n            .arg(\"-P\")\n            .arg(\"--paging=always\")\n            .arg(\"test.txt\")\n            .assert()\n            .success()\n            .stdout(predicate::str::contains(\"pager-output\\n\").normalize());\n    });\n}\n\n#[test]\n#[serial]\nfn enable_pager_if_pp_flag_comes_before_paging() {\n    mocked_pagers::with_mocked_versions_of_more_and_most_in_path(|| {\n        bat()\n            .env(\"PAGER\", mocked_pagers::from(\"echo pager-output\"))\n            .arg(\"-pp\")\n            .arg(\"--paging=always\")\n            .arg(\"test.txt\")\n            .assert()\n            .success()\n            .stdout(predicate::str::contains(\"pager-output\\n\").normalize());\n    });\n}\n\n#[test]\nfn paging_does_not_override_simple_plain() {\n    bat()\n        .env(\"PAGER\", \"echo pager-output\")\n        .arg(\"--decorations=always\")\n        .arg(\"--plain\")\n        .arg(\"--paging=never\")\n        .arg(\"test.txt\")\n        .assert()\n        .success()\n        .stdout(predicate::eq(\"hello world\\n\"));\n}\n\n#[test]\n#[serial]\nfn simple_plain_does_not_override_paging() {\n    mocked_pagers::with_mocked_versions_of_more_and_most_in_path(|| {\n        bat()\n            .env(\"PAGER\", mocked_pagers::from(\"echo pager-output\"))\n            .arg(\"--paging=always\")\n            .arg(\"--plain\")\n            .arg(\"test.txt\")\n            .assert()\n            .success()\n            .stdout(predicate::str::contains(\"pager-output\\n\").normalize());\n    });\n}\n\n#[test]\nfn pager_failed_to_parse() {\n    bat()\n        .env(\"BAT_PAGER\", \"mismatched-quotes 'a\")\n        .arg(\"--paging=always\")\n        .arg(\"test.txt\")\n        .assert()\n        .failure()\n        .stderr(predicate::str::contains(\"Could not parse pager command\"));\n}\n\n#[test]\n#[serial]\nfn pager_missing_warning() {\n    bat()\n        .env(\"BAT_PAGER\", \"nonexistent-pager-xyz-missing\")\n        .arg(\"--paging=always\")\n        .arg(\"test.txt\")\n        .assert()\n        .success()\n        .stderr(predicate::str::contains(\"[bat warning]\"))\n        .stderr(predicate::str::contains(\"not found\"))\n        .stderr(predicate::str::contains(\"nonexistent-pager-xyz-missing\"))\n        .stdout(predicate::str::contains(\"hello world\\n\"));\n}\n\n#[test]\n#[serial]\nfn env_var_bat_paging() {\n    mocked_pagers::with_mocked_versions_of_more_and_most_in_path(|| {\n        bat()\n            .env(\"BAT_PAGER\", mocked_pagers::from(\"echo pager-output\"))\n            .env(\"BAT_PAGING\", \"always\")\n            .arg(\"test.txt\")\n            .assert()\n            .success()\n            .stdout(predicate::str::contains(\"pager-output\\n\").normalize());\n    });\n}\n\n#[test]\nfn basic_set_terminal_title() {\n    bat()\n        .env(\"BAT_PAGER\", \"cat\")\n        .arg(\"--paging=always\")\n        .arg(\"--set-terminal-title\")\n        .arg(\"test.txt\")\n        .assert()\n        .success()\n        .stdout(\"\\u{1b}]0;bat: test.txt\\x07hello world\\n\")\n        .stderr(\"\");\n}\n\n#[test]\nfn diagnostic_sanity_check() {\n    bat()\n        .arg(\"--diagnostic\")\n        .assert()\n        .success()\n        .stdout(predicate::str::contains(\"BAT_PAGER=\"))\n        .stderr(\"\");\n}\n\n#[test]\nfn help_works_with_invalid_config() {\n    let tmp_dir = tempdir().expect(\"can create temporary directory\");\n    let tmp_config_path = tmp_dir.path().join(\"invalid-config.conf\");\n\n    // Write an invalid config file\n    std::fs::write(&tmp_config_path, \"--invalid-option\").expect(\"can write config file\");\n\n    // --help should work despite invalid config\n    bat_with_config()\n        .env(\"BAT_CONFIG_PATH\", tmp_config_path.to_str().unwrap())\n        .arg(\"--help\")\n        .assert()\n        .success()\n        .stdout(predicate::str::contains(\n            \"A cat(1) clone with syntax highlighting\",\n        ));\n\n    // -h should also work\n    bat_with_config()\n        .env(\"BAT_CONFIG_PATH\", tmp_config_path.to_str().unwrap())\n        .arg(\"-h\")\n        .assert()\n        .success()\n        .stdout(predicate::str::contains(\"A cat(1) clone with wings\"));\n}\n\n#[test]\nfn help_uses_valid_config() {\n    let tmp_dir = tempdir().expect(\"can create temporary directory\");\n    let tmp_config_path = tmp_dir.path().join(\"valid-config.conf\");\n\n    // Write a valid config file with an invalid theme (so we can see a warning)\n    std::fs::write(&tmp_config_path, \"--theme=NonExistentThemeName123\")\n        .expect(\"can write config file\");\n\n    // --help should read the config file and try to use the theme\n    // (we'll see a warning about unknown theme. This is the easiest way to prove the theme is read from config.)\n    bat_with_config()\n        .env(\"BAT_CONFIG_PATH\", tmp_config_path.to_str().unwrap())\n        .arg(\"--help\")\n        .assert()\n        .success()\n        .stdout(predicate::str::contains(\n            \"A cat(1) clone with syntax highlighting\",\n        ))\n        .stderr(predicate::str::contains(\"Unknown theme\"));\n}\n\n#[test]\nfn version_works_with_invalid_config() {\n    let tmp_dir = tempdir().expect(\"can create temporary directory\");\n    let tmp_config_path = tmp_dir.path().join(\"invalid-config.conf\");\n\n    // Write an invalid config file\n    std::fs::write(&tmp_config_path, \"--invalid-option\").expect(\"can write config file\");\n\n    // --version should work despite invalid config\n    bat_with_config()\n        .env(\"BAT_CONFIG_PATH\", tmp_config_path.to_str().unwrap())\n        .arg(\"--version\")\n        .assert()\n        .success()\n        .stdout(predicate::str::contains(\"bat \"));\n\n    // -V should also work\n    bat_with_config()\n        .env(\"BAT_CONFIG_PATH\", tmp_config_path.to_str().unwrap())\n        .arg(\"-V\")\n        .assert()\n        .success()\n        .stdout(predicate::str::contains(\"bat \"));\n}\n\n#[test]\nfn diagnostic_works_with_invalid_config() {\n    let tmp_dir = tempdir().expect(\"can create temporary directory\");\n    let tmp_config_path = tmp_dir.path().join(\"invalid-config.conf\");\n\n    // Write an invalid config file\n    std::fs::write(&tmp_config_path, \"--invalid-option\").expect(\"can write config file\");\n\n    // --diagnostic should work despite invalid config\n    bat_with_config()\n        .env(\"BAT_CONFIG_PATH\", tmp_config_path.to_str().unwrap())\n        .arg(\"--diagnostic\")\n        .assert()\n        .success()\n        .stdout(predicate::str::contains(\"#### Software version\"));\n\n    // --diagnostics (alias) should also work\n    bat_with_config()\n        .env(\"BAT_CONFIG_PATH\", tmp_config_path.to_str().unwrap())\n        .arg(\"--diagnostics\")\n        .assert()\n        .success()\n        .stdout(predicate::str::contains(\"#### Software version\"));\n}\n\n#[test]\nfn config_location_test() {\n    bat_with_config()\n        .env(\"BAT_CONFIG_PATH\", \"bat.conf\")\n        .arg(\"--config-file\")\n        .assert()\n        .success()\n        .stdout(\"bat.conf\\n\");\n\n    bat_with_config()\n        .env(\"BAT_CONFIG_PATH\", \"not-existing.conf\")\n        .arg(\"--config-file\")\n        .assert()\n        .success()\n        .stdout(\"not-existing.conf\\n\");\n}\n\n#[test]\nfn config_location_when_generating() {\n    let tmp_dir = tempdir().expect(\"can create temporary directory\");\n    let tmp_config_path = tmp_dir.path().join(\"should-be-created.conf\");\n\n    // Create the file with bat\n    bat_with_config()\n        .env(\"BAT_CONFIG_PATH\", tmp_config_path.to_str().unwrap())\n        .arg(\"--generate-config-file\")\n        .assert()\n        .success()\n        .stdout(\n            predicate::str::is_match(\"Success! Config file written to .*should-be-created.conf\\n\")\n                .unwrap(),\n        );\n\n    // Now we expect the file to exist. If it exists, we assume contents are correct\n    assert!(tmp_config_path.exists());\n}\n\n#[test]\nfn config_location_from_bat_config_dir_variable() {\n    bat_with_config()\n        .env(\"BAT_CONFIG_DIR\", \"conf/\")\n        .arg(\"--config-file\")\n        .assert()\n        .success()\n        .stdout(predicate::str::is_match(\"conf/config\\n\").unwrap());\n}\n\n#[test]\n#[serial]\nfn config_read_arguments_from_file() {\n    mocked_pagers::with_mocked_versions_of_more_and_most_in_path(|| {\n        bat_with_config()\n            .env(\"BAT_CONFIG_PATH\", get_config())\n            .arg(\"test.txt\")\n            .assert()\n            .success()\n            .stdout(predicate::str::contains(\"dummy-pager-from-config\\n\").normalize());\n    });\n}\n\n#[cfg(unix)]\n#[test]\nfn cache_clear() {\n    let src_dir = \"cache_source\";\n    let tmp_dir = tempdir().expect(\"can create temporary directory\");\n    let themes_filename = \"themes.bin\";\n    let syntaxes_filename = \"syntaxes.bin\";\n    let metadata_filename = \"metadata.yaml\";\n    [themes_filename, syntaxes_filename, metadata_filename]\n        .iter()\n        .map(|filename| {\n            let fp = tmp_dir.path().join(filename);\n            let mut file = File::create(fp).expect(\"can create temporary file\");\n            writeln!(file, \"dummy content\").expect(\"can write to file\");\n        })\n        .count();\n\n    // Clear the targeted cache\n    // Include the BAT_CONFIG_PATH and BAT_THEME environment variables to ensure that\n    // options loaded from a config or the environment are not inserted\n    // before the cache subcommand, which would break it.\n    bat_with_config()\n        .current_dir(Path::new(EXAMPLES_DIR).join(src_dir))\n        .env(\"BAT_CONFIG_PATH\", \"bat.conf\")\n        .env(\"BAT_THEME\", \"1337\")\n        .arg(\"cache\")\n        .arg(\"--clear\")\n        .arg(\"--source\")\n        .arg(\".\")\n        .arg(\"--target\")\n        .arg(tmp_dir.path().to_str().unwrap())\n        .assert()\n        .success()\n        .stdout(\n            predicate::str::is_match(\n                \"Clearing theme set cache ... okay\nClearing syntax set cache ... okay\nClearing metadata file ... okay\",\n            )\n            .unwrap(),\n        );\n\n    // We expect these files to be removed\n    assert!(!tmp_dir.path().join(themes_filename).exists());\n    assert!(!tmp_dir.path().join(syntaxes_filename).exists());\n    assert!(!tmp_dir.path().join(metadata_filename).exists());\n}\n\n#[cfg(unix)]\n#[test]\nfn cache_build_blank() {\n    let src_dir = \"cache_source\";\n    let tmp_dir = tempdir().expect(\"can create temporary directory\");\n    let tmp_themes_path = tmp_dir.path().join(\"themes.bin\");\n    let tmp_syntaxes_path = tmp_dir.path().join(\"syntaxes.bin\");\n    let tmp_acknowledgements_path = tmp_dir.path().join(\"acknowledgements.bin\");\n    let tmp_metadata_path = tmp_dir.path().join(\"metadata.yaml\");\n\n    // Build the cache\n    // Include the BAT_CONFIG_PATH and BAT_THEME environment variables to ensure that\n    // options loaded from a config or the environment are not inserted\n    // before the cache subcommand, which would break it.\n    bat_with_config()\n        .current_dir(Path::new(EXAMPLES_DIR).join(src_dir))\n        .env(\"BAT_CONFIG_PATH\", \"bat.conf\")\n        .env(\"BAT_THEME\", \"1337\")\n        .arg(\"cache\")\n        .arg(\"--build\")\n        .arg(\"--blank\")\n        .arg(\"--source\")\n        .arg(\".\")\n        .arg(\"--target\")\n        .arg(tmp_dir.path().to_str().unwrap())\n        .arg(\"--acknowledgements\")\n        .assert()\n        .success()\n        .stdout(\n            predicate::str::is_match(\n                \"Writing theme set to .*/themes.bin ... okay\nWriting syntax set to .*/syntaxes.bin ... okay\nWriting acknowledgements to .*/acknowledgements.bin ... okay\nWriting metadata to folder .* ... okay\",\n            )\n            .unwrap(),\n        );\n\n    // Now we expect the files to exist. If they exist, we assume contents are correct\n    assert!(tmp_themes_path.exists());\n    assert!(tmp_syntaxes_path.exists());\n    assert!(tmp_acknowledgements_path.exists());\n    assert!(tmp_metadata_path.exists());\n}\n\n#[cfg(unix)]\n#[test]\nfn cache_build() {\n    let src_dir = \"cache_source\";\n    let tmp_dir = tempdir().expect(\"can create temporary directory\");\n    let tmp_themes_path = tmp_dir.path().join(\"themes.bin\");\n    let tmp_syntaxes_path = tmp_dir.path().join(\"syntaxes.bin\");\n    let tmp_acknowledgements_path = tmp_dir.path().join(\"acknowledgements.bin\");\n    let tmp_metadata_path = tmp_dir.path().join(\"metadata.yaml\");\n\n    // Build the cache\n    // Include the BAT_CONFIG_PATH and BAT_THEME environment variables to ensure that\n    // options loaded from a config or the environment are not inserted\n    // before the cache subcommand, which would break it.\n    bat_with_config()\n        .current_dir(Path::new(EXAMPLES_DIR).join(src_dir))\n        .env(\"BAT_CONFIG_PATH\", \"bat.conf\")\n        .env(\"BAT_THEME\", \"1337\")\n        .arg(\"cache\")\n        .arg(\"--build\")\n        // removed --blank\n        .arg(\"--source\")\n        .arg(\".\")\n        .arg(\"--target\")\n        .arg(tmp_dir.path().to_str().unwrap())\n        .arg(\"--acknowledgements\")\n        .assert()\n        .success()\n        .stdout(\n            predicate::str::is_match(\n                \"Writing theme set to .*/themes.bin ... okay\\nWriting syntax set to .*/syntaxes.bin ... okay\\nWriting acknowledgements to .*/acknowledgements.bin ... okay\\nWriting metadata to folder .* ... okay\",\n            )\n            .unwrap(),\n        )\n        .stdout(predicate::str::contains(\"Some referenced contexts could not be found!\").not())\n        ;\n\n    // Now we expect the files to exist. If they exist, we assume contents are correct\n    assert!(tmp_themes_path.exists());\n    assert!(tmp_syntaxes_path.exists());\n    assert!(tmp_acknowledgements_path.exists());\n    assert!(tmp_metadata_path.exists());\n}\n\n#[test]\nfn utf16() {\n    // The output will be converted to UTF-8 with the leading UTF-16\n    // BOM removed. This behavior is wanted in interactive mode as\n    // some terminals seem to display the BOM character as a space,\n    // and it also breaks syntax highlighting.\n    bat()\n        .arg(\"--plain\")\n        .arg(\"--decorations=always\")\n        .arg(\"test_UTF-16LE.txt\")\n        .assert()\n        .success()\n        .stdout(\"hello world\\n\");\n\n    bat()\n        .arg(\"--plain\")\n        .arg(\"--decorations=always\")\n        .arg(\"test_UTF-16BE.txt\")\n        .assert()\n        .success()\n        .stdout(\"hello world\\nthis is a test\\n\");\n}\n\n#[test]\nfn utf16le() {\n    bat()\n        .arg(\"--decorations=always\")\n        .arg(\"--style=numbers\")\n        .arg(\"--color=never\")\n        .arg(\"test_UTF-16LE-complicated.txt\")\n        .assert()\n        .success()\n        .stdout(\"   1 上一伊刀\\n   2 foo bar\\n   3 hello world\\n\");\n}\n\n#[test]\nfn utf16be() {\n    bat()\n        .arg(\"--decorations=always\")\n        .arg(\"--style=numbers\")\n        .arg(\"--color=never\")\n        .arg(\"test_UTF-16BE-complicated.txt\")\n        .assert()\n        .success()\n        .stdout(\"   1 上一伊刀\\n   2 foo bar\\n   3 hello world\\n\");\n}\n\n// Regression test for https://github.com/sharkdp/bat/issues/1922\n#[test]\nfn bom_not_stripped_in_loop_through_mode() {\n    bat()\n        .arg(\"--plain\")\n        .arg(\"--decorations=never\")\n        .arg(\"--color=never\")\n        .arg(\"test_BOM.txt\")\n        .assert()\n        .success()\n        .stdout(\"\\u{feff}hello world\\n\");\n}\n\n// Regression test for https://github.com/sharkdp/bat/issues/1922\n#[test]\nfn bom_stripped_when_colored_output() {\n    bat()\n        .arg(\"--color=always\")\n        .arg(\"--decorations=never\")\n        .arg(\"test_BOM.txt\")\n        .assert()\n        .success()\n        .stdout(\n            predicate::str::is_match(\"\\u{1b}\\\\[38;5;[0-9]{3}mhello world\\u{1b}\\\\[0m\\n\").unwrap(),\n        );\n}\n\n// Regression test for https://github.com/sharkdp/bat/issues/1922\n#[test]\nfn bom_stripped_when_no_color_and_not_loop_through() {\n    bat()\n        .arg(\"--color=never\")\n        .arg(\"--decorations=always\")\n        .arg(\"--style=numbers,grid,header\")\n        .arg(\"--terminal-width=80\")\n        .arg(\"test_BOM.txt\")\n        .assert()\n        .success()\n        .stdout(\n            \"\\\n─────┬──────────────────────────────────────────────────────────────────────────\n     │ File: test_BOM.txt\n─────┼──────────────────────────────────────────────────────────────────────────\n   1 │ hello world\n─────┴──────────────────────────────────────────────────────────────────────────\n\",\n        );\n}\n\n// Regression test for https://github.com/sharkdp/bat/issues/2541\n#[test]\nfn no_broken_osc_emit_with_line_wrapping() {\n    bat()\n        .arg(\"--color=always\")\n        .arg(\"--decorations=never\")\n        .arg(\"--wrap=character\")\n        .arg(\"--terminal-width=40\")\n        .arg(\"regression_tests/issue_2541.txt\")\n        .assert()\n        .success()\n        .stdout(predicate::function(|s: &str| s.lines().count() == 1));\n}\n\n#[test]\nfn can_print_file_named_cache() {\n    bat_with_config()\n        .arg(\"cache\")\n        .assert()\n        .success()\n        .stdout(\"test\\n\")\n        .stderr(\"\");\n}\n\n#[test]\nfn can_print_file_named_cache_with_additional_argument() {\n    bat_with_config()\n        .arg(\"cache\")\n        .arg(\"test.txt\")\n        .assert()\n        .success()\n        .stdout(\"test\\nhello world\\n\")\n        .stderr(\"\");\n}\n\n#[test]\nfn can_print_file_starting_with_cache() {\n    bat_with_config()\n        .arg(\"cache.c\")\n        .assert()\n        .success()\n        .stdout(\"test\\n\")\n        .stderr(\"\");\n}\n\n#[test]\nfn does_not_print_unwanted_file_named_cache() {\n    bat_with_config().arg(\"cach\").assert().failure();\n}\n\n#[test]\nfn accepts_no_custom_assets_arg() {\n    // Just make sure --no-custom-assets is considered a valid arg\n    // Don't bother to actually verify that it works\n    bat()\n        .arg(\"--no-custom-assets\")\n        .arg(\"test.txt\")\n        .assert()\n        .success();\n}\n\n#[test]\nfn unicode_wrap() {\n    bat_with_config()\n        .arg(\"unicode-wrap.txt\")\n        .arg(\"--style=numbers,snip\")\n        .arg(\"--decorations=always\")\n        .arg(\"--terminal-width=40\")\n        .assert()\n        .success()\n        .stdout(\n            \"   1 ビタミンA  ビタミンD  ビタミンE  ビ\n     タミンK  ビタミンB1  ビタミンB2  ナ\n     イアシン  パントテン酸  ビタミンB6 \n      ビタミンB12  葉酸  ビオチン  ビタ\n     ミンC\n   2 \n   3 고양이 고양이 고양이 고양이 고양이 \n     고양이 고양이 고양이 고양이 고양이 \n     고양이 고양이 고양이 고양이 고양이 \n     고양이 고양이 고양이 고양이 고양이 \n     고양이 고양이 고양이 고양이 고양이 \n     고양이 고양이 고양이 고양이 고양이 \n     고양이 고양이 고양이 고양이 고양이 \n     고양이 고양이 고양이 고양이 고양이 \n     고양이\n   4 \n   5 1 บวก 2 บวก 3 บวก 4 บวก 5 บวก 6 บวก\n      7 บวก 8 บวก 9 บวก 10 บวก 11 บวก 12\n      บวก 13 บวก 14 บวก 15 บวก 16 บวก 17\n      บวก 18 บวก 19 บวก 20\n   6 \n   7 Бельгия Болгария Чехия Дания Герман\n     ия Эстония Ирландия Греция Испания \n     Франция Хорватия Италия Кипр Латвия\n      Литва Люксембург Венгрия Мальта Ни\n     дерланды Австрия Польша Португалия \n     Румыния Словения Словакия Финляндия\n      Швеция Великобритания\n\",\n        );\n}\n\n#[test]\nfn snip() {\n    bat()\n        .arg(\"multiline.txt\")\n        .arg(\"--style=numbers,snip\")\n        .arg(\"--decorations=always\")\n        .arg(\"--line-range=1:2\")\n        .arg(\"--line-range=4:\")\n        .arg(\"--terminal-width=80\")\n        .assert()\n        .success()\n        .stdout(\n            \"   1 line 1\n   2 line 2\n ...─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ 8< ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─\n   4 line 4\n   5 line 5\n   6 line 6\n   7 line 7\n   8 line 8\n   9 line 9\n  10 line 10\n\",\n        );\n}\n\n#[test]\nfn empty_file_leads_to_empty_output_with_grid_enabled() {\n    bat()\n        .arg(\"empty.txt\")\n        .arg(\"--style=grid\")\n        .arg(\"--decorations=always\")\n        .arg(\"--terminal-width=80\")\n        .assert()\n        .success()\n        .stdout(\"\");\n}\n\n#[test]\nfn empty_file_leads_to_empty_output_with_rule_enabled() {\n    bat()\n        .arg(\"empty.txt\")\n        .arg(\"--style=rule\")\n        .arg(\"--decorations=always\")\n        .arg(\"--terminal-width=80\")\n        .assert()\n        .success()\n        .stdout(\"\");\n}\n\n#[test]\nfn header_basic() {\n    bat()\n        .arg(\"test.txt\")\n        .arg(\"--decorations=always\")\n        .arg(\"--style=header\")\n        .arg(\"-r=0:0\")\n        .arg(\"--file-name=foo\")\n        .assert()\n        .success()\n        .stdout(\"File: foo\\n\")\n        .stderr(\"\");\n}\n\n#[test]\nfn header_full_basic() {\n    bat()\n        .arg(\"test.txt\")\n        .arg(\"--decorations=always\")\n        .arg(\"--style=header-filename,header-filesize\")\n        .arg(\"-r=0:0\")\n        .arg(\"--file-name=foo\")\n        .assert()\n        .success()\n        .stdout(\"File: foo\\nSize: 12 B\\n\")\n        .stderr(\"\");\n}\n\n#[test]\nfn header_env_basic() {\n    bat_with_config()\n        .env(\"BAT_STYLE\", \"header-filename,header-filesize\")\n        .arg(\"test.txt\")\n        .arg(\"--decorations=always\")\n        .arg(\"-r=0:0\")\n        .arg(\"--file-name=foo\")\n        .assert()\n        .success()\n        .stdout(\"File: foo\\nSize: 12 B\\n\")\n        .stderr(\"\");\n}\n\n#[test]\nfn header_arg_overrides_env() {\n    bat_with_config()\n        .env(\"BAT_STYLE\", \"header-filesize\")\n        .arg(\"test.txt\")\n        .arg(\"--decorations=always\")\n        .arg(\"--style=header-filename\")\n        .arg(\"-r=0:0\")\n        .arg(\"--file-name=foo\")\n        .assert()\n        .success()\n        .stdout(\"File: foo\\n\")\n        .stderr(\"\");\n}\n\n#[test]\nfn header_binary() {\n    bat()\n        .arg(\"test.binary\")\n        .arg(\"--decorations=always\")\n        .arg(\"--style=header\")\n        .arg(\"-r=0:0\")\n        .arg(\"--file-name=foo\")\n        .assert()\n        .success()\n        .stdout(\"File: foo   <BINARY>\\n\")\n        .stderr(\"\");\n}\n\n#[test]\nfn header_full_binary() {\n    bat()\n        .arg(\"test.binary\")\n        .arg(\"--decorations=always\")\n        .arg(\"--style=header-filename,header-filesize\")\n        .arg(\"-r=0:0\")\n        .arg(\"--file-name=foo\")\n        .assert()\n        .success()\n        .stdout(\"File: foo   <BINARY>\\nSize: 4 B\\n\")\n        .stderr(\"\");\n}\n\n#[test]\n#[cfg(not(feature = \"git\"))]\nfn header_narrow_terminal() {\n    bat()\n        .arg(\"--terminal-width=30\")\n        .arg(\"--decorations=always\")\n        .arg(\"this-file-path-is-really-long-and-would-have-broken-the-layout-of-the-header.txt\")\n        .assert()\n        .success()\n        .stdout(\n            \"\\\n─────┬────────────────────────\n     │ File: this-file-path-is\n     │ -really-long-and-would-\n     │ have-broken-the-layout-\n     │ of-the-header.txt\n─────┼────────────────────────\n   1 │ The header is not broke\n     │ n\n─────┴────────────────────────\n\",\n        )\n        .stderr(\"\");\n}\n\n#[test]\nfn header_very_narrow_terminal() {\n    bat()\n        .arg(\"--terminal-width=10\")\n        .arg(\"--decorations=always\")\n        .arg(\"this-file-path-is-really-long-and-would-have-broken-the-layout-of-the-header.txt\")\n        .assert()\n        .success()\n        .stdout(\n            \"\\\n──────────\nFile: this\n-file-path\n-is-really\n-long-and-\nwould-have\n-broken-th\ne-layout-o\nf-the-head\ner.txt\n──────────\nThe header\n is not br\noken\n──────────\n\",\n        )\n        .stderr(\"\");\n}\n\n#[test]\nfn header_narrow_terminal_with_multibyte_chars() {\n    bat()\n        .arg(\"--terminal-width=30\")\n        .arg(\"--decorations=always\")\n        .arg(\"test.A—B가\")\n        .assert()\n        .success()\n        .stderr(\"\");\n}\n\n#[test]\n#[cfg(feature = \"git\")] // Expected output assumes git is enabled\nfn header_default() {\n    bat()\n        .arg(\"--paging=never\")\n        .arg(\"--color=never\")\n        .arg(\"--terminal-width=80\")\n        .arg(\"--wrap=never\")\n        .arg(\"--decorations=always\")\n        .arg(\"--style=default\")\n        .arg(\"single-line.txt\")\n        .assert()\n        .success()\n        .stdout(\n            \"\\\n─────┬──────────────────────────────────────────────────────────────────────────\n     │ File: single-line.txt\n─────┼──────────────────────────────────────────────────────────────────────────\n   1 │ Single Line\n─────┴──────────────────────────────────────────────────────────────────────────\n\",\n        )\n        .stderr(\"\");\n}\n\n#[test]\n#[cfg(feature = \"git\")] // Expected output assumes git is enabled\nfn header_default_is_default() {\n    bat()\n        .arg(\"--paging=never\")\n        .arg(\"--color=never\")\n        .arg(\"--terminal-width=80\")\n        .arg(\"--wrap=never\")\n        .arg(\"--decorations=always\")\n        .arg(\"single-line.txt\")\n        .assert()\n        .success()\n        .stdout(\n            \"\\\n─────┬──────────────────────────────────────────────────────────────────────────\n     │ File: single-line.txt\n─────┼──────────────────────────────────────────────────────────────────────────\n   1 │ Single Line\n─────┴──────────────────────────────────────────────────────────────────────────\n\",\n        )\n        .stderr(\"\");\n}\n\n#[test]\n#[cfg(feature = \"git\")] // Expected output assumes git is enabled\n                        // Make sure indent isn't printed if there's no changes\nfn header_and_changes_only() {\n    bat()\n        .arg(\"--style=header-filename,changes\")\n        .arg(\"--decorations=always\")\n        .arg(\"--color=never\")\n        .arg(\"single-line.txt\")\n        .assert()\n        .success()\n        .stdout(\"File: single-line.txt\\nSingle Line\\n\")\n        .stderr(\"\");\n}\n\n#[test]\nfn filename_stdin() {\n    bat()\n        .arg(\"--decorations=always\")\n        .arg(\"--style=header\")\n        .arg(\"-r=0:0\")\n        .arg(\"-\")\n        .write_stdin(\"stdin\\n\")\n        .arg(\"--file-name=foo\")\n        .assert()\n        .success()\n        .stdout(\"File: foo\\n\")\n        .stderr(\"\");\n}\n\n#[test]\nfn filename_stdin_binary() {\n    let vec = vec![0; 1];\n    bat_with_config()\n        .arg(\"--decorations=always\")\n        .arg(\"--style=header\")\n        .write_stdin(vec)\n        .arg(\"--file-name=foo\")\n        .assert()\n        .success()\n        .stdout(\"File: foo   <BINARY>\\n\")\n        .stderr(\"\");\n}\n\n#[test]\nfn filename_multiple_ok() {\n    bat()\n        .arg(\"--decorations=always\")\n        .arg(\"--style=header\")\n        .arg(\"-r=0:0\")\n        .arg(\"test.txt\")\n        .arg(\"--file-name=foo\")\n        .arg(\"single-line.txt\")\n        .arg(\"--file-name=bar\")\n        .assert()\n        .success()\n        .stdout(\"File: foo\\n\\nFile: bar\\n\")\n        .stderr(\"\");\n}\n\n#[test]\nfn filename_multiple_err() {\n    bat()\n        .arg(\"--decorations=always\")\n        .arg(\"--style=header\")\n        .arg(\"-r=0:0\")\n        .arg(\"test.txt\")\n        .arg(\"--file-name=foo\")\n        .arg(\"single-line.txt\")\n        .assert()\n        .failure();\n}\n\n#[test]\nfn header_padding() {\n    bat()\n        .arg(\"--decorations=always\")\n        .arg(\"--style=header\")\n        .arg(\"test.txt\")\n        .arg(\"single-line.txt\")\n        .assert()\n        .stdout(\"File: test.txt\\nhello world\\n\\nFile: single-line.txt\\nSingle Line\\n\")\n        .stderr(\"\");\n}\n\n#[test]\nfn header_full_padding() {\n    bat()\n        .arg(\"--decorations=always\")\n        .arg(\"--style=header-filename,header-filesize\")\n        .arg(\"test.txt\")\n        .arg(\"single-line.txt\")\n        .assert()\n        .stdout(\"File: test.txt\\nSize: 12 B\\nhello world\\n\\nFile: single-line.txt\\nSize: 11 B\\nSingle Line\\n\")\n        .stderr(\"\");\n}\n\n#[test]\nfn header_padding_rule() {\n    bat()\n        .arg(\"--decorations=always\")\n        .arg(\"--style=header,rule\")\n        .arg(\"--terminal-width=80\")\n        .arg(\"test.txt\")\n        .arg(\"single-line.txt\")\n        .assert()\n        .stdout(\n            \"File: test.txt\nhello world\n────────────────────────────────────────────────────────────────────────────────\nFile: single-line.txt\nSingle Line\n\",\n        )\n        .stderr(\"\");\n}\n\n#[test]\nfn header_full_padding_rule() {\n    bat()\n        .arg(\"--decorations=always\")\n        .arg(\"--style=header-filename,header-filesize,rule\")\n        .arg(\"--terminal-width=80\")\n        .arg(\"test.txt\")\n        .arg(\"single-line.txt\")\n        .assert()\n        .stdout(\n            \"File: test.txt\nSize: 12 B\nhello world\n────────────────────────────────────────────────────────────────────────────────\nFile: single-line.txt\nSize: 11 B\nSingle Line\n\",\n        )\n        .stderr(\"\");\n}\n\n#[test]\nfn grid_overrides_rule() {\n    bat()\n        .arg(\"--decorations=always\")\n        .arg(\"--style=grid,rule\")\n        .arg(\"--terminal-width=80\")\n        .arg(\"test.txt\")\n        .arg(\"single-line.txt\")\n        .assert()\n        .stdout(\n            \"\\\n────────────────────────────────────────────────────────────────────────────────\nhello world\n────────────────────────────────────────────────────────────────────────────────\n────────────────────────────────────────────────────────────────────────────────\nSingle Line\n────────────────────────────────────────────────────────────────────────────────\n\",\n        )\n        .stderr(\n            \"\\x1b[33m[bat warning]\\x1b[0m: Style 'rule' is a subset of style 'grid', 'rule' will not be visible.\\n\",\n        );\n}\n\n#[cfg(target_os = \"linux\")]\n#[test]\nfn file_with_invalid_utf8_filename() {\n    use std::ffi::OsStr;\n    use std::fs::File;\n    use std::io::Write;\n    use std::os::unix::ffi::OsStrExt;\n\n    let tmp_dir = tempdir().expect(\"can create temporary directory\");\n    let file_path = tmp_dir\n        .path()\n        .join(OsStr::from_bytes(b\"test-invalid-utf8-\\xC3(.rs\"));\n    {\n        let mut file = File::create(&file_path).expect(\"can create temporary file\");\n        writeln!(file, \"dummy content\").expect(\"can write to file\");\n    }\n\n    bat()\n        .arg(file_path.as_os_str())\n        .assert()\n        .success()\n        .stdout(\"dummy content\\n\");\n}\n\n#[test]\nfn do_not_panic_regression_tests() {\n    for filename in &[\n        \"issue_28.md\",\n        \"issue_190.md\",\n        \"issue_314.hs\",\n        \"issue_914.rb\",\n        \"issue_915.vue\",\n    ] {\n        bat()\n            .arg(\"--color=always\")\n            .arg(format!(\"regression_tests/{filename}\"))\n            .assert()\n            .success();\n    }\n}\n\n#[test]\nfn do_not_detect_different_syntax_for_stdin_and_files() {\n    let file = \"regression_tests/issue_985.js\";\n\n    let cmd_for_file = bat()\n        .arg(\"--color=always\")\n        .arg(\"--map-syntax=*.js:Markdown\")\n        .arg(format!(\"--file-name={file}\"))\n        .arg(\"--style=plain\")\n        .arg(file)\n        .assert()\n        .success();\n\n    let cmd_for_stdin = bat()\n        .arg(\"--color=always\")\n        .arg(\"--map-syntax=*.js:Markdown\")\n        .arg(\"--style=plain\")\n        .arg(format!(\"--file-name={file}\"))\n        .pipe_stdin(Path::new(EXAMPLES_DIR).join(file))\n        .unwrap()\n        .assert()\n        .success();\n\n    assert_eq!(\n        from_utf8(&cmd_for_file.get_output().stdout).expect(\"output is valid utf-8\"),\n        from_utf8(&cmd_for_stdin.get_output().stdout).expect(\"output is valid utf-8\")\n    );\n}\n\n#[test]\nfn no_first_line_fallback_when_mapping_to_invalid_syntax() {\n    let file = \"regression_tests/first_line_fallback.invalid-syntax\";\n\n    bat()\n        .arg(\"--color=always\")\n        .arg(\"--map-syntax=*.invalid-syntax:InvalidSyntax\")\n        .arg(format!(\"--file-name={file}\"))\n        .arg(\"--style=plain\")\n        .arg(file)\n        .assert()\n        .failure()\n        .stderr(predicate::str::contains(\"unknown syntax: 'InvalidSyntax'\"));\n}\n\n#[test]\nfn fallback_syntax_is_used_when_no_syntax_is_detected() {\n    let content = \"# comment\\nfoo=bar\\n\";\n\n    let fallback_output = bat()\n        .arg(\"--color=always\")\n        .arg(\"--style=plain\")\n        .arg(\"--file-name=unknown.fallbacksyntax\")\n        .arg(\"--fallback-syntax=bash\")\n        .write_stdin(content)\n        .assert()\n        .success()\n        .get_output()\n        .stdout\n        .clone();\n\n    let explicit_output = bat()\n        .arg(\"--color=always\")\n        .arg(\"--style=plain\")\n        .arg(\"--language=bash\")\n        .arg(\"--file-name=unknown.fallbacksyntax\")\n        .write_stdin(content)\n        .assert()\n        .success()\n        .get_output()\n        .stdout\n        .clone();\n\n    assert_eq!(\n        from_utf8(&fallback_output).expect(\"output is valid utf-8\"),\n        from_utf8(&explicit_output).expect(\"output is valid utf-8\")\n    );\n}\n\n#[test]\nfn fallback_syntax_does_not_override_detected_syntax() {\n    let content = \"fn main() { println!(\\\"hello\\\"); }\\n\";\n\n    let with_fallback = bat()\n        .arg(\"--color=always\")\n        .arg(\"--style=plain\")\n        .arg(\"--file-name=test.rs\")\n        .arg(\"--fallback-syntax=json\")\n        .write_stdin(content)\n        .assert()\n        .success()\n        .get_output()\n        .stdout\n        .clone();\n\n    let without_fallback = bat()\n        .arg(\"--color=always\")\n        .arg(\"--style=plain\")\n        .arg(\"--file-name=test.rs\")\n        .write_stdin(content)\n        .assert()\n        .success()\n        .get_output()\n        .stdout\n        .clone();\n\n    assert_eq!(\n        from_utf8(&with_fallback).expect(\"output is valid utf-8\"),\n        from_utf8(&without_fallback).expect(\"output is valid utf-8\")\n    );\n}\n\n#[test]\nfn fallback_syntax_does_not_override_explicit_language() {\n    let content = \"{\\\"a\\\": 1}\\n\";\n\n    let with_fallback = bat()\n        .arg(\"--color=always\")\n        .arg(\"--style=plain\")\n        .arg(\"--language=json\")\n        .arg(\"--fallback-syntax=rust\")\n        .arg(\"--file-name=unknown.fallbacksyntax\")\n        .write_stdin(content)\n        .assert()\n        .success()\n        .get_output()\n        .stdout\n        .clone();\n\n    let without_fallback = bat()\n        .arg(\"--color=always\")\n        .arg(\"--style=plain\")\n        .arg(\"--language=json\")\n        .arg(\"--file-name=unknown.fallbacksyntax\")\n        .write_stdin(content)\n        .assert()\n        .success()\n        .get_output()\n        .stdout\n        .clone();\n\n    assert_eq!(\n        from_utf8(&with_fallback).expect(\"output is valid utf-8\"),\n        from_utf8(&without_fallback).expect(\"output is valid utf-8\")\n    );\n}\n\n#[test]\nfn invalid_fallback_syntax_returns_error() {\n    bat()\n        .arg(\"--color=always\")\n        .arg(\"--style=plain\")\n        .arg(\"--file-name=unknown.fallbacksyntax\")\n        .arg(\"--fallback-syntax=InvalidSyntax\")\n        .write_stdin(\"foo\\n\")\n        .assert()\n        .failure()\n        .stderr(predicate::str::contains(\"unknown syntax: 'InvalidSyntax'\"));\n}\n\n#[test]\nfn show_all_mode() {\n    bat()\n        .arg(\"--show-all\")\n        .arg(\"nonprintable.txt\")\n        .assert()\n        .stdout(\"hello·world␊\\n├──┤␍␀␇␈␛\")\n        .stderr(\"\");\n}\n\n#[test]\nfn show_all_extends_tab_markers_to_next_tabstop() {\n    bat()\n        .arg(\"tabs.txt\")\n        .arg(\"--show-all\")\n        .arg(\"--tabs=4\")\n        .arg(\"--style=plain\")\n        .assert()\n        .success()\n        .stdout(\n            \"├──┤1├─┤2├─┤3├─┤4␊\n1├─┤?␊\n22├┤?␊\n333↹?␊\n4444├──┤?␊\n55555├─┤?␊\n666666├┤?␊\n7777777↹?␊\n88888888├──┤?␊\n\",\n        );\n}\n\n#[test]\nfn show_all_extends_tab_markers_to_next_tabstop_width_8() {\n    bat()\n        .arg(\"tabs.txt\")\n        .arg(\"--show-all\")\n        .arg(\"--tabs=8\")\n        .arg(\"--style=plain\")\n        .assert()\n        .success()\n        .stdout(\n            \"├──────┤1├─────┤2├─────┤3├─────┤4␊\n1├─────┤?␊\n22├────┤?␊\n333├───┤?␊\n4444├──┤?␊\n55555├─┤?␊\n666666├┤?␊\n7777777↹?␊\n88888888├──────┤?␊\n\",\n        );\n}\n\n#[test]\nfn show_all_with_caret_notation() {\n    bat()\n        .arg(\"--show-all\")\n        .arg(\"--nonprintable-notation=caret\")\n        .arg(\"nonprintable.txt\")\n        .assert()\n        .stdout(\"hello·world^J\\n├──┤^M^@^G^H^[\")\n        .stderr(\"\");\n\n    bat()\n        .arg(\"--show-all\")\n        .arg(\"--nonprintable-notation=caret\")\n        .arg(\"control_characters.txt\")\n        .assert()\n        .stdout(\"^@^A^B^C^D^E^F^G^H├─┤^J\\n^K^L^M^N^O^P^Q^R^S^T^U^V^W^X^Y^Z^[^\\\\^]^^^_^?\")\n        .stderr(\"\");\n}\n\n#[test]\nfn show_all_with_unicode() {\n    bat()\n        .arg(\"--show-all\")\n        .arg(\"--nonprintable-notation=unicode\")\n        .arg(\"control_characters.txt\")\n        .assert()\n        .stdout(\"␀␁␂␃␄␅␆␇␈├─┤␊\\n␋␌␍␎␏␐␑␒␓␔␕␖␗␘␙␚␛␜␝␞␟␡\")\n        .stderr(\"\");\n}\n\n#[test]\nfn binary_as_text() {\n    bat()\n        .arg(\"--binary=as-text\")\n        .arg(\"control_characters.txt\")\n        .assert()\n        .stdout(\"\\x00\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x08\\x09\\x0A\\x0B\\x0C\\x0D\\x0E\\x0F\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1A\\x1B\\x1C\\x1D\\x1E\\x1F\\x7F\")\n        .stderr(\"\");\n}\n\n#[test]\nfn no_strip_overstrike_for_plain_text() {\n    // Overstrike is preserved for plain text files (no syntax highlighting)\n    bat()\n        .arg(\"--color=never\")\n        .arg(\"--decorations=never\")\n        .arg(\"overstrike.txt\")\n        .assert()\n        .success()\n        .stdout(\"B\\x08Bold t\\x08te\\x08ex\\x08xt\\x08t and _\\x08u_\\x08n_\\x08d_\\x08e_\\x08r_\\x08l_\\x08i_\\x08n_\\x08e\\n\")\n        .stderr(\"\");\n}\n\n#[test]\nfn strip_overstrike_with_syntax_highlighting() {\n    // Overstrike is stripped for certain syntax highlighting like command help.\n    bat()\n        .arg(\"--force-colorization\")\n        .arg(\"--language=help\")\n        .arg(\"overstrike.txt\")\n        .assert()\n        .success()\n        .stdout(predicate::str::contains(\"Bold text and underline\"))\n        .stderr(\"\");\n}\n\n#[test]\nfn strip_overstrike_for_manpage_syntax() {\n    // Overstrike is stripped for .man files (Manpage syntax)\n    bat()\n        .arg(\"--force-colorization\")\n        .arg(\"git-commit.man\")\n        .assert()\n        .success()\n        .stdout(predicate::str::contains(\"NAME\"))\n        .stdout(predicate::str::contains(\"git-commit - Record changes\"))\n        .stdout(predicate::str::is_match(r\"\\x1b\\[38;[0-9;]+m--interactive\\x1b\\[\").unwrap())\n        .stderr(\"\");\n}\n\n#[test]\nfn no_strip_overstrike_for_other_syntax() {\n    // Overstrike is NOT stripped for other syntaxes (e.g., Rust)\n    bat()\n        .arg(\"--force-colorization\")\n        .arg(\"--language=rust\")\n        .arg(\"overstrike.txt\")\n        .assert()\n        .success()\n        .stdout(predicate::str::contains(\"\\x08\"))\n        .stderr(\"\");\n}\n\n#[test]\nfn show_all_shows_backspace_with_caret_notation() {\n    // --show-all should display backspace characters (not strip them)\n    bat()\n        .arg(\"--show-all\")\n        .arg(\"--nonprintable-notation=caret\")\n        .arg(\"--decorations=never\")\n        .arg(\"overstrike.txt\")\n        .assert()\n        .success()\n        .stdout(predicate::str::contains(\"^H\"))\n        .stderr(\"\");\n}\n\n#[test]\nfn no_paging_arg() {\n    bat()\n        .arg(\"--no-paging\")\n        .arg(\"--color=never\")\n        .arg(\"--decorations=never\")\n        .arg(\"single-line.txt\")\n        .assert()\n        .success()\n        .stdout(\"Single Line\");\n}\n\n#[test]\nfn no_paging_short_arg() {\n    bat()\n        .arg(\"-P\")\n        .arg(\"--color=never\")\n        .arg(\"--decorations=never\")\n        .arg(\"single-line.txt\")\n        .assert()\n        .success()\n        .stdout(\"Single Line\");\n}\n\n#[test]\nfn no_pager_arg() {\n    bat()\n        .arg(\"--no-pager\")\n        .arg(\"--color=never\")\n        .arg(\"--decorations=never\")\n        .arg(\"single-line.txt\")\n        .assert()\n        .success()\n        .stdout(\"Single Line\");\n}\n\n#[test]\nfn plain_mode_does_not_add_nonexisting_newline() {\n    bat()\n        .arg(\"--paging=never\")\n        .arg(\"--color=never\")\n        .arg(\"--decorations=always\")\n        .arg(\"--style=plain\")\n        .arg(\"single-line.txt\")\n        .assert()\n        .success()\n        .stdout(\"Single Line\");\n}\n\n// Regression test for https://github.com/sharkdp/bat/issues/299\n#[test]\n#[cfg(feature = \"git\")] // Expected output assumes git is enabled\nfn grid_for_file_without_newline() {\n    bat()\n        .arg(\"--paging=never\")\n        .arg(\"--color=never\")\n        .arg(\"--terminal-width=80\")\n        .arg(\"--wrap=never\")\n        .arg(\"--decorations=always\")\n        .arg(\"--style=full\")\n        .arg(\"single-line.txt\")\n        .assert()\n        .success()\n        .stdout(\n            \"\\\n─────┬──────────────────────────────────────────────────────────────────────────\n     │ File: single-line.txt\n     │ Size: 11 B\n─────┼──────────────────────────────────────────────────────────────────────────\n   1 │ Single Line\n─────┴──────────────────────────────────────────────────────────────────────────\n\",\n        )\n        .stderr(\"\");\n}\n\n// For ANSI theme, use underscore as a highlighter\n#[test]\nfn ansi_highlight_underline() {\n    bat()\n        .arg(\"--paging=never\")\n        .arg(\"--color=never\")\n        .arg(\"--terminal-width=80\")\n        .arg(\"--wrap=never\")\n        .arg(\"--decorations=always\")\n        .arg(\"--theme=ansi\")\n        .arg(\"--style=plain\")\n        .arg(\"--highlight-line=1\")\n        .write_stdin(\"Ansi Underscore Test\\nAnother Line\")\n        .assert()\n        .success()\n        .stdout(\"\\x1B[4mAnsi Underscore Test\\n\\x1B[24mAnother Line\")\n        .stderr(\"\");\n}\n\n// we don't really test other color schemes in the syntax-tests/source vs highlighted stuff\n// so here a simple integration test has been made for the ANSI theme,\n// which lives directly inside the bat repository\n#[test]\nfn ansi_highlight_json_keys() {\n    bat()\n        .arg(\"--paging=never\")\n        .arg(\"--color=always\")\n        .arg(\"--decorations=never\")\n        .arg(\"--theme=ansi\")\n        .arg(\"--language=json\")\n        .write_stdin(\"{\\\"foo\\\": \\\"bar\\\", \\\"test\\\": [123, \\\"baz\\\"] }\")\n        .assert()\n        .success()\n        .stdout(\"{\\x1B[34m\\\"\\x1B[0m\\x1B[34mfoo\\x1B[0m\\x1B[34m\\\"\\x1B[0m: \\x1B[32m\\\"\\x1B[0m\\x1B[32mbar\\x1B[0m\\x1B[32m\\\"\\x1B[0m, \\x1B[34m\\\"\\x1B[0m\\x1B[34mtest\\x1B[0m\\x1B[34m\\\"\\x1B[0m: [\\x1B[33m123\\x1B[0m, \\x1B[32m\\\"\\x1B[0m\\x1B[32mbaz\\x1B[0m\\x1B[32m\\\"\\x1B[0m] }\")\n        .stderr(\"\");\n}\n\n// Ensure that ANSI passthrough is emitted properly for both wrapping and non-wrapping printer.\n// See https://github.com/sharkdp/bat/issues/2307 for what common use case this test tests.\n#[test]\nfn ansi_passthrough_emit() {\n    for wrapping in &[\"never\", \"character\"] {\n        bat()\n            .arg(\"--paging=never\")\n            .arg(\"--color=never\")\n            .arg(\"--terminal-width=80\")\n            .arg(format!(\"--wrap={wrapping}\"))\n            .arg(\"--decorations=always\")\n            .arg(\"--style=plain\")\n            .write_stdin(\"\\x1B[33mColor\\nColor \\x1B[m\\nPlain\\n\")\n            .assert()\n            .success()\n            .stdout(\"\\x1B[33m\\x1B[33mColor\\n\\x1B[33mColor \\x1B[m\\nPlain\\n\")\n            .stderr(\"\");\n    }\n}\n\n// Ensure that a simple ANSI sequence passthrough is emitted properly on wrapped lines.\n// This also helps ensure that escape sequences are counted as part of the visible characters when wrapping.\n#[test]\nfn ansi_sgr_emitted_when_wrapped() {\n    bat()\n        .arg(\"--paging=never\")\n        .arg(\"--color=never\")\n        .arg(\"--terminal-width=20\")\n        .arg(\"--wrap=character\")\n        .arg(\"--decorations=always\")\n        .arg(\"--style=plain\")\n        .write_stdin(\"\\x1B[33mColor...............Also color.\\n\")\n        .assert()\n        .success()\n        .stdout(\"\\x1B[33m\\x1B[33mColor...............\\n\\x1B[33mAlso color.\\n\")\n        // FIXME:              ~~~~~~~~ should not be emitted twice.\n        .stderr(\"\");\n}\n\n// Ensure that a simple ANSI sequence passthrough is emitted properly on wrapped lines.\n// This also helps ensure that escape sequences are counted as part of the visible characters when wrapping.\n#[test]\nfn ansi_hyperlink_emitted_when_wrapped() {\n    bat()\n        .arg(\"--paging=never\")\n        .arg(\"--color=never\")\n        .arg(\"--terminal-width=20\")\n        .arg(\"--wrap=character\")\n        .arg(\"--decorations=always\")\n        .arg(\"--style=plain\")\n        .write_stdin(\"\\x1B]8;;http://example.com/\\x1B\\\\Hyperlinks..........Wrap across lines.\\n\")\n        .assert()\n        .success()\n        .stdout(\"\\x1B]8;;http://example.com/\\x1B\\\\\\x1B]8;;http://example.com/\\x1B\\\\Hyperlinks..........\\x1B]8;;\\x1B\\\\\\n\\x1B]8;;http://example.com/\\x1B\\\\Wrap across lines.\\n\")\n        // FIXME:                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ should not be emitted twice.\n        .stderr(\"\");\n}\n\n// Ensure that multiple ANSI sequence SGR attributes are combined when emitted on wrapped lines.\n#[test]\nfn ansi_sgr_joins_attributes_when_wrapped() {\n    bat()\n            .arg(\"--paging=never\")\n            .arg(\"--color=never\")\n            .arg(\"--terminal-width=20\")\n            .arg(\"--wrap=character\")\n            .arg(\"--decorations=always\")\n            .arg(\"--style=plain\")\n            .write_stdin(\"\\x1B[33mColor. \\x1B[1mBold.........Also bold and color.\\n\")\n            .assert()\n            .success()\n            .stdout(\"\\x1B[33m\\x1B[33mColor. \\x1B[1m\\x1B[33m\\x1B[1mBold.........\\n\\x1B[33m\\x1B[1mAlso bold and color.\\n\")\n            // FIXME:              ~~~~~~~~       ~~~~~~~~~~~~~~~ should not be emitted twice.\n            .stderr(\"\");\n}\n\n#[test]\nfn ignored_suffix_arg() {\n    bat()\n        .arg(\"-f\")\n        .arg(\"--theme\")\n        .arg(\"Monokai Extended\")\n        .arg(\"-p\")\n        .arg(\"test.json~\")\n        .assert()\n        .success()\n        .stdout(\"\\u{1b}[38;5;231m{\\u{1b}[0m\\u{1b}[38;5;208m\\\"\\u{1b}[0m\\u{1b}[38;5;208mtest\\u{1b}[0m\\u{1b}[38;5;208m\\\"\\u{1b}[0m\\u{1b}[38;5;231m:\\u{1b}[0m\\u{1b}[38;5;231m \\u{1b}[0m\\u{1b}[38;5;186m\\\"\\u{1b}[0m\\u{1b}[38;5;186mvalue\\u{1b}[0m\\u{1b}[38;5;186m\\\"\\u{1b}[0m\\u{1b}[38;5;231m}\\u{1b}[0m\")\n        .stderr(\"\");\n\n    bat()\n        .arg(\"-f\")\n        .arg(\"--theme\")\n        .arg(\"Monokai Extended\")\n        .arg(\"-p\")\n        .arg(\"--ignored-suffix=.suffix\")\n        .arg(\"test.json.suffix\")\n        .assert()\n        .success()\n        .stdout(\"\\u{1b}[38;5;231m{\\u{1b}[0m\\u{1b}[38;5;208m\\\"\\u{1b}[0m\\u{1b}[38;5;208mtest\\u{1b}[0m\\u{1b}[38;5;208m\\\"\\u{1b}[0m\\u{1b}[38;5;231m:\\u{1b}[0m\\u{1b}[38;5;231m \\u{1b}[0m\\u{1b}[38;5;186m\\\"\\u{1b}[0m\\u{1b}[38;5;186mvalue\\u{1b}[0m\\u{1b}[38;5;186m\\\"\\u{1b}[0m\\u{1b}[38;5;231m}\\u{1b}[0m\")\n        .stderr(\"\");\n\n    bat()\n        .arg(\"-f\")\n        .arg(\"--theme\")\n        .arg(\"Monokai Extended\")\n        .arg(\"-p\")\n        .arg(\"test.json.suffix\")\n        .assert()\n        .success()\n        .stdout(\"\\u{1b}[38;5;231m{\\\"test\\\": \\\"value\\\"}\\u{1b}[0m\")\n        .stderr(\"\");\n}\n\nfn wrapping_test(wrap_flag: &str, expect_wrap: bool) {\n    let expected = match expect_wrap {\n        true =>\n            \"abcdefghigklmnopqrstuvxyzabcdefghigklmnopqrstuvxyzabcdefghigklmnopqrstuvxyzabcde\\nfghigklmnopqrstuvxyz\\n\",\n        false =>\n            \"abcdefghigklmnopqrstuvxyzabcdefghigklmnopqrstuvxyzabcdefghigklmnopqrstuvxyzabcdefghigklmnopqrstuvxyz\\n\",\n    };\n\n    bat()\n        .arg(wrap_flag)\n        .arg(\"--style=rule\")\n        .arg(\"--color=never\")\n        .arg(\"--decorations=always\")\n        .arg(\"--terminal-width=80\")\n        .arg(\"long-single-line.txt\")\n        .assert()\n        .success()\n        .stdout(expected.to_owned())\n        .stderr(\"\");\n}\n\n#[test]\nfn no_line_wrapping_when_set_to_never() {\n    wrapping_test(\"--wrap=never\", false);\n}\n\n#[test]\nfn line_wrapping_when_auto() {\n    wrapping_test(\"--wrap=auto\", true);\n}\n\n#[test]\nfn no_line_wrapping_with_s_flag() {\n    wrapping_test(\"-S\", false);\n}\n\n#[test]\nfn no_wrapping_with_chop_long_lines() {\n    wrapping_test(\"--chop-long-lines\", false);\n}\n\n#[test]\n#[serial]\nfn wrap_never_flag_respected_with_paging_always() {\n    mocked_pagers::with_mocked_versions_of_more_and_most_in_path(|| {\n        bat()\n            .arg(\"--pager=cat\")\n            .arg(\"--paging=always\")\n            .arg(\"--wrap=never\")\n            .arg(\"--color=never\")\n            .arg(\"--decorations=never\")\n            .arg(\"--style=plain\")\n            .write_stdin(\"abcdefghigklmnopqrstuvxyzabcdefghigklmnopqrstuvxyzabcdefghigklmnopqrstuvxyzabcdefghigklmnopqrstuvxyz\\n\")\n            .assert()\n            .success()\n            .stdout(predicate::str::contains(\"abcdefghigklmnopqrstuvxyzabcdefghigklmnopqrstuvxyzabcdefghigklmnopqrstuvxyzabcdefghigklmnopqrstuvxyz\").normalize())\n            .stderr(\"\");\n    });\n}\n\n#[test]\n#[serial]\nfn s_flag_respected_with_paging_always() {\n    mocked_pagers::with_mocked_versions_of_more_and_most_in_path(|| {\n        bat()\n            .arg(\"--pager=cat\")\n            .arg(\"--paging=always\")\n            .arg(\"-S\")\n            .arg(\"--color=never\")\n            .arg(\"--decorations=never\")\n            .arg(\"--style=plain\")\n            .write_stdin(\"abcdefghigklmnopqrstuvxyzabcdefghigklmnopqrstuvxyzabcdefghigklmnopqrstuvxyzabcdefghigklmnopqrstuvxyz\\n\")\n            .assert()\n            .success()\n            .stdout(predicate::str::contains(\"abcdefghigklmnopqrstuvxyzabcdefghigklmnopqrstuvxyzabcdefghigklmnopqrstuvxyzabcdefghigklmnopqrstuvxyz\").normalize())\n            .stderr(\"\");\n    });\n}\n\n#[test]\nfn theme_arg_overrides_env() {\n    bat()\n        .env(\"BAT_THEME\", \"TwoDark\")\n        .arg(\"--paging=never\")\n        .arg(\"--color=never\")\n        .arg(\"--terminal-width=80\")\n        .arg(\"--wrap=never\")\n        .arg(\"--decorations=always\")\n        .arg(\"--theme=ansi\")\n        .arg(\"--style=plain\")\n        .arg(\"--highlight-line=1\")\n        .write_stdin(\"Ansi Underscore Test\\nAnother Line\")\n        .assert()\n        .success()\n        .stdout(\"\\x1B[4mAnsi Underscore Test\\n\\x1B[24mAnother Line\")\n        .stderr(\"\");\n}\n\n#[test]\nfn theme_arg_overrides_env_withconfig() {\n    bat_with_config()\n        .env(\"BAT_CONFIG_PATH\", \"bat-theme.conf\")\n        .env(\"BAT_THEME\", \"TwoDark\")\n        .arg(\"--paging=never\")\n        .arg(\"--color=never\")\n        .arg(\"--terminal-width=80\")\n        .arg(\"--wrap=never\")\n        .arg(\"--decorations=always\")\n        .arg(\"--theme=ansi\")\n        .arg(\"--style=plain\")\n        .arg(\"--highlight-line=1\")\n        .write_stdin(\"Ansi Underscore Test\\nAnother Line\")\n        .assert()\n        .success()\n        .stdout(\"\\x1B[4mAnsi Underscore Test\\n\\x1B[24mAnother Line\")\n        .stderr(\"\");\n}\n\n#[test]\nfn theme_light_env_var_is_respected() {\n    bat()\n        .env(\"BAT_THEME_LIGHT\", \"Coldark-Cold\")\n        .env(\"COLORTERM\", \"truecolor\")\n        .arg(\"--theme=light\")\n        .arg(\"--paging=never\")\n        .arg(\"--color=never\")\n        .arg(\"--terminal-width=80\")\n        .arg(\"--wrap=never\")\n        .arg(\"--decorations=always\")\n        .arg(\"--style=plain\")\n        .arg(\"--highlight-line=1\")\n        .write_stdin(\"Lorem Ipsum\")\n        .assert()\n        .success()\n        .stdout(\"\\x1B[48;2;208;218;231mLorem Ipsum\\x1B[0m\")\n        .stderr(\"\");\n}\n\n#[test]\nfn theme_dark_env_var_is_respected() {\n    bat()\n        .env(\"BAT_THEME_DARK\", \"Coldark-Dark\")\n        .env(\"COLORTERM\", \"truecolor\")\n        .arg(\"--theme=dark\")\n        .arg(\"--paging=never\")\n        .arg(\"--color=never\")\n        .arg(\"--terminal-width=80\")\n        .arg(\"--wrap=never\")\n        .arg(\"--decorations=always\")\n        .arg(\"--style=plain\")\n        .arg(\"--highlight-line=1\")\n        .write_stdin(\"Lorem Ipsum\")\n        .assert()\n        .success()\n        .stdout(\"\\x1B[48;2;33;48;67mLorem Ipsum\\x1B[0m\")\n        .stderr(\"\");\n}\n\n#[test]\nfn theme_env_overrides_config() {\n    bat_with_config()\n        .env(\"BAT_CONFIG_PATH\", \"bat-theme.conf\")\n        .env(\"BAT_THEME\", \"ansi\")\n        .arg(\"--paging=never\")\n        .arg(\"--color=never\")\n        .arg(\"--terminal-width=80\")\n        .arg(\"--wrap=never\")\n        .arg(\"--decorations=always\")\n        .arg(\"--style=plain\")\n        .arg(\"--highlight-line=1\")\n        .write_stdin(\"Ansi Underscore Test\\nAnother Line\")\n        .assert()\n        .success()\n        .stdout(\"\\x1B[4mAnsi Underscore Test\\n\\x1B[24mAnother Line\")\n        .stderr(\"\");\n}\n\n#[test]\nfn highlighting_is_skipped_on_long_lines() {\n    let expected = \"\\u{1b}[38;5;231m{\\u{1b}[0m\\u{1b}[38;5;208m\\\"\\u{1b}[0m\\u{1b}[38;5;208mapi\\u{1b}[0m\\u{1b}[38;5;208m\\\"\\u{1b}[0m\\u{1b}[38;5;231m:\\u{1b}[0m\\n\".to_owned() +\n        \"\\u{1b}\" +\n        r#\"[38;5;231m    {\"ANGLE_instanced_arrays\":{\"__compat\":{\"mdn_url\":\"https://developer.mozilla.org/docs/Web/API/ANGLE_instanced_arrays\",\"spec_url\":\"https://www.khronos.org/registry/webgl/extensions/ANGLE_instanced_arrays/\",\"support\":{\"chrome\":{\"version_added\":\"32\"},\"chrome_android\":{\"version_added\":\"32\"},\"edge\":{\"version_added\":\"12\"},\"firefox\":{\"version_added\":\"47\"},\"firefox_android\":{\"version_added\":true},\"ie\":{\"version_added\":\"11\"},\"opera\":{\"version_added\":\"19\"},\"opera_android\":{\"version_added\":\"19\"},\"safari\":{\"version_added\":\"8\"},\"safari_ios\":{\"version_added\":\"8\"},\"samsunginternet_android\":{\"version_added\":\"2.0\"},\"webview_android\":{\"version_added\":\"4.4\"}},\"status\":{\"experimental\":false,\"standard_track\":true,\"deprecated\":false}},\"drawArraysInstancedANGLE\":{\"__compat\":{\"mdn_url\":\"https://developer.mozilla.org/docs/Web/API/ANGLE_instanced_arrays/drawArraysInstancedANGLE\",\"spec_url\":\"https://www.khronos.org/registry/webgl/extensions/ANGLE_instanced_arrays/\",\"support\":{\"chrome\":{\"version_added\":\"32\"},\"chrome_android\":{\"version_added\":\"32\"},\"edge\":{\"version_added\":\"12\"},\"firefox\":{\"version_added\":\"47\"},\"firefox_android\":{\"version_added\":true},\"ie\":{\"version_added\":\"11\"},\"opera\":{\"version_added\":\"19\"},\"opera_android\":{\"version_added\":\"19\"},\"safari\":{\"version_added\":\"8\"},\"safari_ios\":{\"version_added\":\"8\"},\"samsunginternet_android\":{\"version_added\":\"2.0\"},\"webview_android\":{\"version_added\":\"4.4\"}},\"status\":{\"experimental\":false,\"standard_track\":true,\"deprecated\":false}}},\"drawElementsInstancedANGLE\":{\"__compat\":{\"mdn_url\":\"https://developer.mozilla.org/docs/Web/API/ANGLE_instanced_arrays/drawElementsInstancedANGLE\",\"spec_url\":\"https://www.khronos.org/registry/webgl/extensions/ANGLE_instanced_arrays/\",\"support\":{\"chrome\":{\"version_added\":\"32\"},\"chrome_android\":{\"version_added\":\"32\"},\"edge\":{\"version_added\":\"12\"},\"firefox\":{\"version_added\":\"47\"},\"firefox_android\":{\"version_added\":true},\"ie\":{\"version_added\":\"11\"},\"opera\":{\"version_added\":\"19\"},\"opera_android\":{\"version_added\":\"19\"},\"safari\":{\"version_added\":\"8\"},\"safari_ios\":{\"version_added\":\"8\"},\"samsunginternet_android\":{\"version_added\":\"2.0\"},\"webview_android\":{\"version_added\":\"4.4\"}},\"status\":{\"experimental\":false,\"standard_track\":true,\"deprecated\":false}}},\"vertexAttribDivisorANGLE\":{\"__compat\":{\"mdn_url\":\"https://developer.mozilla.org/docs/Web/API/ANGLE_instanced_arrays/vertexAttribDivisorANGLE\",\"spec_url\":\"https://www.khronos.org/registry/webgl/extensions/ANGLE_instanced_arrays/\",\"support\":{\"chrome\":{\"version_added\":\"32\"},\"chrome_android\":{\"version_added\":\"32\"},\"edge\":{\"version_added\":\"12\"},\"firefox\":{\"version_added\":\"47\"},\"firefox_android\":{\"version_added\":true},\"ie\":{\"version_added\":\"11\"},\"opera\":{\"version_added\":\"19\"},\"opera_android\":{\"version_added\":\"19\"},\"safari\":{\"version_added\":\"8\"},\"safari_ios\":{\"version_added\":\"8\"},\"samsunginternet_android\":{\"version_added\":\"2.0\"},\"webview_android\":{\"version_added\":\"4.4\"}},\"status\":{\"experimental\":false,\"standard_track\":true,\"deprecated\":false}}}},\"AbortController\":{\"__compat\":{\"mdn_url\":\"https://developer.mozilla.org/docs/Web/API/AbortController\",\"spec_url\":\"https://dom.spec.whatwg.org/#interface-abortcontroller\",\"support\":{\"chrome\":{\"version_added\":\"66\"},\"chrome_android\":{\"version_added\":\"66\"},\"edge\":{\"version_added\":\"16\"},\"firefox\":{\"version_added\":\"57\"},\"firefox_android\":{\"version_added\":\"57\"},\"ie\":{\"version_added\":false},\"nodejs\":{\"version_added\":\"15.0.0\"},\"opera\":{\"version_added\":\"53\"},\"opera_android\":{\"version_added\":\"47\"},\"safari\":[{\"version_added\":\"12.1\"},{\"version_added\":\"11.1\",\"partial_implementation\":true,\"notes\":\"Even though <code>window.AbortController</code> is defined, it doesn't really abort <code>fetch</code> requests. See <a href='https://webkit.org/b/174980'>bug 174980</a>.\"}],\"safari_ios\":[{\"version_added\":\"12.2\"},{\"version_added\":\"11.3\",\"partial_implementation\":true,\"notes\":\"Even though <code>window.AbortController</code> is defined, it doesn't really abort <code>fetch</code> requests. See <a href='https://webkit.org/b/174980'>bug 174980</a>.\"}],\"samsunginternet_android\":{\"version_added\":\"9.0\"},\"webview_android\":{\"version_added\":\"66\"}},\"status\":{\"experimental\":true,\"standard_track\":true,\"deprecated\":false}},\"AbortController\":{\"__compat\":{\"mdn_url\":\"https://developer.mozilla.org/docs/Web/API/AbortController/AbortController\",\"spec_url\":\"https://dom.spec.whatwg.org/#ref-for-dom-abortcontroller-abortcontroller①\",\"description\":\"<code>AbortController()</code> constructor\",\"support\":{\"chrome\":{\"version_added\":\"66\"},\"chrome_android\":{\"version_added\":\"66\"},\"edge\":{\"version_added\":\"16\"},\"firefox\":{\"version_added\":\"57\"},\"firefox_android\":{\"version_added\":\"57\"},\"ie\":{\"version_added\":false},\"nodejs\":{\"version_added\":\"15.0.0\"},\"opera\":{\"version_added\":\"53\"},\"opera_android\":{\"version_added\":\"47\"},\"safari\":[{\"version_added\":\"12.1\"},{\"version_added\":\"11.1\",\"partial_implementation\":true,\"notes\":\"Even though <code>window.AbortController</code> is defined, it doesn't really abort <code>fetch</code> requests. See <a href='https://webkit.org/b/174980'>bug 174980</a>.\"}],\"safari_ios\":[{\"version_added\":\"12.2\"},{\"version_added\":\"11.3\",\"partial_implementation\":true,\"notes\":\"Even though <code>window.AbortController</code> is defined, it doesn't really abort <code>fetch</code> requests. See <a href='https://webkit.org/b/174980'>bug 174980</a>.\"}],\"samsunginternet_android\":{\"version_added\":\"9.0\"},\"webview_android\":{\"version_added\":\"66\"}},\"status\":{\"experimental\":true,\"standard_track\":true,\"deprecated\":false}}},\"abort\":{\"__compat\":{\"mdn_url\":\"https://developer.mozilla.org/docs/Web/API/AbortController/abort\",\"spec_url\":\"https://dom.spec.whatwg.org/#ref-for-dom-abortcontroller-abortcontroller①\",\"support\":{\"chrome\":{\"version_added\":\"66\"},\"chrome_android\":{\"version_added\":\"66\"},\"edge\":{\"version_added\":\"16\"},\"firefox\":{\"version_added\":\"57\"},\"firefox_android\":{\"version_added\":\"57\"},\"ie\":{\"version_added\":false},\"nodejs\":{\"version_added\":\"15.0.0\"},\"opera\":{\"version_added\":\"53\"},\"opera_android\":{\"version_added\":\"47\"},\"safari\":[{\"version_added\":\"12.1\"},{\"version_added\":\"11.1\",\"partial_implementation\":true,\"notes\":\"Even though <code>window.AbortController</code> is defined, it doesn't really abort <code>fetch</code> requests. See <a href='https://webkit.org/b/174980'>bug 174980</a>.\"}],\"safari_ios\":[{\"version_added\":\"12.2\"},{\"version_added\":\"11.3\",\"partial_implementation\":true,\"notes\":\"Even though <code>window.AbortController</code> is defined, it doesn't really abort <code>fetch</code> requests. See <a href='https://webkit.org/b/174980'>bug 174980</a>.\"}],\"samsunginternet_android\":{\"version_added\":\"9.0\"},\"webview_android\":{\"version_added\":\"66\"}},\"status\":{\"experimental\":true,\"standard_track\":true,\"deprecated\":false}}},\"signal\":{\"__compat\":{\"mdn_url\":\"https://developer.mozilla.org/docs/Web/API/AbortController/signal\",\"spec_url\":\"https://dom.spec.whatwg.org/#ref-for-dom-abortcontroller-signal②\",\"support\":{\"chrome\":{\"version_added\":\"66\"},\"chrome_android\":{\"version_added\":\"66\"},\"edge\":{\"version_added\":\"16\"},\"firefox\":{\"version_added\":\"57\"},\"firefox_android\":{\"version_added\":\"57\"},\"ie\":{\"version_added\":false},\"nodejs\":{\"version_added\":\"15.0.0\"},\"opera\":{\"version_added\":\"53\"},\"opera_android\":{\"version_added\":\"47\"},\"safari\":[{\"version_added\":\"12.1\"},{\"version_added\":\"11.1\",\"partial_implementation\":true,\"notes\":\"Even though <code>window.AbortController</code> is defined, it doesn't really abort <code>fetch</code> requests. See <a href='https://webkit.org/b/174980'>bug 174980</a>.\"}],\"safari_ios\":[{\"version_added\":\"12.2\"},{\"version_added\":\"11.3\",\"partial_implementation\":true,\"notes\":\"Even though <code>window.AbortController</code> is defined, it doesn't really abort <code>fetch</code> requests. See <a href='https://webkit.org/b/174980'>bug 174980</a>.\"}],\"samsunginternet_android\":{\"version_added\":\"9.0\"},\"webview_android\":{\"version_added\":\"66\"}},\"status\":{\"experimental\":true,\"standard_track\":true,\"deprecated\":false}}}},\"AbortPaymentEvent\":{\"__compat\":{\"mdn_url\":\"https://developer.mozilla.org/docs/Web/API/AbortPaymentEvent\",\"support\":{\"chrome\":{\"version_added\":\"70\"},\"chrome_android\":{\"version_added\":\"70\"},\"edge\":{\"version_added\":\"79\"},\"firefox\":{\"version_added\":false},\"firefox_android\":{\"version_added\":false},\"ie\":{\"version_added\":false},\"opera\":{\"version_added\":\"57\"},\"opera_android\":{\"version_added\":\"49\"},\"safari\":{\"version_added\":false},\"safari_ios\":{\"version_added\":false},\"samsunginternet_android\":{\"version_added\":\"10.0\"},\"webview_android\":{\"version_added\":false}},\"status\":{\"experimental\":true,\"standard_track\":false,\"deprecated\":false}},\"AbortPaymentEvent\":{\"__compat\":{\"description\":\"<code>AbortPaymentEvent()</code> constructor\",\"mdn_url\":\"https://developer.mozilla.org/docs/Web/API/AbortPaymentEvent/AbortPaymentEvent\",\"support\":{\"chrome\":{\"version_added\":\"70\"},\"chrome_android\":{\"version_added\":\"70\"},\"edge\":{\"version_added\":\"79\"},\"firefox\":{\"version_added\":false},\"firefox_android\":{\"version_added\":false},\"ie\":{\"version_added\":false},\"opera\":{\"version_added\":\"57\"},\"opera_android\":{\"version_added\":\"49\"},\"safari\":{\"version_added\":false},\"safari_ios\":{\"version_added\":false},\"samsunginternet_android\":{\"version_added\":\"10.0\"},\"webview_android\":{\"version_added\":false}},\"status\":{\"experimental\":true,\"standard_track\":false,\"deprecated\":false}}},\"respondWith\":{\"__compat\":{\"mdn_url\":\"https://developer.mozilla.org/docs/Web/API/AbortPaymentEvent/respondWith\",\"support\":{\"chrome\":{\"version_added\":\"70\"},\"chrome_android\":{\"version_added\":\"70\"},\"edge\":{\"version_added\":\"79\"},\"firefox\":{\"version_added\":false},\"firefox_android\":{\"version_added\":false},\"ie\":{\"version_added\":false},\"opera\":{\"version_added\":\"57\"},\"opera_android\":{\"version_added\":\"49\"},\"safari\":{\"version_added\":false},\"safari_ios\":{\"version_added\":false},\"samsunginternet_android\":{\"version_added\":\"10.0\"},\"webview_android\":{\"version_added\":false}},\"status\":{\"experimental\":true,\"standard_track\":false,\"deprecated\":false}}}},\"AbortSignal\":{\"__compat\":{\"mdn_url\":\"https://developer.mozilla.org/docs/Web/API/AbortSignal\",\"spec_url\":\"https://dom.spec.whatwg.org/#interface-AbortSignal\",\"support\":{\"chrome\":{\"version_added\":\"66\"},\"chrome_android\":{\"version_added\":\"66\"},\"edge\":{\"version_added\":\"16\"},\"firefox\":{\"version_added\":\"57\"},\"firefox_android\":{\"version_added\":\"57\"},\"ie\":{\"version_added\":false},\"nodejs\":{\"version_added\":\"15.0.0\"},\"opera\":{\"version_added\":\"53\"},\"opera_android\":{\"version_added\":\"47\"},\"safari\":{\"version_added\":\"11.1\"},\"safari_ios\":{\"version_added\":\"11.3\"},\"samsunginternet_android\":{\"version_added\":\"9.0\"},\"webview_android\":{\"version_added\":\"66\"}},\"status\":{\"experimental\":false,\"standard_track\":true,\"deprecated\":false}},\"abort\":{\"__compat\":{\"mdn_url\":\"https://developer.mozilla.org/docs/Web/API/AbortSignal/abort\",\"spec_url\":\"https://dom.spec.whatwg.org/#ref-for-dom-abortsignal-abort①\",\"support\":{\"chrome\":{\"version_added\":false},\"chrome_android\":{\"version_added\":false},\"edge\":{\"version_added\":false},\"firefox\":{\"version_added\":\"88\"},\"firefox_android\":{\"version_added\":\"88\"},\"ie\":{\"version_added\":false},\"nodejs\":{\"version_added\":false},\"opera\":{\"version_added\":false},\"opera_android\":{\"version_added\":false},\"safari\":{\"version_added\":false},\"safari_ios\":{\"version_added\":false},\"samsunginternet_android\":{\"version_added\":false},\"webview_android\":{\"version_added\":false}},\"status\":{\"experimental\":false,\"standard_track\":true,\"deprecated\":false}}},\"abort_event\":{\"__compat\":{\"description\":\"<code>abort</code> event\",\"mdn_url\":\"https://developer.mozilla.org/docs/Web/API/AbortSignal/abort_event\",\"spec_url\":\"https://dom.spec.whatwg.org/#eventdef-abortsignal-abort\",\"support\":{\"chrome\":{\"version_added\":\"66\"},\"chrome_android\":{\"version_added\":\"66\"},\"edge\":{\"version_added\":\"16\"},\"firefox\":{\"version_added\":\"57\"},\"firefox_android\":{\"version_added\":\"57\"},\"ie\":{\"version_added\":false},\"nodejs\":{\"version_added\":\"15.0.0\"},\"opera\":{\"version_added\":\"53\"},\"opera_android\":{\"version_added\":\"47\"},\"safari\":{\"version_added\":\"11.1\"},\"safari_ios\":{\"version_added\":\"11.3\"},\"samsunginternet_android\":{\"version_added\":\"9.0\"},\"webview_android\":{\"version_added\":\"66\"}},\"status\":{\"experimental\":false,\"standard_track\":true,\"deprecated\":false}}},\"aborted\":{\"__compat\":{\"mdn_url\":\"https://developer.mozilla.org/docs/Web/API/AbortSignal/aborted\",\"spec_url\":\"https://dom.spec.whatwg.org/#ref-for-dom-abortsignal-aborted①\",\"support\":{\"chrome\":{\"version_added\":\"66\"},\"chrome_android\":{\"version_added\":\"66\"},\"edge\":{\"version_added\":\"16\"},\"firefox\":{\"version_added\":\"57\"},\"firefox_android\":{\"version_added\":\"57\"},\"ie\":{\"version_added\":false},\"nodejs\":{\"version_added\":\"15.0.0\"},\"opera\":{\"version_added\":\"53\"},\"opera_android\":{\"version_added\":\"47\"},\"safari\":{\"version_added\":\"11.1\"},\"safari_ios\":{\"version_added\":\"11.3\"},\"samsunginternet_android\":{\"version_added\":\"9.0\"},\"webview_android\":{\"version_added\":\"66\"}},\"status\":{\"experimental\":false,\"standard_track\":true,\"deprecated\":false}}},\"onabort\":{\"__compat\":{\"mdn_url\":\"https://developer.mozilla.org/docs/Web/API/AbortSignal/onabort\",\"spec_url\":\"https://dom.spec.whatwg.org/#abortsignal-onabort\",\"support\":{\"chrome\":{\"version_added\":\"66\"},\"chrome_android\":{\"version_added\":\"66\"},\"edge\":{\"version_added\":\"16\"},\"firefox\":{\"version_added\":\"57\"},\"firefox_android\":{\"version_added\":\"57\"},\"ie\":{\"version_added\":false},\"nodejs\":{\"version_added\":\"15.0.0\"},\"opera\":{\"version_added\":\"53\"},\"opera_android\":{\"version_added\":\"47\"},\"safari\":{\"version_added\":\"11.1\"},\"safari_ios\":{\"version_added\":\"11.3\"},\"samsunginternet_android\":{\"version_added\":\"9.0\"},\"webview_android\":{\"version_added\":\"66\"}},\"status\":{\"experimental\":false,\"standard_track\":true,\"deprecated\":false}}}},\"AbsoluteOrientationSensor\":{\"__compat\":{\"mdn_url\":\"https://developer.mozilla.org/docs/Web/API/AbsoluteOrientationSensor\",\"spec_url\":\"https://w3c.github.io/orientation-sensor/#absoluteorientationsensor-interface\",\"support\":{\"chrome\":{\"version_added\":\"67\"},\"chrome_android\":{\"version_added\":\"67\"},\"edge\":{\"version_added\":\"79\"},\"firefox\":{\"version_added\":false},\"firefox_android\":{\"version_added\":false},\"ie\":{\"version_added\":false},\"opera\":{\"version_added\":\"54\"},\"opera_android\":{\"version_added\":\"48\"},\"safari\":{\"version_added\":false},\"safari_ios\":{\"version_added\":false},\"samsunginternet_android\":{\"version_added\":\"9.0\"},\"webview_android\":{\"version_added\":\"67\"}},\"status\":{\"experimental\":false,\"standard_track\":true,\"deprecated\":false}},\"AbsoluteOrientationSensor\":{\"__compat\":{\"mdn_url\":\"https://developer.mozilla.org/docs/Web/API/AbsoluteOrientationSensor/AbsoluteOrientationSensor\",\"spec_url\":\"https://w3c.github.io/orientation-sensor/#dom-absoluteorientationsensor-absoluteorientationsensor\",\"description\":\"<code>AbsoluteOrientationSensor()</code> constructor\",\"support\":{\"chrome\":{\"version_added\":\"67\"},\"chrome_android\":{\"version_added\":\"67\"},\"edge\":{\"version_added\":\"79\"},\"firefox\":{\"version_added\":false},\"firefox_android\":{\"version_added\":false},\"ie\":{\"version_added\":false},\"opera\":{\"version_added\":\"54\"},\"opera_android\":{\"version_added\":\"48\"},\"safari\":{\"version_added\":false},\"safari_ios\":{\"version_added\":false},\"samsunginternet_android\":{\"version_added\":\"9.0\"},\"webview_android\":{\"version_added\":\"67\"}},\"status\":{\"experimental\":false,\"standard_track\":true,\"deprecated\":false}}}},\"AbstractRange\":{\"__compat\":{\"mdn_url\":\"https://developer.mozilla.org/docs/Web/API/AbstractRange\",\"spec_url\":\"https://dom.spec.whatwg.org/#interface-abstractrange\",\"support\":{\"chrome\":{\"version_added\":\"90\"},\"chrome_android\":{\"version_added\":\"90\"},\"edge\":[{\"version_added\":\"90\"},{\"version_added\":\"18\",\"version_removed\":\"79\"}],\"firefox\":{\"version_added\":\"69\"},\"firefox_android\":{\"version_added\":false},\"ie\":{\"version_added\":false},\"opera\":{\"version_added\":false},\"opera_android\":{\"version_added\":false},\"safari\":{\"version_added\":\"14.1\"},\"safari_ios\":{\"version_added\":\"14.5\"},\"samsunginternet_android\":{\"version_added\":false},\"webview_android\":{\"version_added\":\"90\"}},\"status\":{\"experimental\":false,\"standard_track\":true,\"deprecated\":false}},\"collapsed\":{\"__compat\":{\"mdn_url\":\"https://developer.mozilla.org/docs/Web/API/AbstractRange/collapsed\",\"spec_url\":\"https://dom.spec.whatwg.org/#ref-for-dom-range-collapsed①\",\"support\":{\"chrome\":{\"version_added\":\"90\"},\"chrome_android\":{\"version_added\":\"90\"},\"edge\":[{\"version_added\":\"90\"},{\"version_added\":\"18\",\"version_removed\":\"79\"}],\"firefox\":{\"version_added\":\"69\"},\"firefox_android\":{\"version_added\":false},\"ie\":{\"version_added\":false},\"opera\":{\"version_added\":false},\"opera_android\":\"# +\n        \"\\u{1b}[0m\\n\\u{1b}[38;5;231m    \\u{1b}[0m\\u{1b}[38;5;231m{\\u{1b}[0m\\u{1b}[38;5;208m\\\"\\u{1b}[0m\\u{1b}[38;5;208mversion_added\\u{1b}[0m\\u{1b}[38;5;208m\\\"\\u{1b}[0m\\u{1b}[38;5;231m:\\u{1b}[0m\\u{1b}[38;5;141mfalse\\u{1b}[0m\\u{1b}[38;5;231m}\\u{1b}[0m\\n\";\n\n    bat()\n        .arg(\"-f\")\n        .arg(\"--theme\")\n        .arg(\"Monokai Extended\")\n        .arg(\"-p\")\n        .arg(\"longline.json\")\n        .assert()\n        .success()\n        .stdout(expected)\n        .stderr(\"\");\n}\n\n#[test]\nfn all_global_git_config_locations_syntax_mapping_work() {\n    let fake_home = Path::new(EXAMPLES_DIR).join(\"git\").canonicalize().unwrap();\n    let expected = \"\\u{1b}[38;5;231m[\\u{1b}[0m\\u{1b}[38;5;149muser\\u{1b}[0m\\u{1b}[38;5;231m]\\u{1b}[0m\n\\u{1b}[38;5;231m    \\u{1b}[0m\\u{1b}[38;5;231memail\\u{1b}[0m\\u{1b}[38;5;231m \\u{1b}[0m\\u{1b}[38;5;203m=\\u{1b}[0m\\u{1b}[38;5;231m \\u{1b}[0m\\u{1b}[38;5;186mfoo@bar.net\\u{1b}[0m\n\\u{1b}[38;5;231m    \\u{1b}[0m\\u{1b}[38;5;231mname\\u{1b}[0m\\u{1b}[38;5;231m \\u{1b}[0m\\u{1b}[38;5;203m=\\u{1b}[0m\\u{1b}[38;5;231m \\u{1b}[0m\\u{1b}[38;5;186mfoobar\\u{1b}[0m\n\";\n\n    bat()\n        .env(\"XDG_CONFIG_HOME\", fake_home.join(\".config\").as_os_str())\n        .arg(\"-f\")\n        .arg(\"--theme\")\n        .arg(\"Monokai Extended\")\n        .arg(\"-p\")\n        .arg(\"git/.config/git/config\")\n        .assert()\n        .success()\n        .stdout(expected)\n        .stderr(\"\");\n\n    bat()\n        .env(\"HOME\", fake_home.as_os_str())\n        .arg(\"-f\")\n        .arg(\"--theme\")\n        .arg(\"Monokai Extended\")\n        .arg(\"-p\")\n        .arg(\"git/.config/git/config\")\n        .assert()\n        .success()\n        .stdout(expected)\n        .stderr(\"\");\n\n    bat()\n        .env(\"HOME\", fake_home.as_os_str())\n        .arg(\"-f\")\n        .arg(\"--theme\")\n        .arg(\"Monokai Extended\")\n        .arg(\"-p\")\n        .arg(\"git/.gitconfig\")\n        .assert()\n        .success()\n        .stdout(expected)\n        .stderr(\"\");\n}\n\n#[test]\nfn map_syntax_and_ignored_suffix_work_together() {\n    bat()\n        .arg(\"-f\")\n        .arg(\"--theme\")\n        .arg(\"Monokai Extended\")\n        .arg(\"-p\")\n        .arg(\"--ignored-suffix=.suffix\")\n        .arg(\"--map-syntax=*.demo:JSON\")\n        .arg(\"test.demo.suffix\")\n        .assert()\n        .success()\n        .stdout(\"\\u{1b}[38;5;231m{\\u{1b}[0m\\u{1b}[38;5;208m\\\"\\u{1b}[0m\\u{1b}[38;5;208mtest\\u{1b}[0m\\u{1b}[38;5;208m\\\"\\u{1b}[0m\\u{1b}[38;5;231m:\\u{1b}[0m\\u{1b}[38;5;231m \\u{1b}[0m\\u{1b}[38;5;186m\\\"\\u{1b}[0m\\u{1b}[38;5;186mvalue\\u{1b}[0m\\u{1b}[38;5;186m\\\"\\u{1b}[0m\\u{1b}[38;5;231m}\\u{1b}[0m\")\n        .stderr(\"\");\n\n    bat()\n        .arg(\"-f\")\n        .arg(\"--theme\")\n        .arg(\"Monokai Extended\")\n        .arg(\"-p\")\n        .arg(\"--ignored-suffix=.suffix\")\n        .arg(\"--ignored-suffix=.foo\")\n        .arg(\"--map-syntax=*.demo:JSON\")\n        .arg(\"test.demo.foo.suffix\")\n        .assert()\n        .success()\n        .stdout(\"\\u{1b}[38;5;231m{\\u{1b}[0m\\u{1b}[38;5;208m\\\"\\u{1b}[0m\\u{1b}[38;5;208mtest\\u{1b}[0m\\u{1b}[38;5;208m\\\"\\u{1b}[0m\\u{1b}[38;5;231m:\\u{1b}[0m\\u{1b}[38;5;231m \\u{1b}[0m\\u{1b}[38;5;186m\\\"\\u{1b}[0m\\u{1b}[38;5;186mvalue\\u{1b}[0m\\u{1b}[38;5;186m\\\"\\u{1b}[0m\\u{1b}[38;5;231m}\\u{1b}[0m\")\n        .stderr(\"\");\n}\n\n#[test]\nfn acknowledgements() {\n    bat()\n        .arg(\"--acknowledgements\")\n        .assert()\n        .success()\n        .stdout(\n            // Just some sanity checking that avoids names of persons, except our own Keith Hall :)\n            predicate::str::contains(\n                \"Copyright (c) 2018-2021 bat-developers (https://github.com/sharkdp/bat).\",\n            )\n            .and(predicate::str::contains(\n                \"Copyright (c) 2012-2020 The Sublime CMake authors\",\n            ))\n            .and(predicate::str::contains(\n                \"Copyright 2014-2015 SaltStack Team\",\n            ))\n            .and(predicate::str::contains(\n                \"Copyright (c) 2013-present Dracula Theme\",\n            ))\n            .and(predicate::str::contains(\n                \"## syntaxes/01_Packages/Rust/LICENSE.txt\",\n            ))\n            .and(predicate::str::contains(\n                \"## syntaxes/02_Extra/http-request-response/LICENSE\",\n            ))\n            .and(predicate::str::contains(\n                \"## themes/dracula-sublime/LICENSE\",\n            ))\n            .and(predicate::str::contains(\"Copyright (c) 2017 b123400\"))\n            .and(predicate::str::contains(\"Copyright (c) 2021 Keith Hall\"))\n            .and(predicate::str::contains(\"Copyright 2014 Clams\")),\n        )\n        .stderr(\"\");\n}\n\n#[cfg(unix)] // Expected output assumed that tests are run on a Unix-like system\n#[cfg(feature = \"lessopen\")]\n#[test]\nfn lessopen_file_piped() {\n    bat()\n        .env(\"LESSOPEN\", \"|echo File is %s\")\n        .arg(\"--lessopen\")\n        .arg(\"test.txt\")\n        .assert()\n        .success()\n        .stdout(\"File is test.txt\\n\");\n}\n\n#[cfg(unix)] // Expected output assumed that tests are run on a Unix-like system\n#[cfg(feature = \"lessopen\")]\n#[test]\nfn lessopen_stdin_piped() {\n    bat()\n        .env(\"LESSOPEN\", \"|cat\")\n        .arg(\"--lessopen\")\n        .write_stdin(\"hello world\\n\")\n        .assert()\n        .success()\n        .stdout(\"hello world\\n\");\n}\n\n#[cfg(unix)] // Expected output assumed that tests are run on a Unix-like system\n#[cfg(feature = \"lessopen\")]\n#[test]\nfn lessopen_and_lessclose_file_temp() {\n    // This is mainly to test that $LESSCLOSE gets passed the correct file paths\n    // In this case, the original file and the temporary file returned by $LESSOPEN\n    bat()\n        // Need a %s for $LESSOPEN to be valid\n        .env(\"LESSOPEN\", \"echo empty.txt && echo %s >/dev/null\")\n        .env(\"LESSCLOSE\", \"echo lessclose: %s %s\")\n        .arg(\"--lessopen\")\n        .arg(\"test.txt\")\n        .assert()\n        .success()\n        .stdout(\"lessclose: test.txt empty.txt\\n\");\n}\n\n#[cfg(unix)] // Expected output assumed that tests are run on a Unix-like system\n#[cfg(feature = \"lessopen\")]\n#[test]\nfn lessopen_and_lessclose_file_piped() {\n    // This is mainly to test that $LESSCLOSE gets passed the correct file paths\n    // In these cases, the original file and a dash\n    bat()\n        // This test will not work properly if $LESSOPEN does not output anything\n        .env(\"LESSOPEN\", \"|cat %s\")\n        .env(\"LESSCLOSE\", \"echo lessclose: %s %s\")\n        .arg(\"--lessopen\")\n        .arg(\"test.txt\")\n        .assert()\n        .success()\n        .stdout(\"hello world\\nlessclose: test.txt -\\n\");\n\n    bat()\n        .env(\"LESSOPEN\", \"||cat %s\")\n        .env(\"LESSCLOSE\", \"echo lessclose: %s %s\")\n        .arg(\"--lessopen\")\n        .arg(\"empty.txt\")\n        .assert()\n        .success()\n        .stdout(\"lessclose: empty.txt -\\n\");\n}\n\n#[cfg(unix)] // Expected output assumed that tests are run on a Unix-like system\n#[cfg(feature = \"lessopen\")]\n#[test]\nfn lessopen_and_lessclose_stdin_temp() {\n    // This is mainly to test that $LESSCLOSE gets passed the correct file paths\n    // In this case, a dash and the temporary file returned by $LESSOPEN\n    bat()\n        // Need a %s for $LESSOPEN to be valid\n        .env(\"LESSOPEN\", \"-echo empty.txt && echo %s >/dev/null\")\n        .env(\"LESSCLOSE\", \"echo lessclose: %s %s\")\n        .arg(\"--lessopen\")\n        .write_stdin(\"test.txt\")\n        .assert()\n        .success()\n        .stdout(\"lessclose: - empty.txt\\n\");\n}\n\n#[cfg(unix)] // Expected output assumed that tests are run on a Unix-like system\n#[cfg(feature = \"lessopen\")]\n#[test]\nfn lessopen_and_lessclose_stdin_piped() {\n    // This is mainly to test that $LESSCLOSE gets passed the correct file paths\n    // In these cases, two dashes\n    bat()\n        // This test will not work properly if $LESSOPEN does not output anything\n        // Need a %s for $LESSOPEN to be valid\n        .env(\"LESSOPEN\", \"|-cat test.txt && echo %s >/dev/null\")\n        .env(\"LESSCLOSE\", \"echo lessclose: %s %s\")\n        .arg(\"--lessopen\")\n        .write_stdin(\"empty.txt\")\n        .assert()\n        .success()\n        .stdout(\"hello world\\nlessclose: - -\\n\");\n\n    bat()\n        // Need a %s for $LESSOPEN to be valid\n        .env(\"LESSOPEN\", \"||-cat empty.txt && echo %s >/dev/null\")\n        .env(\"LESSCLOSE\", \"echo lessclose: %s %s\")\n        .arg(\"--lessopen\")\n        .write_stdin(\"empty.txt\")\n        .assert()\n        .success()\n        .stdout(\"lessclose: - -\\n\");\n}\n\n#[cfg(unix)] // Expected output assumed that tests are run on a Unix-like system\n#[cfg(feature = \"lessopen\")]\n#[test]\nfn lessopen_handling_empty_output_file() {\n    bat()\n        // Need a %s for $LESSOPEN to be valid\n        .env(\"LESSOPEN\", \"|cat empty.txt && echo %s >/dev/null\")\n        .arg(\"--lessopen\")\n        .arg(\"test.txt\")\n        .assert()\n        .success()\n        .stdout(\"hello world\\n\");\n\n    bat()\n        // Need a %s for $LESSOPEN to be valid\n        .env(\"LESSOPEN\", \"|cat nonexistent.txt && echo %s >/dev/null\")\n        .arg(\"--lessopen\")\n        .arg(\"test.txt\")\n        .assert()\n        .success()\n        .stdout(\"hello world\\n\");\n\n    bat()\n        // Need a %s for $LESSOPEN to be valid\n        .env(\"LESSOPEN\", \"||cat empty.txt && echo %s >/dev/null\")\n        .arg(\"--lessopen\")\n        .arg(\"test.txt\")\n        .assert()\n        .success()\n        .stdout(\"\");\n\n    bat()\n        // Need a %s for $LESSOPEN to be valid\n        .env(\"LESSOPEN\", \"||cat nonexistent.txt && echo %s >/dev/null\")\n        .arg(\"--lessopen\")\n        .arg(\"test.txt\")\n        .assert()\n        .success()\n        .stdout(\"hello world\\n\");\n}\n\n#[cfg(unix)] // Expected output assumed that tests are run on a Unix-like system\n#[cfg(feature = \"lessopen\")]\n#[test]\n// FIXME\nfn lessopen_handling_empty_output_stdin() {\n    bat()\n        // Need a %s for $LESSOPEN to be valid\n        .env(\"LESSOPEN\", \"|-cat empty.txt && echo %s >/dev/null\")\n        .arg(\"--lessopen\")\n        .write_stdin(\"hello world\\n\")\n        .assert()\n        .success()\n        .stdout(\"hello world\\n\");\n\n    bat()\n        // Need a %s for $LESSOPEN to be valid\n        .env(\"LESSOPEN\", \"|-cat nonexistent.txt && echo %s >/dev/null\")\n        .arg(\"--lessopen\")\n        .write_stdin(\"hello world\\n\")\n        .assert()\n        .success()\n        .stdout(\"hello world\\n\");\n\n    bat()\n        // Need a %s for $LESSOPEN to be valid\n        .env(\"LESSOPEN\", \"||-cat empty.txt && echo %s >/dev/null\")\n        .arg(\"--lessopen\")\n        .write_stdin(\"hello world\\n\")\n        .assert()\n        .success()\n        .stdout(\"\");\n\n    bat()\n        // Need a %s for $LESSOPEN to be valid\n        .env(\"LESSOPEN\", \"||-cat nonexistent.txt && echo %s >/dev/null\")\n        .arg(\"--lessopen\")\n        .write_stdin(\"hello world\\n\")\n        .assert()\n        .success()\n        .stdout(\"hello world\\n\");\n}\n\n#[cfg(unix)] // Expected output assumed that tests are run on a Unix-like system\n#[cfg(feature = \"lessopen\")]\n#[test]\nfn lessopen_uses_shell() {\n    bat()\n        .env(\"LESSOPEN\", \"|cat < %s\")\n        .arg(\"--lessopen\")\n        .arg(\"test.txt\")\n        .assert()\n        .success()\n        .stdout(\"hello world\\n\");\n}\n\n#[cfg(unix)]\n#[cfg(feature = \"lessopen\")]\n#[test]\nfn do_not_use_lessopen_by_default() {\n    bat()\n        .env(\"LESSOPEN\", \"|echo File is %s\")\n        .arg(\"test.txt\")\n        .assert()\n        .success()\n        .stdout(\"hello world\\n\");\n}\n\n#[cfg(unix)]\n#[cfg(feature = \"lessopen\")]\n#[test]\nfn do_not_use_lessopen_if_overridden() {\n    bat()\n        .env(\"LESSOPEN\", \"|echo File is %s\")\n        .arg(\"--lessopen\")\n        .arg(\"--no-lessopen\")\n        .arg(\"test.txt\")\n        .assert()\n        .success()\n        .stdout(\"hello world\\n\");\n}\n\n#[cfg(unix)]\n#[cfg(feature = \"lessopen\")]\n#[test]\nfn lessopen_validity() {\n    bat()\n        .env(\"LESSOPEN\", \"|echo File is test.txt\")\n        .arg(\"--lessopen\")\n        .arg(\"test.txt\")\n        .assert()\n        .success()\n        .stdout(\"hello world\\n\")\n        .stderr(\n            \"\\u{1b}[33m[bat warning]\\u{1b}[0m: LESSOPEN ignored: must contain exactly one %s\\n\",\n        );\n\n    bat()\n        .env(\"LESSOPEN\", \"|echo File is %s\")\n        .arg(\"--lessopen\")\n        .arg(\"test.txt\")\n        .assert()\n        .success()\n        .stdout(\"File is test.txt\\n\")\n        .stderr(\"\");\n\n    bat()\n        .env(\"LESSOPEN\", \"|echo %s is %s\")\n        .arg(\"--lessopen\")\n        .arg(\"test.txt\")\n        .assert()\n        .success()\n        .stdout(\"hello world\\n\")\n        .stderr(\n            \"\\u{1b}[33m[bat warning]\\u{1b}[0m: LESSOPEN ignored: must contain exactly one %s\\n\",\n        );\n}\n\n// Regression test for issue #2520 and PR #2650\n// Syntax highlighting should be the same regardless of\n// --map-syntax' case or file extension's case\n#[test]\nfn highlighting_independant_from_map_syntax_case() {\n    let expected = bat()\n        .arg(\"-f\")\n        .arg(\"--map-syntax=*.config:JSON\")\n        .arg(\"map-syntax_case.Config\")\n        .assert()\n        .get_output()\n        .stdout\n        .clone();\n\n    bat()\n        .arg(\"-f\")\n        .arg(\"--map-syntax=*.Config:JSON\")\n        .arg(\"map-syntax_case.Config\")\n        .assert()\n        .success()\n        .stdout(expected)\n        .stderr(\"\");\n}\n\n#[test]\nfn map_syntax_target_syntax_case_insensitive() {\n    let expected = bat()\n        .arg(\"-f\")\n        .arg(\"--map-syntax=*.config:json\")\n        .arg(\"map-syntax_case.Config\")\n        .assert()\n        .get_output()\n        .stdout\n        .clone();\n\n    bat()\n        .arg(\"-f\")\n        .arg(\"--map-syntax=*.config:json\")\n        .arg(\"map-syntax_case.Config\")\n        .assert()\n        .success()\n        .stdout(expected)\n        .stderr(\"\");\n}\n\n#[test]\nfn strip_ansi_always_strips_ansi() {\n    bat()\n        .arg(\"--style=plain\")\n        .arg(\"--decorations=always\")\n        .arg(\"--color=never\")\n        .arg(\"--strip-ansi=always\")\n        .write_stdin(\"\\x1B[33mYellow\\x1B[m\")\n        .assert()\n        .success()\n        .stdout(\"Yellow\");\n}\n\n#[test]\nfn strip_ansi_never_does_not_strip_ansi() {\n    let output = String::from_utf8(\n        bat()\n            .arg(\"--style=plain\")\n            .arg(\"--decorations=always\")\n            .arg(\"--color=never\")\n            .arg(\"--strip-ansi=never\")\n            .write_stdin(\"\\x1B[33mYellow\\x1B[m\")\n            .assert()\n            .success()\n            .get_output()\n            .stdout\n            .clone(),\n    )\n    .expect(\"valid utf8\");\n\n    assert!(output.contains(\"\\x1B[33mYellow\"))\n}\n\n#[test]\nfn strip_ansi_does_not_affect_simple_printer() {\n    let output = String::from_utf8(\n        bat()\n            .arg(\"--style=plain\")\n            .arg(\"--decorations=never\")\n            .arg(\"--color=never\")\n            .arg(\"--strip-ansi=always\")\n            .write_stdin(\"\\x1B[33mYellow\\x1B[m\")\n            .assert()\n            .success()\n            .get_output()\n            .stdout\n            .clone(),\n    )\n    .expect(\"valid utf8\");\n\n    assert!(output.contains(\"\\x1B[33mYellow\"))\n}\n\n#[test]\nfn strip_ansi_does_not_strip_when_show_nonprintable() {\n    let output = String::from_utf8(\n        bat()\n            .arg(\"--style=plain\")\n            .arg(\"--decorations=never\")\n            .arg(\"--color=always\")\n            .arg(\"--strip-ansi=always\")\n            .arg(\"--show-nonprintable\")\n            .write_stdin(\"\\x1B[33mY\")\n            .assert()\n            .success()\n            .get_output()\n            .stdout\n            .clone(),\n    )\n    .expect(\"valid utf8\");\n\n    assert!(output.contains(\"␛\"))\n}\n\n#[test]\nfn strip_ansi_auto_strips_ansi_when_detected_syntax_by_filename() {\n    bat()\n        .arg(\"--style=plain\")\n        .arg(\"--decorations=always\")\n        .arg(\"--color=never\")\n        .arg(\"--strip-ansi=auto\")\n        .arg(\"--file-name=test.rs\")\n        .write_stdin(\"fn \\x1B[33mYellow\\x1B[m() -> () {}\")\n        .assert()\n        .success()\n        .stdout(\"fn Yellow() -> () {}\");\n}\n\n#[test]\nfn strip_ansi_auto_strips_ansi_when_provided_syntax_by_option() {\n    bat()\n        .arg(\"--style=plain\")\n        .arg(\"--decorations=always\")\n        .arg(\"--color=never\")\n        .arg(\"--strip-ansi=auto\")\n        .arg(\"--language=rust\")\n        .write_stdin(\"fn \\x1B[33mYellow\\x1B[m() -> () {}\")\n        .assert()\n        .success()\n        .stdout(\"fn Yellow() -> () {}\");\n}\n\n#[test]\nfn strip_ansi_auto_does_not_strip_when_plain_text_by_filename() {\n    let output = String::from_utf8(\n        bat()\n            .arg(\"--style=plain\")\n            .arg(\"--decorations=always\")\n            .arg(\"--color=never\")\n            .arg(\"--strip-ansi=auto\")\n            .arg(\"--file-name=ansi.txt\")\n            .write_stdin(\"\\x1B[33mYellow\\x1B[m\")\n            .assert()\n            .success()\n            .get_output()\n            .stdout\n            .clone(),\n    )\n    .expect(\"valid utf8\");\n\n    assert!(output.contains(\"\\x1B[33mYellow\"))\n}\n\n#[test]\nfn strip_ansi_auto_does_not_strip_ansi_when_plain_text_by_option() {\n    let output = String::from_utf8(\n        bat()\n            .arg(\"--style=plain\")\n            .arg(\"--decorations=always\")\n            .arg(\"--color=never\")\n            .arg(\"--strip-ansi=auto\")\n            .arg(\"--language=txt\")\n            .write_stdin(\"\\x1B[33mYellow\\x1B[m\")\n            .assert()\n            .success()\n            .get_output()\n            .stdout\n            .clone(),\n    )\n    .expect(\"valid utf8\");\n\n    assert!(output.contains(\"\\x1B[33mYellow\"))\n}\n\n// Tests that style components can be removed with `-component`.\n#[test]\nfn style_components_can_be_removed() {\n    bat()\n        .arg({\n            #[cfg(not(feature = \"git\"))]\n            {\n                \"--style=full,-grid\"\n            }\n            #[cfg(feature = \"git\")]\n            {\n                \"--style=full,-grid,-changes\"\n            }\n        })\n        .arg(\"--decorations=always\")\n        .arg(\"--color=never\")\n        .write_stdin(\"test\")\n        .assert()\n        .success()\n        .stdout(\"     STDIN\\n     Size: -\\n   1 test\\n\")\n        .stderr(\"\");\n}\n\n// Tests that style components are chosen based on the rightmost `--style` argument.\n#[test]\nfn style_components_can_be_overidden() {\n    bat()\n        .arg(\"--style=full\")\n        .arg(\"--style=header,numbers\")\n        .arg(\"--decorations=always\")\n        .arg(\"--color=never\")\n        .write_stdin(\"test\")\n        .assert()\n        .success()\n        .stdout(\"     STDIN\\n   1 test\\n\")\n        .stderr(\"\");\n}\n\n// Tests that style components can be merged across multiple `--style` arguments.\n#[test]\nfn style_components_will_merge() {\n    bat()\n        .arg(\"--style=header,grid\")\n        .arg(\"--style=-grid,+numbers\")\n        .arg(\"--decorations=always\")\n        .arg(\"--color=never\")\n        .write_stdin(\"test\")\n        .assert()\n        .success()\n        .stdout(\"     STDIN\\n   1 test\\n\")\n        .stderr(\"\");\n}\n\n// Tests that style components can be merged with the `BAT_STYLE` environment variable.\n#[test]\nfn style_components_will_merge_with_env_var() {\n    bat()\n        .env(\"BAT_STYLE\", \"header,grid\")\n        .arg(\"--style=-grid,+numbers\")\n        .arg(\"--decorations=always\")\n        .arg(\"--color=never\")\n        .write_stdin(\"test\")\n        .assert()\n        .success()\n        .stdout(\"     STDIN\\n   1 test\\n\")\n        .stderr(\"\");\n}\n\n// Test for https://github.com/sharkdp/bat/issues/3526\n#[test]\nfn plain_with_sized_terminal_width() {\n    bat()\n        .arg(\"--plain\")\n        .arg(\"--terminal-width=6\")\n        .arg(\"--decorations=always\")\n        .arg(\"test.txt\")\n        .assert()\n        .success()\n        .stdout(\"hello \\nworld\\n\")\n        .stderr(\"\");\n}\n\n#[test]\nfn quiet_empty_suppresses_output_on_empty_stdin() {\n    bat()\n        .arg(\"--quiet-empty\")\n        .write_stdin(\"\")\n        .assert()\n        .success()\n        .stdout(\"\");\n}\n\n#[test]\nfn quiet_empty_does_not_affect_non_empty_input() {\n    bat()\n        .arg(\"--quiet-empty\")\n        .write_stdin(\"hello\\n\")\n        .assert()\n        .success()\n        .stdout(\"hello\\n\");\n}\n\n#[test]\nfn quiet_empty_suppresses_output_on_empty_file() {\n    bat()\n        .arg(\"--quiet-empty\")\n        .arg(\"empty.txt\")\n        .assert()\n        .success()\n        .stdout(\"\");\n}\n\n#[test]\nfn cache_help_shows_help_message() {\n    // Test that `bat cache --help` works (fixes #3560)\n    // Run in cache_source directory which doesn't have a file named \"cache\"\n    bat_with_config()\n        .current_dir(Path::new(EXAMPLES_DIR).join(\"cache_source\"))\n        .arg(\"cache\")\n        .arg(\"--help\")\n        .assert()\n        .success()\n        .stdout(predicate::str::contains(\n            \"Modify the syntax-definition and theme cache\",\n        ))\n        .stdout(predicate::str::contains(\"--build\"))\n        .stdout(predicate::str::contains(\"--clear\"));\n}\n\n#[test]\nfn unbuffered_flag_is_accepted() {\n    bat()\n        .arg(\"--unbuffered\")\n        .arg(\"test.txt\")\n        .assert()\n        .success()\n        .stdout(\"hello world\\n\");\n}\n\n#[test]\nfn unbuffered_mode_disables_line_numbers() {\n    // When --unbuffered is used, line numbers should be auto-disabled even if requested\n    bat()\n        .arg(\"--unbuffered\")\n        .arg(\"--style=numbers\")\n        .arg(\"--decorations=always\")\n        .arg(\"--color=never\")\n        .arg(\"test.txt\")\n        .assert()\n        .success()\n        .stdout(predicate::str::starts_with(\"   1\").not());\n}\n\n#[test]\nfn unbuffered_mode_plain_output() {\n    bat()\n        .arg(\"--unbuffered\")\n        .arg(\"--color=never\")\n        .arg(\"--decorations=never\")\n        .arg(\"test.txt\")\n        .assert()\n        .success()\n        .stdout(\"hello world\\n\");\n}\n\n#[test]\nfn word_wrap_breaks_at_word_boundaries() {\n    bat()\n        .arg(\"word-wrap.txt\")\n        .arg(\"--wrap=word\")\n        .arg(\"--terminal-width=40\")\n        .arg(\"--style=plain\")\n        .arg(\"--decorations=always\")\n        .arg(\"--color=never\")\n        .assert()\n        .success()\n        .stdout(\n            \"\\\nThe quick brown fox jumps over the lazy\ndog and then runs away\nsuperlongwordthatdefinitelyexceedstheter\nminalwidthandshouldfallbacktocharacterwr\napping\nshort words here\n\",\n        );\n}\n\n#[test]\nfn word_wrap_with_line_numbers() {\n    bat()\n        .arg(\"word-wrap.txt\")\n        .arg(\"--wrap=word\")\n        .arg(\"--terminal-width=40\")\n        .arg(\"--style=numbers\")\n        .arg(\"--decorations=always\")\n        .arg(\"--color=never\")\n        .assert()\n        .success()\n        .stdout(\n            \"   1 The quick brown fox jumps over the\n     lazy dog and then runs away\n   2 superlongwordthatdefinitelyexceedst\n     heterminalwidthandshouldfallbacktoc\n     haracterwrapping\n   3 short words here\n\",\n        );\n}\n\n#[test]\nfn word_wrap_short_line_no_wrap() {\n    bat()\n        .arg(\"--wrap=word\")\n        .arg(\"--terminal-width=80\")\n        .arg(\"--style=plain\")\n        .arg(\"--decorations=always\")\n        .arg(\"--color=never\")\n        .arg(\"single-line.txt\")\n        .assert()\n        .success()\n        .stdout(\"Single Line\\n\");\n}\n"
  },
  {
    "path": "tests/mocked-pagers/echo.bat",
    "content": "ECHO %*\n"
  },
  {
    "path": "tests/mocked-pagers/more",
    "content": "#!/usr/bin/env bash\necho I am more\n"
  },
  {
    "path": "tests/mocked-pagers/more.bat",
    "content": "ECHO I am more\n"
  },
  {
    "path": "tests/mocked-pagers/most",
    "content": "#!/usr/bin/env bash\necho I am most\n"
  },
  {
    "path": "tests/mocked-pagers/most.bat",
    "content": "ECHO I am most\n"
  },
  {
    "path": "tests/no_duplicate_extensions.rs",
    "content": "use std::collections::HashSet;\n\nuse bat::assets::HighlightingAssets;\n\n#[test]\nfn no_duplicate_extensions() {\n    const KNOWN_EXCEPTIONS: &[&str] = &[\n        // The '.h' extension currently appears in multiple syntaxes: C, C++, Objective C,\n        // Objective C++\n        \"h\",\n        // In addition to the standard JavaScript syntax in 'Packages', we also ship the\n        // 'Javascript (Babel)' syntax.\n        \"js\",\n        // The \"Ruby Haml\" syntax also comes with a '.sass' extension. However, we make sure\n        // that 'sass' is mapped to the 'Sass' syntax.\n        \"sass\",\n        // The '.fs' extension appears in F# and GLSL.\n        // We default to F#.\n        \"fs\",\n        // SystemVerilog and Verilog both use .v files.\n        // We default to Verilog.\n        \"v\",\n    ];\n\n    let assets = HighlightingAssets::from_binary();\n\n    let mut extensions = HashSet::new();\n\n    for syntax in assets.get_syntaxes().expect(\"this is a #[test]\") {\n        for extension in &syntax.file_extensions {\n            assert!(\n                KNOWN_EXCEPTIONS.contains(&extension.as_str()) || extensions.insert(extension),\n                \"File extension / pattern \\\"{extension}\\\" appears twice in the syntax set\"\n            );\n        }\n    }\n}\n"
  },
  {
    "path": "tests/scripts/find-slow-to-highlight-files.py",
    "content": "#!/usr/bin/env python3\n#\n# This script goes through all languages that are supported by 'bat'. For each\n# language, it loops over the corresponding file extensions and searches a\n# given folder for matching files. It calls 'bat' for each of these files and\n# measures the highlighting speed (number of characters per second). The script\n# reports files which lead to slow highlighting speeds or errors during the\n# execution of 'bat'.\n#\n# Requirements (external programs):\n#   - bat (in the $PATH)\n#   - fd (https://github.com/sharkdp/fd)\n#   - wc\n\nimport sys\nimport time\nimport os\nimport subprocess as sp\n\n\n# Threshold speed, characters per second\nTHRESHOLD_SPEED = 20000\n\n# Maximum time we allow `bat` to run\nBAT_TIMEOUT_SEC = 10\n\n# Maximum number of files to measure\nMAX_NUM_FILES = 100\n\n# Root folder for the search\nSEARCH_ROOT = os.getenv(\"HOME\")\n\n\ndef find_slow_files(startup_time, glob_pattern, language=None):\n    out = sp.check_output(\n        [\n            \"fd\",\n            \"--hidden\",\n            \"--no-ignore\",\n            \"--type=file\",\n            \"--max-results\",\n            str(MAX_NUM_FILES),\n            \"--glob\",\n            glob_pattern,\n            SEARCH_ROOT,\n        ]\n    )\n\n    paths = out.split(b\"\\n\")[:-1]\n    language_text = f\"Language {language}, \" if language else \"\"\n    print(f\"{language_text}glob pattern: {glob_pattern} ({len(paths)} matches)\")\n\n    for path in paths:\n        num_chars = int(sp.check_output([\"wc\", \"-c\", path]).split(b\" \")[0].decode())\n\n        if num_chars < 500:\n            # It is hard to measure the exact speed for short files\n            continue\n\n        try:\n            start = time.time()\n            sp.check_output([\"bat\", \"--color=always\", path], timeout=BAT_TIMEOUT_SEC)\n            duration = time.time() - start - startup_time\n\n            if duration <= 0:\n                continue\n\n            highlighting_speed = num_chars / duration\n\n            if highlighting_speed < THRESHOLD_SPEED:\n                print(f\"  {highlighting_speed:10.0f} chars/s:  {path.decode()}\")\n\n        except sp.CalledProcessError:\n            print(f\"  Error while highlighting file '{path.decode()}'.\")\n\n        except sp.TimeoutExpired:\n            if num_chars < THRESHOLD_SPEED * BAT_TIMEOUT_SEC:\n                print(f\"  Error: bat timed out on file '{path.decode()}'.\")\n            else:\n                print(\n                    f\"  Warning: bat timed out on file '{path.decode()} (but the file is large).\"\n                )\n\n\ndef measure_bat_startup_speed():\n    min_duration = None\n    for _ in range(20):\n        start = time.time()\n        p = sp.Popen(\n            [\"bat\", \"--color=always\", \"--language=py\"], stdin=sp.PIPE, stdout=sp.PIPE\n        )\n        p.communicate(input=b\"test\")\n        duration = time.time() - start\n\n        if not min_duration or duration < min_duration:\n            min_duration = duration\n\n    return min_duration\n\n\ndef traverse_all_languages(startup_time):\n    output = sp.check_output([\"bat\", \"--list-languages\"]).decode()\n\n    for line in output.strip().split(\"\\n\"):\n        language, extensions = line.split(\":\")\n        for ext in extensions.split(\",\"):\n            find_slow_files(startup_time, ext, language)\n            if not ext.startswith(\".\"):\n                find_slow_files(startup_time, f\"*.{ext}\", language)\n\n\ndef main():\n    print(\"Measuring 'bat' startup speed ... \", flush=True, end=\"\")\n    startup_time = measure_bat_startup_speed()\n    print(f\"{startup_time * 1000:.1f} ms\")\n\n    if len(sys.argv) == 1:\n        traverse_all_languages(startup_time)\n    else:\n        pattern = sys.argv[1]\n        find_slow_files(startup_time, pattern)\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "tests/scripts/license-checks.sh",
    "content": "#!/usr/bin/env bash\nset -o errexit -o nounset -o pipefail\n\n# Make sure that we don't accidentally include GPL licenced files\ngpl_term=\"General Public License\"\ngpl_excludes=(\n    # Snippet expands to GPL, but is not under GPL\n    \":(exclude)assets/syntaxes/01_Packages/Matlab/Snippets/Octave-function.sublime-snippet\"\n\n    # 'gpl_term' matches itself :D\n    \":(exclude)tests/scripts/license-checks.sh\"\n\n    # Contains a reference to GPL, but is not under GPL\n    \":(exclude)tests/syntax-tests/source/Java Server Page (JSP)/LICENSE.md\"\n)\ngpl_occurances=$(git grep --recurse-submodules \"${gpl_term}\" -- \"${gpl_excludes[@]}\" || true)\n\nif [ -z \"${gpl_occurances}\" ]; then\n    echo \"PASS: No files under GPL were found\"\nelse\n    echo \"FAIL: GPL:ed code is not compatible with bat, but occurrences of '${gpl_term}' were found:\"\n    echo \"${gpl_occurances}\"\n    exit 1\nfi\n"
  },
  {
    "path": "tests/snapshot_tests.rs",
    "content": "#[cfg(feature = \"git\")]\nmod tester;\n\nmacro_rules! snapshot_tests {\n    ($($test_name: ident: $style: expr,)*) => {\n        $(\n            #[test]\n            #[cfg(feature = \"git\")]\n            fn $test_name() {\n                let bat_tester = tester::BatTester::default();\n                bat_tester.test_snapshot(stringify!($test_name), $style);\n            }\n        )*\n    };\n}\n\nsnapshot_tests! {\n    changes:                     \"changes\",\n    grid:                        \"grid\",\n    header:                      \"header\",\n    numbers:                     \"numbers\",\n    rule:                        \"rule\",\n    changes_grid:                \"changes,grid\",\n    changes_header:              \"changes,header\",\n    changes_numbers:             \"changes,numbers\",\n    changes_rule:                \"changes,rule\",\n    grid_header:                 \"grid,header\",\n    grid_numbers:                \"grid,numbers\",\n    grid_rule:                   \"grid,rule\",\n    header_numbers:              \"header,numbers\",\n    header_rule:                 \"header,rule\",\n    changes_grid_header:         \"changes,grid,header\",\n    changes_grid_numbers:        \"changes,grid,numbers\",\n    changes_grid_rule:           \"changes,grid,rule\",\n    changes_header_numbers:      \"changes,header,numbers\",\n    changes_header_rule:         \"changes,header,rule\",\n    grid_header_numbers:         \"grid,header,numbers\",\n    grid_header_rule:            \"grid,header,rule\",\n    header_numbers_rule:         \"header,numbers,rule\",\n    changes_grid_header_numbers: \"changes,grid,header,numbers\",\n    changes_grid_header_rule:    \"changes,grid,header,rule\",\n    changes_grid_header_numbers_rule: \"changes,grid,header,numbers,rule\",\n    full:                        \"full\",\n    plain:                       \"plain\",\n}\n"
  },
  {
    "path": "tests/snapshots/generate_snapshots.py",
    "content": "#!/usr/bin/env python3\n\nimport itertools\nimport subprocess\nimport pathlib\nimport shutil\n\n\ndef generate_snapshots():\n    single_styles = [\"changes\", \"grid\", \"header\", \"numbers\", \"rule\"]\n    collective_styles = [\"full\", \"plain\"]\n\n    for num in range(len(single_styles)):\n        for grouped in itertools.combinations(single_styles, num + 1):\n            generate_style_snapshot(\",\".join(grouped))\n\n    for style in collective_styles:\n        generate_style_snapshot(style)\n\n\ndef generate_style_snapshot(style):\n    generate_snapshot(style.replace(\",\", \"_\"), \"--style={}\".format(style))\n\n\ndef generate_snapshot(name, arguments):\n    command = \"cargo run -- --paging=never --color=never --decorations=always \"\n    command += \"{args} sample.rs > output/{name}.snapshot.txt\".format(\n        name=name,\n        args=arguments\n    )\n    print(\"generating snapshot for {}\".format(name))\n    subprocess.call(command, shell=True)\n\n\ndef build_bat():\n    print(\"building bat\")\n    subprocess.call(\"cargo build\", cwd=\"../..\", shell=True)\n\n\ndef prepare_output_dir():\n    shutil.rmtree(\"output\", ignore_errors=True)\n    pathlib.Path(\"output\").mkdir()\n\n\ndef modify_sample_file():\n    print(\"modifying sample.rs to show changes\")\n    shutil.copyfile(\"sample.modified.rs\", \"sample.rs\")\n\n\ndef undo_sample_file_modification():\n    print(\"undoing sample.rs modifications\")\n    subprocess.call(\"git checkout -- sample.rs\", shell=True)\n\n\nbuild_bat()\nprepare_output_dir()\nmodify_sample_file()\ngenerate_snapshots()\nundo_sample_file_modification()\n"
  },
  {
    "path": "tests/snapshots/output/changes.snapshot.txt",
    "content": "+ /// A rectangle. First line is changed to prevent a regression of #1869\n  struct Rectangle {\n      width: u32,\n      height: u32,\n  }\n  \n_ fn main() {\n      let rect1 = Rectangle { width: 30, height: 50 };\n  \n      println!(\n~         \"The perimeter of the rectangle is {} pixels.\",\n~         perimeter(&rect1)\n      );\n+     println!(r#\"This line contains invalid utf8:  \"�����\"#;\n  }\n  \n  fn area(rectangle: &Rectangle) -> u32 {\n      rectangle.width * rectangle.height\n  }\n+ \n+ fn perimeter(rectangle: &Rectangle) -> u32 {\n+     (rectangle.width + rectangle.height) * 2\n+ }\n"
  },
  {
    "path": "tests/snapshots/output/changes_grid.snapshot.txt",
    "content": "──┬─────────────────────────────────────────────────────────────────────────────\n+ │ /// A rectangle. First line is changed to prevent a regression of #1869\n  │ struct Rectangle {\n  │     width: u32,\n  │     height: u32,\n  │ }\n  │ \n_ │ fn main() {\n  │     let rect1 = Rectangle { width: 30, height: 50 };\n  │ \n  │     println!(\n~ │         \"The perimeter of the rectangle is {} pixels.\",\n~ │         perimeter(&rect1)\n  │     );\n+ │     println!(r#\"This line contains invalid utf8:  \"�����\"#;\n  │ }\n  │ \n  │ fn area(rectangle: &Rectangle) -> u32 {\n  │     rectangle.width * rectangle.height\n  │ }\n+ │ \n+ │ fn perimeter(rectangle: &Rectangle) -> u32 {\n+ │     (rectangle.width + rectangle.height) * 2\n+ │ }\n──┴─────────────────────────────────────────────────────────────────────────────\n"
  },
  {
    "path": "tests/snapshots/output/changes_grid_header.snapshot.txt",
    "content": "──┬─────────────────────────────────────────────────────────────────────────────\n  │ File: sample.rs\n──┼─────────────────────────────────────────────────────────────────────────────\n+ │ /// A rectangle. First line is changed to prevent a regression of #1869\n  │ struct Rectangle {\n  │     width: u32,\n  │     height: u32,\n  │ }\n  │ \n_ │ fn main() {\n  │     let rect1 = Rectangle { width: 30, height: 50 };\n  │ \n  │     println!(\n~ │         \"The perimeter of the rectangle is {} pixels.\",\n~ │         perimeter(&rect1)\n  │     );\n+ │     println!(r#\"This line contains invalid utf8:  \"�����\"#;\n  │ }\n  │ \n  │ fn area(rectangle: &Rectangle) -> u32 {\n  │     rectangle.width * rectangle.height\n  │ }\n+ │ \n+ │ fn perimeter(rectangle: &Rectangle) -> u32 {\n+ │     (rectangle.width + rectangle.height) * 2\n+ │ }\n──┴─────────────────────────────────────────────────────────────────────────────\n"
  },
  {
    "path": "tests/snapshots/output/changes_grid_header_numbers.snapshot.txt",
    "content": "───────┬────────────────────────────────────────────────────────────────────────\n       │ File: sample.rs\n───────┼────────────────────────────────────────────────────────────────────────\n   1 + │ /// A rectangle. First line is changed to prevent a regression of #1869\n   2   │ struct Rectangle {\n   3   │     width: u32,\n   4   │     height: u32,\n   5   │ }\n   6   │ \n   7 _ │ fn main() {\n   8   │     let rect1 = Rectangle { width: 30, height: 50 };\n   9   │ \n  10   │     println!(\n  11 ~ │         \"The perimeter of the rectangle is {} pixels.\",\n  12 ~ │         perimeter(&rect1)\n  13   │     );\n  14 + │     println!(r#\"This line contains invalid utf8:  \"�����\"#;\n  15   │ }\n  16   │ \n  17   │ fn area(rectangle: &Rectangle) -> u32 {\n  18   │     rectangle.width * rectangle.height\n  19   │ }\n  20 + │ \n  21 + │ fn perimeter(rectangle: &Rectangle) -> u32 {\n  22 + │     (rectangle.width + rectangle.height) * 2\n  23 + │ }\n───────┴────────────────────────────────────────────────────────────────────────\n"
  },
  {
    "path": "tests/snapshots/output/changes_grid_header_numbers_rule.snapshot.txt",
    "content": "───────┬────────────────────────────────────────────────────────────────────────\n       │ File: sample.rs\n───────┼────────────────────────────────────────────────────────────────────────\n   1 + │ /// A rectangle. First line is changed to prevent a regression of #1869\n   2   │ struct Rectangle {\n   3   │     width: u32,\n   4   │     height: u32,\n   5   │ }\n   6   │ \n   7 _ │ fn main() {\n   8   │     let rect1 = Rectangle { width: 30, height: 50 };\n   9   │ \n  10   │     println!(\n  11 ~ │         \"The perimeter of the rectangle is {} pixels.\",\n  12 ~ │         perimeter(&rect1)\n  13   │     );\n  14 + │     println!(r#\"This line contains invalid utf8:  \"�����\"#;\n  15   │ }\n  16   │ \n  17   │ fn area(rectangle: &Rectangle) -> u32 {\n  18   │     rectangle.width * rectangle.height\n  19   │ }\n  20 + │ \n  21 + │ fn perimeter(rectangle: &Rectangle) -> u32 {\n  22 + │     (rectangle.width + rectangle.height) * 2\n  23 + │ }\n───────┴────────────────────────────────────────────────────────────────────────\n"
  },
  {
    "path": "tests/snapshots/output/changes_grid_header_rule.snapshot.txt",
    "content": "──┬─────────────────────────────────────────────────────────────────────────────\n  │ File: sample.rs\n──┼─────────────────────────────────────────────────────────────────────────────\n+ │ /// A rectangle. First line is changed to prevent a regression of #1869\n  │ struct Rectangle {\n  │     width: u32,\n  │     height: u32,\n  │ }\n  │ \n_ │ fn main() {\n  │     let rect1 = Rectangle { width: 30, height: 50 };\n  │ \n  │     println!(\n~ │         \"The perimeter of the rectangle is {} pixels.\",\n~ │         perimeter(&rect1)\n  │     );\n+ │     println!(r#\"This line contains invalid utf8:  \"�����\"#;\n  │ }\n  │ \n  │ fn area(rectangle: &Rectangle) -> u32 {\n  │     rectangle.width * rectangle.height\n  │ }\n+ │ \n+ │ fn perimeter(rectangle: &Rectangle) -> u32 {\n+ │     (rectangle.width + rectangle.height) * 2\n+ │ }\n──┴─────────────────────────────────────────────────────────────────────────────\n"
  },
  {
    "path": "tests/snapshots/output/changes_grid_numbers.snapshot.txt",
    "content": "───────┬────────────────────────────────────────────────────────────────────────\n   1 + │ /// A rectangle. First line is changed to prevent a regression of #1869\n   2   │ struct Rectangle {\n   3   │     width: u32,\n   4   │     height: u32,\n   5   │ }\n   6   │ \n   7 _ │ fn main() {\n   8   │     let rect1 = Rectangle { width: 30, height: 50 };\n   9   │ \n  10   │     println!(\n  11 ~ │         \"The perimeter of the rectangle is {} pixels.\",\n  12 ~ │         perimeter(&rect1)\n  13   │     );\n  14 + │     println!(r#\"This line contains invalid utf8:  \"�����\"#;\n  15   │ }\n  16   │ \n  17   │ fn area(rectangle: &Rectangle) -> u32 {\n  18   │     rectangle.width * rectangle.height\n  19   │ }\n  20 + │ \n  21 + │ fn perimeter(rectangle: &Rectangle) -> u32 {\n  22 + │     (rectangle.width + rectangle.height) * 2\n  23 + │ }\n───────┴────────────────────────────────────────────────────────────────────────\n"
  },
  {
    "path": "tests/snapshots/output/changes_grid_numbers_rule.snapshot.txt",
    "content": "───────┬────────────────────────────────────────────────────────────────────────\n   1 + │ /// A rectangle. First line is changed to prevent a regression of #1869\n   2   │ struct Rectangle {\n   3   │     width: u32,\n   4   │     height: u32,\n   5   │ }\n   6   │ \n   7 _ │ fn main() {\n   8   │     let rect1 = Rectangle { width: 30, height: 50 };\n   9   │ \n  10   │     println!(\n  11 ~ │         \"The perimeter of the rectangle is {} pixels.\",\n  12 ~ │         perimeter(&rect1)\n  13   │     );\n  14 + │     println!(r#\"This line contains invalid utf8:  \"�����\"#;\n  15   │ }\n  16   │ \n  17   │ fn area(rectangle: &Rectangle) -> u32 {\n  18   │     rectangle.width * rectangle.height\n  19   │ }\n  20 + │ \n  21 + │ fn perimeter(rectangle: &Rectangle) -> u32 {\n  22 + │     (rectangle.width + rectangle.height) * 2\n  23 + │ }\n───────┴────────────────────────────────────────────────────────────────────────\n"
  },
  {
    "path": "tests/snapshots/output/changes_grid_rule.snapshot.txt",
    "content": "──┬─────────────────────────────────────────────────────────────────────────────\n+ │ /// A rectangle. First line is changed to prevent a regression of #1869\n  │ struct Rectangle {\n  │     width: u32,\n  │     height: u32,\n  │ }\n  │ \n_ │ fn main() {\n  │     let rect1 = Rectangle { width: 30, height: 50 };\n  │ \n  │     println!(\n~ │         \"The perimeter of the rectangle is {} pixels.\",\n~ │         perimeter(&rect1)\n  │     );\n+ │     println!(r#\"This line contains invalid utf8:  \"�����\"#;\n  │ }\n  │ \n  │ fn area(rectangle: &Rectangle) -> u32 {\n  │     rectangle.width * rectangle.height\n  │ }\n+ │ \n+ │ fn perimeter(rectangle: &Rectangle) -> u32 {\n+ │     (rectangle.width + rectangle.height) * 2\n+ │ }\n──┴─────────────────────────────────────────────────────────────────────────────\n"
  },
  {
    "path": "tests/snapshots/output/changes_header.snapshot.txt",
    "content": "  File: sample.rs\n+ /// A rectangle. First line is changed to prevent a regression of #1869\n  struct Rectangle {\n      width: u32,\n      height: u32,\n  }\n  \n_ fn main() {\n      let rect1 = Rectangle { width: 30, height: 50 };\n  \n      println!(\n~         \"The perimeter of the rectangle is {} pixels.\",\n~         perimeter(&rect1)\n      );\n+     println!(r#\"This line contains invalid utf8:  \"�����\"#;\n  }\n  \n  fn area(rectangle: &Rectangle) -> u32 {\n      rectangle.width * rectangle.height\n  }\n+ \n+ fn perimeter(rectangle: &Rectangle) -> u32 {\n+     (rectangle.width + rectangle.height) * 2\n+ }\n"
  },
  {
    "path": "tests/snapshots/output/changes_header_numbers.snapshot.txt",
    "content": "       File: sample.rs\n   1 + /// A rectangle. First line is changed to prevent a regression of #1869\n   2   struct Rectangle {\n   3       width: u32,\n   4       height: u32,\n   5   }\n   6   \n   7 _ fn main() {\n   8       let rect1 = Rectangle { width: 30, height: 50 };\n   9   \n  10       println!(\n  11 ~         \"The perimeter of the rectangle is {} pixels.\",\n  12 ~         perimeter(&rect1)\n  13       );\n  14 +     println!(r#\"This line contains invalid utf8:  \"�����\"#;\n  15   }\n  16   \n  17   fn area(rectangle: &Rectangle) -> u32 {\n  18       rectangle.width * rectangle.height\n  19   }\n  20 + \n  21 + fn perimeter(rectangle: &Rectangle) -> u32 {\n  22 +     (rectangle.width + rectangle.height) * 2\n  23 + }\n"
  },
  {
    "path": "tests/snapshots/output/changes_header_numbers_rule.snapshot.txt",
    "content": "       File: sample.rs\n   1 + /// A rectangle. First line is changed to prevent a regression of #1869\n   2   struct Rectangle {\n   3       width: u32,\n   4       height: u32,\n   5   }\n   6   \n   7 _ fn main() {\n   8       let rect1 = Rectangle { width: 30, height: 50 };\n   9   \n  10       println!(\n  11 ~         \"The perimeter of the rectangle is {} pixels.\",\n  12 ~         perimeter(&rect1)\n  13       );\n  14 +     println!(r#\"This line contains invalid utf8:  \"�����\"#;\n  15   }\n  16   \n  17   fn area(rectangle: &Rectangle) -> u32 {\n  18       rectangle.width * rectangle.height\n  19   }\n  20 + \n  21 + fn perimeter(rectangle: &Rectangle) -> u32 {\n  22 +     (rectangle.width + rectangle.height) * 2\n  23 + }\n"
  },
  {
    "path": "tests/snapshots/output/changes_header_rule.snapshot.txt",
    "content": "  File: sample.rs\n+ /// A rectangle. First line is changed to prevent a regression of #1869\n  struct Rectangle {\n      width: u32,\n      height: u32,\n  }\n  \n_ fn main() {\n      let rect1 = Rectangle { width: 30, height: 50 };\n  \n      println!(\n~         \"The perimeter of the rectangle is {} pixels.\",\n~         perimeter(&rect1)\n      );\n+     println!(r#\"This line contains invalid utf8:  \"�����\"#;\n  }\n  \n  fn area(rectangle: &Rectangle) -> u32 {\n      rectangle.width * rectangle.height\n  }\n+ \n+ fn perimeter(rectangle: &Rectangle) -> u32 {\n+     (rectangle.width + rectangle.height) * 2\n+ }\n"
  },
  {
    "path": "tests/snapshots/output/changes_numbers.snapshot.txt",
    "content": "   1 + /// A rectangle. First line is changed to prevent a regression of #1869\n   2   struct Rectangle {\n   3       width: u32,\n   4       height: u32,\n   5   }\n   6   \n   7 _ fn main() {\n   8       let rect1 = Rectangle { width: 30, height: 50 };\n   9   \n  10       println!(\n  11 ~         \"The perimeter of the rectangle is {} pixels.\",\n  12 ~         perimeter(&rect1)\n  13       );\n  14 +     println!(r#\"This line contains invalid utf8:  \"�����\"#;\n  15   }\n  16   \n  17   fn area(rectangle: &Rectangle) -> u32 {\n  18       rectangle.width * rectangle.height\n  19   }\n  20 + \n  21 + fn perimeter(rectangle: &Rectangle) -> u32 {\n  22 +     (rectangle.width + rectangle.height) * 2\n  23 + }\n"
  },
  {
    "path": "tests/snapshots/output/changes_numbers_rule.snapshot.txt",
    "content": "   1 + /// A rectangle. First line is changed to prevent a regression of #1869\n   2   struct Rectangle {\n   3       width: u32,\n   4       height: u32,\n   5   }\n   6   \n   7 _ fn main() {\n   8       let rect1 = Rectangle { width: 30, height: 50 };\n   9   \n  10       println!(\n  11 ~         \"The perimeter of the rectangle is {} pixels.\",\n  12 ~         perimeter(&rect1)\n  13       );\n  14 +     println!(r#\"This line contains invalid utf8:  \"�����\"#;\n  15   }\n  16   \n  17   fn area(rectangle: &Rectangle) -> u32 {\n  18       rectangle.width * rectangle.height\n  19   }\n  20 + \n  21 + fn perimeter(rectangle: &Rectangle) -> u32 {\n  22 +     (rectangle.width + rectangle.height) * 2\n  23 + }\n"
  },
  {
    "path": "tests/snapshots/output/changes_rule.snapshot.txt",
    "content": "+ /// A rectangle. First line is changed to prevent a regression of #1869\n  struct Rectangle {\n      width: u32,\n      height: u32,\n  }\n  \n_ fn main() {\n      let rect1 = Rectangle { width: 30, height: 50 };\n  \n      println!(\n~         \"The perimeter of the rectangle is {} pixels.\",\n~         perimeter(&rect1)\n      );\n+     println!(r#\"This line contains invalid utf8:  \"�����\"#;\n  }\n  \n  fn area(rectangle: &Rectangle) -> u32 {\n      rectangle.width * rectangle.height\n  }\n+ \n+ fn perimeter(rectangle: &Rectangle) -> u32 {\n+     (rectangle.width + rectangle.height) * 2\n+ }\n"
  },
  {
    "path": "tests/snapshots/output/full.snapshot.txt",
    "content": "───────┬────────────────────────────────────────────────────────────────────────\n       │ File: sample.rs\n       │ Size: 533 B\n───────┼────────────────────────────────────────────────────────────────────────\n   1 + │ /// A rectangle. First line is changed to prevent a regression of #1869\n   2   │ struct Rectangle {\n   3   │     width: u32,\n   4   │     height: u32,\n   5   │ }\n   6   │ \n   7 _ │ fn main() {\n   8   │     let rect1 = Rectangle { width: 30, height: 50 };\n   9   │ \n  10   │     println!(\n  11 ~ │         \"The perimeter of the rectangle is {} pixels.\",\n  12 ~ │         perimeter(&rect1)\n  13   │     );\n  14 + │     println!(r#\"This line contains invalid utf8:  \"�����\"#;\n  15   │ }\n  16   │ \n  17   │ fn area(rectangle: &Rectangle) -> u32 {\n  18   │     rectangle.width * rectangle.height\n  19   │ }\n  20 + │ \n  21 + │ fn perimeter(rectangle: &Rectangle) -> u32 {\n  22 + │     (rectangle.width + rectangle.height) * 2\n  23 + │ }\n───────┴────────────────────────────────────────────────────────────────────────\n"
  },
  {
    "path": "tests/snapshots/output/grid.snapshot.txt",
    "content": "────────────────────────────────────────────────────────────────────────────────\n/// A rectangle. First line is changed to prevent a regression of #1869\nstruct Rectangle {\n    width: u32,\n    height: u32,\n}\n\nfn main() {\n    let rect1 = Rectangle { width: 30, height: 50 };\n\n    println!(\n        \"The perimeter of the rectangle is {} pixels.\",\n        perimeter(&rect1)\n    );\n    println!(r#\"This line contains invalid utf8:  \"�����\"#;\n}\n\nfn area(rectangle: &Rectangle) -> u32 {\n    rectangle.width * rectangle.height\n}\n\nfn perimeter(rectangle: &Rectangle) -> u32 {\n    (rectangle.width + rectangle.height) * 2\n}\n────────────────────────────────────────────────────────────────────────────────\n"
  },
  {
    "path": "tests/snapshots/output/grid_header.snapshot.txt",
    "content": "────────────────────────────────────────────────────────────────────────────────\nFile: sample.rs\n────────────────────────────────────────────────────────────────────────────────\n/// A rectangle. First line is changed to prevent a regression of #1869\nstruct Rectangle {\n    width: u32,\n    height: u32,\n}\n\nfn main() {\n    let rect1 = Rectangle { width: 30, height: 50 };\n\n    println!(\n        \"The perimeter of the rectangle is {} pixels.\",\n        perimeter(&rect1)\n    );\n    println!(r#\"This line contains invalid utf8:  \"�����\"#;\n}\n\nfn area(rectangle: &Rectangle) -> u32 {\n    rectangle.width * rectangle.height\n}\n\nfn perimeter(rectangle: &Rectangle) -> u32 {\n    (rectangle.width + rectangle.height) * 2\n}\n────────────────────────────────────────────────────────────────────────────────\n"
  },
  {
    "path": "tests/snapshots/output/grid_header_numbers.snapshot.txt",
    "content": "─────┬──────────────────────────────────────────────────────────────────────────\n     │ File: sample.rs\n─────┼──────────────────────────────────────────────────────────────────────────\n   1 │ /// A rectangle. First line is changed to prevent a regression of #1869\n   2 │ struct Rectangle {\n   3 │     width: u32,\n   4 │     height: u32,\n   5 │ }\n   6 │ \n   7 │ fn main() {\n   8 │     let rect1 = Rectangle { width: 30, height: 50 };\n   9 │ \n  10 │     println!(\n  11 │         \"The perimeter of the rectangle is {} pixels.\",\n  12 │         perimeter(&rect1)\n  13 │     );\n  14 │     println!(r#\"This line contains invalid utf8:  \"�����\"#;\n  15 │ }\n  16 │ \n  17 │ fn area(rectangle: &Rectangle) -> u32 {\n  18 │     rectangle.width * rectangle.height\n  19 │ }\n  20 │ \n  21 │ fn perimeter(rectangle: &Rectangle) -> u32 {\n  22 │     (rectangle.width + rectangle.height) * 2\n  23 │ }\n─────┴──────────────────────────────────────────────────────────────────────────\n"
  },
  {
    "path": "tests/snapshots/output/grid_header_numbers_rule.snapshot.txt",
    "content": "─────┬──────────────────────────────────────────────────────────────────────────\n     │ File: sample.rs\n─────┼──────────────────────────────────────────────────────────────────────────\n   1 │ /// A rectangle. First line is changed to prevent a regression of #1869\n   2 │ struct Rectangle {\n   3 │     width: u32,\n   4 │     height: u32,\n   5 │ }\n   6 │ \n   7 │ fn main() {\n   8 │     let rect1 = Rectangle { width: 30, height: 50 };\n   9 │ \n  10 │     println!(\n  11 │         \"The perimeter of the rectangle is {} pixels.\",\n  12 │         perimeter(&rect1)\n  13 │     );\n  14 │     println!(r#\"This line contains invalid utf8:  \"�����\"#;\n  15 │ }\n  16 │ \n  17 │ fn area(rectangle: &Rectangle) -> u32 {\n  18 │     rectangle.width * rectangle.height\n  19 │ }\n  20 │ \n  21 │ fn perimeter(rectangle: &Rectangle) -> u32 {\n  22 │     (rectangle.width + rectangle.height) * 2\n  23 │ }\n─────┴──────────────────────────────────────────────────────────────────────────\n"
  },
  {
    "path": "tests/snapshots/output/grid_header_rule.snapshot.txt",
    "content": "────────────────────────────────────────────────────────────────────────────────\nFile: sample.rs\n────────────────────────────────────────────────────────────────────────────────\n/// A rectangle. First line is changed to prevent a regression of #1869\nstruct Rectangle {\n    width: u32,\n    height: u32,\n}\n\nfn main() {\n    let rect1 = Rectangle { width: 30, height: 50 };\n\n    println!(\n        \"The perimeter of the rectangle is {} pixels.\",\n        perimeter(&rect1)\n    );\n    println!(r#\"This line contains invalid utf8:  \"�����\"#;\n}\n\nfn area(rectangle: &Rectangle) -> u32 {\n    rectangle.width * rectangle.height\n}\n\nfn perimeter(rectangle: &Rectangle) -> u32 {\n    (rectangle.width + rectangle.height) * 2\n}\n────────────────────────────────────────────────────────────────────────────────\n"
  },
  {
    "path": "tests/snapshots/output/grid_numbers.snapshot.txt",
    "content": "─────┬──────────────────────────────────────────────────────────────────────────\n   1 │ /// A rectangle. First line is changed to prevent a regression of #1869\n   2 │ struct Rectangle {\n   3 │     width: u32,\n   4 │     height: u32,\n   5 │ }\n   6 │ \n   7 │ fn main() {\n   8 │     let rect1 = Rectangle { width: 30, height: 50 };\n   9 │ \n  10 │     println!(\n  11 │         \"The perimeter of the rectangle is {} pixels.\",\n  12 │         perimeter(&rect1)\n  13 │     );\n  14 │     println!(r#\"This line contains invalid utf8:  \"�����\"#;\n  15 │ }\n  16 │ \n  17 │ fn area(rectangle: &Rectangle) -> u32 {\n  18 │     rectangle.width * rectangle.height\n  19 │ }\n  20 │ \n  21 │ fn perimeter(rectangle: &Rectangle) -> u32 {\n  22 │     (rectangle.width + rectangle.height) * 2\n  23 │ }\n─────┴──────────────────────────────────────────────────────────────────────────\n"
  },
  {
    "path": "tests/snapshots/output/grid_numbers_rule.snapshot.txt",
    "content": "─────┬──────────────────────────────────────────────────────────────────────────\n   1 │ /// A rectangle. First line is changed to prevent a regression of #1869\n   2 │ struct Rectangle {\n   3 │     width: u32,\n   4 │     height: u32,\n   5 │ }\n   6 │ \n   7 │ fn main() {\n   8 │     let rect1 = Rectangle { width: 30, height: 50 };\n   9 │ \n  10 │     println!(\n  11 │         \"The perimeter of the rectangle is {} pixels.\",\n  12 │         perimeter(&rect1)\n  13 │     );\n  14 │     println!(r#\"This line contains invalid utf8:  \"�����\"#;\n  15 │ }\n  16 │ \n  17 │ fn area(rectangle: &Rectangle) -> u32 {\n  18 │     rectangle.width * rectangle.height\n  19 │ }\n  20 │ \n  21 │ fn perimeter(rectangle: &Rectangle) -> u32 {\n  22 │     (rectangle.width + rectangle.height) * 2\n  23 │ }\n─────┴──────────────────────────────────────────────────────────────────────────\n"
  },
  {
    "path": "tests/snapshots/output/grid_rule.snapshot.txt",
    "content": "────────────────────────────────────────────────────────────────────────────────\n/// A rectangle. First line is changed to prevent a regression of #1869\nstruct Rectangle {\n    width: u32,\n    height: u32,\n}\n\nfn main() {\n    let rect1 = Rectangle { width: 30, height: 50 };\n\n    println!(\n        \"The perimeter of the rectangle is {} pixels.\",\n        perimeter(&rect1)\n    );\n    println!(r#\"This line contains invalid utf8:  \"�����\"#;\n}\n\nfn area(rectangle: &Rectangle) -> u32 {\n    rectangle.width * rectangle.height\n}\n\nfn perimeter(rectangle: &Rectangle) -> u32 {\n    (rectangle.width + rectangle.height) * 2\n}\n────────────────────────────────────────────────────────────────────────────────\n"
  },
  {
    "path": "tests/snapshots/output/header.snapshot.txt",
    "content": "File: sample.rs\n/// A rectangle. First line is changed to prevent a regression of #1869\nstruct Rectangle {\n    width: u32,\n    height: u32,\n}\n\nfn main() {\n    let rect1 = Rectangle { width: 30, height: 50 };\n\n    println!(\n        \"The perimeter of the rectangle is {} pixels.\",\n        perimeter(&rect1)\n    );\n    println!(r#\"This line contains invalid utf8:  \"�����\"#;\n}\n\nfn area(rectangle: &Rectangle) -> u32 {\n    rectangle.width * rectangle.height\n}\n\nfn perimeter(rectangle: &Rectangle) -> u32 {\n    (rectangle.width + rectangle.height) * 2\n}\n"
  },
  {
    "path": "tests/snapshots/output/header_numbers.snapshot.txt",
    "content": "     File: sample.rs\n   1 /// A rectangle. First line is changed to prevent a regression of #1869\n   2 struct Rectangle {\n   3     width: u32,\n   4     height: u32,\n   5 }\n   6 \n   7 fn main() {\n   8     let rect1 = Rectangle { width: 30, height: 50 };\n   9 \n  10     println!(\n  11         \"The perimeter of the rectangle is {} pixels.\",\n  12         perimeter(&rect1)\n  13     );\n  14     println!(r#\"This line contains invalid utf8:  \"�����\"#;\n  15 }\n  16 \n  17 fn area(rectangle: &Rectangle) -> u32 {\n  18     rectangle.width * rectangle.height\n  19 }\n  20 \n  21 fn perimeter(rectangle: &Rectangle) -> u32 {\n  22     (rectangle.width + rectangle.height) * 2\n  23 }\n"
  },
  {
    "path": "tests/snapshots/output/header_numbers_rule.snapshot.txt",
    "content": "     File: sample.rs\n   1 /// A rectangle. First line is changed to prevent a regression of #1869\n   2 struct Rectangle {\n   3     width: u32,\n   4     height: u32,\n   5 }\n   6 \n   7 fn main() {\n   8     let rect1 = Rectangle { width: 30, height: 50 };\n   9 \n  10     println!(\n  11         \"The perimeter of the rectangle is {} pixels.\",\n  12         perimeter(&rect1)\n  13     );\n  14     println!(r#\"This line contains invalid utf8:  \"�����\"#;\n  15 }\n  16 \n  17 fn area(rectangle: &Rectangle) -> u32 {\n  18     rectangle.width * rectangle.height\n  19 }\n  20 \n  21 fn perimeter(rectangle: &Rectangle) -> u32 {\n  22     (rectangle.width + rectangle.height) * 2\n  23 }\n"
  },
  {
    "path": "tests/snapshots/output/header_rule.snapshot.txt",
    "content": "File: sample.rs\n/// A rectangle. First line is changed to prevent a regression of #1869\nstruct Rectangle {\n    width: u32,\n    height: u32,\n}\n\nfn main() {\n    let rect1 = Rectangle { width: 30, height: 50 };\n\n    println!(\n        \"The perimeter of the rectangle is {} pixels.\",\n        perimeter(&rect1)\n    );\n    println!(r#\"This line contains invalid utf8:  \"�����\"#;\n}\n\nfn area(rectangle: &Rectangle) -> u32 {\n    rectangle.width * rectangle.height\n}\n\nfn perimeter(rectangle: &Rectangle) -> u32 {\n    (rectangle.width + rectangle.height) * 2\n}\n"
  },
  {
    "path": "tests/snapshots/output/numbers.snapshot.txt",
    "content": "   1 /// A rectangle. First line is changed to prevent a regression of #1869\n   2 struct Rectangle {\n   3     width: u32,\n   4     height: u32,\n   5 }\n   6 \n   7 fn main() {\n   8     let rect1 = Rectangle { width: 30, height: 50 };\n   9 \n  10     println!(\n  11         \"The perimeter of the rectangle is {} pixels.\",\n  12         perimeter(&rect1)\n  13     );\n  14     println!(r#\"This line contains invalid utf8:  \"�����\"#;\n  15 }\n  16 \n  17 fn area(rectangle: &Rectangle) -> u32 {\n  18     rectangle.width * rectangle.height\n  19 }\n  20 \n  21 fn perimeter(rectangle: &Rectangle) -> u32 {\n  22     (rectangle.width + rectangle.height) * 2\n  23 }\n"
  },
  {
    "path": "tests/snapshots/output/numbers_rule.snapshot.txt",
    "content": "   1 /// A rectangle. First line is changed to prevent a regression of #1869\n   2 struct Rectangle {\n   3     width: u32,\n   4     height: u32,\n   5 }\n   6 \n   7 fn main() {\n   8     let rect1 = Rectangle { width: 30, height: 50 };\n   9 \n  10     println!(\n  11         \"The perimeter of the rectangle is {} pixels.\",\n  12         perimeter(&rect1)\n  13     );\n  14     println!(r#\"This line contains invalid utf8:  \"�����\"#;\n  15 }\n  16 \n  17 fn area(rectangle: &Rectangle) -> u32 {\n  18     rectangle.width * rectangle.height\n  19 }\n  20 \n  21 fn perimeter(rectangle: &Rectangle) -> u32 {\n  22     (rectangle.width + rectangle.height) * 2\n  23 }\n"
  },
  {
    "path": "tests/snapshots/output/plain.snapshot.txt",
    "content": "/// A rectangle. First line is changed to prevent a regression of #1869\nstruct Rectangle {\n    width: u32,\n    height: u32,\n}\n\nfn main() {\n    let rect1 = Rectangle { width: 30, height: 50 };\n\n    println!(\n        \"The perimeter of the rectangle is {} pixels.\",\n        perimeter(&rect1)\n    );\n    println!(r#\"This line contains invalid utf8:  \"�����\"#;\n}\n\nfn area(rectangle: &Rectangle) -> u32 {\n    rectangle.width * rectangle.height\n}\n\nfn perimeter(rectangle: &Rectangle) -> u32 {\n    (rectangle.width + rectangle.height) * 2\n}\n"
  },
  {
    "path": "tests/snapshots/output/rule.snapshot.txt",
    "content": "/// A rectangle. First line is changed to prevent a regression of #1869\nstruct Rectangle {\n    width: u32,\n    height: u32,\n}\n\nfn main() {\n    let rect1 = Rectangle { width: 30, height: 50 };\n\n    println!(\n        \"The perimeter of the rectangle is {} pixels.\",\n        perimeter(&rect1)\n    );\n    println!(r#\"This line contains invalid utf8:  \"�����\"#;\n}\n\nfn area(rectangle: &Rectangle) -> u32 {\n    rectangle.width * rectangle.height\n}\n\nfn perimeter(rectangle: &Rectangle) -> u32 {\n    (rectangle.width + rectangle.height) * 2\n}\n"
  },
  {
    "path": "tests/snapshots/sample.modified.rs",
    "content": "/// A rectangle. First line is changed to prevent a regression of #1869\nstruct Rectangle {\n    width: u32,\n    height: u32,\n}\n\nfn main() {\n    let rect1 = Rectangle { width: 30, height: 50 };\n\n    println!(\n        \"The perimeter of the rectangle is {} pixels.\",\n        perimeter(&rect1)\n    );\n    println!(r#\"This line contains invalid utf8:  \"\"#;\n}\n\nfn area(rectangle: &Rectangle) -> u32 {\n    rectangle.width * rectangle.height\n}\n\nfn perimeter(rectangle: &Rectangle) -> u32 {\n    (rectangle.width + rectangle.height) * 2\n}\n"
  },
  {
    "path": "tests/snapshots/sample.rs",
    "content": "struct Rectangle {\n    width: u32,\n    height: u32,\n}\n\nfn main() {\n    // width and height of a rectangle can be different\n    let rect1 = Rectangle { width: 30, height: 50 };\n\n    println!(\n        \"The area of the rectangle is {} square pixels.\",\n        area(&rect1)\n    );\n}\n\nfn area(rectangle: &Rectangle) -> u32 {\n    rectangle.width * rectangle.height\n}\n"
  },
  {
    "path": "tests/syntax-tests/BatTestCustomAssets.sublime-syntax",
    "content": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: BatTestCustomAssets\nfile_extensions:\n  - battestcustomassets\nscope: source.battestcustomassets\n\n# This syntax is used to test if custom assets work with bat.\n# The way it works is that this syntax is only allowed to be included with\n# custom assets. That way it is easy to test if custom assets are used (and works)\n# or not.\n#\n# This syntax is based on CpuInfo.sublime-syntax.\n\ncontexts:\n  main:\n    - match: '^([^:]+)\\w*:\\w*(.*)$'\n      captures:\n        1: keyword.other.battestcustomassets-key\n        2: string.other.battestcustomassets-value\n"
  },
  {
    "path": "tests/syntax-tests/compare_highlighted_versions.py",
    "content": "#!/usr/bin/env python3\n\nimport glob\nimport sys\nimport os.path as path\nimport difflib\nimport argparse\n\n\ndef compare_highlighted_versions(root_old, root_new):\n    print(\"Comparing the following directories:\")\n    print(\" -\", root_old)\n    print(\" -\", root_new)\n    has_changes = False\n    # Used to check for newly added files that don't have a test\n    unknown_files = {strip_root(p) for p in glob.glob(path.join(root_new, \"*\", \"*\"))}\n\n    for path_old in glob.glob(path.join(root_old, \"*\", \"*\")):\n        rel_path = strip_root(path_old)\n        unknown_files.discard(rel_path)\n        path_new = path.join(root_new, rel_path)\n\n        print(\"\\n========== {}\".format(rel_path))\n\n        with open(path_old) as file_old:\n            lines_old = file_old.readlines()\n\n        with open(path_new) as file_new:\n            lines_new = file_new.readlines()\n\n        diff = difflib.unified_diff(\n            lines_old, lines_new, fromfile=path_old, tofile=path_new\n        )\n\n        file_has_changes = False\n        for line in diff:\n            print(line, end=\"\")\n            file_has_changes = True\n\n        if file_has_changes:\n            has_changes = True\n        else:\n            print(\"No changes\")\n\n    for f in unknown_files:\n        print(\"\\n========== {}: No fixture for this language, run update.sh\".format(f))\n        has_changes = True\n\n    print()\n    return has_changes\n\n\ndef strip_root(p: str) -> str:\n    filename = path.basename(p)\n    dirname = path.basename(path.dirname(p))\n    return path.join(dirname, filename)\n\n\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser(\n        description=\"This script compares two directories that were created \"\n        \"by 'create_highlighted_versions.py'.\"\n    )\n    parser.add_argument(\n        \"OLD\", help=\"Path to the old (stored) version of the highlighted output\",\n    )\n    parser.add_argument(\n        \"NEW\", help=\"Path to the new version of the highlighted output\",\n    )\n\n    args = parser.parse_args()\n\n    if compare_highlighted_versions(args.OLD, args.NEW):\n        print(\"Error: files with changes have been found\")\n        sys.exit(1)\n    else:\n        print(\"Directories are the same\")\n"
  },
  {
    "path": "tests/syntax-tests/create_highlighted_versions.py",
    "content": "#!/usr/bin/env python3\n\nimport subprocess\nimport glob\nimport sys\nimport os.path as path\nimport os\nimport argparse\nfrom multiprocessing import Pool\n\n# Avoid 'default' theme because it can choose a different theme based on\n# the appearance settings on macOS.\nBAT_OPTIONS = [\n    \"--no-config\",\n    \"--style=plain\",\n    \"--color=always\",\n    \"--theme=Monokai Extended\",\n    \"--italic-text=always\",\n]\n\nSKIP_FILENAMES = [\n    \"LICENSE.md\",\n    \"NOTICE\",\n    \"README.md\",\n    \"bat_options\",\n]\n\n\ndef get_options(source):\n    options = BAT_OPTIONS.copy()\n\n    source_dirpath = path.dirname(source)\n    options_file = path.join(source_dirpath, \"bat_options\")\n    try:\n        with open(options_file, \"r\") as f:\n            options.extend(map(lambda x: x.rstrip(), f.readlines()))\n    except FileNotFoundError:\n        pass\n\n    return options\n\n\ndef create_highlighted_version(args):\n    output_basepath, source = args\n    env = os.environ.copy()\n    env.pop(\"BAT_CACHE_PATH\", None)\n    env.pop(\"BAT_CONFIG_DIR\", None)\n    env.pop(\"BAT_CONFIG_PATH\", None)\n    env.pop(\"BAT_OPTS\", None)\n    env.pop(\"BAT_PAGER\", None)\n    env.pop(\"BAT_STYLE\", None)\n    env.pop(\"BAT_TABS\", None)\n    env.pop(\"BAT_THEME\", None)\n    env.pop(\"NO_COLOR\", None)\n    env.pop(\"PAGER\", None)\n    env[\"COLORTERM\"] = \"truecolor\"  # make sure to output 24bit colors\n\n    source_dirname = path.basename(path.dirname(source))\n    source_filename = path.basename(source)\n\n    if source_filename in SKIP_FILENAMES:\n        return\n\n    bat_output = subprocess.check_output(\n        [\"bat\"] + get_options(source) + [source],\n        stderr=subprocess.PIPE,\n        env=env,\n    )\n\n    output_dir = path.join(output_basepath, source_dirname)\n    output_path = path.join(output_dir, source_filename)\n\n    os.makedirs(output_dir, exist_ok=True)\n\n    with open(output_path, \"wb\") as output_file:\n        output_file.write(bat_output)\n\n    print(\"Created '{}'\".format(output_path))\n\n\ndef create_highlighted_versions(output_basepath):\n    root = os.path.dirname(os.path.abspath(__file__))\n    source_paths = path.join(root, \"source\", \"*\")\n\n    sources = []\n    for source in glob.glob(path.join(source_paths, \"*\")) + glob.glob(\n        path.join(source_paths, \".*\")\n    ):\n        sources.append((output_basepath, source))\n\n    try:\n        with Pool() as p:\n            p.map(create_highlighted_version, sources)\n    except subprocess.CalledProcessError as err:\n        print(\n            \"=== Error: Could not highlight source file:\\n\" + \" \".join(err.cmd),\n            file=sys.stderr,\n        )\n        print(\n            \"=== bat stdout:\\n{}\".format(err.stdout.decode(\"utf-8\")),\n            file=sys.stderr,\n        )\n        print(\n            \"=== bat stderr:\\n{}\".format(err.stderr.decode(\"utf-8\")),\n            file=sys.stderr,\n        )\n        return False\n    except FileNotFoundError:\n        print(\n            \"Error: Could not execute 'bat'. Please make sure that the executable \"\n            \"is available on the PATH.\"\n        )\n        return False\n\n    return True\n\n\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser(\n        description=\"This script creates syntax-highlighted versions of all \"\n        \"files in the 'source' directory.\"\n    )\n    parser.add_argument(\n        \"--output\",\n        \"-O\",\n        metavar=\"PATH\",\n        help=\"Output directory\",\n        required=True,\n        type=str,\n    )\n\n    args = parser.parse_args()\n\n    if not create_highlighted_versions(output_basepath=args.output):\n        sys.exit(1)\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/ARM Assembly/test.S",
    "content": "\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mdata\u001b[0m\n\n\u001b[38;2;249;38;114m.balign\u001b[0m\u001b[38;2;190;132;255m 4\u001b[0m\n\u001b[38;2;248;248;242mred\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;249;38;114m.word\u001b[0m\u001b[38;2;190;132;255m 0\u001b[0m\n\u001b[38;2;248;248;242mgreen\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;249;38;114m.word\u001b[0m\u001b[38;2;190;132;255m 0\u001b[0m\n\u001b[38;2;248;248;242mblue\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;249;38;114m.word\u001b[0m\u001b[38;2;190;132;255m 0\u001b[0m\n\n\u001b[38;2;249;38;114m.text\u001b[0m\n\u001b[38;2;249;38;114m.global\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mgrayscale\u001b[0m\n\u001b[38;2;249;38;114m.func\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mgrayscale\u001b[0m\n\n\u001b[38;2;248;248;242mgrayscale\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242massign\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m/* some comment */\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239mldr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mip\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242maddr_red\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239mstr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mr3\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[3;38;2;102;217;239m [\u001b[0m\u001b[3;38;2;102;217;239mip\u001b[0m\u001b[3;38;2;102;217;239m]\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239mldr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mip\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242maddr_green\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239mldmfd\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mr13\u001b[0m\u001b[38;2;248;248;242m!, {\u001b[0m\u001b[38;2;248;248;242mr3\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239mstr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mr3\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[3;38;2;102;217;239m [\u001b[0m\u001b[3;38;2;102;217;239mip\u001b[0m\u001b[3;38;2;102;217;239m]\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239mldr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mip\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242maddr_blue\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239mldmfd\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mr13\u001b[0m\u001b[38;2;248;248;242m!, {\u001b[0m\u001b[38;2;248;248;242mr3\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239mstr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mr3\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[3;38;2;102;217;239m [\u001b[0m\u001b[3;38;2;102;217;239mip\u001b[0m\u001b[3;38;2;102;217;239m]\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239mstmfd\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mr13\u001b[0m\u001b[38;2;248;248;242m!, {\u001b[0m\u001b[38;2;248;248;242mr4\u001b[0m\u001b[38;2;248;248;242m-\u001b[0m\u001b[38;2;248;248;242mr8\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239mldr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mip\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242maddr_red\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239mldr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mr3\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[3;38;2;102;217;239m [\u001b[0m\u001b[3;38;2;102;217;239mip\u001b[0m\u001b[3;38;2;102;217;239m]\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239mldr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mip\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242maddr_green\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239mldr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mr4\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[3;38;2;102;217;239m [\u001b[0m\u001b[3;38;2;102;217;239mip\u001b[0m\u001b[3;38;2;102;217;239m]\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239mldr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mip\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242maddr_blue\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239mldr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mr5\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[3;38;2;102;217;239m [\u001b[0m\u001b[3;38;2;102;217;239mip\u001b[0m\u001b[3;38;2;102;217;239m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m/* another comment */\u001b[0m\n\u001b[38;2;248;248;242mgrayscale_loop\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239mldrb\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mr6\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[3;38;2;102;217;239m [\u001b[0m\u001b[3;38;2;102;217;239mr1\u001b[0m\u001b[3;38;2;102;217;239m]\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239mmul\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mr6\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242mr3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242mr6\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239madd\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mr1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242mr1\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m #1\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239mldrb\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mr7\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[3;38;2;102;217;239m [\u001b[0m\u001b[3;38;2;102;217;239mr1\u001b[0m\u001b[3;38;2;102;217;239m]\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239mmul\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mr7\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242mr4\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242mr7\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239madd\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mr1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242mr1\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m #1\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239mldrb\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mr8\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[3;38;2;102;217;239m [\u001b[0m\u001b[3;38;2;102;217;239mr1\u001b[0m\u001b[3;38;2;102;217;239m]\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239mmul\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mr8\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242mr5\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242mr8\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239madd\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mr1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242mr1\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m #1\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239madd\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mr6\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242mr6\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242mr7\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239madd\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mr6\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242mr6\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242mr8\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239masr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mr6\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242mr6\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m #8\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239mstr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mr6\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[3;38;2;102;217;239m [\u001b[0m\u001b[3;38;2;102;217;239mr2\u001b[0m\u001b[3;38;2;102;217;239m]\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239madd\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mr2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242mr2\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m #1\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239msub\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mr0\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242mr0\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m #1\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239mcmp\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mr0\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m #0\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239mbne\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mgrayscale_loop\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239mldmfd\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mr13\u001b[0m\u001b[38;2;248;248;242m!, {\u001b[0m\u001b[38;2;248;248;242mr4\u001b[0m\u001b[38;2;248;248;242m-\u001b[0m\u001b[38;2;248;248;242mr8\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239mstmfd\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mr13\u001b[0m\u001b[38;2;248;248;242m!, {\u001b[0m\u001b[38;2;248;248;242mr0\u001b[0m\u001b[38;2;248;248;242m-\u001b[0m\u001b[38;2;248;248;242mr1\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239mbx\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mlr\u001b[0m\n\n\u001b[38;2;248;248;242maddr_red\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;249;38;114m.word\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mred\u001b[0m\n\u001b[38;2;248;248;242maddr_green\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;249;38;114m.word\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mgreen\u001b[0m\n\u001b[38;2;248;248;242maddr_blue\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;249;38;114m.word\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mblue\u001b[0m\n\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/ASP/test.asp",
    "content": "\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mhtml\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mbody\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;124;120;101m<!--\u001b[0m\u001b[38;2;124;120;101m #include file =\"headers\\header.inc\" \u001b[0m\u001b[38;2;124;120;101m-->\u001b[0m\n\n\u001b[38;2;248;248;242m<%\u001b[0m\n\u001b[38;2;249;38;114mFor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mi\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mTo\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\n\u001b[3;38;2;166;226;46mResponse\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mWrite\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mThe number is \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m&\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mi\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m&\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m<br />\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114mNext\u001b[0m\n\u001b[38;2;248;248;242m%>\u001b[0m\n\n\u001b[38;2;248;248;242m<%\u001b[0m\n\u001b[3;38;2;166;226;46mResponse\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mWrite\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mHello World!\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m%>\u001b[0m\n\n\u001b[38;2;248;248;242m<%\u001b[0m\n\u001b[38;2;249;38;114mDim\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mx\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;255;255;255mx\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mVolvo\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;255;255;255mx\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mBMW\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;255;255;255mx\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mFord\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;255;255;255mx\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mApple\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;255;255;255mx\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mOrange\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;255;255;255mx\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mBanana\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;255;255;255mx\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mCoke\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;255;255;255mx\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mPepsi\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;255;255;255mx\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mSprite\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mi\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mto\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\n\u001b[3;38;2;166;226;46mresponse\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mwrite\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m<p>\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mj\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mto\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\n\u001b[3;38;2;166;226;46mresponse\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mwrite\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mx\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mi\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;255;255;255mj\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m&\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m<br />\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114mnext\u001b[0m\n\u001b[3;38;2;166;226;46mresponse\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mwrite\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m</p>\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114mnext\u001b[0m\n\u001b[38;2;248;248;242m%>\u001b[0m\n\n\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mbody\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mhtml\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/AWK/quicksort.awk",
    "content": "\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m quicksort.awk --- Quicksort algorithm, with user-supplied\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m                   comparison function\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Arnold Robbins, arnold@skeeve.com, Public Domain\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m January 2009\u001b[0m\n\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m quicksort --- C.A.R. Hoare's quicksort algorithm. See Wikipedia\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m               or almost any algorithms or computer science text.\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Adapted from K&R-II, page 110\u001b[0m\n\n\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mquicksort\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mdata\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;253;151;31mleft\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;253;151;31mright\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;253;151;31mless_than\u001b[0m\u001b[38;2;248;248;242m,    \u001b[0m\u001b[3;38;2;253;151;31mi\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;253;151;31mlast\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255mleft\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mright\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m do nothing if array contains fewer\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255mreturn\u001b[0m\u001b[38;2;248;248;242m          \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m than two elements\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46mquicksort_swap\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255mdata\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mleft\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mint\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255mleft\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mright\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m/\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255mlast\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mleft\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46mfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255mi\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mleft\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m; \u001b[0m\u001b[38;2;255;255;255mi\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mright\u001b[0m\u001b[38;2;248;248;242m; \u001b[0m\u001b[38;2;255;255;255mi\u001b[0m\u001b[38;2;249;38;114m++\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;166;226;46mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;248;248;242m@\u001b[0m\u001b[38;2;166;226;46mless_than\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255mdata\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;255;255;255mi\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdata\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;255;255;255mleft\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;166;226;46mquicksort_swap\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255mdata\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;255;255;255mlast\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mi\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46mquicksort_swap\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255mdata\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mleft\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mlast\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46mquicksort\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255mdata\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mleft\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mlast\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mless_than\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46mquicksort\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255mdata\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mlast\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mright\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mless_than\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m quicksort_swap --- helper function for quicksort, should really be inline\u001b[0m\n\n\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mquicksort_swap\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mdata\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;253;151;31mi\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;253;151;31mj\u001b[0m\u001b[38;2;248;248;242m,      \u001b[0m\u001b[3;38;2;253;151;31mtemp\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255mtemp\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdata\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;255;255;255mi\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255mdata\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;255;255;255mi\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdata\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;255;255;255mj\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255mdata\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;255;255;255mj\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mtemp\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/ActionScript/test.as",
    "content": "\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m flash.events.\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m flash.events.MouseEvent;\u001b[0m\n\n\u001b[38;2;248;248;242mpackage TestSyntax {\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mpublic\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mclass\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTestSyntax\u001b[0m\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mextends\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;4;38;2;166;226;46mflash.display.Sprite\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mpublic\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mstatic\u001b[0m\u001b[38;2;248;248;242m const TEST_CONSTANT\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[3;38;2;102;217;239mNumber\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m33.333\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mvar\u001b[0m\u001b[38;2;248;248;242m testAttribute\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mpublic\u001b[0m\u001b[38;2;248;248;242m namespace TestNamespace;\u001b[0m\n\u001b[38;2;248;248;242m        TestNamespace \u001b[0m\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mMethod2\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;102;217;239mvoid\u001b[0m\u001b[38;2;248;248;242m { }\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;117;113;94m/*\u001b[0m\u001b[38;2;117;113;94m*\u001b[0m\n\u001b[38;2;117;113;94m         \u001b[0m\u001b[38;2;117;113;94m*\u001b[0m\u001b[38;2;117;113;94m Multi-line comment\u001b[0m\n\u001b[38;2;117;113;94m         \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;248;248;242m        override \u001b[0m\u001b[38;2;249;38;114mpublic\u001b[0m\u001b[38;2;248;248;242m function \u001b[0m\u001b[38;2;102;217;239mset\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mx\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mvalue\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[3;38;2;102;217;239mNumber\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;102;217;239mvoid\u001b[0m\n\u001b[38;2;248;248;242m        {\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114msuper\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mx\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mMath\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mround\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mvalue\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\u001b[38;2;248;248;242m        }\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;117;113;94m/*\u001b[0m\u001b[38;2;117;113;94m*\u001b[0m\n\u001b[38;2;117;113;94m         \u001b[0m\u001b[38;2;117;113;94m*\u001b[0m\u001b[38;2;117;113;94m Actual multi-line comment\u001b[0m\n\u001b[38;2;117;113;94m         \u001b[0m\u001b[38;2;117;113;94m*\u001b[0m\u001b[38;2;117;113;94m Takes up multiple lines\u001b[0m\n\u001b[38;2;117;113;94m         \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;248;248;242m        override \u001b[0m\u001b[38;2;249;38;114mpublic\u001b[0m\u001b[38;2;248;248;242m function \u001b[0m\u001b[38;2;102;217;239mset\u001b[0m\u001b[38;2;248;248;242m y(\u001b[0m\u001b[38;2;102;217;239mvalue\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[3;38;2;102;217;239mNumber\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;102;217;239mvoid\u001b[0m\n\u001b[38;2;248;248;242m        {\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114msuper\u001b[0m\u001b[38;2;248;248;242m.y \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        }\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mpublic\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtestFunction\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mvar\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mtest\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[3;38;2;102;217;239mString\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mhello\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m arrays\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mvar\u001b[0m\u001b[38;2;248;248;242m testArray\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[3;38;2;166;226;46mArray\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m [\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mb\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mc\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116md\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m];\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;249;38;114mvar\u001b[0m\u001b[38;2;248;248;242m i\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242muint \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m; i < testArray.\u001b[0m\u001b[38;2;102;217;239mlength\u001b[0m\u001b[38;2;248;248;242m; i\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;102;217;239mtrace\u001b[0m\u001b[38;2;248;248;242m(testArray[i]);\u001b[0m\n\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m objects\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mvar\u001b[0m\u001b[38;2;248;248;242m testObject\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[3;38;2;166;226;46mObject\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m {foo\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m20\u001b[0m\u001b[38;2;248;248;242m, bar\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m40\u001b[0m\u001b[38;2;248;248;242m};\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;249;38;114mvar\u001b[0m\u001b[38;2;248;248;242m key\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[3;38;2;102;217;239mString\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239min\u001b[0m\u001b[38;2;248;248;242m testObject) {\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;102;217;239mtrace\u001b[0m\u001b[38;2;248;248;242m(testObject[key]);\u001b[0m\n\u001b[38;2;248;248;242m            }\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m each (\u001b[0m\u001b[38;2;249;38;114mvar\u001b[0m\u001b[38;2;248;248;242m objectValue\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239min\u001b[0m\u001b[38;2;248;248;242m testObject) {\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;102;217;239mtrace\u001b[0m\u001b[38;2;248;248;242m(objectValue);\u001b[0m\n\u001b[38;2;248;248;242m            }\u001b[0m\n\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m dynamic variables\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mvar\u001b[0m\u001b[38;2;248;248;242m testDynamic\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m            testDynamic \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m75\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m            testDynamic \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mSeventy-five\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m regex\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mvar\u001b[0m\u001b[38;2;248;248;242m testRegExp\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242mRegExp \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m/\u001b[0m\u001b[38;2;248;248;242mfoo\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m\\d\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;249;38;114m/\u001b[0m\u001b[38;2;248;248;242mi;\u001b[0m\n\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m XML\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mvar\u001b[0m\u001b[38;2;248;248;242m testXML\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[3;38;2;166;226;46mXML\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\n\u001b[38;2;248;248;242m<employee>\u001b[0m\n\u001b[38;2;248;248;242m  <firstName>Harold<\u001b[0m\u001b[38;2;249;38;114m/\u001b[0m\u001b[38;2;248;248;242mfirstName>\u001b[0m\n\u001b[38;2;248;248;242m  <lastName>Webster<\u001b[0m\u001b[38;2;249;38;114m/\u001b[0m\u001b[38;2;248;248;242mlastName>\u001b[0m\n\u001b[38;2;248;248;242m<\u001b[0m\u001b[38;2;249;38;114m/\u001b[0m\u001b[38;2;248;248;242memployee>;\u001b[0m\n\u001b[38;2;248;248;242m        }\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mprivate\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46manotherFunc\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31ma:int\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[3;38;2;253;151;31m arg2:uint\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[3;38;2;253;151;31m arg3:Function\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[3;38;2;253;151;31m ... args\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\n\u001b[38;2;248;248;242m        }\u001b[0m\n\n\u001b[38;2;248;248;242m        [Embed(\u001b[0m\u001b[38;2;102;217;239msource\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116msound1.mp3\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)] \u001b[0m\u001b[38;2;249;38;114mpublic\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mvar\u001b[0m\u001b[38;2;248;248;242m soundCls\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242mClass;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mpublic\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mSoundAssetExample\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m        {\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mvar\u001b[0m\u001b[38;2;248;248;242m mySound\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242mSoundAsset \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mnew\u001b[0m\u001b[38;2;248;248;242m soundCls() as SoundAsset;\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mvar\u001b[0m\u001b[38;2;248;248;242m sndChannel\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242mSoundChannel \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m mySound.\u001b[0m\u001b[38;2;102;217;239mplay\u001b[0m\u001b[38;2;248;248;242m();\u001b[0m\n\u001b[38;2;248;248;242m        }\u001b[0m\n\u001b[38;2;248;248;242m    }\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Ada/click.adb",
    "content": "\u001b[38;2;249;38;114mwith\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mChests.Ring_Buffers\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;249;38;114mwith\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mUSB.Device.HID.Keyboard\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;249;38;114mpackage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mbody\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mClick\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m--------------\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  DEBOUNCE  --\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m--------------\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  Ideally, in a separate package.\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  should be [], but not fixed yet in GCC 11.\u001b[0m\n\u001b[38;2;249;38;114m   \u001b[0m\u001b[38;2;166;226;46mCurrent_Status\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m Key_Matrix := [\u001b[0m\u001b[38;2;249;38;114mothers\u001b[0m\u001b[38;2;248;248;242m => [\u001b[0m\u001b[38;2;249;38;114mothers\u001b[0m\u001b[38;2;248;248;242m => False]];\u001b[0m\n\u001b[38;2;249;38;114m   \u001b[0m\u001b[38;2;166;226;46mNew_Status\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m Key_Matrix := [\u001b[0m\u001b[38;2;249;38;114mothers\u001b[0m\u001b[38;2;248;248;242m => [\u001b[0m\u001b[38;2;249;38;114mothers\u001b[0m\u001b[38;2;248;248;242m => False]];\u001b[0m\n\u001b[38;2;249;38;114m   \u001b[0m\u001b[38;2;166;226;46mSince\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m Natural := \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m   Nb_Bounce : Natural := 5;\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mUpdate\u001b[0m\u001b[38;2;248;248;242m (NewS : Key_Matrix) \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m Boolean \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  The new state is the same as the current stable state => Do nothing.\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m Current_Status = NewS \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;249;38;114m         \u001b[0m\u001b[38;2;166;226;46mSince\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m= \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m False;\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mend if\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m New_Status /= NewS \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  The new state differs from the previous\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  new state (bouncing) => reset\u001b[0m\n\u001b[38;2;249;38;114m         \u001b[0m\u001b[38;2;166;226;46mNew_Status\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m= NewS;\u001b[0m\n\u001b[38;2;249;38;114m         \u001b[0m\u001b[38;2;166;226;46mSince\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m= \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  The new state hasn't changed since last\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  update => towards stabilization.\u001b[0m\n\u001b[38;2;249;38;114m         \u001b[0m\u001b[38;2;166;226;46mSince\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m= Since + \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mend if\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m Since > Nb_Bounce \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mdeclare\u001b[0m\n\u001b[38;2;249;38;114m            \u001b[0m\u001b[38;2;166;226;46mTmp\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mconstant\u001b[0m\u001b[38;2;248;248;242m Key_Matrix := Current_Status;\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  New state has been stable enough.\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  Latch it and notifies caller.\u001b[0m\n\u001b[38;2;249;38;114m            \u001b[0m\u001b[38;2;166;226;46mCurrent_Status\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m= New_Status;\u001b[0m\n\u001b[38;2;249;38;114m            \u001b[0m\u001b[38;2;166;226;46mNew_Status\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m= Tmp;\u001b[0m\n\u001b[38;2;249;38;114m            \u001b[0m\u001b[38;2;166;226;46mSince\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m= \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m True;\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  Not there yet\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m False;\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mend if\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mUpdate\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mprocedure\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mGet_Matrix\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  Could use := []; but GNAT 12 has a bug (fixed in upcoming 13)\u001b[0m\n\u001b[38;2;249;38;114m   \u001b[0m\u001b[38;2;166;226;46mRead_Status\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m Key_Matrix := [\u001b[0m\u001b[38;2;249;38;114mothers\u001b[0m\u001b[38;2;248;248;242m => [\u001b[0m\u001b[38;2;249;38;114mothers\u001b[0m\u001b[38;2;248;248;242m => False]];\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mGet_Events\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m Events \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\n\u001b[38;2;249;38;114m      \u001b[0m\u001b[38;2;166;226;46mNum_Evt\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m Natural := \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;249;38;114m      \u001b[0m\u001b[38;2;166;226;46mNew_S\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m Key_Matrix \u001b[0m\u001b[38;2;249;38;114mrenames\u001b[0m\u001b[38;2;248;248;242m Read_Status;\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\n\u001b[38;2;248;248;242m      Get_Matrix;\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m Update (New_S) \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m I \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m Current_Status'\u001b[0m\u001b[38;2;249;38;114mRange\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mloop\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m J \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m Current_Status'\u001b[0m\u001b[38;2;249;38;114mRange\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mloop\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;249;38;114mnot\u001b[0m\u001b[38;2;248;248;242m New_Status (I, J) \u001b[0m\u001b[38;2;249;38;114mand\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\u001b[38;2;248;248;242m Current_Status (I, J))\u001b[0m\n\u001b[38;2;248;248;242m                 \u001b[0m\u001b[38;2;249;38;114mor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m (New_Status (I, J) \u001b[0m\u001b[38;2;249;38;114mand\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mnot\u001b[0m\u001b[38;2;248;248;242m Current_Status (I, J))\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;249;38;114m                  \u001b[0m\u001b[38;2;166;226;46mNum_Evt\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m= Num_Evt + \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;249;38;114mend if\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mend loop\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mend loop\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mdeclare\u001b[0m\n\u001b[38;2;249;38;114m            \u001b[0m\u001b[38;2;166;226;46mEvts\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m Events (Natural \u001b[0m\u001b[38;2;249;38;114mrange\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m .. Num_Evt);\u001b[0m\n\u001b[38;2;249;38;114m            \u001b[0m\u001b[38;2;166;226;46mCursor\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m Natural \u001b[0m\u001b[38;2;249;38;114mrange\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m .. Num_Evt + \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m := \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m I \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m Current_Status'\u001b[0m\u001b[38;2;249;38;114mRange\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mloop\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m J \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m Current_Status'\u001b[0m\u001b[38;2;249;38;114mRange\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mloop\u001b[0m\n\u001b[38;2;248;248;242m                  \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mnot\u001b[0m\u001b[38;2;248;248;242m New_Status (I, J)\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;249;38;114mand\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\u001b[38;2;248;248;242m Current_Status (I, J)\u001b[0m\n\u001b[38;2;248;248;242m                  \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m                     \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  Pressing I, J\u001b[0m\n\u001b[38;2;248;248;242m                     Evts (Cursor) := [\u001b[0m\n\u001b[38;2;248;248;242m                                       Evt => Press,\u001b[0m\n\u001b[38;2;248;248;242m                                       Col => I,\u001b[0m\n\u001b[38;2;248;248;242m                                       Row => J\u001b[0m\n\u001b[38;2;248;248;242m                                      ];\u001b[0m\n\u001b[38;2;249;38;114m                     \u001b[0m\u001b[38;2;166;226;46mCursor\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m= Cursor + \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m                  \u001b[0m\u001b[38;2;249;38;114melsif\u001b[0m\u001b[38;2;248;248;242m New_Status (I, J)\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;249;38;114mand\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mnot\u001b[0m\u001b[38;2;248;248;242m Current_Status (I, J)\u001b[0m\n\u001b[38;2;248;248;242m                  \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m                     \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  Release I, J\u001b[0m\n\u001b[38;2;248;248;242m                     Evts (Cursor) := [\u001b[0m\n\u001b[38;2;248;248;242m                                       Evt => Release,\u001b[0m\n\u001b[38;2;248;248;242m                                       Col => I,\u001b[0m\n\u001b[38;2;248;248;242m                                       Row => J\u001b[0m\n\u001b[38;2;248;248;242m                                      ];\u001b[0m\n\u001b[38;2;249;38;114m                     \u001b[0m\u001b[38;2;166;226;46mCursor\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m= Cursor + \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m                  \u001b[0m\u001b[38;2;249;38;114mend if\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;249;38;114mend loop\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mend loop\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m Evts;\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mend if\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m [];\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mGet_Events\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mprocedure\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mGet_Matrix\u001b[0m\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m return Key_Matrix is\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m Row \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m Keys.Rows'\u001b[0m\u001b[38;2;249;38;114mRange\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mloop\u001b[0m\n\u001b[38;2;248;248;242m         Keys.Rows (Row).Clear;\u001b[0m\n\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m Col \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m Keys.Cols'\u001b[0m\u001b[38;2;249;38;114mRange\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mloop\u001b[0m\n\u001b[38;2;248;248;242m            Read_Status (Col, Row) := \u001b[0m\u001b[38;2;249;38;114mnot\u001b[0m\u001b[38;2;248;248;242m Keys.Cols (Col).Set;\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mend loop\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m         Keys.Rows (Row).Set;\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mend loop\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mGet_Matrix\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  End of DEBOUNCE\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m------------\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  Layout  --\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m------------\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mpackage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mEvents_Ring_Buffers\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mnew\u001b[0m\u001b[38;2;248;248;242m Chests.Ring_Buffers\u001b[0m\n\u001b[38;2;248;248;242m     (Element_Type => Event,\u001b[0m\n\u001b[38;2;248;248;242m      Capacity     => \u001b[0m\u001b[38;2;190;132;255m16\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\n\u001b[38;2;249;38;114m   \u001b[0m\u001b[38;2;166;226;46mQueued_Events\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m Events_Ring_Buffers.Ring_Buffer;\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mtype\u001b[0m\u001b[38;2;248;248;242m Statet \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\u001b[38;2;248;248;242m (Normal_Key, Layer_Mod, None);\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mtype\u001b[0m\u001b[38;2;248;248;242m State \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mrecord\u001b[0m\n\u001b[38;2;249;38;114m      \u001b[0m\u001b[38;2;166;226;46mTyp\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m Statet;\u001b[0m\n\u001b[38;2;249;38;114m      \u001b[0m\u001b[38;2;166;226;46mCode\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m Key_Code_T;\u001b[0m\n\u001b[38;2;249;38;114m      \u001b[0m\u001b[38;2;166;226;46mLayer_Value\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m Natural;\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  Col : ColR;\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  Row : RowR;\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mend record\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mtype\u001b[0m\u001b[38;2;248;248;242m State_Array \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114marray\u001b[0m\u001b[38;2;248;248;242m (ColR, RowR) \u001b[0m\u001b[38;2;249;38;114mof\u001b[0m\u001b[38;2;248;248;242m State;\u001b[0m\n\u001b[38;2;249;38;114m   \u001b[0m\u001b[38;2;166;226;46mStates\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m State_Array := [\u001b[0m\u001b[38;2;249;38;114mothers\u001b[0m\u001b[38;2;248;248;242m => [\u001b[0m\u001b[38;2;249;38;114mothers\u001b[0m\u001b[38;2;248;248;242m => (Typ => None, Code => No, Layer_Value => \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)]];\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mKw\u001b[0m\u001b[38;2;248;248;242m (Code : Key_Code_T) \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m Action \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m (T => Key, C => Code, L => \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mKw\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mLw\u001b[0m\u001b[38;2;248;248;242m (V : Natural) \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m Action \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m (T => Layer, C => No, L => V);\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mLw\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  FIXME: hardcoded max number of events\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114msubtype\u001b[0m\u001b[38;2;248;248;242m Events_Range \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\u001b[38;2;248;248;242m Natural \u001b[0m\u001b[38;2;249;38;114mrange\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m .. \u001b[0m\u001b[38;2;190;132;255m60\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mtype\u001b[0m\u001b[38;2;248;248;242m Array_Of_Reg_Events \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114marray\u001b[0m\u001b[38;2;248;248;242m (Events_Range) \u001b[0m\u001b[38;2;249;38;114mof\u001b[0m\u001b[38;2;248;248;242m Event;\u001b[0m\n\n\u001b[38;2;249;38;114m   \u001b[0m\u001b[38;2;166;226;46mStamp\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m Natural := \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mprocedure\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mRegister_Events\u001b[0m\u001b[38;2;248;248;242m (L : Layout; Es : Events) \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\n\u001b[38;2;249;38;114m      \u001b[0m\u001b[38;2;166;226;46mStamp\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m= Stamp + \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m      Log (\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mReg events: \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m & Stamp'Image);\u001b[0m\n\u001b[38;2;248;248;242m      Log (Es'Length'Image);\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m E \u001b[0m\u001b[38;2;249;38;114mof\u001b[0m\u001b[38;2;248;248;242m Es \u001b[0m\u001b[38;2;249;38;114mloop\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mdeclare\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m Events_Ring_Buffers.Is_Full (Queued_Events) \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;249;38;114mraise\u001b[0m\u001b[38;2;248;248;242m Program_Error;\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mend if\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m            Events_Ring_Buffers.Append (Queued_Events, E);\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m         Log (\"Reg'ed events:\" &  Events_Mark'Image);\u001b[0m\n\u001b[38;2;248;248;242m         Log (\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mReg'ed events:\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m &  Events_Ring_Buffers.Length (Queued_Events)'Image);\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mend loop\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mRegister_Events\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mprocedure\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mRelease\u001b[0m\u001b[38;2;248;248;242m (Col: Colr; Row: Rowr) \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m States (Col, Row).Typ = None \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mraise\u001b[0m\u001b[38;2;248;248;242m Program_Error;\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mend if\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m      States (Col, Row) := (Typ => None, Code => No, Layer_Value => \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mRelease\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mGet_Current_Layer\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m Natural \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\n\u001b[38;2;249;38;114m      \u001b[0m\u001b[38;2;166;226;46mL\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m Natural := \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m S \u001b[0m\u001b[38;2;249;38;114mof\u001b[0m\u001b[38;2;248;248;242m States \u001b[0m\u001b[38;2;249;38;114mloop\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m S.Typ = Layer_Mod \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;249;38;114m            \u001b[0m\u001b[38;2;166;226;46mL\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m= L + S.Layer_Value;\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mend if\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mend loop\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m L;\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mGet_Current_Layer\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  Tick the event.\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  Returns TRUE if it needs to stay in the queued events\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  FALSE if the event has been consumed.\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTick\u001b[0m\u001b[38;2;248;248;242m (L: Layout; E : \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mout\u001b[0m\u001b[38;2;248;248;242m Event) \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m Boolean \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\n\u001b[38;2;249;38;114m      \u001b[0m\u001b[38;2;166;226;46mCurrent_Layer\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m Natural := Get_Current_Layer;\u001b[0m\n\u001b[38;2;249;38;114m      \u001b[0m\u001b[38;2;166;226;46mA\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m Action \u001b[0m\u001b[38;2;249;38;114mrenames\u001b[0m\u001b[38;2;248;248;242m L (Current_Layer, E.Row, E.Col);\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;248;248;242m E.Evt \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mwhen\u001b[0m\u001b[38;2;248;248;242m Press =>\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;248;248;242m A.T \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;249;38;114mwhen\u001b[0m\u001b[38;2;248;248;242m Key =>\u001b[0m\n\u001b[38;2;248;248;242m                  States (E.Col, E.Row) :=\u001b[0m\n\u001b[38;2;248;248;242m                    (Typ => Normal_Key,\u001b[0m\n\u001b[38;2;248;248;242m                     Code => A.C,\u001b[0m\n\u001b[38;2;248;248;242m                     Layer_Value => \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;249;38;114mwhen\u001b[0m\u001b[38;2;248;248;242m Layer =>\u001b[0m\n\u001b[38;2;248;248;242m                  States (E.Col, E.Row) := (Typ => Layer_Mod, Layer_Value => A.L, Code => No);\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;249;38;114mwhen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mothers\u001b[0m\u001b[38;2;248;248;242m =>\u001b[0m\n\u001b[38;2;248;248;242m                  \u001b[0m\u001b[38;2;249;38;114mraise\u001b[0m\u001b[38;2;248;248;242m Program_Error;\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mend case\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mwhen\u001b[0m\u001b[38;2;248;248;242m Release =>\u001b[0m\n\u001b[38;2;248;248;242m            Release (E.Col, E.Row);\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mend case\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m False;\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTick\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;249;38;114m   \u001b[0m\u001b[38;2;166;226;46mLast_Was_Empty_Log\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m Boolean := False;\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mprocedure\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTick\u001b[0m\u001b[38;2;248;248;242m (L : Layout) \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m I \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m .. Events_Ring_Buffers.Length(Queued_Events) \u001b[0m\u001b[38;2;249;38;114mloop\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mdeclare\u001b[0m\n\u001b[38;2;249;38;114m            \u001b[0m\u001b[38;2;166;226;46mE\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m Event := Events_Ring_Buffers.Last_Element (Queued_Events);\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\n\u001b[38;2;248;248;242m            Events_Ring_Buffers.Delete_Last (Queued_Events);\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m Tick (L, E) \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m               Events_Ring_Buffers.Prepend (Queued_Events, E);\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mend if\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mend loop\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mnot\u001b[0m\u001b[38;2;248;248;242m Last_Was_Empty_Log \u001b[0m\u001b[38;2;249;38;114mor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m Events_Ring_Buffers.Length(Queued_Events) /= \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m         Log (\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mEnd Tick layout, events: \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m & Events_Ring_Buffers.Length(Queued_Events)'Image);\u001b[0m\n\u001b[38;2;249;38;114m         \u001b[0m\u001b[38;2;166;226;46mLast_Was_Empty_Log\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m= Events_Ring_Buffers.Length(Queued_Events) = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mend if\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTick\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mGet_Key_Codes\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m Key_Codes_T \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\n\u001b[38;2;249;38;114m      \u001b[0m\u001b[38;2;166;226;46mCodes\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m Key_Codes_T (\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m .. \u001b[0m\u001b[38;2;190;132;255m10\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\u001b[38;2;249;38;114m      \u001b[0m\u001b[38;2;166;226;46mWm\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m Natural := \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m S \u001b[0m\u001b[38;2;249;38;114mof\u001b[0m\u001b[38;2;248;248;242m States \u001b[0m\u001b[38;2;249;38;114mloop\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m S.Typ = Normal_Key \u001b[0m\u001b[38;2;249;38;114mand\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m            (S.Code < LCtrl \u001b[0m\u001b[38;2;249;38;114mor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m S.Code > RGui)\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m            Codes (Wm) := S.Code;\u001b[0m\n\u001b[38;2;249;38;114m            \u001b[0m\u001b[38;2;166;226;46mWm\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m= Wm + \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mend if\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mend loop\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m Wm = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m [];\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m Codes (\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m .. Wm - \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mend if\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mGet_Key_Codes\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mGet_Modifiers\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m Key_Modifiers \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114muse\u001b[0m\u001b[38;2;248;248;242m USB.Device.HID.Keyboard;\u001b[0m\n\u001b[38;2;249;38;114m      \u001b[0m\u001b[38;2;166;226;46mKM\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m Key_Modifiers (\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m..\u001b[0m\u001b[38;2;190;132;255m8\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\u001b[38;2;249;38;114m      \u001b[0m\u001b[38;2;166;226;46mI\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m Natural := \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m S \u001b[0m\u001b[38;2;249;38;114mof\u001b[0m\u001b[38;2;248;248;242m States \u001b[0m\u001b[38;2;249;38;114mloop\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m S.Typ = Normal_Key \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;249;38;114m            \u001b[0m\u001b[38;2;166;226;46mI\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m= I + \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;248;248;242m S.Code \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\n\u001b[38;2;248;248;242m              \u001b[0m\u001b[38;2;249;38;114mwhen\u001b[0m\u001b[38;2;248;248;242m LCtrl =>\u001b[0m\n\u001b[38;2;248;248;242m                 KM(I) := Ctrl_Left;\u001b[0m\n\u001b[38;2;248;248;242m              \u001b[0m\u001b[38;2;249;38;114mwhen\u001b[0m\u001b[38;2;248;248;242m RCtrl =>\u001b[0m\n\u001b[38;2;248;248;242m                 KM(I) := Ctrl_Right;\u001b[0m\n\u001b[38;2;248;248;242m              \u001b[0m\u001b[38;2;249;38;114mwhen\u001b[0m\u001b[38;2;248;248;242m LShift =>\u001b[0m\n\u001b[38;2;248;248;242m                 KM(I) := Shift_Left;\u001b[0m\n\u001b[38;2;248;248;242m              \u001b[0m\u001b[38;2;249;38;114mwhen\u001b[0m\u001b[38;2;248;248;242m RShift =>\u001b[0m\n\u001b[38;2;248;248;242m                 KM(I) := Shift_Right;\u001b[0m\n\u001b[38;2;248;248;242m              \u001b[0m\u001b[38;2;249;38;114mwhen\u001b[0m\u001b[38;2;248;248;242m LAlt =>\u001b[0m\n\u001b[38;2;248;248;242m                 KM(I) := Alt_Left;\u001b[0m\n\u001b[38;2;248;248;242m              \u001b[0m\u001b[38;2;249;38;114mwhen\u001b[0m\u001b[38;2;248;248;242m RAlt =>\u001b[0m\n\u001b[38;2;248;248;242m                 KM(I) := Alt_Right;\u001b[0m\n\u001b[38;2;248;248;242m              \u001b[0m\u001b[38;2;249;38;114mwhen\u001b[0m\u001b[38;2;248;248;242m LGui =>\u001b[0m\n\u001b[38;2;248;248;242m                 KM(I) := Meta_Left;\u001b[0m\n\u001b[38;2;248;248;242m              \u001b[0m\u001b[38;2;249;38;114mwhen\u001b[0m\u001b[38;2;248;248;242m RGui =>\u001b[0m\n\u001b[38;2;248;248;242m                 KM(I) := Meta_Right;\u001b[0m\n\u001b[38;2;248;248;242m              \u001b[0m\u001b[38;2;249;38;114mwhen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mothers\u001b[0m\u001b[38;2;248;248;242m =>\u001b[0m\n\u001b[38;2;249;38;114m                 \u001b[0m\u001b[38;2;166;226;46mI\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m= I - \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mend case\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mend if\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mend loop\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m KM (\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m..I);\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mGet_Modifiers\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mprocedure\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mInit\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\n\u001b[38;2;248;248;242m      Events_Ring_Buffers.Clear (Queued_Events);\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mInit\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mClick\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Ada/click.ads",
    "content": "\u001b[38;2;249;38;114mwith\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mHAL.GPIO\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;249;38;114mwith\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mUSB.Device.HID.Keyboard\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;249;38;114mgeneric\u001b[0m\n\u001b[38;2;249;38;114m   \u001b[0m\u001b[38;2;166;226;46mNb_Bounce\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m Natural;\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mtype\u001b[0m\u001b[38;2;248;248;242m ColR \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\u001b[38;2;248;248;242m (<>);\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mtype\u001b[0m\u001b[38;2;248;248;242m RowR \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\u001b[38;2;248;248;242m (<>);\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mtype\u001b[0m\u001b[38;2;248;248;242m GPIOP \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mnew\u001b[0m\u001b[38;2;248;248;242m HAL.GPIO.GPIO_Point \u001b[0m\u001b[38;2;249;38;114mwith\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mprivate\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mtype\u001b[0m\u001b[38;2;248;248;242m Cols_T \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114marray\u001b[0m\u001b[38;2;248;248;242m (ColR) \u001b[0m\u001b[38;2;249;38;114mof\u001b[0m\u001b[38;2;248;248;242m GPIOP;\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mtype\u001b[0m\u001b[38;2;248;248;242m Rows_T \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114marray\u001b[0m\u001b[38;2;248;248;242m (RowR) \u001b[0m\u001b[38;2;249;38;114mof\u001b[0m\u001b[38;2;248;248;242m GPIOP;\u001b[0m\n\n\u001b[38;2;249;38;114m   \u001b[0m\u001b[38;2;166;226;46mCols\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m Cols_T;\u001b[0m\n\u001b[38;2;249;38;114m   \u001b[0m\u001b[38;2;166;226;46mRows\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m Rows_T;\u001b[0m\n\u001b[38;2;249;38;114m   \u001b[0m\u001b[38;2;166;226;46mNum_Layers\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m Natural;\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mwith\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mprocedure\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mLog\u001b[0m\u001b[38;2;248;248;242m (S : String; L :  Integer := \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m; Deindent : Integer := \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\u001b[38;2;249;38;114mpackage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mClick\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mtype\u001b[0m\u001b[38;2;248;248;242m Keys_T \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mrecord\u001b[0m\n\u001b[38;2;249;38;114m      \u001b[0m\u001b[38;2;166;226;46mCols\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m Cols_T;\u001b[0m\n\u001b[38;2;249;38;114m      \u001b[0m\u001b[38;2;166;226;46mRows\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m Rows_T;\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mend record\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;249;38;114m   \u001b[0m\u001b[38;2;166;226;46mKeys\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m Keys_T :=\u001b[0m\n\u001b[38;2;248;248;242m     (Rows => Rows, Cols => Cols);\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mtype\u001b[0m\u001b[38;2;248;248;242m Key_Matrix \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114marray\u001b[0m\u001b[38;2;248;248;242m (ColR, RowR) \u001b[0m\u001b[38;2;249;38;114mof\u001b[0m\u001b[38;2;248;248;242m Boolean;\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m------------------------\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  Events & Debouncing --\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m------------------------\u001b[0m\n\n\u001b[38;2;249;38;114m   \u001b[0m\u001b[38;2;166;226;46mMaxEvents\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mconstant\u001b[0m\u001b[38;2;248;248;242m Positive := \u001b[0m\u001b[38;2;190;132;255m20\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mtype\u001b[0m\u001b[38;2;248;248;242m EventT \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\u001b[38;2;248;248;242m (Press, Release);\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mtype\u001b[0m\u001b[38;2;248;248;242m Event \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mrecord\u001b[0m\n\u001b[38;2;249;38;114m      \u001b[0m\u001b[38;2;166;226;46mEvt\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m EventT;\u001b[0m\n\u001b[38;2;249;38;114m      \u001b[0m\u001b[38;2;166;226;46mCol\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m ColR;\u001b[0m\n\u001b[38;2;249;38;114m      \u001b[0m\u001b[38;2;166;226;46mRow\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m RowR;\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mend record\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mtype\u001b[0m\u001b[38;2;248;248;242m Events \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114marray\u001b[0m\u001b[38;2;248;248;242m (Natural \u001b[0m\u001b[38;2;249;38;114mrange\u001b[0m\u001b[38;2;248;248;242m <>) \u001b[0m\u001b[38;2;249;38;114mof\u001b[0m\u001b[38;2;248;248;242m Event;\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mGet_Events\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m Events;\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mUpdate\u001b[0m\u001b[38;2;248;248;242m (NewS : Key_Matrix) \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m Boolean;\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m-----------\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  Layout --\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m-----------\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m-------------\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  Keycodes --\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m-------------\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  Keycodes copy/pasted from the excelent Keyberon Rust firmware:\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  https://github.com/TeXitoi/keyberon/\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mtype\u001b[0m\u001b[38;2;248;248;242m Key_Code_T \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\n\u001b[38;2;248;248;242m     (\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m   The \"no\" key, a placeholder to express nothing.\u001b[0m\n\u001b[38;2;248;248;242m      No, \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  = 0x00,\u001b[0m\n\u001b[38;2;248;248;242m          \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  / Error if too much keys are pressed at\u001b[0m\n\u001b[38;2;248;248;242m          \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  the same time.\u001b[0m\n\u001b[38;2;248;248;242m      ErrorRollOver,\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  / The POST fail error.\u001b[0m\n\u001b[38;2;248;248;242m      PostFail,\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  / An undefined error occured.\u001b[0m\n\u001b[38;2;248;248;242m      ErrorUndefined,\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  / `a` and `A`.\u001b[0m\n\u001b[38;2;248;248;242m      A,\u001b[0m\n\u001b[38;2;248;248;242m      B,\u001b[0m\n\u001b[38;2;248;248;242m      C,\u001b[0m\n\u001b[38;2;248;248;242m      D,\u001b[0m\n\u001b[38;2;248;248;242m      E,\u001b[0m\n\u001b[38;2;248;248;242m      F,\u001b[0m\n\u001b[38;2;248;248;242m      G,\u001b[0m\n\u001b[38;2;248;248;242m      H,\u001b[0m\n\u001b[38;2;248;248;242m      I,\u001b[0m\n\u001b[38;2;248;248;242m      J,\u001b[0m\n\u001b[38;2;248;248;242m      K,\u001b[0m\n\u001b[38;2;248;248;242m      L,\u001b[0m\n\u001b[38;2;248;248;242m      M, \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  0x10\u001b[0m\n\u001b[38;2;248;248;242m      N,\u001b[0m\n\u001b[38;2;248;248;242m      O,\u001b[0m\n\u001b[38;2;248;248;242m      P,\u001b[0m\n\u001b[38;2;248;248;242m      Q,\u001b[0m\n\u001b[38;2;248;248;242m      R,\u001b[0m\n\u001b[38;2;248;248;242m      S,\u001b[0m\n\u001b[38;2;248;248;242m      T,\u001b[0m\n\u001b[38;2;248;248;242m      U,\u001b[0m\n\u001b[38;2;248;248;242m      V,\u001b[0m\n\u001b[38;2;248;248;242m      W,\u001b[0m\n\u001b[38;2;248;248;242m      X,\u001b[0m\n\u001b[38;2;248;248;242m      Y,\u001b[0m\n\u001b[38;2;248;248;242m      Z,\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m   `1` and `!`.\u001b[0m\n\u001b[38;2;248;248;242m      Kb1,\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m   `2` and `@`.\u001b[0m\n\u001b[38;2;248;248;242m      Kb2,\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m   `3` and `#`.\u001b[0m\n\u001b[38;2;248;248;242m      Kb3, \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  0x20\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  / `4` and `$`.\u001b[0m\n\u001b[38;2;248;248;242m      Kb4,\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m   `5` and `%`.\u001b[0m\n\u001b[38;2;248;248;242m      Kb5,\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m   `6` and `^`.\u001b[0m\n\u001b[38;2;248;248;242m      Kb6,\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m   `7` and `&`.\u001b[0m\n\u001b[38;2;248;248;242m      Kb7,\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m   `8` and `*`.\u001b[0m\n\u001b[38;2;248;248;242m      Kb8,\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m   `9` and `(`.\u001b[0m\n\u001b[38;2;248;248;242m      Kb9,\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m   `0` and `)`.\u001b[0m\n\u001b[38;2;248;248;242m      Kb0,\u001b[0m\n\u001b[38;2;248;248;242m      Enter,\u001b[0m\n\u001b[38;2;248;248;242m      Escape,\u001b[0m\n\u001b[38;2;248;248;242m      BSpace,\u001b[0m\n\u001b[38;2;248;248;242m      Tab,\u001b[0m\n\u001b[38;2;248;248;242m      Space,\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m   `-` and `_`.\u001b[0m\n\u001b[38;2;248;248;242m      Minus,\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m   `=` and `+`.\u001b[0m\n\u001b[38;2;248;248;242m      Equal,\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m   `[` and `{`.\u001b[0m\n\u001b[38;2;248;248;242m      LBracket,\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m   `]` and `}`.\u001b[0m\n\u001b[38;2;248;248;242m      RBracket, \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  0x30\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  / `\\` and `|`.\u001b[0m\n\u001b[38;2;248;248;242m      Bslash,\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m   Non-US `#` and `~` (Typically near the Enter key).\u001b[0m\n\u001b[38;2;248;248;242m      NonUsHash,\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m   `;` and `:`.\u001b[0m\n\u001b[38;2;248;248;242m      SColon,\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m   `'` and `\"`.\u001b[0m\n\u001b[38;2;248;248;242m      Quote,\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  How to have ` as code?\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m   \\` and `~`.\u001b[0m\n\u001b[38;2;248;248;242m      Grave,\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m   `,` and `<`.\u001b[0m\n\u001b[38;2;248;248;242m      Comma,\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m   `.` and `>`.\u001b[0m\n\u001b[38;2;248;248;242m      Dot,\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m   `/` and `?`.\u001b[0m\n\u001b[38;2;248;248;242m      Slash,\u001b[0m\n\u001b[38;2;248;248;242m      CapsLock,\u001b[0m\n\u001b[38;2;248;248;242m      F1,\u001b[0m\n\u001b[38;2;248;248;242m      F2,\u001b[0m\n\u001b[38;2;248;248;242m      F3,\u001b[0m\n\u001b[38;2;248;248;242m      F4,\u001b[0m\n\u001b[38;2;248;248;242m      F5,\u001b[0m\n\u001b[38;2;248;248;242m      F6,\u001b[0m\n\u001b[38;2;248;248;242m      F7, \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  0x40\u001b[0m\n\u001b[38;2;248;248;242m      F8,\u001b[0m\n\u001b[38;2;248;248;242m      F9,\u001b[0m\n\u001b[38;2;248;248;242m      F10,\u001b[0m\n\u001b[38;2;248;248;242m      F11,\u001b[0m\n\u001b[38;2;248;248;242m      F12,\u001b[0m\n\u001b[38;2;248;248;242m      PScreen,\u001b[0m\n\u001b[38;2;248;248;242m      ScrollLock,\u001b[0m\n\u001b[38;2;248;248;242m      Pause,\u001b[0m\n\u001b[38;2;248;248;242m      Insert,\u001b[0m\n\u001b[38;2;248;248;242m      Home,\u001b[0m\n\u001b[38;2;248;248;242m      PgUp,\u001b[0m\n\u001b[38;2;248;248;242m      Delete,\u001b[0m\n\u001b[38;2;248;248;242m      Endd,\u001b[0m\n\u001b[38;2;248;248;242m      PgDown,\u001b[0m\n\u001b[38;2;248;248;242m      Right,\u001b[0m\n\u001b[38;2;248;248;242m      Left, \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  0x50\u001b[0m\n\u001b[38;2;248;248;242m      Down,\u001b[0m\n\u001b[38;2;248;248;242m      Up,\u001b[0m\n\u001b[38;2;248;248;242m      NumLock,\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m   Keypad `/`\u001b[0m\n\u001b[38;2;248;248;242m      KpSlash,\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m   Keypad `*`\u001b[0m\n\u001b[38;2;248;248;242m      KpAsterisk,\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m   Keypad `-`.\u001b[0m\n\u001b[38;2;248;248;242m      KpMinus,\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m   Keypad `+`.\u001b[0m\n\u001b[38;2;248;248;242m      KpPlus,\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m   Keypad enter.\u001b[0m\n\u001b[38;2;248;248;242m      KpEnter,\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m   Keypad 1.\u001b[0m\n\u001b[38;2;248;248;242m      Kp1,\u001b[0m\n\u001b[38;2;248;248;242m      Kp2,\u001b[0m\n\u001b[38;2;248;248;242m      Kp3,\u001b[0m\n\u001b[38;2;248;248;242m      Kp4,\u001b[0m\n\u001b[38;2;248;248;242m      Kp5,\u001b[0m\n\u001b[38;2;248;248;242m      Kp6,\u001b[0m\n\u001b[38;2;248;248;242m      Kp7,\u001b[0m\n\u001b[38;2;248;248;242m      Kp8, \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  0x60\u001b[0m\n\u001b[38;2;248;248;242m      Kp9,\u001b[0m\n\u001b[38;2;248;248;242m      Kp0,\u001b[0m\n\u001b[38;2;248;248;242m      KpDot,\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m   Non-US `\\` and `|` (Typically near the Left-Shift key)\u001b[0m\n\u001b[38;2;248;248;242m      NonUsBslash,\u001b[0m\n\u001b[38;2;248;248;242m      Application, \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  0x65\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  / not a key, used for errors\u001b[0m\n\u001b[38;2;248;248;242m      Power,\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m   Keypad `=`.\u001b[0m\n\u001b[38;2;248;248;242m      KpEqual,\u001b[0m\n\u001b[38;2;248;248;242m      F13,\u001b[0m\n\u001b[38;2;248;248;242m      F14,\u001b[0m\n\u001b[38;2;248;248;242m      F15,\u001b[0m\n\u001b[38;2;248;248;242m      F16,\u001b[0m\n\u001b[38;2;248;248;242m      F17,\u001b[0m\n\u001b[38;2;248;248;242m      F18,\u001b[0m\n\u001b[38;2;248;248;242m      F19,\u001b[0m\n\u001b[38;2;248;248;242m      F20,\u001b[0m\n\u001b[38;2;248;248;242m      F21, \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  0x70\u001b[0m\n\u001b[38;2;248;248;242m      F22,\u001b[0m\n\u001b[38;2;248;248;242m      F23,\u001b[0m\n\u001b[38;2;248;248;242m      F24,\u001b[0m\n\u001b[38;2;248;248;242m      Execute,\u001b[0m\n\u001b[38;2;248;248;242m      Help,\u001b[0m\n\u001b[38;2;248;248;242m      Menu,\u001b[0m\n\u001b[38;2;248;248;242m      Selectt,\u001b[0m\n\u001b[38;2;248;248;242m      Stop,\u001b[0m\n\u001b[38;2;248;248;242m      Again,\u001b[0m\n\u001b[38;2;248;248;242m      Undo,\u001b[0m\n\u001b[38;2;248;248;242m      Cut,\u001b[0m\n\u001b[38;2;248;248;242m      Copy,\u001b[0m\n\u001b[38;2;248;248;242m      Paste,\u001b[0m\n\u001b[38;2;248;248;242m      Find,\u001b[0m\n\u001b[38;2;248;248;242m      Mute,\u001b[0m\n\u001b[38;2;248;248;242m      VolUp, \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  0x80\u001b[0m\n\u001b[38;2;248;248;242m      VolDown,\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m   Deprecated.\u001b[0m\n\u001b[38;2;248;248;242m      LockingCapsLock,\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m   Deprecated.\u001b[0m\n\u001b[38;2;248;248;242m      LockingNumLock,\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m   Deprecated.\u001b[0m\n\u001b[38;2;248;248;242m      LockingScrollLock,\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  / Keypad `,`, also used for the\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  brazilian keypad period (.) key.\u001b[0m\n\u001b[38;2;248;248;242m      KpComma,\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m   Used on AS/400 keyboard\u001b[0m\n\u001b[38;2;248;248;242m      KpEqualSign,\u001b[0m\n\u001b[38;2;248;248;242m      Intl1,\u001b[0m\n\u001b[38;2;248;248;242m      Intl2,\u001b[0m\n\u001b[38;2;248;248;242m      Intl3,\u001b[0m\n\u001b[38;2;248;248;242m      Intl4,\u001b[0m\n\u001b[38;2;248;248;242m      Intl5,\u001b[0m\n\u001b[38;2;248;248;242m      Intl6,\u001b[0m\n\u001b[38;2;248;248;242m      Intl7,\u001b[0m\n\u001b[38;2;248;248;242m      Intl8,\u001b[0m\n\u001b[38;2;248;248;242m      Intl9,\u001b[0m\n\u001b[38;2;248;248;242m      Lang1, \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  0x90\u001b[0m\n\u001b[38;2;248;248;242m      Lang2,\u001b[0m\n\u001b[38;2;248;248;242m      Lang3,\u001b[0m\n\u001b[38;2;248;248;242m      Lang4,\u001b[0m\n\u001b[38;2;248;248;242m      Lang5,\u001b[0m\n\u001b[38;2;248;248;242m      Lang6,\u001b[0m\n\u001b[38;2;248;248;242m      Lang7,\u001b[0m\n\u001b[38;2;248;248;242m      Lang8,\u001b[0m\n\u001b[38;2;248;248;242m      Lang9,\u001b[0m\n\u001b[38;2;248;248;242m      AltErase,\u001b[0m\n\u001b[38;2;248;248;242m      SysReq,\u001b[0m\n\u001b[38;2;248;248;242m      Cancel,\u001b[0m\n\u001b[38;2;248;248;242m      Clear,\u001b[0m\n\u001b[38;2;248;248;242m      Prior,\u001b[0m\n\u001b[38;2;248;248;242m      Returnn,\u001b[0m\n\u001b[38;2;248;248;242m      Separator,\u001b[0m\n\u001b[38;2;248;248;242m      Outt, \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  0xA0\u001b[0m\n\u001b[38;2;248;248;242m      Oper,\u001b[0m\n\u001b[38;2;248;248;242m      ClearAgain,\u001b[0m\n\u001b[38;2;248;248;242m      CrSel,\u001b[0m\n\u001b[38;2;248;248;242m      ExSel,\u001b[0m\n\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  According to QMK, 0xA5-0xDF are not\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  usable on modern keyboards\u001b[0m\n\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  Modifiers\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m   Left Control.\u001b[0m\n\u001b[38;2;248;248;242m      LCtrl, \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  = 0xE0,\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  / Left Shift.\u001b[0m\n\u001b[38;2;248;248;242m      LShift,\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m   Left Alt.\u001b[0m\n\u001b[38;2;248;248;242m      LAlt,\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m   Left GUI (the Windows key).\u001b[0m\n\u001b[38;2;248;248;242m      LGui,\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m   Right Control.\u001b[0m\n\u001b[38;2;248;248;242m      RCtrl,\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m   Right Shift.\u001b[0m\n\u001b[38;2;248;248;242m      RShift,\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m   Right Alt (or Alt Gr). \u001b[0m\n\u001b[38;2;248;248;242m      RAlt,\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m   Right GUI (the Windows key).\u001b[0m\n\u001b[38;2;248;248;242m      RGui, \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  0xE7\u001b[0m\n\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  Unofficial\u001b[0m\n\u001b[38;2;248;248;242m      MediaPlayPause, \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m   0xE8,\u001b[0m\n\u001b[38;2;248;248;242m      MediaStopCD,\u001b[0m\n\u001b[38;2;248;248;242m      MediaPreviousSong,\u001b[0m\n\u001b[38;2;248;248;242m      MediaNextSong,\u001b[0m\n\u001b[38;2;248;248;242m      MediaEjectCD,\u001b[0m\n\u001b[38;2;248;248;242m      MediaVolUp,\u001b[0m\n\u001b[38;2;248;248;242m      MediaVolDown,\u001b[0m\n\u001b[38;2;248;248;242m      MediaMute,\u001b[0m\n\u001b[38;2;248;248;242m      MediaWWW, \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  0xF0\u001b[0m\n\u001b[38;2;248;248;242m      MediaBack,\u001b[0m\n\u001b[38;2;248;248;242m      MediaForward,\u001b[0m\n\u001b[38;2;248;248;242m      MediaStop,\u001b[0m\n\u001b[38;2;248;248;242m      MediaFind,\u001b[0m\n\u001b[38;2;248;248;242m      MediaScrollUp,\u001b[0m\n\u001b[38;2;248;248;242m      MediaScrollDown,\u001b[0m\n\u001b[38;2;248;248;242m      MediaEdit,\u001b[0m\n\u001b[38;2;248;248;242m      MediaSleep,\u001b[0m\n\u001b[38;2;248;248;242m      MediaCoffee,\u001b[0m\n\u001b[38;2;248;248;242m      MediaRefresh,\u001b[0m\n\u001b[38;2;248;248;242m      MediaCalc \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  0xFB\u001b[0m\n\u001b[38;2;248;248;242m     );\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mtype\u001b[0m\u001b[38;2;248;248;242m Action_Type \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\u001b[38;2;248;248;242m (Key, No_Op, Trans, Layer, Multiple_Actions);\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m   Should be a discriminated type\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mtype\u001b[0m\u001b[38;2;248;248;242m Action \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mrecord\u001b[0m\n\u001b[38;2;249;38;114m      \u001b[0m\u001b[38;2;166;226;46mT\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m Action_Type; \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  hould be the discriminant\u001b[0m\n\u001b[38;2;249;38;114m      \u001b[0m\u001b[38;2;166;226;46mC\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m Key_Code_T;\u001b[0m\n\u001b[38;2;249;38;114m      \u001b[0m\u001b[38;2;166;226;46mL\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m Natural;\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mend record\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mKw\u001b[0m\u001b[38;2;248;248;242m (Code : Key_Code_T) \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m Action;\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mLw\u001b[0m\u001b[38;2;248;248;242m (V : Natural) \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m Action;\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mtype\u001b[0m\u001b[38;2;248;248;242m Key_Modifiers \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114marray\u001b[0m\u001b[38;2;248;248;242m (Natural \u001b[0m\u001b[38;2;249;38;114mrange\u001b[0m\u001b[38;2;248;248;242m <>) \u001b[0m\u001b[38;2;249;38;114mof\u001b[0m\u001b[38;2;248;248;242m USB.Device.HID.Keyboard.Modifiers;\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mtype\u001b[0m\u001b[38;2;248;248;242m Key_Codes_T \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114marray\u001b[0m\u001b[38;2;248;248;242m (Natural \u001b[0m\u001b[38;2;249;38;114mrange\u001b[0m\u001b[38;2;248;248;242m <>) \u001b[0m\u001b[38;2;249;38;114mof\u001b[0m\u001b[38;2;248;248;242m Key_Code_T;\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114msubtype\u001b[0m\u001b[38;2;248;248;242m Ac \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\u001b[38;2;248;248;242m Action;\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mtype\u001b[0m\u001b[38;2;248;248;242m Layout \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114marray\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m .. Num_Layers - \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, RowR, ColR) \u001b[0m\u001b[38;2;249;38;114mof\u001b[0m\u001b[38;2;248;248;242m Action;\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mprocedure\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mRegister_Events\u001b[0m\u001b[38;2;248;248;242m (L : Layout; Es : Events);\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mprocedure\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTick\u001b[0m\u001b[38;2;248;248;242m (L : Layout);\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mGet_Key_Codes\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m Key_Codes_T;\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mGet_Modifiers\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m Key_Modifiers;\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mprocedure\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mInit\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mClick\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Ada/click.gpr",
    "content": "\u001b[38;2;249;38;114mwith\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mconfig/click_config.gpr\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242mproject Click \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m Library_Name \u001b[0m\u001b[38;2;249;38;114muse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mClick\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m Library_Version \u001b[0m\u001b[38;2;249;38;114muse\u001b[0m\u001b[38;2;248;248;242m Project'Library_Name & \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m.so.\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m & Click_Config.Crate_Version;\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m Source_Dirs \u001b[0m\u001b[38;2;249;38;114muse\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116msrc/\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mconfig/\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m Object_Dir \u001b[0m\u001b[38;2;249;38;114muse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mobj/\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m & Click_Config.Build_Profile;\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m Create_Missing_Dirs \u001b[0m\u001b[38;2;249;38;114muse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mTrue\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m Library_Dir \u001b[0m\u001b[38;2;249;38;114muse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mlib\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mtype\u001b[0m\u001b[38;2;248;248;242m Library_Type_Type \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mrelocatable\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mstatic\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mstatic-pic\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\u001b[38;2;249;38;114m   \u001b[0m\u001b[38;2;166;226;46mLibrary_Type\u001b[0m\u001b[38;2;249;38;114m :\u001b[0m\u001b[38;2;248;248;242m Library_Type_Type :=\u001b[0m\n\u001b[38;2;248;248;242m     external (\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mCLICK_LIBRARY_TYPE\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m, external (\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mLIBRARY_TYPE\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mstatic\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m));\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m Library_Kind \u001b[0m\u001b[38;2;249;38;114muse\u001b[0m\u001b[38;2;248;248;242m Library_Type;\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mpackage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mCompiler\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m Default_Switches (\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mAda\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114muse\u001b[0m\u001b[38;2;248;248;242m Click_Config.Ada_Compiler_Switches & (\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m-gnatX\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m-gnat2022\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mCompiler\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mpackage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mBinder\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m Switches (\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mAda\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114muse\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m-Es\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m); \u001b[0m\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m  Symbolic traceback\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mBinder\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mpackage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mInstall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m Artifacts (\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114muse\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mshare\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mInstall\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mClick\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Apache/httpd.conf",
    "content": "\u001b[38;2;117;113;94m# This is a comment\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\n\u001b[38;2;249;38;114mServerRoot\u001b[0m\u001b[38;2;248;248;242m \"\"\u001b[0m\n\u001b[38;2;249;38;114mListen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m80\u001b[0m\n\u001b[38;2;249;38;114mLoadModule\u001b[0m\u001b[38;2;248;248;242m mpm_event_module /usr/lib/apache2/modules/mod_mpm_event.so\u001b[0m\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;166;226;46mIfModule\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116munixd_module\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;249;38;114mUser\u001b[0m\u001b[38;2;248;248;242m daemon\u001b[0m\n\u001b[38;2;249;38;114mGroup\u001b[0m\u001b[38;2;248;248;242m daemon\u001b[0m\n\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;166;226;46mIfModule\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;249;38;114mServerAdmin\u001b[0m\u001b[38;2;248;248;242m you@example.com\u001b[0m\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;166;226;46mDirectory\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m/\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mAllowOverride\u001b[0m\u001b[38;2;248;248;242m none\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mRequire\u001b[0m\u001b[38;2;248;248;242m all denied\u001b[0m\n\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;166;226;46mDirectory\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;249;38;114mDocumentRoot\u001b[0m\u001b[38;2;248;248;242m \"/usr/share/apache2/default-site/htdocs\"\u001b[0m\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;166;226;46mDirectory\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"/usr/share/apache2/default-site/htdocs\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mOptions\u001b[0m\u001b[38;2;248;248;242m Indexes FollowSymLinks\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mAllowOverride\u001b[0m\u001b[38;2;248;248;242m None\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mRequire\u001b[0m\u001b[38;2;248;248;242m all granted\u001b[0m\n\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;166;226;46mDirectory\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;166;226;46mFiles\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\".ht*\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mRequire\u001b[0m\u001b[38;2;248;248;242m all denied\u001b[0m\n\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;166;226;46mFiles\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;249;38;114mErrorLog\u001b[0m\u001b[38;2;248;248;242m \"/var/log/apache2/error_log\"\u001b[0m\n\u001b[38;2;249;38;114mLogLevel\u001b[0m\u001b[38;2;248;248;242m warn\u001b[0m\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;166;226;46mIfModule\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mlog_config_module\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mLogFormat\u001b[0m\u001b[38;2;248;248;242m \"%h %l %u %t \\\"%r\\\" %>s %b \\\"\u001b[0m\u001b[38;2;248;248;242m%{\u001b[0m\u001b[38;2;248;248;242mReferer\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242mi\\\" \\\"\u001b[0m\u001b[38;2;248;248;242m%{\u001b[0m\u001b[38;2;248;248;242mUser-Agent\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242mi\\\"\" combined\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mCustomLog\u001b[0m\u001b[38;2;248;248;242m \"/var/log/apache2/access_log\" common\u001b[0m\n\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;166;226;46mIfModule\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;166;226;46mIfModule\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116malias_module\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mScriptAlias\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m/cgi-bin/\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"/usr/lib/cgi-bin/\"\u001b[0m\n\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;166;226;46mIfModule\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;166;226;46mIfModule\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mmime_module\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mTypesConfig\u001b[0m\u001b[38;2;248;248;242m /etc/apache2/mime.types\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mAddType\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mapplication/x-compress\u001b[0m\u001b[38;2;248;248;242m .Z\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mAddOutputFilter\u001b[0m\u001b[38;2;248;248;242m INCLUDES .shtml\u001b[0m\n\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;166;226;46mIfModule\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;166;226;46mIfModule\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mproxy_html_module\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;249;38;114mInclude\u001b[0m\u001b[38;2;248;248;242m /etc/apache2/extra/proxy-html.conf\u001b[0m\n\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;166;226;46mIfModule\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/AppleScript/test.applescript",
    "content": "\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m This is a comment\u001b[0m\n\n\u001b[38;2;249;38;114mproperty\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdefaultClientName\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mMary Smith\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\n\u001b[38;2;249;38;114mon\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mgreetClient\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mnameOfClient\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239mdisplay dialog\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mHello \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m&\u001b[0m\u001b[38;2;248;248;242m nameOfClient \u001b[0m\u001b[38;2;249;38;114m&\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m!\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m greetClient\u001b[0m\n\n\n\u001b[38;2;249;38;114mscript\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtestGreet\u001b[0m\n\u001b[38;2;248;248;242m    greetClient\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mdefaultClientName\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114mend script\u001b[0m\n\n\u001b[38;2;102;217;239mrun\u001b[0m\u001b[38;2;248;248;242m testGreet\u001b[0m\n\u001b[38;2;248;248;242mgreetClient\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mJoe Jones\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;249;38;114mset\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mmyList\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mto\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mwhat\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;249;38;114mset\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mbeginning\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mof\u001b[0m\u001b[38;2;248;248;242m myList \u001b[0m\u001b[38;2;249;38;114mto\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;249;38;114mset\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mof\u001b[0m\u001b[38;2;248;248;242m myList \u001b[0m\u001b[38;2;249;38;114mto\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mfour\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\n\u001b[38;2;248;248;242mmyList\u001b[0m\n\n\u001b[38;2;249;38;114mtell\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mapplication\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mTextEdit\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;166;226;46mparagraph\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mof\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mdocument\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\u001b[38;2;249;38;114mend tell\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/AsciiDoc/test.adoc",
    "content": "\u001b[38;2;253;151;31m=\u001b[0m\u001b[38;2;253;151;31m \u001b[0m\u001b[38;2;253;151;31mThis is the document title\u001b[0m\n\u001b[38;2;248;248;242mAuthor McAuthorson <author@author.org>\u001b[0m\n\n\u001b[38;2;253;151;31m==\u001b[0m\u001b[38;2;253;151;31m \u001b[0m\u001b[38;2;253;151;31mTable of Content\u001b[0m\n\n\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242mtoc\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\n\u001b[38;2;253;151;31m==\u001b[0m\u001b[38;2;253;151;31m \u001b[0m\u001b[38;2;253;151;31mParagraphs\u001b[0m\n\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m.lead\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242mThis text will be styled as a lead paragraph with a larger font.\u001b[0m\n\n\u001b[38;2;248;248;242mThis is a normal paragraph.\u001b[0m\n\n\u001b[38;2;248;248;242m This is a literal paragraph that is offset by one space, \u001b[0m\n\u001b[38;2;248;248;242m it will be rendered in a fixed-width font.\u001b[0m\n\n\u001b[38;2;102;217;239mNOTE:\u001b[0m\u001b[38;2;248;248;242m This is an admonition paragraph\u001b[0m\n\n\u001b[38;2;102;217;239mTIP:\u001b[0m\u001b[38;2;248;248;242m This is another admonition paragraph\u001b[0m\n\n\u001b[38;2;253;151;31m==\u001b[0m\u001b[38;2;253;151;31m \u001b[0m\u001b[38;2;253;151;31mFormatted text\u001b[0m\n\n\u001b[1;38;2;249;38;114m*\u001b[0m\u001b[1;38;2;249;38;114mbold text\u001b[0m\u001b[1;38;2;249;38;114m*\u001b[0m\n\n\u001b[3;38;2;228;46;112m_\u001b[0m\u001b[3;38;2;228;46;112mitalic text\u001b[0m\u001b[3;38;2;228;46;112m_\u001b[0m\n\n\u001b[1;38;2;249;38;114m*\u001b[0m\u001b[3;38;2;228;46;112m_\u001b[0m\u001b[3;38;2;228;46;112mbold italic text\u001b[0m\u001b[3;38;2;228;46;112m_\u001b[0m\u001b[1;38;2;249;38;114m*\u001b[0m\n\n\u001b[38;2;230;219;116m`\u001b[0m\u001b[38;2;230;219;116mmonospace text\u001b[0m\u001b[38;2;230;219;116m`\u001b[0m\n\n\u001b[38;2;230;219;116m`\u001b[0m\u001b[1;38;2;249;38;114m*\u001b[0m\u001b[1;38;2;249;38;114mbold monospace\u001b[0m\u001b[1;38;2;249;38;114m*\u001b[0m\u001b[38;2;230;219;116m`\u001b[0m\n\n\u001b[38;2;230;219;116m`\u001b[0m\u001b[3;38;2;228;46;112m_\u001b[0m\u001b[3;38;2;228;46;112mitalic monospace\u001b[0m\u001b[3;38;2;228;46;112m_\u001b[0m\u001b[38;2;230;219;116m`\u001b[0m\n\n\u001b[38;2;230;219;116m`\u001b[0m\u001b[1;38;2;249;38;114m*\u001b[0m\u001b[3;38;2;228;46;112m_\u001b[0m\u001b[3;38;2;228;46;112mbold and italic monospace\u001b[0m\u001b[3;38;2;228;46;112m_\u001b[0m\u001b[1;38;2;249;38;114m*\u001b[0m\u001b[38;2;230;219;116m`\u001b[0m\n\n\u001b[38;2;248;248;242mThe following word is \u001b[0m\u001b[38;2;230;219;116m#\u001b[0m\u001b[38;2;230;219;116mhighlighted\u001b[0m\u001b[38;2;230;219;116m#\u001b[0m\n\n\u001b[38;2;248;248;242mThe following words are \u001b[0m\u001b[38;2;230;219;116m[.small]\u001b[0m\u001b[38;2;230;219;116m#\u001b[0m\u001b[38;2;230;219;116msmall print\u001b[0m\u001b[38;2;230;219;116m#\u001b[0m\n\n\u001b[38;2;248;248;242mThe following word is \u001b[0m\u001b[38;2;230;219;116m[.underline]\u001b[0m\u001b[38;2;230;219;116m#\u001b[0m\u001b[38;2;230;219;116munderlined\u001b[0m\u001b[38;2;230;219;116m#\u001b[0m\n\n\u001b[38;2;248;248;242mThe following word is \u001b[0m\u001b[38;2;230;219;116m[.line-through]\u001b[0m\u001b[38;2;230;219;116m#\u001b[0m\u001b[38;2;230;219;116mline-through\u001b[0m\u001b[38;2;230;219;116m#\u001b[0m\n\n\u001b[38;2;248;248;242mThe following word is \u001b[0m\u001b[38;2;230;219;116m[.big]\u001b[0m\u001b[38;2;230;219;116m#\u001b[0m\u001b[38;2;230;219;116mbig\u001b[0m\u001b[38;2;230;219;116m#\u001b[0m\n\n\u001b[38;2;248;248;242mThe following word is printed in \u001b[0m\u001b[38;2;230;219;116m^\u001b[0m\u001b[38;2;230;219;116msuperscript^\u001b[0m\n\n\u001b[38;2;248;248;242mThe following word is printed in \u001b[0m\u001b[38;2;230;219;116m~\u001b[0m\u001b[38;2;230;219;116msub-script\u001b[0m\u001b[38;2;230;219;116m~\u001b[0m\n\n\u001b[38;2;253;151;31m==\u001b[0m\u001b[38;2;253;151;31m \u001b[0m\u001b[38;2;253;151;31mInclude\u001b[0m\n\n\u001b[38;2;249;38;114minclude\u001b[0m\u001b[38;2;190;132;255m::\u001b[0m\u001b[4;38;2;166;226;46mnot_existing.adoc\u001b[0m\u001b[38;2;190;132;255m[\u001b[0m\u001b[38;2;190;132;255m]\u001b[0m\n\n\u001b[38;2;253;151;31m==\u001b[0m\u001b[38;2;253;151;31m \u001b[0m\u001b[38;2;253;151;31mBreaks\u001b[0m\n\u001b[38;2;248;248;242mHere we have a \u001b[0m\u001b[38;2;248;248;242m+\u001b[0m\n\u001b[38;2;248;248;242mline break.\u001b[0m\n\n\u001b[38;2;248;248;242mBelow is a horizontal rule.\u001b[0m\n\n\u001b[1;38;2;255;255;255m'''\u001b[0m\n\n\u001b[38;2;248;248;242mAnd below here is a page break.\u001b[0m\n\n\u001b[1;38;2;255;255;255m<<<\u001b[0m\n\n\u001b[38;2;253;151;31m==\u001b[0m\u001b[38;2;253;151;31m \u001b[0m\u001b[38;2;253;151;31mLists\u001b[0m\n\n\u001b[38;2;190;132;255m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mThis is\u001b[0m\n\u001b[38;2;190;132;255m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242man unordered\u001b[0m\n\u001b[38;2;190;132;255m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mlist\u001b[0m\n\u001b[38;2;190;132;255m**\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mwith nested\u001b[0m\n\u001b[38;2;190;132;255m***\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242melements\u001b[0m\n\n\u001b[1;38;2;255;255;255m'''\u001b[0m\n\n\u001b[38;2;190;132;255m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mThis is also an\u001b[0m\n\u001b[38;2;190;132;255m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242munordered\u001b[0m\n\u001b[38;2;190;132;255m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mlist\u001b[0m\n\n\u001b[1;38;2;255;255;255m'''\u001b[0m\n\n\u001b[38;2;190;132;255m.\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mAnd this is\u001b[0m\n\u001b[38;2;190;132;255m.\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242man ordered\u001b[0m\n\u001b[38;2;190;132;255m.\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mlist\u001b[0m\n\u001b[38;2;190;132;255m..\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mwith nested\u001b[0m\n\u001b[38;2;190;132;255m...\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242melements\u001b[0m\n\n\u001b[1;38;2;255;255;255m'''\u001b[0m\n\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m* [*] checked\u001b[0m\n\u001b[38;2;190;132;255m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[x] also checked\u001b[0m\n\u001b[38;2;190;132;255m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[ ] not checked\u001b[0m\n\u001b[38;2;190;132;255m*\u001b[0m\u001b[38;2;248;248;242m     \u001b[0m\u001b[38;2;248;248;242mnormal list item\u001b[0m\n\n\u001b[1;38;2;255;255;255m'''\u001b[0m\n\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mqanda\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242mWhat is this?\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\n\u001b[38;2;248;248;242m  This is a Q&A\u001b[0m\n\u001b[38;2;248;248;242mAnd what is this?\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mAlso a Q&A\u001b[0m\n\n\u001b[38;2;253;151;31m==\u001b[0m\u001b[38;2;253;151;31m \u001b[0m\u001b[38;2;253;151;31mLinks\u001b[0m\n\u001b[38;2;248;248;242mThe following link will be created automatically: https://asciidoctor.org\u001b[0m\n\n\u001b[38;2;253;151;31m.\u001b[0m\u001b[38;2;253;151;31mAn image caption\u001b[0m\n\u001b[38;2;249;38;114mimage\u001b[0m\u001b[38;2;190;132;255m::\u001b[0m\u001b[4;38;2;166;226;46mnot_existing.jpg\u001b[0m\u001b[38;2;190;132;255m[\u001b[0m\u001b[3;38;2;253;151;31malt text\u001b[0m\u001b[38;2;190;132;255m]\u001b[0m\n\n\u001b[38;2;253;151;31m.\u001b[0m\u001b[38;2;253;151;31mA video caption\u001b[0m\n\u001b[38;2;249;38;114mvideo\u001b[0m\u001b[38;2;190;132;255m::\u001b[0m\u001b[4;38;2;166;226;46mnot_existing.mp4\u001b[0m\u001b[38;2;190;132;255m[\u001b[0m\u001b[3;38;2;253;151;31malt text\u001b[0m\u001b[38;2;190;132;255m]\u001b[0m\n\n\u001b[38;2;253;151;31m==\u001b[0m\u001b[38;2;253;151;31m \u001b[0m\u001b[38;2;253;151;31mSource Code\u001b[0m\n\u001b[38;2;248;248;242mThe following word is \u001b[0m\u001b[38;2;230;219;116m`\u001b[0m\u001b[38;2;230;219;116mmonospace\u001b[0m\u001b[38;2;230;219;116m`\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\n\u001b[38;2;102;217;239m....\u001b[0m\n\u001b[38;2;230;219;116mThis is a literal block\u001b[0m\n\u001b[38;2;230;219;116mwhere linebreaks are rendered\u001b[0m\n\u001b[38;2;102;217;239m....\u001b[0m\n\n\u001b[38;2;253;151;31m.\u001b[0m\u001b[38;2;253;151;31mexample.java\u001b[0m\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242msource,java\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m----\u001b[0m\n\u001b[38;2;248;248;242mpublic class Example { // \u001b[0m\u001b[38;2;190;132;255m<\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;190;132;255m>\u001b[0m\n\u001b[38;2;248;248;242m    private static boolean isExample = true; // \u001b[0m\u001b[38;2;190;132;255m<\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;190;132;255m>\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m----\u001b[0m\n\u001b[38;2;190;132;255m<\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;190;132;255m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mThis is a callout\u001b[0m\n\u001b[38;2;190;132;255m<\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;190;132;255m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mThis is another callout\u001b[0m\n\n\u001b[38;2;253;151;31m==\u001b[0m\u001b[38;2;253;151;31m \u001b[0m\u001b[38;2;253;151;31mMisc\u001b[0m\n\n\u001b[38;2;253;151;31m.\u001b[0m\u001b[38;2;253;151;31mA sidebar\u001b[0m\n\u001b[38;2;102;217;239m****\u001b[0m\n\u001b[38;2;230;219;116mThis will be rendered like a sidebar\u001b[0m\n\u001b[38;2;102;217;239m****\u001b[0m\n\n\u001b[3;38;2;102;217;239m____\u001b[0m\n\u001b[3;38;2;102;217;239mThis is a random blockquote\u001b[0m\n\u001b[3;38;2;102;217;239m____\u001b[0m\n\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mquote, Albert Einstein, 'Scientist'\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[3;38;2;102;217;239m____\u001b[0m\n\u001b[3;38;2;102;217;239mThis is not actually something Einstein said\u001b[0m\n\u001b[3;38;2;102;217;239m____\u001b[0m\n\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m here we have a single line comment\u001b[0m\n\n\u001b[38;2;117;113;94m////\u001b[0m\n\u001b[38;2;117;113;94mand this is a\u001b[0m\n\u001b[38;2;117;113;94mmultiline comment\u001b[0m\n\u001b[38;2;117;113;94m////\u001b[0m\n\n\u001b[38;2;253;151;31m.\u001b[0m\u001b[38;2;253;151;31mA Table\u001b[0m\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m%header\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m|===\u001b[0m\n\u001b[38;2;248;248;242m|Header Column 1 |Header Column 2 |And the last header column\u001b[0m\n\u001b[38;2;248;248;242m|Cell in col1\u001b[0m\n\u001b[38;2;248;248;242m|Cell in col2\u001b[0m\n\u001b[38;2;248;248;242m|Cell in col3\u001b[0m\n\n\u001b[38;2;248;248;242m|Cell in col1, row2\u001b[0m\n\u001b[38;2;248;248;242m|Cell in col2, row2\u001b[0m\n\u001b[38;2;248;248;242m|Cell in col3, row2\u001b[0m\n\u001b[38;2;248;248;242m|===\u001b[0m\n\n\u001b[38;2;253;151;31m.\u001b[0m\u001b[38;2;253;151;31mA Table from CSV\u001b[0m\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m%header, format=csv\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m|===\u001b[0m\n\u001b[38;2;248;248;242mheader col1, header col2, header col3\u001b[0m\n\u001b[38;2;248;248;242mThis,is the first, row\u001b[0m\n\u001b[38;2;248;248;242mThis, is the second, row\u001b[0m\n\u001b[38;2;248;248;242m|===\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Assembly (x86_64)/test.nasm",
    "content": "\u001b[38;2;102;217;239mglobal\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46menlight\u001b[0m\n\n\u001b[38;2;102;217;239msection\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239m.data\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mred\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mdq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m;\u001b[0m\u001b[38;2;117;113;94m some comment\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mgreen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mdq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mblue\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mdq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mdata\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mdq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mN\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mdd\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mM\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mdd\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mchange\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mdd\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mdelta\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mdb\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\n\u001b[38;2;102;217;239msection\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239m.text\u001b[0m\n\u001b[38;2;166;226;46menlight\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46massign_arguments\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mset_data\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mmake_deltas\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mret\u001b[0m\n\n\u001b[38;2;166;226;46massign_arguments\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mmov\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mqword\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mred\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mrdi\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mmov\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mqword\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mgreen\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mrsi\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mmov\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mqword\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mblue\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mrdx\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mmov\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mdword\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mN\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mecx\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mmov\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mdword\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mM\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mr8d\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mmov\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mdword\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mchange\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mr9d\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mmov\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mal\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mbyte\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255mrsp\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m16\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mmov\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mbyte\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mdelta\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mal\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mret\u001b[0m\n\n\u001b[38;2;166;226;46mset_data\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mmov\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255meax\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mdword\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mchange\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mcmp\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255meax\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mjne\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mnot_1\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mmov\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mrax\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mqword\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mred\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mmov\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mqword\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mdata\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mrax\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mret\u001b[0m\n\u001b[38;2;166;226;46mnot_1\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mcmp\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255meax\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mjne\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mnot_2\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mmov\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mrax\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mqword\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mgreen\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mmov\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mqword\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mdata\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mrax\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mret\u001b[0m\n\u001b[38;2;166;226;46mnot_2\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mmov\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mrax\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mqword\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mblue\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mmov\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mqword\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mdata\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mrax\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mret\u001b[0m\n\n\n\u001b[38;2;166;226;46mmake_deltas\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mmov\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mecx\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mdword\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mN\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mmov\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255meax\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mdword\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mM\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mimul\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mecx\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255meax\u001b[0m\n\u001b[38;2;166;226;46mloop_start\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mmake_delta\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mloop\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mloop_start\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mret\u001b[0m\n\n\u001b[38;2;166;226;46mmake_delta\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mmov\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mrax\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mqword\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mdata\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114madd\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mrax\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mrcx\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mdec\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mrax\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mmov\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mdl\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mbyte\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mdelta\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mcmp\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mdl\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mjl\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46msubstracting\u001b[0m\n\u001b[38;2;166;226;46madding\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114madd\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mdl\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mbyte\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255mrax\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mjc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46madding_overflow\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mmov\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mbyte\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255mrax\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mdl\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mret\u001b[0m\n\u001b[38;2;166;226;46madding_overflow\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mmov\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mbyte\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255mrax\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m255\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mret\u001b[0m\n\u001b[38;2;166;226;46msubstracting\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mmov\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mr9b\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mdl\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mmov\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mdl\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114msub\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mdl\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mr9b\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mmov\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mr8b\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mbyte\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255mrax\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114msub\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mr8b\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mdl\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mjc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46msubstracting_overflow\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mmov\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mbyte\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255mrax\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mr8b\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mret\u001b[0m\n\u001b[38;2;117;113;94m;\u001b[0m\u001b[38;2;117;113;94m another comment\u001b[0m\n\u001b[38;2;166;226;46msubstracting_overflow\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mmov\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mbyte\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255mrax\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mret\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Bash/batgrep.sh",
    "content": "\u001b[3;38;2;124;120;101m#\u001b[0m\u001b[3;38;2;124;120;101m!/usr/bin/env bash\u001b[0m\n\u001b[3;38;2;124;120;101m#\u001b[0m\u001b[3;38;2;124;120;101m -----------------------------------------------------------------------------\u001b[0m\n\u001b[3;38;2;124;120;101m#\u001b[0m\u001b[3;38;2;124;120;101m bat-extras | Copyright (C) 2020 eth-p and contributors | MIT License\u001b[0m\n\u001b[3;38;2;124;120;101m#\u001b[0m\n\u001b[3;38;2;124;120;101m#\u001b[0m\u001b[3;38;2;124;120;101m Repository: https://github.com/eth-p/bat-extras\u001b[0m\n\u001b[3;38;2;124;120;101m#\u001b[0m\u001b[3;38;2;124;120;101m Issues:     https://github.com/eth-p/bat-extras/issues\u001b[0m\n\u001b[3;38;2;124;120;101m#\u001b[0m\u001b[3;38;2;124;120;101m -----------------------------------------------------------------------------\u001b[0m\n\u001b[38;2;166;226;46mprintc\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;102;217;239mprintf\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m(\u001b[0m\u001b[38;2;255;255;255msed\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m_PRINTC_PATTERN\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m)\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\u001b[38;2;166;226;46mprintc_init\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\n\u001b[38;2;255;255;255mtrue\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m_PRINTC_PATTERN\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m_PRINTC_PATTERN_ANSI\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255mfalse\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m_PRINTC_PATTERN\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m_PRINTC_PATTERN_PLAIN\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m[DEFINE]\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;255;255;255m_PRINTC_PATTERN_ANSI\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m_PRINTC_PATTERN_PLAIN\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;249;38;114mlocal\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mname\u001b[0m\n\u001b[38;2;249;38;114mlocal\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mansi\u001b[0m\n\u001b[38;2;249;38;114mwhile\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239mread\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mr\u001b[0m\u001b[38;2;255;255;255m name ansi\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mdo\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m[[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mz\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mname\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mz\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mansi\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m]]\u001b[0m\u001b[38;2;249;38;114m||\u001b[0m\u001b[38;2;102;217;239m[[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[38;2;255;255;255mname\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m#\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m]]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;249;38;114mcontinue\u001b[0m\n\u001b[38;2;249;38;114mfi\u001b[0m\n\u001b[38;2;255;255;255mansi\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255mansi\u001b[0m\u001b[38;2;249;38;114m/\u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;249;38;114m/\u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m_PRINTC_PATTERN_PLAIN\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255m_PRINTC_PATTERN_PLAIN\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;230;219;116ms/%{\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mname\u001b[0m\u001b[38;2;230;219;116m}//g;\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m_PRINTC_PATTERN_ANSI\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255m_PRINTC_PATTERN_ANSI\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;230;219;116ms/%{\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mname\u001b[0m\u001b[38;2;230;219;116m}/\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mansi\u001b[0m\u001b[38;2;230;219;116m/g;\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;249;38;114mdone\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mt\u001b[0m\u001b[38;2;255;255;255m 1 \u001b[0m\u001b[38;2;102;217;239m]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;255;255;255m_PRINTC_PATTERN\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m_PRINTC_PATTERN_ANSI\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;255;255;255m_PRINTC_PATTERN\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m_PRINTC_PATTERN_PLAIN\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;249;38;114mfi\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\u001b[38;2;249;38;114mesac\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\u001b[38;2;166;226;46mprint_warning\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;255;255;255mprintc\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m%{YELLOW}[%s warning]%{CLEAR}: \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\u001b[38;2;230;219;116m%{CLEAR}\\n\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mbatgrep\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m>&\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\u001b[38;2;166;226;46mprint_error\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;255;255;255mprintc\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m%{RED}[%s error]%{CLEAR}: \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\u001b[38;2;230;219;116m%{CLEAR}\\n\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mbatgrep\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m>&\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\u001b[38;2;255;255;255mprintc_init\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m[DEFINE]\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m<<\u001b[0m\u001b[38;2;249;38;114mEND\u001b[0m\n\u001b[38;2;230;219;116m\tCLEAR\t\\x1B[0m\u001b[0m\n\u001b[38;2;230;219;116m\tRED\t\t\\x1B[31m\u001b[0m\n\u001b[38;2;230;219;116m\tGREEN\t\\x1B[32m\u001b[0m\n\u001b[38;2;230;219;116m\tYELLOW\t\\x1B[33m\u001b[0m\n\u001b[38;2;230;219;116m\tBLUE\t\\x1B[34m\u001b[0m\n\u001b[38;2;230;219;116m\tMAGENTA\t\\x1B[35m\u001b[0m\n\u001b[38;2;230;219;116m\tCYAN\t\\x1B[36m\u001b[0m\n\n\u001b[38;2;230;219;116m\tDEFAULT \\x1B[39m\u001b[0m\n\u001b[38;2;230;219;116m\tDIM\t\t\\x1B[2m\u001b[0m\n\u001b[38;2;249;38;114mEND\u001b[0m\n\u001b[38;2;166;226;46mis_pager_less\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;102;217;239m[[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m(\u001b[0m\u001b[38;2;255;255;255mpager_name\u001b[0m\u001b[38;2;230;219;116m)\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mless\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m]]\u001b[0m\n\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m?\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\u001b[38;2;166;226;46mis_pager_disabled\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;102;217;239m[[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mz\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m(\u001b[0m\u001b[38;2;255;255;255mpager_name\u001b[0m\u001b[38;2;230;219;116m)\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m]]\u001b[0m\n\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m?\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\u001b[38;2;166;226;46mpager_name\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;255;255;255m_detect_pager\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m>&\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\n\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m_SCRIPT_PAGER_NAME\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\u001b[38;2;166;226;46mpager_version\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;255;255;255m_detect_pager\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m>&\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\n\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m_SCRIPT_PAGER_VERSION\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\u001b[38;2;166;226;46mpager_exec\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m[[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mn\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mSCRIPT_PAGER_CMD\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m]]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255mpager_display\u001b[0m\n\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m?\u001b[0m\n\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m?\u001b[0m\n\u001b[38;2;249;38;114mfi\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\u001b[38;2;166;226;46mpager_display\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m[[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mn\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mSCRIPT_PAGER_CMD\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m]]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m[[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mn\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mSCRIPT_PAGER_ARGS\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m]]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255mSCRIPT_PAGER_CMD\u001b[0m\u001b[38;2;255;255;255m[\u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;255;255;255m]\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255mSCRIPT_PAGER_ARGS\u001b[0m\u001b[38;2;255;255;255m[\u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;255;255;255m]\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m?\u001b[0m\n\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255mSCRIPT_PAGER_CMD\u001b[0m\u001b[38;2;255;255;255m[\u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;255;255;255m]\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m?\u001b[0m\n\u001b[38;2;249;38;114mfi\u001b[0m\n\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;255;255;255mcat\u001b[0m\n\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m?\u001b[0m\n\u001b[38;2;249;38;114mfi\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\u001b[38;2;166;226;46m_detect_pager\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m[[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m_SCRIPT_PAGER_DETECTED\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mtrue\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m]]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mfi\u001b[0m\n\u001b[38;2;255;255;255m_SCRIPT_PAGER_DETECTED\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116mtrue\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m[[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mz\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[38;2;255;255;255mSCRIPT_PAGER_CMD\u001b[0m\u001b[38;2;255;255;255m[\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;255;255;255m]\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m]]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;255;255;255m_SCRIPT_PAGER_VERSION\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m0\u001b[0m\n\u001b[38;2;255;255;255m_SCRIPT_PAGER_NAME\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;249;38;114mreturn\u001b[0m\n\u001b[38;2;249;38;114mfi\u001b[0m\n\u001b[38;2;249;38;114mlocal\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255moutput\u001b[0m\n\u001b[38;2;249;38;114mlocal\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255moutput1\u001b[0m\n\u001b[38;2;255;255;255moutput\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m(\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255mSCRIPT_PAGER_CMD\u001b[0m\u001b[38;2;255;255;255m[\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;255;255;255m]\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[3;38;2;253;151;31m --\u001b[0m\u001b[3;38;2;253;151;31mversion\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m>&\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;230;219;116m)\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255moutput1\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m(\u001b[0m\u001b[38;2;255;255;255mhead\u001b[0m\u001b[3;38;2;253;151;31m -\u001b[0m\u001b[3;38;2;253;151;31mn\u001b[0m\u001b[38;2;230;219;116m 1 \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255moutput\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m)\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m[[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255moutput1\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m=~\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m^less\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;255;255;255mblank\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;255;255;255mdigit\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;255;255;255m+)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m]]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;255;255;255m_SCRIPT_PAGER_VERSION\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255mBASH_REMATCH\u001b[0m\u001b[38;2;255;255;255m[\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;255;255;255m]\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m_SCRIPT_PAGER_NAME\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mless\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;255;255;255m_SCRIPT_PAGER_VERSION\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m0\u001b[0m\n\u001b[38;2;255;255;255m_SCRIPT_PAGER_NAME\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m(\u001b[0m\u001b[38;2;255;255;255mbasename\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255mSCRIPT_PAGER_CMD\u001b[0m\u001b[38;2;255;255;255m[\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;255;255;255m]\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m)\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;249;38;114mfi\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\u001b[38;2;166;226;46m_configure_pager\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;255;255;255mSCRIPT_PAGER_CMD\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mPAGER\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;255;255;255mSCRIPT_PAGER_ARGS\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m[[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mn\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[38;2;255;255;255mBAT_PAGER\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;255;255;255mx\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m]]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;255;255;255mSCRIPT_PAGER_CMD\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mBAT_PAGER\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;255;255;255mSCRIPT_PAGER_ARGS\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;249;38;114mreturn\u001b[0m\n\u001b[38;2;249;38;114mfi\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mis_pager_less\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;255;255;255mSCRIPT_PAGER_CMD\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255mSCRIPT_PAGER_CMD\u001b[0m\u001b[38;2;255;255;255m[\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;255;255;255m]\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m -R --quit-if-one-screen\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m[[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m(\u001b[0m\u001b[38;2;255;255;255mpager_version\u001b[0m\u001b[38;2;230;219;116m)\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mlt\u001b[0m\u001b[38;2;255;255;255m 500 \u001b[0m\u001b[38;2;102;217;239m]]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;255;255;255mSCRIPT_PAGER_CMD\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m--no-init\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;249;38;114mfi\u001b[0m\n\u001b[38;2;249;38;114mfi\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m[[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mt\u001b[0m\u001b[38;2;255;255;255m 1 \u001b[0m\u001b[38;2;102;217;239m]]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;255;255;255m_configure_pager\u001b[0m\n\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;255;255;255mSCRIPT_PAGER_CMD\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;255;255;255mSCRIPT_PAGER_ARGS\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;249;38;114mfi\u001b[0m\n\u001b[38;2;255;255;255mSHIFTOPT_HOOKS\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;166;226;46msetargs\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;255;255;255m_ARGV\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;255;255;255m_ARGV_LAST\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m((\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;249;38;114m#\u001b[0m\u001b[38;2;255;255;255m_ARGV\u001b[0m\u001b[38;2;255;255;255m[\u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;255;255;255m]\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;230;219;116m))\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m_ARGV_INDEX\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m0\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\u001b[38;2;166;226;46mshiftopt\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;102;217;239m[[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m_ARGV_INDEX\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mgt\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m_ARGV_LAST\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m]]\u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;255;255;255m 1\u001b[0m\n\u001b[38;2;255;255;255mOPT\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255m_ARGV\u001b[0m\u001b[38;2;255;255;255m[\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m_ARGV_INDEX\u001b[0m\u001b[38;2;255;255;255m]\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;102;217;239munset\u001b[0m\u001b[38;2;255;255;255m OPT_VAL\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m[[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mOPT\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m=~\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m^--\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;255;255;255ma\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;255;255;255mzA\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;255;255;255mZ0\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;255;255;255m9_-\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;255;255;255m+=.\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m]]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;255;255;255mOPT_VAL\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255mOPT\u001b[0m\u001b[38;2;249;38;114m#\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;230;219;116m=\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255mOPT\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255mOPT\u001b[0m\u001b[38;2;249;38;114m%%\u001b[0m\u001b[38;2;230;219;116m=\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;249;38;114mfi\u001b[0m\n\u001b[38;2;255;255;255m((\u001b[0m\u001b[38;2;255;255;255m_ARGV_INDEX\u001b[0m\u001b[38;2;249;38;114m++\u001b[0m\u001b[38;2;255;255;255m))\u001b[0m\n\u001b[38;2;249;38;114mlocal\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mhook\u001b[0m\n\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;255;255;255m hook \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255mSHIFTOPT_HOOKS\u001b[0m\u001b[38;2;255;255;255m[\u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;255;255;255m]\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mdo\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mhook\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;255;255;255mshiftopt\u001b[0m\n\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m?\u001b[0m\n\u001b[38;2;249;38;114mfi\u001b[0m\n\u001b[38;2;249;38;114mdone\u001b[0m\n\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;255;255;255m 0\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\u001b[38;2;166;226;46mshiftval\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m[[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mn\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[38;2;255;255;255mOPT_VAL\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;255;255;255mx\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m]]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;255;255;255m 0\u001b[0m\n\u001b[38;2;249;38;114mfi\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m[[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mOPT\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m=~\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m^-\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;255;255;255malpha\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;255;255;255mdigit\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\u001b[38;2;255;255;255m,\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m]]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;255;255;255mOPT_VAL\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255mOPT\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;249;38;114mreturn\u001b[0m\n\u001b[38;2;249;38;114mfi\u001b[0m\n\u001b[38;2;255;255;255mOPT_VAL\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255m_ARGV\u001b[0m\u001b[38;2;255;255;255m[\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m_ARGV_INDEX\u001b[0m\u001b[38;2;255;255;255m]\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m((\u001b[0m\u001b[38;2;255;255;255m_ARGV_INDEX\u001b[0m\u001b[38;2;249;38;114m++\u001b[0m\u001b[38;2;255;255;255m))\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m[[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mOPT_VAL\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m=~\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m-.\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m]]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;255;255;255mprintc\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m%{RED}%s: '%s' requires a value%{CLEAR}\\n\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mbatgrep\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mARG\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;102;217;239mexit\u001b[0m\u001b[38;2;255;255;255m 1\u001b[0m\n\u001b[38;2;249;38;114mfi\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\u001b[38;2;255;255;255msetargs\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;166;226;46mhook_color\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;255;255;255mSHIFTOPT_HOOKS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m__shiftopt_hook__color\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;166;226;46m__shiftopt_hook__color\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mOPT\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\n\u001b[38;2;255;255;255m--no-color\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255mOPT_COLOR\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116mfalse\u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m--color\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mOPT_VAL\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\n\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255mOPT_COLOR\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116mtrue\u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255malways\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255mtrue\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255mOPT_COLOR\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116mtrue\u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255mnever\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255mfalse\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255mOPT_COLOR\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116mfalse\u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255mauto\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;255;255;255m 0\u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255mprintc\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m%{RED}%s: '--color' expects value of 'auto', 'always', or 'never'%{CLEAR}\\n\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mbatgrep\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;102;217;239mexit\u001b[0m\u001b[38;2;255;255;255m 1\u001b[0m\n\u001b[38;2;249;38;114mesac\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;255;255;255m 1\u001b[0m\n\u001b[38;2;249;38;114mesac\u001b[0m\n\u001b[38;2;255;255;255mprintc_init\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mOPT_COLOR\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;255;255;255m 0\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m[[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mz\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mOPT_COLOR\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m]]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m[[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mt\u001b[0m\u001b[38;2;255;255;255m 1 \u001b[0m\u001b[38;2;102;217;239m]]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;255;255;255mOPT_COLOR\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116mtrue\u001b[0m\n\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;255;255;255mOPT_COLOR\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116mfalse\u001b[0m\n\u001b[38;2;249;38;114mfi\u001b[0m\n\u001b[38;2;255;255;255mprintc_init\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mOPT_COLOR\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;249;38;114mfi\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\u001b[38;2;166;226;46mhook_pager\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;255;255;255mSHIFTOPT_HOOKS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m__shiftopt_hook__pager\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;166;226;46m__shiftopt_hook__pager\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mOPT\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\n\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m--no-pager\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255mshiftval\u001b[0m\n\u001b[38;2;255;255;255mSCRIPT_PAGER_CMD\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\n\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m--paging\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;255;255;255mshiftval\u001b[0m\n\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mOPT_VAL\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\n\u001b[38;2;255;255;255mauto\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;102;217;239m:\u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255malways\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;102;217;239m:\u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255mnever\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255mSCRIPT_PAGER_CMD\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255mprintc\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m%{RED}%s: '--paging' expects value of 'auto', 'always', or 'never'%{CLEAR}\\n\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mbatgrep\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;102;217;239mexit\u001b[0m\u001b[38;2;255;255;255m 1\u001b[0m\n\u001b[38;2;249;38;114mesac\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m--pager\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;255;255;255mshiftval\u001b[0m\n\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;255;255;255mSCRIPT_PAGER_CMD\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mOPT_VAL\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;255;255;255mPAGER_ARGS\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;255;255;255m 1\u001b[0m\n\u001b[38;2;249;38;114mesac\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\u001b[38;2;166;226;46mhook_version\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;255;255;255mSHIFTOPT_HOOKS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m__shiftopt_hook__version\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;166;226;46m__shiftopt_hook__version\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m[[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mOPT\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m--version\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m]]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;102;217;239mprintf\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m%s %s\\n\\n%s\\n%s\\n\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mbatgrep\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m2020.10.04\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mCopyright (C) 2019-2020 eth-p | MIT License\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mhttps://github.com/eth-p/bat-extras\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;102;217;239mexit\u001b[0m\u001b[38;2;255;255;255m 0\u001b[0m\n\u001b[38;2;249;38;114mfi\u001b[0m\n\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;255;255;255m 1\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\u001b[38;2;166;226;46mterm_width\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;249;38;114mlocal\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mwidth\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m(\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;255;255;255mstty\u001b[0m\u001b[38;2;230;219;116m size \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;230;219;116m/dev/null\u001b[0m\u001b[38;2;249;38;114m||\u001b[0m\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m22 80\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255mcut\u001b[0m\u001b[3;38;2;253;151;31m -\u001b[0m\u001b[3;38;2;253;151;31md\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[3;38;2;253;151;31m -\u001b[0m\u001b[3;38;2;253;151;31mf2\u001b[0m\u001b[38;2;230;219;116m)\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m[[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mwidth\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mne\u001b[0m\u001b[38;2;255;255;255m 0 \u001b[0m\u001b[38;2;102;217;239m]]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mwidth\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m80\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;249;38;114mfi\u001b[0m\n\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;255;255;255m 0\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\u001b[38;2;166;226;46mhook_width\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;255;255;255mSHIFTOPT_HOOKS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m__shiftopt_hook__width\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;166;226;46m__shiftopt_hook__width\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mOPT\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\n\u001b[38;2;255;255;255m--terminal-width\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255mshiftval\u001b[0m\n\u001b[38;2;255;255;255mOPT_TERMINAL_WIDTH\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mOPT_VAL\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;255;255;255m 1\u001b[0m\n\u001b[38;2;249;38;114mesac\u001b[0m\n\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;255;255;255m 0\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\u001b[38;2;255;255;255mOPT_TERMINAL_WIDTH\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m(\u001b[0m\u001b[38;2;255;255;255mterm_width\u001b[0m\u001b[38;2;230;219;116m)\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\u001b[38;2;166;226;46mbat_version\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mbat\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[3;38;2;253;151;31m --\u001b[0m\u001b[3;38;2;253;151;31mversion\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255mcut\u001b[0m\u001b[3;38;2;253;151;31m -\u001b[0m\u001b[3;38;2;253;151;31md\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[3;38;2;253;151;31m -\u001b[0m\u001b[3;38;2;253;151;31mf\u001b[0m\u001b[38;2;255;255;255m 2\u001b[0m\n\u001b[38;2;249;38;114mreturn\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\u001b[38;2;166;226;46mversion_compare\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;249;38;114mlocal\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mversion\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;249;38;114mlocal\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mcompare\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m3\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m!\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m[[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mversion\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m=~\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;190;132;255m\\.\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m]]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;255;255;255mversion\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mversion\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;249;38;114mfi\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m!\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m[[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mcompare\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m=~\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;190;132;255m\\.\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m]]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;255;255;255mcompare\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mcompare\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;249;38;114mfi\u001b[0m\n\u001b[38;2;255;255;255mversion_compare__recurse\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mversion\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m2\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mcompare\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m?\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\u001b[38;2;166;226;46mversion_compare__recurse\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;249;38;114mlocal\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mversion\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;249;38;114mlocal\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255moperator\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m2\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;249;38;114mlocal\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mcompare\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m3\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;249;38;114mlocal\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mv_major\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255mversion\u001b[0m\u001b[38;2;249;38;114m%%\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;249;38;114mlocal\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mc_major\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255mcompare\u001b[0m\u001b[38;2;249;38;114m%%\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;249;38;114mlocal\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mv_minor\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255mversion\u001b[0m\u001b[38;2;249;38;114m#\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;249;38;114mlocal\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mc_minor\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255mcompare\u001b[0m\u001b[38;2;249;38;114m#\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m[[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mz\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mv_minor\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mz\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mc_minor\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m]]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;102;217;239m[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mv_major\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255moperator\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mc_major\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m]\u001b[0m\n\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m?\u001b[0m\n\u001b[38;2;249;38;114mfi\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m[[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mz\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mv_minor\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m]]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;255;255;255mv_minor\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m0.\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;249;38;114mfi\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m[[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mz\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mc_minor\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m]]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;255;255;255mc_minor\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m0.\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;249;38;114mfi\u001b[0m\n\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255moperator\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\n\u001b[38;2;255;255;255m-eq\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;102;217;239m[[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mv_major\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mne\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mc_major\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m]]\u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;255;255;255m 1\u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m-ne\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;102;217;239m[[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mv_major\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mne\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mc_major\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m]]\u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;255;255;255m 0\u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m-ge\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m-gt\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;102;217;239m[[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mv_major\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mlt\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mc_major\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m]]\u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;255;255;255m 1\u001b[0m\n\u001b[38;2;102;217;239m[[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mv_major\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mgt\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mc_major\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m]]\u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;255;255;255m 0\u001b[0m\n\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m-le\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m-lt\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;102;217;239m[[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mv_major\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mgt\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mc_major\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m]]\u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;255;255;255m 1\u001b[0m\n\u001b[38;2;102;217;239m[[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mv_major\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mlt\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mc_major\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m]]\u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;255;255;255m 0\u001b[0m\n\u001b[38;2;249;38;114mesac\u001b[0m\n\u001b[38;2;255;255;255mversion_compare__recurse\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mv_minor\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255moperator\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mc_minor\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\u001b[38;2;255;255;255mhook_color\u001b[0m\n\u001b[38;2;255;255;255mhook_pager\u001b[0m\n\u001b[38;2;255;255;255mhook_version\u001b[0m\n\u001b[38;2;255;255;255mhook_width\u001b[0m\n\u001b[38;2;255;255;255mRG_ARGS\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;255;255;255mBAT_ARGS\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;255;255;255mPATTERN\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255mFILES\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;255;255;255mOPT_CASE_SENSITIVITY\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\n\u001b[38;2;255;255;255mOPT_CONTEXT_BEFORE\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m2\u001b[0m\n\u001b[38;2;255;255;255mOPT_CONTEXT_AFTER\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m2\u001b[0m\n\u001b[38;2;255;255;255mOPT_FOLLOW\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116mtrue\u001b[0m\n\u001b[38;2;255;255;255mOPT_SNIP\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255mOPT_HIGHLIGHT\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116mtrue\u001b[0m\n\u001b[38;2;255;255;255mOPT_SEARCH_PATTERN\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116mfalse\u001b[0m\n\u001b[38;2;255;255;255mOPT_FIXED_STRINGS\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116mfalse\u001b[0m\n\u001b[38;2;255;255;255mBAT_STYLE\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mheader,numbers\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mversion_compare\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m(\u001b[0m\u001b[38;2;255;255;255mbat_version\u001b[0m\u001b[38;2;230;219;116m)\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[3;38;2;253;151;31m -\u001b[0m\u001b[3;38;2;253;151;31mgt\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m0.12\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;255;255;255mOPT_SNIP\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m,snip\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;249;38;114mfi\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m[[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mn\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mRIPGREP_CONFIG_PATH\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31me\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mRIPGREP_CONFIG_PATH\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m]]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;255;255;255m arg \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255mcat\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mRIPGREP_CONFIG_PATH\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mdo\u001b[0m\n\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255marg\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\n\u001b[38;2;255;255;255m--context=\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255mval\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255marg\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m10\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255mOPT_CONTEXT_BEFORE\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mval\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255mOPT_CONTEXT_AFTER\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mval\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m--before-context=\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255mval\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255marg\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m17\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255mOPT_CONTEXT_BEFORE\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mval\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m--after-context=\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255mval\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255marg\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m16\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255mOPT_CONTEXT_AFTER\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mval\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m-C\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255mval\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255marg\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255mOPT_CONTEXT_BEFORE\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mval\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255mOPT_CONTEXT_AFTER\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mval\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m-B\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255mval\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255marg\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255mOPT_CONTEXT_BEFORE\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mval\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m-A\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255mval\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255marg\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255mOPT_CONTEXT_AFTER\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mval\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;249;38;114mesac\u001b[0m\n\u001b[38;2;249;38;114mdone\u001b[0m\n\u001b[38;2;249;38;114mfi\u001b[0m\n\u001b[38;2;249;38;114mwhile\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mshiftopt\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mdo\u001b[0m\n\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mOPT\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\n\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m-i\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m--ignore-case\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255mOPT_CASE_SENSITIVITY\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m--ignore-case\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m-s\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m--case-sensitive\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255mOPT_CASE_SENSITIVITY\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m--case-sensitive\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m-S\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m--smart-case\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255mOPT_CASE_SENSITIVITY\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m--smart-case\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m-A\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m--after-context\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255mshiftval\u001b[0m\n\u001b[38;2;255;255;255mOPT_CONTEXT_AFTER\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mOPT_VAL\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m-B\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m--before-context\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255mshiftval\u001b[0m\n\u001b[38;2;255;255;255mOPT_CONTEXT_BEFORE\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mOPT_VAL\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m-C\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m--context\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255mshiftval\u001b[0m\n\u001b[38;2;255;255;255mOPT_CONTEXT_BEFORE\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mOPT_VAL\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255mOPT_CONTEXT_AFTER\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mOPT_VAL\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m-F\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m--fixed-strings\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255mOPT_FIXED_STRINGS\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116mtrue\u001b[0m\n\u001b[38;2;255;255;255mRG_ARGS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mOPT\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m-U\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m--multiline\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m-P\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m--pcre2\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m-z\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m--search-zip\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m-w\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m--word-regexp\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m--one-file-system\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m--multiline-dotall\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m--ignore\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m--no-ignore\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m--crlf\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m--no-crlf\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m--hidden\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m--no-hidden\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255mRG_ARGS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mOPT\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m-E\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m--encoding\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m-g\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m--glob\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m-t\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m--type\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m-T\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m--type-not\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m-m\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m--max-count\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m--max-depth\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m--iglob\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m--ignore-file\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255mshiftval\u001b[0m\n\u001b[38;2;255;255;255mRG_ARGS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mOPT\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mOPT_VAL\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m--no-follow\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255mOPT_FOLLOW\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116mfalse\u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m--no-snip\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255mOPT_SNIP\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m--no-highlight\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255mOPT_HIGHLIGHT\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116mfalse\u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m-p\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m--search-pattern\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255mOPT_SEARCH_PATTERN\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116mtrue\u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m--no-search-pattern\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255mOPT_SEARCH_PATTERN\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116mfalse\u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m--rg:\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m[[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[38;2;255;255;255mOPT\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m-\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m]]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;255;255;255mRG_ARGS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255mOPT\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;255;255;255mRG_ARGS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m--\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255mOPT\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;249;38;114mfi\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m[[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mn\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mOPT_VAL\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m]]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;255;255;255mRG_ARGS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mOPT_VAL\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;249;38;114mfi\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m-\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;255;255;255mprintc\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m%{RED}%s: unknown option '%s'%{CLEAR}\\n\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mbatgrep\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mOPT\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m>&\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\n\u001b[38;2;102;217;239mexit\u001b[0m\u001b[38;2;255;255;255m 1\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mz\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mPATTERN\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;255;255;255mPATTERN\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mOPT\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;255;255;255mFILES\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mOPT\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;249;38;114mfi\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\u001b[38;2;249;38;114mesac\u001b[0m\n\u001b[38;2;249;38;114mdone\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m[[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mz\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mPATTERN\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m]]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;255;255;255mprint_error\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mno pattern provided\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;102;217;239mexit\u001b[0m\u001b[38;2;255;255;255m 1\u001b[0m\n\u001b[38;2;249;38;114mfi\u001b[0m\n\u001b[38;2;255;255;255mSEP\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m(\u001b[0m\u001b[38;2;255;255;255mprintc\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m%{DIM}%\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255mOPT_TERMINAL_WIDTH\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;230;219;116ms%{CLEAR}\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255msed\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116ms/ /─/g\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m)\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m[[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mn\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mOPT_CASE_SENSITIVITY\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m]]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;255;255;255mRG_ARGS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mOPT_CASE_SENSITIVITY\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;249;38;114mfi\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mOPT_FOLLOW\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;255;255;255mRG_ARGS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m--follow\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;249;38;114mfi\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mOPT_COLOR\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;255;255;255mBAT_ARGS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m--color=always\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;255;255;255mBAT_ARGS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m--color=never\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;249;38;114mfi\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m[[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mOPT_CONTEXT_BEFORE\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31meq\u001b[0m\u001b[38;2;255;255;255m 0 \u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mOPT_CONTEXT_AFTER\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31meq\u001b[0m\u001b[38;2;255;255;255m 0 \u001b[0m\u001b[38;2;102;217;239m]]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;255;255;255mOPT_SNIP\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255mOPT_HIGHLIGHT\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116mfalse\u001b[0m\n\u001b[38;2;249;38;114mfi\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mOPT_SEARCH_PATTERN\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mis_pager_less\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mOPT_FIXED_STRINGS\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;255;255;255mSCRIPT_PAGER_ARGS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m-p \u001b[0m\u001b[38;2;255;255;255m$'\u001b[0m\u001b[38;2;190;132;255m\\x12\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mPATTERN\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;255;255;255mSCRIPT_PAGER_ARGS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m-p \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mPATTERN\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;249;38;114mfi\u001b[0m\n\u001b[38;2;249;38;114melif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mis_pager_disabled\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;255;255;255mprint_error\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m%s %s %s\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mThe -p/--search-pattern option requires a pager, but\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116mthe pager was explicitly disabled by $BAT_PAGER or the\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m--paging option.\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;102;217;239mexit\u001b[0m\u001b[38;2;255;255;255m 1\u001b[0m\n\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;255;255;255mprint_error\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mUnsupported pager '%s' for option -p/--search-pattern\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m(\u001b[0m\u001b[38;2;255;255;255mpager_name\u001b[0m\u001b[38;2;230;219;116m)\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;102;217;239mexit\u001b[0m\u001b[38;2;255;255;255m 1\u001b[0m\n\u001b[38;2;249;38;114mfi\u001b[0m\n\u001b[38;2;249;38;114mfi\u001b[0m\n\u001b[38;2;166;226;46mmain\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;255;255;255mFOUND_FILES\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;255;255;255mFOUND\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m0\u001b[0m\n\u001b[38;2;255;255;255mFIRST_PRINT\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116mtrue\u001b[0m\n\u001b[38;2;255;255;255mLAST_LR\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;255;255;255mLAST_LH\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;255;255;255mLAST_FILE\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\n\u001b[38;2;166;226;46mdo_print\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;102;217;239m[[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mz\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mLAST_FILE\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m]]\u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;255;255;255m 0\u001b[0m\n\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mFIRST_PRINT\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mSEP\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255mFIRST_PRINT\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116mfalse\u001b[0m\n\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mbat\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255mBAT_ARGS\u001b[0m\u001b[38;2;255;255;255m[\u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;255;255;255m]\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255mLAST_LR\u001b[0m\u001b[38;2;255;255;255m[\u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;255;255;255m]\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255mLAST_LH\u001b[0m\u001b[38;2;255;255;255m[\u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;255;255;255m]\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[3;38;2;253;151;31m--\u001b[0m\u001b[3;38;2;253;151;31mstyle\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mBAT_STYLE\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mOPT_SNIP\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[3;38;2;253;151;31m--\u001b[0m\u001b[3;38;2;253;151;31mpaging\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255mnever \u001b[0m\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[3;38;2;253;151;31m--\u001b[0m\u001b[3;38;2;253;151;31mterminal-width\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mOPT_TERMINAL_WIDTH\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mLAST_FILE\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mSEP\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\u001b[38;2;249;38;114mwhile\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mIFS\u001b[0m\u001b[38;2;255;255;255m=\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m read\u001b[0m\u001b[3;38;2;253;151;31m -\u001b[0m\u001b[3;38;2;253;151;31mr\u001b[0m\u001b[38;2;255;255;255m file line column text\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mdo\u001b[0m\n\u001b[38;2;255;255;255m((\u001b[0m\u001b[38;2;255;255;255mFOUND\u001b[0m\u001b[38;2;249;38;114m++\u001b[0m\u001b[38;2;255;255;255m))\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m[[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mLAST_FILE\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m!=\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mfile\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m]]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;255;255;255mdo_print\u001b[0m\n\u001b[38;2;255;255;255mLAST_FILE\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mfile\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255mLAST_LR\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;255;255;255mLAST_LH\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;249;38;114mfi\u001b[0m\n\u001b[38;2;255;255;255mline_start\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m((\u001b[0m\u001b[38;2;230;219;116mline\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;230;219;116mOPT_CONTEXT_BEFORE\u001b[0m\u001b[38;2;230;219;116m))\u001b[0m\n\u001b[38;2;255;255;255mline_end\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m((\u001b[0m\u001b[38;2;230;219;116mline\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;230;219;116mOPT_CONTEXT_AFTER\u001b[0m\u001b[38;2;230;219;116m))\u001b[0m\n\u001b[38;2;102;217;239m[[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mline_start\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mgt\u001b[0m\u001b[38;2;255;255;255m 0 \u001b[0m\u001b[38;2;102;217;239m]]\u001b[0m\u001b[38;2;249;38;114m||\u001b[0m\u001b[38;2;255;255;255mline_start\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\n\u001b[38;2;255;255;255mLAST_LR\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m--line-range=\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mline_start\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mline_end\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;102;217;239m[[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mOPT_HIGHLIGHT\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mtrue\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m]]\u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;255;255;255mLAST_LH\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m--highlight-line=\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mline\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;249;38;114mdone\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255mrg\u001b[0m\u001b[3;38;2;253;151;31m --\u001b[0m\u001b[3;38;2;253;151;31mwith-filename\u001b[0m\u001b[3;38;2;253;151;31m --\u001b[0m\u001b[3;38;2;253;151;31mvimgrep\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255mRG_ARGS\u001b[0m\u001b[38;2;255;255;255m[\u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;255;255;255m]\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[3;38;2;253;151;31m --\u001b[0m\u001b[3;38;2;253;151;31mcontext\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m0\u001b[0m\u001b[3;38;2;253;151;31m --\u001b[0m\u001b[3;38;2;253;151;31mno-context-separator\u001b[0m\u001b[3;38;2;253;151;31m --\u001b[0m\u001b[3;38;2;253;151;31msort\u001b[0m\u001b[38;2;255;255;255m path \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mPATTERN\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255mFILES\u001b[0m\u001b[38;2;255;255;255m[\u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;255;255;255m]\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;255;255;255mdo_print\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m[[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mFOUND\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31meq\u001b[0m\u001b[38;2;255;255;255m 0 \u001b[0m\u001b[38;2;102;217;239m]]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;102;217;239mexit\u001b[0m\u001b[38;2;255;255;255m 2\u001b[0m\n\u001b[38;2;249;38;114mfi\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\u001b[38;2;255;255;255mpager_exec\u001b[0m\u001b[38;2;255;255;255m main\u001b[0m\n\u001b[38;2;102;217;239mexit\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m?\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Bash/korn_shell.wrong_ext",
    "content": "\u001b[3;38;2;124;120;101m#\u001b[0m\u001b[3;38;2;124;120;101m!/bin/ksh\u001b[0m\n\u001b[3;38;2;124;120;101m#\u001b[0m\n\u001b[3;38;2;124;120;101m#\u001b[0m\u001b[3;38;2;124;120;101m https://www.qnx.com/developers/docs/6.4.0/neutrino/user_guide/scripts.html\u001b[0m\n\u001b[3;38;2;124;120;101m#\u001b[0m\u001b[3;38;2;124;120;101m tfind:\u001b[0m\n\u001b[3;38;2;124;120;101m#\u001b[0m\u001b[3;38;2;124;120;101m script to look for strings in various files and dump to less\u001b[0m\n\n\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m#\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\n\u001b[38;2;255;255;255m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mfind\u001b[0m\u001b[38;2;255;255;255m .\u001b[0m\u001b[3;38;2;253;151;31m -\u001b[0m\u001b[3;38;2;253;151;31mname\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116m*.[ch]\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mxargs\u001b[0m\u001b[38;2;255;255;255m grep \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mless\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;102;217;239mexit\u001b[0m\u001b[38;2;255;255;255m 0   \u001b[0m\u001b[3;38;2;124;120;101m#\u001b[0m\u001b[3;38;2;124;120;101m good status\u001b[0m\n\u001b[38;2;249;38;114mesac\u001b[0m\n\n\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mUse tfind stuff_to_find                               \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m      where : stuff_to_find = search string           \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m                                                      \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116me.g. tfind console_state looks through all files in   \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m    \u001b[0m\n\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m     the current directory and below and displays all \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m     instances of console_state.\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;102;217;239mexit\u001b[0m\u001b[38;2;255;255;255m 1    \u001b[0m\u001b[3;38;2;124;120;101m#\u001b[0m\u001b[3;38;2;124;120;101m bad status\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Bash/simple.sh",
    "content": "\u001b[3;38;2;124;120;101m#\u001b[0m\u001b[3;38;2;124;120;101m!/usr/bin/env bash\u001b[0m\n\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;166;226;46mincompatible_function\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;255;255;255m\t\u001b[0m\u001b[38;2;102;217;239m:\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;166;226;46mcompatible_function\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;255;255;255m\t\u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m!\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116myes\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m]\u001b[0m\n\u001b[38;2;255;255;255m\t\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;255;255;255m\t\t\u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;255;255;255m 3\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;102;217;239m:\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;255;255;255m\t\u001b[0m\u001b[38;2;249;38;114mfi\u001b[0m\n\u001b[38;2;255;255;255m\t\u001b[0m\n\u001b[38;2;255;255;255m\t\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\n\u001b[38;2;255;255;255m\t\t\u001b[0m\u001b[38;2;102;217;239mexec\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;249;38;114m>&\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\u001b[38;2;255;255;255m\t\t\u001b[0m\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mfinished! \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;230;219;116m? \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m*\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m>&\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m\t\t\t\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mcat\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mbat\u001b[0m\u001b[38;2;255;255;255m -\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mcat\u001b[0m\n\u001b[38;2;255;255;255m\t\t\u001b[0m\u001b[38;2;102;217;239mexit\u001b[0m\u001b[38;2;255;255;255m 4\u001b[0m\n\u001b[38;2;255;255;255m\t\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m||\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239mexit\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m?\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239mcommand\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mv\u001b[0m\u001b[38;2;255;255;255m bat \u001b[0m\u001b[38;2;249;38;114m&>\u001b[0m\u001b[38;2;255;255;255m /dev/null\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;255;255;255m\t\u001b[0m\u001b[38;2;255;255;255mvar\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\n\u001b[38;2;255;255;255m\t\u001b[0m\u001b[38;2;102;217;239mprintf\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m%s...\\n\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m(\u001b[0m\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;230;219;116m some text\u001b[0m\u001b[38;2;230;219;116m)\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m\t\u001b[0m\u001b[38;2;249;38;114mwhile\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mtrue\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114mdo\u001b[0m\n\u001b[38;2;255;255;255m\t\t\u001b[0m\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mvar\u001b[0m\n\n\u001b[38;2;255;255;255m\t\t\u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m[[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mvar\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31meq\u001b[0m\u001b[38;2;255;255;255m 1 \u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;255;255;255m ( true \u001b[0m\u001b[38;2;249;38;114m||\u001b[0m\u001b[38;2;255;255;255m false ) \u001b[0m\u001b[38;2;102;217;239m]]\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m||\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mfalse\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m>&\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;255;255;255m /dev/null\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m&>\u001b[0m\u001b[38;2;255;255;255m /dev/null\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;255;255;255m\t\t\t\u001b[0m\u001b[38;2;255;255;255mvar\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m(\u001b[0m\u001b[38;2;255;255;255mcat\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;249;38;114m<<<\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mtwo\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m)\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m\t\t\t\u001b[0m\u001b[38;2;249;38;114mcontinue\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\n\u001b[38;2;255;255;255m\t\t\u001b[0m\u001b[38;2;249;38;114mfi\u001b[0m\n\n\u001b[38;2;255;255;255m\t\t\u001b[0m\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mvar\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\n\u001b[38;2;255;255;255m\t\t\t\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mtwo\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mvar\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mthree\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m\t\t\t\u001b[0m\u001b[38;2;255;255;255mthree\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mvar\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mfour\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m\t\t\t\u001b[0m\u001b[38;2;255;255;255mfo\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;255;255;255mr\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;255;255;255m\t\t\t\t\u001b[0m\u001b[38;2;255;255;255mvar\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116mfive\u001b[0m\n\u001b[38;2;255;255;255m\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\n\u001b[38;2;255;255;255m\t\t\t\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mfi\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255mve\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;255;255;255m\t\t\t\t\u001b[0m\u001b[38;2;255;255;255mvar\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m(\u001b[0m\n\u001b[38;2;230;219;116m\t\t\t\t\t\u001b[0m\u001b[38;2;255;255;255mcat\u001b[0m\u001b[38;2;230;219;116m       \u001b[0m\u001b[38;2;249;38;114m<<\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;249;38;114mEND\u001b[0m\n\u001b[38;2;230;219;116msix > \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mvar\u001b[0m\n\u001b[38;2;249;38;114mEND\u001b[0m\n\u001b[38;2;230;219;116m\t\t\t\t\u001b[0m\u001b[38;2;230;219;116m)\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\n\u001b[38;2;255;255;255m\t\t\t\u001b[0m\u001b[38;2;255;255;255m$'\u001b[0m\u001b[38;2;230;219;116msix\u001b[0m\u001b[38;2;190;132;255m\\n\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;255;255;255msix\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;255;255;255m\t\t\t\t\u001b[0m\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m?\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m\t\t\t\t\u001b[0m\u001b[38;2;255;255;255mseven\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116mseven\u001b[0m\n\u001b[38;2;255;255;255m\t\t\t\t\u001b[0m\u001b[38;2;249;38;114mwhile\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239mread\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mr\u001b[0m\u001b[38;2;255;255;255m line\u001b[0m\n\u001b[38;2;255;255;255m\t\t\t\t\u001b[0m\u001b[38;2;249;38;114mdo\u001b[0m\n\u001b[38;2;255;255;255m\t\t\t\t\t\u001b[0m\u001b[38;2;255;255;255mvar\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mline\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m\t\t\t\t\u001b[0m\u001b[38;2;249;38;114mdone\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m<<\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;249;38;114mHEREDOC\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;230;219;116m1\u001b[0m\n\u001b[38;2;230;219;116m2\u001b[0m\n\u001b[38;2;230;219;116m$seven\u001b[0m\n\u001b[38;2;249;38;114mHEREDOC\u001b[0m\n\u001b[38;2;255;255;255m\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\n\u001b[38;2;255;255;255m\t\t\t\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116msev\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;255;255;255m\t\t\t\t\u001b[0m\u001b[38;2;249;38;114mexport\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mvar\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116meight\u001b[0m\n\u001b[38;2;255;255;255m\t\t\t\t\u001b[0m\u001b[38;2;102;217;239munset\u001b[0m\u001b[38;2;255;255;255m var\u001b[0m\n\u001b[38;2;255;255;255m\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\n\u001b[38;2;255;255;255m\t\t\t\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;255;255;255m\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mincompatible_function\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mfalse\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m||\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mcompatible_function\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116myes\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m\t\t\t\t\u001b[0m\u001b[38;2;249;38;114mbreak\u001b[0m\n\u001b[38;2;255;255;255m\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m\t\t\u001b[0m\u001b[38;2;249;38;114mesac\u001b[0m\n\n\u001b[38;2;255;255;255m\t\t\u001b[0m\u001b[38;2;249;38;114mcontinue\u001b[0m\n\u001b[38;2;255;255;255m\t\u001b[0m\u001b[38;2;249;38;114mdone\u001b[0m\n\u001b[38;2;249;38;114mfi\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/BatTestCustomAssets/NoColorsUnlessCustomAssetsAreUsed.battestcustomassets",
    "content": "\u001b[38;2;248;248;242mcustom assets : 0\u001b[0m\n\u001b[38;2;248;248;242mare           : the best\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Batch/build.bat",
    "content": "\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114mecho\u001b[0m\u001b[38;2;248;248;242m off\u001b[0m\n\n\n\u001b[38;2;117;113;94m::\u001b[0m\u001b[38;2;117;113;94m Change to your LLVM installation\u001b[0m\n\u001b[38;2;249;38;114mset\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255mLLVMPath\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116mC:\\Program Files\\LLVM\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;117;113;94m::\u001b[0m\u001b[38;2;117;113;94m Change to your Visual Studio 2017 installation\u001b[0m\n\u001b[38;2;249;38;114mset\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255mVSPath\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116mC:\\Program Files \u001b[0m\u001b[38;2;230;219;116m(\u001b[0m\u001b[38;2;230;219;116mx86\u001b[0m\u001b[38;2;230;219;116m)\u001b[0m\u001b[38;2;230;219;116m\\Microsoft Visual Studio\\\u001b[0m\u001b[38;2;190;132;255m2017\u001b[0m\u001b[38;2;230;219;116m\\Community\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;249;38;114mset\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255mVSVersion\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;190;132;255m14\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;190;132;255m10\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;190;132;255m25017\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;117;113;94m::\u001b[0m\u001b[38;2;117;113;94m Change to your Windows Kit version & installation\u001b[0m\n\u001b[38;2;249;38;114mset\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255mWinSDKVersion\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;190;132;255m10\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;190;132;255m15063\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;249;38;114mset\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255mWinSDKPath\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116mC:\\Program Files \u001b[0m\u001b[38;2;230;219;116m(\u001b[0m\u001b[38;2;230;219;116mx86\u001b[0m\u001b[38;2;230;219;116m)\u001b[0m\u001b[38;2;230;219;116m\\Windows Kits\\\u001b[0m\u001b[38;2;190;132;255m10\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;117;113;94m::\u001b[0m\u001b[38;2;117;113;94m Change this to your resulting exe\u001b[0m\n\u001b[38;2;249;38;114mset\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255mOUTPUT\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116mtest.exe\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\n\n\u001b[38;2;117;113;94m::\u001b[0m\u001b[38;2;117;113;94m Setup\u001b[0m\n\u001b[38;2;249;38;114mset\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255mVSBasePath\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;255;255;255mVSPath\u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;230;219;116m\\VC\\Tools\\MSVC\\\u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;255;255;255mVSVersion\u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;249;38;114mset\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255mPATH\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;255;255;255mPATH\u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;230;219;116m;\u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;255;255;255mLLVMPath\u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;230;219;116m\\bin;\u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;255;255;255mVSBasePath\u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;230;219;116m\\bin\\HostX64\\x64\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\n\u001b[38;2;117;113;94m::\u001b[0m\u001b[38;2;117;113;94m Compiler Flags\u001b[0m\n\u001b[38;2;249;38;114mset\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mCFLAGS\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m ^\u001b[0m\n\u001b[38;2;248;248;242m -std=c++\u001b[0m\u001b[38;2;190;132;255m14\u001b[0m\u001b[38;2;248;248;242m -Wall -Wextra\u001b[0m\n\n\u001b[38;2;249;38;114mset\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mCPPFLAGS\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m ^\u001b[0m\n\u001b[38;2;248;248;242m  -I \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;255;255;255mVSBasePath\u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;230;219;116m\\include\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m^\u001b[0m\n\u001b[38;2;248;248;242m  -I \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;255;255;255mWinSDKPath\u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;230;219;116m\\Include\\\u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;255;255;255mWinSDKVersion\u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;230;219;116m\\shared\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m^\u001b[0m\n\u001b[38;2;248;248;242m  -I \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;255;255;255mWinSDKPath\u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;230;219;116m\\Include\\\u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;255;255;255mWinSDKVersion\u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;230;219;116m\\ucrt\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m^\u001b[0m\n\u001b[38;2;248;248;242m  -I \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;255;255;255mWinSDKPath\u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;230;219;116m\\Include\\\u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;255;255;255mWinSDKVersion\u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;230;219;116m\\um\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\n\n\u001b[38;2;117;113;94m::\u001b[0m\u001b[38;2;117;113;94m Linker Libs\u001b[0m\n\u001b[38;2;249;38;114mset\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mLDFLAGS\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m ^\u001b[0m\n\u001b[38;2;248;248;242m -machine:x64 \u001b[0m\u001b[38;2;190;132;255m^\u001b[0m\n\u001b[38;2;248;248;242m -nodefaultlib \u001b[0m\u001b[38;2;190;132;255m^\u001b[0m\n\u001b[38;2;248;248;242m -subsystem:console\u001b[0m\n\n\u001b[38;2;249;38;114mset\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mLDLIBS\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m ^\u001b[0m\n\u001b[38;2;248;248;242m -libpath:\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;255;255;255mVSBasePath\u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;230;219;116m\\lib\\x64\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m^\u001b[0m\n\u001b[38;2;248;248;242m -libpath:\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;255;255;255mWinSDKPath\u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;230;219;116m\\Lib\\\u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;255;255;255mWinSDKVersion\u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;230;219;116m\\ucrt\\x64\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m^\u001b[0m\n\u001b[38;2;248;248;242m -libpath:\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;255;255;255mWinSDKPath\u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;230;219;116m\\Lib\\\u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;255;255;255mWinSDKVersion\u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;230;219;116m\\um\\x64\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m^\u001b[0m\n\u001b[38;2;248;248;242m libucrt.lib libvcruntime.lib libcmt.lib libcpmt.lib \u001b[0m\u001b[38;2;190;132;255m^\u001b[0m\n\u001b[38;2;248;248;242m legacy_stdio_definitions.lib oldnames.lib \u001b[0m\u001b[38;2;190;132;255m^\u001b[0m\n\u001b[38;2;248;248;242m legacy_stdio_wide_specifiers.lib \u001b[0m\u001b[38;2;190;132;255m^\u001b[0m\n\u001b[38;2;248;248;242m kernel32.lib User32.lib\u001b[0m\n\n\n\u001b[38;2;117;113;94m::\u001b[0m\u001b[38;2;117;113;94m Compiling\u001b[0m\n\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114mecho\u001b[0m\u001b[38;2;248;248;242m on\u001b[0m\n\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m%%\u001b[0m\u001b[38;2;248;248;242mf in \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m*.cc\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m do \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\n\u001b[38;2;248;248;242m    clang++.exe \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;190;132;255m%%\u001b[0m\u001b[38;2;230;219;116m~f\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m -o \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;190;132;255m%%\u001b[0m\u001b[38;2;230;219;116m~nf.o\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m -c \u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;255;255;255mCFLAGS\u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\n\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;117;113;94m::\u001b[0m\u001b[38;2;117;113;94m Linking\u001b[0m\n\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114mset\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255mLINK_FILES\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m%%\u001b[0m\u001b[38;2;248;248;242mf in \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m*.o\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m do \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114mset\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255mLINK_FILES\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;255;255;255mLINK_FILES\u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;190;132;255m%%\u001b[0m\u001b[38;2;230;219;116m~f\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;248;248;242mlld-link.exe \u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;255;255;255mLINK_FILES\u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;248;248;242m -out:\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;255;255;255mOUTPUT\u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;255;255;255mLDFLAGS\u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;255;255;255mLDLIBS\u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/BibTeX/test.bib",
    "content": "\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114mbook\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;166;226;46mknuth1997art\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116mtitle\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;230;219;116mThe art of computer programming\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116mauthor\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;230;219;116mKnuth, Donald Ervin\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116mvolume\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;230;219;116m3\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116myear\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;230;219;116m1997\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116mpublisher\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;230;219;116mPearson Education\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114marticle\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;166;226;46megholm1993pna\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116mtitle\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;230;219;116mPNA hybridizes to complementary oligonucleotides obeying the Watson--Crick hydrogen-bonding rules\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116mauthor\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;230;219;116mEgholm, Michael and Buchardt, Ole and Christensen, Leif and Behrens, Carsten and Freier, Susan M and Driver, David A and Berg, Rolf H and Kim, Seog K and Norden, Bengt and Nielsen, Peter E\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116mjournal\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;230;219;116mNature\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116mvolume\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;230;219;116m365\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116mnumber\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;230;219;116m6446\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116mpages\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;230;219;116m566--568\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116myear\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;230;219;116m1993\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116mpublisher\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;230;219;116mSpringer\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/C/test.c",
    "content": "\u001b[38;2;249;38;114m#include\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;230;219;116m<\u001b[0m\u001b[38;2;230;219;116mstdio.h\u001b[0m\u001b[38;2;230;219;116m>\u001b[0m\n\u001b[38;2;249;38;114m#include\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;230;219;116m<\u001b[0m\u001b[38;2;230;219;116mstdlib.h\u001b[0m\u001b[38;2;230;219;116m>\u001b[0m\n\u001b[38;2;249;38;114m#include\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;230;219;116m<\u001b[0m\u001b[38;2;230;219;116mstdbool.h\u001b[0m\u001b[38;2;230;219;116m>\u001b[0m\n\n\u001b[3;38;2;102;217;239mvoid\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtest_function\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;249;38;114m#define\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;166;226;46mTEST\u001b[0m\n\u001b[38;2;249;38;114m#ifdef\u001b[0m\u001b[38;2;190;132;255m TEST\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239mprintf\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mTEST is defined\u001b[0m\u001b[38;2;190;132;255m\\n\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;249;38;114m#endif\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[3;38;2;102;217;239mstruct\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mNode\u001b[0m\n\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m val\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mstruct\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mNode\u001b[0m\u001b[38;2;248;248;242m *next\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mmain\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31margc\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mchar\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[3;38;2;253;151;31margv\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m/*\u001b[0m\u001b[38;2;117;113;94m This C program was written to help bat\u001b[0m\n\u001b[38;2;117;113;94m     \u001b[0m\u001b[38;2;117;113;94m*\u001b[0m\u001b[38;2;117;113;94m with its syntax highlighting tests\u001b[0m\n\u001b[38;2;117;113;94m     \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Calling test function\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mtest_function\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mstruct\u001b[0m\u001b[38;2;248;248;242m Node \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242mhead \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mNULL\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    head \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mstruct\u001b[0m\u001b[38;2;248;248;242m Node \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;102;217;239mmalloc\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114msizeof\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mstruct\u001b[0m\u001b[38;2;248;248;242m Node \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    head\u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;248;248;242mval \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mhead\u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;248;248;242mval \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        head\u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;248;248;242mval \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m10\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        head\u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;248;248;242mval \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m argc\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m t \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m head\u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;248;248;242mval\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m count \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239mfree\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mhead\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mwhile\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mt\u001b[0m\u001b[38;2;249;38;114m--\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        count\u001b[0m\u001b[38;2;249;38;114m++\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m i \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m t\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m i \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m count\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m++\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mdo\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114m--\u001b[0m\u001b[38;2;248;248;242mcount\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mwhile\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255mfalse\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239menum\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mchars\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        M\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m        I\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m        T\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m        H\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m        L\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mchar\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242mstring \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mstring\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239mprintf\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mtrue is #define true \u001b[0m\u001b[38;2;190;132;255m%d\u001b[0m\u001b[38;2;190;132;255m\\n\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/C-Sharp/Stack.cs",
    "content": "\u001b[3;38;2;102;217;239mnamespace\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mStackImplementation\u001b[0m\n\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114minternal\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mclass\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;102;217;239mStack\u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;166;226;46mT\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mprivate\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m_top\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mprivate\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mCapacity\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mprivate\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mreadonly\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mT\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m_stack\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mnew\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mT\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;255;255;255mCapacity\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mpublic\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mStack\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;255;255;255m_top\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mprivate\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mbool\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mIsEmpty\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m_top\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mprivate\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mbool\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mIsFull\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m_top\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mCapacity\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mpublic\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mvoid\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mPeek\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;255;255;255mSystem\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;255;255;255mConsole\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mWriteLine\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114m!\u001b[0m\u001b[38;2;248;248;242mIsEmpty\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m$\"\u001b[0m\u001b[38;2;230;219;116mThe topmost element is: \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;255;255;255m_stack\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;255;255;255m_top\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mThe stack is empty.\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mpublic\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mT\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mPop\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m!\u001b[0m\u001b[38;2;248;248;242mIsEmpty\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m_stack\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;255;255;255m_top\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mdefault\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mpublic\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mvoid\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mPush\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;166;226;46mT\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31melement\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114m!\u001b[0m\u001b[38;2;248;248;242mIsFull\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;255;255;255m_stack\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;255;255;255m_top\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255melement\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;255;255;255mSystem\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;255;255;255mConsole\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mWriteLine\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mCannot push - the stack is full.\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mpublic\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114moverride\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mToString\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mIsEmpty\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mThe stack is empty.\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[3;38;2;102;217;239mvar\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdepiction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mvar\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mindex\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mindex\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m_top\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mindex\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;255;255;255mdepiction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m_stack\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;255;255;255mindex\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mToString\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m' '\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;255;255;255mdepiction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m_stack\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;255;255;255m_top\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mToString\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m$\"\u001b[0m\u001b[38;2;230;219;116mStack: [\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;255;255;255mdepiction\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;230;219;116m]\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/CFML/test.cfml",
    "content": "\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mhead\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtitle\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mAdd New Employees\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtitle\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mhead\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mbody\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mh1\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mAdd New Employees\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mh1\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;117;113;94m<!---\u001b[0m\u001b[38;2;117;113;94m Action page code for the form at the bottom of this page. \u001b[0m\u001b[38;2;117;113;94m--->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;117;113;94m<!---\u001b[0m\u001b[38;2;117;113;94m Establish parameters for first time through \u001b[0m\u001b[38;2;117;113;94m--->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mcfparam\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mname\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mForm.firstname\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mdefault\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mcfparam\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mname\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mForm.lastname\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mdefault\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mcfparam\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mname\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mForm.email\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mdefault\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mcfparam\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mname\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mForm.phone\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mdefault\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mcfparam\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mname\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mForm.department\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mdefault\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;117;113;94m<!---\u001b[0m\u001b[38;2;117;113;94m If at least the firstname form field is passed, create \u001b[0m\n\u001b[38;2;117;113;94ma structure named employee and add values. \u001b[0m\u001b[38;2;117;113;94m--->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mcfif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m#\u001b[0m\u001b[38;2;255;255;255mForm\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mfirstname\u001b[0m\u001b[38;2;248;248;242m#\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255meq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mp\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mPlease fill out the form.\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mp\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mcfelse\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mcfoutput\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mcfscript\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;255;255;255memployee\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;102;217;239mStructNew\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;255;255;255memployee\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mfirstname\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mForm\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mfirstname\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;255;255;255memployee\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mlastname\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mForm\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mlastname\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;255;255;255memployee\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242memail\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mForm\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242memail\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;255;255;255memployee\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mphone\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mForm\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mphone\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;255;255;255memployee\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mdepartment\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mForm\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mdepartment\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mcfscript\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;117;113;94m<!---\u001b[0m\u001b[38;2;117;113;94m Display results of creating the structure. \u001b[0m\u001b[38;2;117;113;94m--->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242mFirst name is \u001b[0m\u001b[38;2;248;248;242m#\u001b[0m\u001b[38;2;102;217;239mStructFind\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255memployee\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mfirstname\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m#\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mbr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242mLast name is \u001b[0m\u001b[38;2;248;248;242m#\u001b[0m\u001b[38;2;102;217;239mStructFind\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255memployee\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mlastname\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m#\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mbr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242mEMail is \u001b[0m\u001b[38;2;248;248;242m#\u001b[0m\u001b[38;2;102;217;239mStructFind\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255memployee\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116memail\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m#\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mbr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242mPhone is \u001b[0m\u001b[38;2;248;248;242m#\u001b[0m\u001b[38;2;102;217;239mStructFind\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255memployee\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mphone\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m#\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mbr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242mDepartment is \u001b[0m\u001b[38;2;248;248;242m#\u001b[0m\u001b[38;2;102;217;239mStructFind\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255memployee\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mdepartment\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m#\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mbr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mcfoutput\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;117;113;94m<!---\u001b[0m\u001b[38;2;117;113;94m Call the custom tag that adds employees. \u001b[0m\u001b[38;2;117;113;94m--->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mcf_addemployee\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mempinfo\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m#\u001b[0m\u001b[38;2;255;255;255memployee\u001b[0m\u001b[38;2;230;219;116m#\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mcfif\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;117;113;94m<!---\u001b[0m\u001b[38;2;117;113;94m The form for adding the new employee information \u001b[0m\u001b[38;2;117;113;94m--->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mhr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mform\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46maction\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mnewemployee.cfm\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mmethod\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mPost\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242mFirst Name:\u001b[0m\u001b[38;2;190;132;255m&\u001b[0m\u001b[38;2;190;132;255mnbsp\u001b[0m\u001b[38;2;190;132;255m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114minput\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mname\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mfirstname\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtype\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mtext\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mhspace\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m30\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mmaxlength\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m30\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mbr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242mLast Name:\u001b[0m\u001b[38;2;190;132;255m&\u001b[0m\u001b[38;2;190;132;255mnbsp\u001b[0m\u001b[38;2;190;132;255m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114minput\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mname\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mlastname\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtype\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mtext\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mhspace\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m30\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mmaxlength\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m30\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mbr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242mEMail:\u001b[0m\u001b[38;2;190;132;255m&\u001b[0m\u001b[38;2;190;132;255mnbsp\u001b[0m\u001b[38;2;190;132;255m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114minput\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mname\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116memail\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtype\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mtext\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mhspace\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m30\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mmaxlength\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m30\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mbr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242mPhone:\u001b[0m\u001b[38;2;190;132;255m&\u001b[0m\u001b[38;2;190;132;255mnbsp\u001b[0m\u001b[38;2;190;132;255m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114minput\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mname\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mphone\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtype\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mtext\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mhspace\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m20\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mmaxlength\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m20\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mbr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242mDepartment:\u001b[0m\u001b[38;2;190;132;255m&\u001b[0m\u001b[38;2;190;132;255mnbsp\u001b[0m\u001b[38;2;190;132;255m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114minput\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mname\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mdepartment\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtype\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mtext\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mhspace\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m30\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mmaxlength\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m30\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mbr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114minput\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtype\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mSubmit\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mvalue\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mOK\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mform\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mbr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mbody\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mhtml\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/CMake/CMakeLists.txt",
    "content": "\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m This is a file for testing syntax highlighting.\u001b[0m\n\u001b[38;2;102;217;239mcmake_minimum_required\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mVERSION\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m3.13\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;102;217;239mproject\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mhello-bat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mVERSION\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m0.0.1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mLANGUAGES\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mC\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;102;217;239mset\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mSOURCE_DIR\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255mCMAKE_CURRENT_SOURCE_DIR\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;230;219;116m/src/\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;102;217;239mfile\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mGLOB_RECURSE\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mSOURCES\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255mSOURCE_DIR\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;230;219;116m/*.c\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;102;217;239madd_executable\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mhello-bat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mSOURCES\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;102;217;239mfind_package\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242massimp\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mCONFIG\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;102;217;239mtarget_link_libraries\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mhello-bat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242massimp\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;102;217;239moption\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mENABLE_TESTS\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mOFF\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mENABLE_TESTS\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239madd_subdirectory\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255mCMAKE_CURRENT_SOURCE_DIR\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;230;219;116m/tests/\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114mendif\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/COBOL/payroll.cbl",
    "content": "\u001b[38;2;249;38;114mIDENTIFICATION DIVISION\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;249;38;114mPROGRAM-ID\u001b[0m\u001b[38;2;248;248;242m. \u001b[0m\u001b[38;2;248;248;242mPAYROLL-CALC\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\n\u001b[38;2;249;38;114mDATA DIVISION\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;249;38;114mWORKING-STORAGE SECTION\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;190;132;255m01\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mEMPLOYEE-DETAILS\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;190;132;255m05\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mEMPLOYEE-NAME\u001b[0m\u001b[38;2;248;248;242m      \u001b[0m\u001b[3;38;2;102;217;239mPIC X(30).\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;190;132;255m05\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mHOURS-WORKED\u001b[0m\u001b[38;2;248;248;242m       \u001b[0m\u001b[3;38;2;102;217;239mPIC 99V9\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;190;132;255m05\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mHOURLY-RATE\u001b[0m\u001b[38;2;248;248;242m        \u001b[0m\u001b[3;38;2;102;217;239mPIC 99V99\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;190;132;255m01\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mPAY-CALCULATIONS\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;190;132;255m05\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mGROSS-PAY\u001b[0m\u001b[38;2;248;248;242m          \u001b[0m\u001b[3;38;2;102;217;239mPIC 9(5)V99.\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;190;132;255m05\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mOVERTIME-HOURS\u001b[0m\u001b[38;2;248;248;242m     \u001b[0m\u001b[3;38;2;102;217;239mPIC 99V9\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;190;132;255m05\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mOVERTIME-PAY\u001b[0m\u001b[38;2;248;248;242m       \u001b[0m\u001b[3;38;2;102;217;239mPIC 9(5)V99.\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;190;132;255m05\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mTAX-RATE\u001b[0m\u001b[38;2;248;248;242m           \u001b[0m\u001b[3;38;2;102;217;239mPIC V99\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mVALUE\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0.10\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;190;132;255m05\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mTAX-AMOUNT\u001b[0m\u001b[38;2;248;248;242m         \u001b[0m\u001b[3;38;2;102;217;239mPIC 9(5)V99.\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;190;132;255m05\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mNET-PAY\u001b[0m\u001b[38;2;248;248;242m            \u001b[0m\u001b[3;38;2;102;217;239mPIC 9(5)V99.\u001b[0m\n\n\u001b[38;2;249;38;114mPROCEDURE DIVISION\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242mMAIN-LOGIC\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mDISPLAY\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m--- COBOL Payroll Calculator ---\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mDISPLAY\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mEnter Employee Name: \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mACCEPT\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mEMPLOYEE-NAME\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mDISPLAY\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mEnter Hours Worked (e.g., 40.5): \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mACCEPT\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mHOURS-WORKED\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mDISPLAY\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mEnter Hourly Rate (e.g., 15.75): \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mACCEPT\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mHOURLY-RATE\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mPERFORM\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mCALCULATE-GROSS-PAY\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mPERFORM\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mCALCULATE-TAX\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mPERFORM\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mCALCULATE-NET-PAY\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mPERFORM\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mDISPLAY-RESULTS\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mSTOP RUN\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\n\u001b[38;2;248;248;242mCALCULATE-GROSS-PAY\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mIF\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mHOURS-WORKED\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m40\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mTHEN\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mCOMPUTE\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mOVERTIME-HOURS\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mHOURS-WORKED\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m40\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mCOMPUTE\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mOVERTIME-PAY\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mOVERTIME-HOURS\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mHOURLY-RATE\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1.5\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mCOMPUTE\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mGROSS-PAY\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;190;132;255m40\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mHOURLY-RATE\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mOVERTIME-PAY\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mELSE\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mCOMPUTE\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mGROSS-PAY\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mHOURS-WORKED\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mHOURLY-RATE\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mEND-IF\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\n\u001b[38;2;248;248;242mCALCULATE-TAX\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mCOMPUTE\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mTAX-AMOUNT\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mGROSS-PAY\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mTAX-RATE\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\n\u001b[38;2;248;248;242mCALCULATE-NET-PAY\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mCOMPUTE\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mNET-PAY\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mGROSS-PAY\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mTAX-AMOUNT\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\n\u001b[38;2;248;248;242mDISPLAY-RESULTS\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mDISPLAY\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m----------------------------------\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mDISPLAY\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mEmployee Name: \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mEMPLOYEE-NAME\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mDISPLAY\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mHours Worked:  \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mHOURS-WORKED\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mDISPLAY\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mHourly Rate:   \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mHOURLY-RATE\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mDISPLAY\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mGross Pay:     \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mGROSS-PAY\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mDISPLAY\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mTax (10%):     \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mTAX-AMOUNT\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mDISPLAY\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mNet Pay:       \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mNET-PAY\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mDISPLAY\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m----------------------------------\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m"
  },
  {
    "path": "tests/syntax-tests/highlighted/COBOL/test.cbl",
    "content": "\u001b[38;2;249;38;114mIDENTIFICATION DIVISION\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;249;38;114mPROGRAM-ID\u001b[0m\u001b[38;2;248;248;242m. \u001b[0m\u001b[38;2;248;248;242mPAYROLL-CALC\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\n\u001b[38;2;249;38;114mDATA DIVISION\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;249;38;114mWORKING-STORAGE SECTION\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;190;132;255m01\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mEMPLOYEE-DETAILS\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;190;132;255m05\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mEMPLOYEE-NAME\u001b[0m\u001b[38;2;248;248;242m      \u001b[0m\u001b[3;38;2;102;217;239mPIC X(30).\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;190;132;255m05\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mHOURS-WORKED\u001b[0m\u001b[38;2;248;248;242m       \u001b[0m\u001b[3;38;2;102;217;239mPIC 99V9\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;190;132;255m05\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mHOURLY-RATE\u001b[0m\u001b[38;2;248;248;242m        \u001b[0m\u001b[3;38;2;102;217;239mPIC 99V99\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;190;132;255m01\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mPAY-CALCULATIONS\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;190;132;255m05\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mGROSS-PAY\u001b[0m\u001b[38;2;248;248;242m          \u001b[0m\u001b[3;38;2;102;217;239mPIC 9(5)V99.\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;190;132;255m05\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mOVERTIME-HOURS\u001b[0m\u001b[38;2;248;248;242m     \u001b[0m\u001b[3;38;2;102;217;239mPIC 99V9\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;190;132;255m05\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mOVERTIME-PAY\u001b[0m\u001b[38;2;248;248;242m       \u001b[0m\u001b[3;38;2;102;217;239mPIC 9(5)V99.\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;190;132;255m05\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mTAX-RATE\u001b[0m\u001b[38;2;248;248;242m           \u001b[0m\u001b[3;38;2;102;217;239mPIC V99\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mVALUE\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0.10\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;190;132;255m05\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mTAX-AMOUNT\u001b[0m\u001b[38;2;248;248;242m         \u001b[0m\u001b[3;38;2;102;217;239mPIC 9(5)V99.\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;190;132;255m05\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mNET-PAY\u001b[0m\u001b[38;2;248;248;242m            \u001b[0m\u001b[3;38;2;102;217;239mPIC 9(5)V99.\u001b[0m\n\n\u001b[38;2;249;38;114mPROCEDURE DIVISION\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242mMAIN-LOGIC\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mDISPLAY\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m--- COBOL Payroll Calculator ---\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mDISPLAY\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mEnter Employee Name: \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mACCEPT\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mEMPLOYEE-NAME\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mDISPLAY\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mEnter Hours Worked (e.g., 40.5): \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mACCEPT\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mHOURS-WORKED\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mDISPLAY\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mEnter Hourly Rate (e.g., 15.75): \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mACCEPT\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mHOURLY-RATE\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mPERFORM\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mCALCULATE-GROSS-PAY\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mPERFORM\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mCALCULATE-TAX\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mPERFORM\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mCALCULATE-NET-PAY\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mPERFORM\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mDISPLAY-RESULTS\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mSTOP RUN\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\n\u001b[38;2;248;248;242mCALCULATE-GROSS-PAY\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mIF\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mHOURS-WORKED\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m40\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mTHEN\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mCOMPUTE\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mOVERTIME-HOURS\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mHOURS-WORKED\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m40\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mCOMPUTE\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mOVERTIME-PAY\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mOVERTIME-HOURS\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mHOURLY-RATE\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1.5\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mCOMPUTE\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mGROSS-PAY\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;190;132;255m40\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mHOURLY-RATE\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mOVERTIME-PAY\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mELSE\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mCOMPUTE\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mGROSS-PAY\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mHOURS-WORKED\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mHOURLY-RATE\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mEND-IF\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\n\u001b[38;2;248;248;242mCALCULATE-TAX\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mCOMPUTE\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mTAX-AMOUNT\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mGROSS-PAY\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mTAX-RATE\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\n\u001b[38;2;248;248;242mCALCULATE-NET-PAY\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mCOMPUTE\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mNET-PAY\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mGROSS-PAY\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mTAX-AMOUNT\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\n\u001b[38;2;248;248;242mDISPLAY-RESULTS\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mDISPLAY\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m----------------------------------\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mDISPLAY\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mEmployee Name: \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mEMPLOYEE-NAME\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mDISPLAY\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mHours Worked:  \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mHOURS-WORKED\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mDISPLAY\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mHourly Rate:   \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mHOURLY-RATE\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mDISPLAY\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mGross Pay:     \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mGROSS-PAY\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mDISPLAY\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mTax (10%):     \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mTAX-AMOUNT\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mDISPLAY\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mNet Pay:       \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mNET-PAY\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mDISPLAY\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m----------------------------------\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m"
  },
  {
    "path": "tests/syntax-tests/highlighted/CSS/style.css",
    "content": "\u001b[38;2;117;113;94m/*\u001b[0m\u001b[38;2;117;113;94mScrolling\u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;249;38;114mhtml\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mscroll-behavior\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239msmooth\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;117;113;94m/*\u001b[0m\u001b[38;2;117;113;94mHeader text\u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mjumbotron\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mbackground-image\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mlinear-gradient\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;190;132;255m90\u001b[0m\u001b[38;2;249;38;114mdeg\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m#\u001b[0m\u001b[38;2;190;132;255m849EB5\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m#\u001b[0m\u001b[38;2;190;132;255m30394A\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mpadding-bottom\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m20\u001b[0m\u001b[38;2;249;38;114mpx\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mpadding-top\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m20\u001b[0m\u001b[38;2;249;38;114mpx\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mtext-shadow\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114mpx\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114mpx\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\u001b[38;2;249;38;114mpx\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m#\u001b[0m\u001b[38;2;190;132;255m000000\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mcontainer\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mmargin-top\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m-25\u001b[0m\u001b[38;2;249;38;114mpx\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;117;113;94m/*\u001b[0m\u001b[38;2;117;113;94mBackground related\u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;249;38;114mbody\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mbackground\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m#\u001b[0m\u001b[38;2;190;132;255m161616\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;117;113;94m/*\u001b[0m\u001b[38;2;117;113;94mText related CSS\u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;249;38;114mh4\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mfont-size\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m70\u001b[0m\u001b[38;2;249;38;114mpx\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mcolor\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m#\u001b[0m\u001b[38;2;190;132;255mFFFFFF\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mfont-family\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mNews Cycle\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mserif\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;249;38;114mh3\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mcolor\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m#\u001b[0m\u001b[38;2;190;132;255me5e5e5\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;249;38;114mp\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mfont-size\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m17\u001b[0m\u001b[38;2;249;38;114mpx\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mfont-family\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mNews Cycle\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mserif\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mcolor\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m#\u001b[0m\u001b[38;2;190;132;255mDEDEDE\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;248;248;242mp2 \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mfont-size\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m24\u001b[0m\u001b[38;2;249;38;114mpx\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mcolor\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m#\u001b[0m\u001b[38;2;190;132;255mDEDEDE\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mfont-family\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mNews Cycle\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mserif\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;248;248;242mdate \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mfont-family\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mNews Cycle\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mserif\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mfont-style\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mitalic\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mfont-size\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m17\u001b[0m\u001b[38;2;249;38;114mpx\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mcolor\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m#\u001b[0m\u001b[38;2;190;132;255mDEDEDE\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;248;248;242mjobtitle \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mfont-size\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m17\u001b[0m\u001b[38;2;249;38;114mpx\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mfont-weight\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mbold\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mfont-family\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mNews Cycle\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mserif\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mcolor\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m#\u001b[0m\u001b[38;2;190;132;255mDEDEDE\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;248;248;242mjobtilenolink \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mfont-size\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m17\u001b[0m\u001b[38;2;249;38;114mpx\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mfont-weight\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mbold\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mfont-family\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mNews Cycle\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mserif\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mcolor\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m#\u001b[0m\u001b[38;2;190;132;255mDEDEDE\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;249;38;114mli\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mfont-family\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mNews Cycle\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mserif\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mcolor\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m#\u001b[0m\u001b[38;2;190;132;255mDEDEDE\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\n\n\n\u001b[38;2;249;38;114ma\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mcolor\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m#\u001b[0m\u001b[38;2;190;132;255m4A8ECC\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;249;38;114mp\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114ma\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mvisited\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mcolor\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m#\u001b[0m\u001b[38;2;190;132;255m4A8ECC\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mhref\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mcolor\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m#\u001b[0m\u001b[38;2;190;132;255m4A8ECC\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;249;38;114ma\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mvisited\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mcolor\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m#\u001b[0m\u001b[38;2;190;132;255m4A8ECC\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;249;38;114mp\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114ma\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mhover\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mcolor\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m#\u001b[0m\u001b[38;2;190;132;255m4FB1F4\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;249;38;114ma\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mhover\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mcolor\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m#\u001b[0m\u001b[38;2;190;132;255m4FB1F4\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;248;248;242mjobtitle\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mhover\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mcolor\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m#\u001b[0m\u001b[38;2;190;132;255m4FB1F4\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;117;113;94m/*\u001b[0m\u001b[38;2;117;113;94mSection\u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;249;38;114msection\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mbackground-color\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m#\u001b[0m\u001b[38;2;190;132;255m1B1B1B\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mpadding\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m20\u001b[0m\u001b[38;2;249;38;114mpx\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mmargin\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m-5\u001b[0m\u001b[38;2;249;38;114mpx\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mmargin-bottom\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m30\u001b[0m\u001b[38;2;249;38;114mpx\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mbox-shadow\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114mpx\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114mpx\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\u001b[38;2;249;38;114mpx\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mrgba\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;190;132;255m.\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\n\n\u001b[38;2;117;113;94m/*\u001b[0m\u001b[38;2;117;113;94mIcon related\u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46micon\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mposition\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mrelative\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mtop\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;249;38;114mpx\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mright\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;249;38;114mpx\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/CSV/comma-delimited.csv",
    "content": "\u001b[3;38;2;253;151;31mfoo\u001b[0m\u001b[38;2;253;151;31m,\u001b[0m\u001b[38;2;102;217;239mbar\u001b[0m\u001b[38;2;253;151;31m,\u001b[0m\u001b[38;2;190;132;255mbaz\u001b[0m\u001b[38;2;253;151;31m,\u001b[0m\u001b[38;2;249;38;114mthis|that\u001b[0m\u001b[38;2;253;151;31m,\u001b[0m\u001b[38;2;230;219;116mtest\u001b[0m\u001b[38;2;253;151;31m,\u001b[0m\u001b[3;38;2;253;151;31mcolors\u001b[0m\u001b[38;2;253;151;31m,\u001b[0m\u001b[38;2;102;217;239mcycle\u001b[0m\n\u001b[3;38;2;253;151;31m1.2\u001b[0m\u001b[38;2;253;151;31m,\u001b[0m\u001b[38;2;102;217;239m1.7\u001b[0m\u001b[38;2;253;151;31m,\u001b[0m\u001b[38;2;190;132;255m2.5\u001b[0m\u001b[38;2;253;151;31m,\u001b[0m\u001b[38;2;249;38;114mblah;cool\u001b[0m\u001b[38;2;253;151;31m,\u001b[0m\u001b[38;2;230;219;116mtest\u001b[0m\u001b[38;2;253;151;31m,\u001b[0m\u001b[3;38;2;253;151;31mcolors\u001b[0m\u001b[38;2;253;151;31m,\u001b[0m\u001b[38;2;102;217;239mcycle\u001b[0m\n\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/CSV/comma_in_quotes.csv",
    "content": "\u001b[3;38;2;253;151;31mfirst\u001b[0m\u001b[38;2;253;151;31m,\u001b[0m\u001b[38;2;102;217;239mlast\u001b[0m\u001b[38;2;253;151;31m,\u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;253;151;31m,\u001b[0m\u001b[38;2;249;38;114mcity\u001b[0m\u001b[38;2;253;151;31m,\u001b[0m\u001b[38;2;230;219;116mzip\u001b[0m\n\u001b[3;38;2;253;151;31mJohn\u001b[0m\u001b[38;2;253;151;31m,\u001b[0m\u001b[38;2;102;217;239mDoe\u001b[0m\u001b[38;2;253;151;31m,\u001b[0m\u001b[38;2;190;132;255m120 any st.\u001b[0m\u001b[38;2;253;151;31m,\u001b[0m\u001b[38;2;249;38;114m\"\u001b[0m\u001b[38;2;249;38;114mAnytown, WW\u001b[0m\u001b[38;2;249;38;114m\"\u001b[0m\u001b[38;2;253;151;31m,\u001b[0m\u001b[38;2;230;219;116m08123\u001b[0m\n\u001b[3;38;2;253;151;31ma\u001b[0m\u001b[38;2;253;151;31m,\u001b[0m\u001b[38;2;102;217;239mb\u001b[0m\n\u001b[3;38;2;253;151;31m1\u001b[0m\u001b[38;2;253;151;31m,\u001b[0m\u001b[38;2;102;217;239m\"\u001b[0m\u001b[38;2;102;217;239mha \u001b[0m\n\u001b[38;2;190;132;255m\"\"\u001b[0m\u001b[38;2;102;217;239mha\u001b[0m\u001b[38;2;190;132;255m\"\"\u001b[0m\u001b[38;2;102;217;239m \u001b[0m\n\u001b[38;2;102;217;239mha\u001b[0m\u001b[38;2;102;217;239m\"\u001b[0m\u001b[38;2;253;151;31m,\u001b[0m\u001b[38;2;190;132;255m120 any st.\u001b[0m\u001b[38;2;253;151;31m,\u001b[0m\u001b[38;2;249;38;114m\"\u001b[0m\u001b[38;2;249;38;114mAnytown, WW\u001b[0m\u001b[38;2;249;38;114m\"\u001b[0m\u001b[38;2;253;151;31m,\u001b[0m\u001b[38;2;230;219;116m08123\u001b[0m\n\u001b[3;38;2;253;151;31m3\u001b[0m\u001b[38;2;253;151;31m,\u001b[0m\u001b[38;2;102;217;239m4\u001b[0m\u001b[38;2;253;151;31m,\u001b[0m\u001b[38;2;190;132;255m120 any st.\u001b[0m\u001b[38;2;253;151;31m,\u001b[0m\u001b[38;2;249;38;114m\"\u001b[0m\u001b[38;2;249;38;114mAnytown, WW\u001b[0m\u001b[38;2;249;38;114m\"\u001b[0m\u001b[38;2;253;151;31m,\u001b[0m\u001b[38;2;230;219;116m08123\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/CSV/decimals_comma_decimal_point_pipe_delimited.csv",
    "content": "\u001b[3;38;2;253;151;31mfoo\u001b[0m\u001b[38;2;253;151;31m|\u001b[0m\u001b[38;2;102;217;239mbar\u001b[0m\u001b[38;2;253;151;31m|\u001b[0m\u001b[38;2;190;132;255mbaz\u001b[0m\n\u001b[3;38;2;253;151;31m1,2\u001b[0m\u001b[38;2;253;151;31m|\u001b[0m\u001b[38;2;102;217;239m1,7\u001b[0m\u001b[38;2;253;151;31m|\u001b[0m\u001b[38;2;190;132;255m2,7\u001b[0m\n\u001b[3;38;2;253;151;31m1,5\u001b[0m\u001b[38;2;253;151;31m|\u001b[0m\u001b[38;2;102;217;239m8,5\u001b[0m\u001b[38;2;253;151;31m|\u001b[0m\u001b[38;2;190;132;255m-5,5\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/CSV/decimals_comma_decimal_point_semicolon_delimited.csv",
    "content": "\u001b[3;38;2;253;151;31mfoo\u001b[0m\u001b[38;2;253;151;31m;\u001b[0m\u001b[38;2;102;217;239mbar\u001b[0m\u001b[38;2;253;151;31m;\u001b[0m\u001b[38;2;190;132;255mbaz\u001b[0m\n\u001b[3;38;2;253;151;31m1,2\u001b[0m\u001b[38;2;253;151;31m;\u001b[0m\u001b[38;2;102;217;239m1,7\u001b[0m\u001b[38;2;253;151;31m;\u001b[0m\u001b[38;2;190;132;255m2,7\u001b[0m\n\u001b[3;38;2;253;151;31m1,5\u001b[0m\u001b[38;2;253;151;31m;\u001b[0m\u001b[38;2;102;217;239m8,5\u001b[0m\u001b[38;2;253;151;31m;\u001b[0m\u001b[38;2;190;132;255m-5,5\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/CSV/simple.tsv",
    "content": "\u001b[3;38;2;253;151;31mfoo\u001b[0m\u001b[38;2;253;151;31m\t\u001b[0m\u001b[38;2;102;217;239mbar\u001b[0m\u001b[38;2;253;151;31m\t\u001b[0m\u001b[38;2;190;132;255mbaz|;,\u001b[0m\u001b[38;2;253;151;31m\t\u001b[0m\u001b[38;2;249;38;114mtest\u001b[0m\u001b[38;2;253;151;31m\t\u001b[0m\u001b[38;2;230;219;116mhello world\u001b[0m\u001b[38;2;253;151;31m\t\u001b[0m\u001b[3;38;2;253;151;31mtsv\u001b[0m\n\u001b[3;38;2;253;151;31m1,2\u001b[0m\u001b[38;2;253;151;31m\t\u001b[0m\u001b[38;2;102;217;239m1,7\u001b[0m\u001b[38;2;253;151;31m\t\u001b[0m\u001b[38;2;190;132;255m2,7\u001b[0m\u001b[38;2;253;151;31m\t\u001b[0m\u001b[38;2;249;38;114ma b c\u001b[0m\u001b[38;2;253;151;31m\t\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mhello\tagain\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;253;151;31m\t\u001b[0m\u001b[3;38;2;253;151;31mtsv\u001b[0m\n\u001b[3;38;2;253;151;31m\"\u001b[0m\u001b[3;38;2;253;151;31m;|,\u001b[0m\u001b[3;38;2;253;151;31m\"\u001b[0m\u001b[38;2;253;151;31m\t\u001b[0m\u001b[38;2;102;217;239m;|,\u001b[0m\u001b[38;2;253;151;31m\t\u001b[0m\u001b[38;2;190;132;255mbaz\u001b[0m\u001b[38;2;253;151;31m\t\u001b[0m\u001b[38;2;249;38;114mtest\u001b[0m\u001b[38;2;253;151;31m\t\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mhello world\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;253;151;31m\t\u001b[0m\u001b[3;38;2;253;151;31mtsv\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Cabal/semantic.cabal",
    "content": "\u001b[38;2;190;132;255mcabal-version\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m       \u001b[0m\u001b[38;2;248;248;242m2.4\u001b[0m\n\n\u001b[38;2;190;132;255mname\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m                \u001b[0m\u001b[38;2;248;248;242msemantic\u001b[0m\n\u001b[38;2;190;132;255mversion\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m             \u001b[0m\u001b[38;2;248;248;242m0.11.0.1\u001b[0m\n\u001b[38;2;190;132;255msynopsis\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m            \u001b[0m\u001b[38;2;248;248;242mFramework and executable for analyzing and diffing untrusted code.\u001b[0m\n\u001b[38;2;190;132;255mdescription\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m         \u001b[0m\u001b[38;2;248;248;242mSemantic is a library for parsing, analyzing, and comparing source code across many languages.\u001b[0m\n\u001b[38;2;190;132;255mhomepage\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m            \u001b[0m\u001b[38;2;248;248;242mhttp://github.com/github/semantic#readme\u001b[0m\n\u001b[38;2;190;132;255mbug-reports\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m         \u001b[0m\u001b[38;2;248;248;242mhttps://github.com/github/semantic/issues\u001b[0m\n\u001b[38;2;190;132;255mlicense\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m             \u001b[0m\u001b[38;2;248;248;242mMIT\u001b[0m\n\u001b[38;2;190;132;255mlicense-file\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m        \u001b[0m\u001b[38;2;248;248;242mLICENSE\u001b[0m\n\u001b[38;2;190;132;255mauthor\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m              \u001b[0m\u001b[38;2;248;248;242mThe Semantic authors\u001b[0m\n\u001b[38;2;190;132;255mmaintainer\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m          \u001b[0m\u001b[38;2;248;248;242mopensource+semantic@github.com\u001b[0m\n\u001b[38;2;190;132;255mcopyright\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m           \u001b[0m\u001b[38;2;248;248;242m(c) 2015-2020 GitHub, Inc.\u001b[0m\n\u001b[38;2;190;132;255mcategory\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m            \u001b[0m\u001b[38;2;248;248;242mLanguage\u001b[0m\n\u001b[38;2;190;132;255mbuild-type\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m          \u001b[0m\u001b[38;2;248;248;242mSimple\u001b[0m\n\u001b[38;2;190;132;255mstability\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m           \u001b[0m\u001b[38;2;248;248;242malpha\u001b[0m\n\u001b[38;2;190;132;255mextra-source-files\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m  \u001b[0m\u001b[38;2;248;248;242mREADME.md\u001b[0m\n\n\u001b[38;2;190;132;255mtested-with\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m         \u001b[0m\u001b[38;2;248;248;242mGHC == 8.10.1\u001b[0m\n\n\u001b[38;2;249;38;114mflag\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;230;219;116mrelease\u001b[0m\n\u001b[38;2;166;226;46m  \u001b[0m\u001b[38;2;190;132;255mdescription\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;248;248;242mBuild with optimizations on (for CI or deployment builds)\u001b[0m\n\u001b[38;2;166;226;46m  \u001b[0m\u001b[38;2;190;132;255mdefault\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m     \u001b[0m\u001b[38;2;248;248;242mFalse\u001b[0m\n\n\u001b[38;2;117;113;94m-- GHC extensions shared between targets\u001b[0m\n\u001b[38;2;248;248;242mcommon haskell\u001b[0m\n\u001b[38;2;166;226;46m  \u001b[0m\u001b[38;2;190;132;255mdefault-language\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m    \u001b[0m\u001b[38;2;248;248;242mHaskell2010\u001b[0m\n\u001b[38;2;166;226;46m  \u001b[0m\u001b[38;2;190;132;255mdefault-extensions\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m  \u001b[0m\u001b[38;2;248;248;242mStrictData\u001b[0m\n\u001b[38;2;166;226;46m  \u001b[0m\u001b[38;2;190;132;255mghc-options\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\n\u001b[38;2;248;248;242m    -Weverything\u001b[0m\n\u001b[38;2;248;248;242m    -Wno-missing-local-signatures\u001b[0m\n\u001b[38;2;248;248;242m    -Wno-missing-import-lists\u001b[0m\n\u001b[38;2;248;248;242m    -Wno-implicit-prelude\u001b[0m\n\u001b[38;2;248;248;242m    -Wno-safe\u001b[0m\n\u001b[38;2;248;248;242m    -Wno-unsafe\u001b[0m\n\u001b[38;2;248;248;242m    -Wno-name-shadowing\u001b[0m\n\u001b[38;2;248;248;242m    -Wno-monomorphism-restriction\u001b[0m\n\u001b[38;2;248;248;242m    -Wno-missed-specialisations\u001b[0m\n\u001b[38;2;248;248;242m    -Wno-all-missed-specialisations\u001b[0m\n\u001b[38;2;248;248;242m    -Wno-star-is-type\u001b[0m\n\u001b[38;2;166;226;46m  \u001b[0m\u001b[38;2;190;132;255mcpp-options\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\n\u001b[38;2;248;248;242m    -DBAZEL_BUILD=0\u001b[0m\n\u001b[38;2;248;248;242m  if (impl(ghc >= 8.8))\u001b[0m\n\u001b[38;2;166;226;46m    \u001b[0m\u001b[38;2;190;132;255mghc-options\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;248;248;242m-Wno-missing-deriving-strategies\u001b[0m\n\u001b[38;2;248;248;242m  if (impl(ghc >= 8.10))\u001b[0m\n\u001b[38;2;166;226;46m    \u001b[0m\u001b[38;2;190;132;255mghc-options\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\n\u001b[38;2;248;248;242m      -Wno-missing-safe-haskell-mode\u001b[0m\n\u001b[38;2;248;248;242m      -Wno-prepositive-qualified-module\u001b[0m\n\n\u001b[38;2;248;248;242mcommon executable-flags\u001b[0m\n\u001b[38;2;166;226;46m  \u001b[0m\u001b[38;2;190;132;255mghc-options\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m         \u001b[0m\u001b[38;2;248;248;242m-threaded -rtsopts \"-with-rtsopts=-N -A4m -n2m\"\u001b[0m\n\n\u001b[38;2;249;38;114mlibrary\u001b[0m\n\u001b[38;2;166;226;46m  \u001b[0m\u001b[38;2;190;132;255mimport\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m              \u001b[0m\u001b[38;2;248;248;242mhaskell\u001b[0m\n\u001b[38;2;166;226;46m  \u001b[0m\u001b[38;2;190;132;255mhs-source-dirs\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m      \u001b[0m\u001b[38;2;248;248;242msrc\u001b[0m\n\u001b[38;2;166;226;46m  \u001b[0m\u001b[38;2;190;132;255mexposed-modules\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m     \u001b[0m\u001b[38;2;248;248;242mControl.Carrier.Parse.Measured\u001b[0m\n\u001b[38;2;248;248;242m                     , Control.Carrier.Parse.Simple\u001b[0m\n\u001b[38;2;248;248;242m                     \u001b[0m\u001b[38;2;117;113;94m-- Effects\u001b[0m\n\u001b[38;2;248;248;242m                     , Control.Effect.Parse\u001b[0m\n\u001b[38;2;248;248;242m                     , Control.Effect.Sum.Project\u001b[0m\n\u001b[38;2;248;248;242m                     , Control.Effect.Timeout\u001b[0m\n\u001b[38;2;248;248;242m                     \u001b[0m\u001b[38;2;117;113;94m-- General datatype definitions & generic algorithms\u001b[0m\n\u001b[38;2;248;248;242m                     , Data.Blob\u001b[0m\n\u001b[38;2;248;248;242m                     , Data.Blob.IO\u001b[0m\n\u001b[38;2;248;248;242m                     , Data.Duration\u001b[0m\n\u001b[38;2;248;248;242m                     , Data.Edit\u001b[0m\n\u001b[38;2;248;248;242m                     , Data.Error\u001b[0m\n\u001b[38;2;248;248;242m                     , Data.Flag\u001b[0m\n\u001b[38;2;248;248;242m                     , Data.Graph.Algebraic\u001b[0m\n\u001b[38;2;248;248;242m                     , Data.Handle\u001b[0m\n\u001b[38;2;248;248;242m                     , Data.Maybe.Exts\u001b[0m\n\u001b[38;2;248;248;242m                     , Data.Semigroup.App\u001b[0m\n\u001b[38;2;248;248;242m                     \u001b[0m\u001b[38;2;117;113;94m-- Parser glue\u001b[0m\n\u001b[38;2;248;248;242m                     , Parsing.Parser\u001b[0m\n\u001b[38;2;248;248;242m                     , Parsing.TreeSitter\u001b[0m\n\u001b[38;2;248;248;242m                     \u001b[0m\u001b[38;2;117;113;94m-- API\u001b[0m\n\u001b[38;2;248;248;242m                     , Semantic.Api\u001b[0m\n\u001b[38;2;248;248;242m                     , Semantic.Api.Bridge\u001b[0m\n\u001b[38;2;248;248;242m                     , Semantic.Api.StackGraph\u001b[0m\n\u001b[38;2;248;248;242m                     , Semantic.Api.Symbols\u001b[0m\n\u001b[38;2;248;248;242m                     , Semantic.Api.Terms\u001b[0m\n\u001b[38;2;248;248;242m                     , Semantic.CLI\u001b[0m\n\u001b[38;2;248;248;242m                     , Semantic.Config\u001b[0m\n\u001b[38;2;248;248;242m                     , Semantic.Env\u001b[0m\n\u001b[38;2;248;248;242m                     , Semantic.IO\u001b[0m\n\u001b[38;2;248;248;242m                     , Semantic.Task\u001b[0m\n\u001b[38;2;248;248;242m                     , Semantic.Task.Files\u001b[0m\n\u001b[38;2;248;248;242m                     , Semantic.Telemetry\u001b[0m\n\u001b[38;2;248;248;242m                     , Semantic.Telemetry.AsyncQueue\u001b[0m\n\u001b[38;2;248;248;242m                     , Semantic.Telemetry.Error\u001b[0m\n\u001b[38;2;248;248;242m                     , Semantic.Telemetry.Log\u001b[0m\n\u001b[38;2;248;248;242m                     , Semantic.Telemetry.Stat\u001b[0m\n\u001b[38;2;248;248;242m                     , Semantic.Util\u001b[0m\n\u001b[38;2;248;248;242m                     , Semantic.Util.Pretty\u001b[0m\n\u001b[38;2;248;248;242m                     , Semantic.Version\u001b[0m\n\u001b[38;2;248;248;242m                     \u001b[0m\u001b[38;2;117;113;94m-- Serialization\u001b[0m\n\u001b[38;2;248;248;242m                     , Serializing.Format\u001b[0m\n\u001b[38;2;248;248;242m                     , Serializing.SExpression.Precise\u001b[0m\n\u001b[38;2;248;248;242m                     \u001b[0m\u001b[38;2;117;113;94m-- Custom Prelude\u001b[0m\n\u001b[38;2;166;226;46m  \u001b[0m\u001b[38;2;190;132;255mautogen-modules\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m     \u001b[0m\u001b[38;2;248;248;242mPaths_semantic\u001b[0m\n\u001b[38;2;166;226;46m  \u001b[0m\u001b[38;2;190;132;255mother-modules\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m       \u001b[0m\u001b[38;2;248;248;242mPaths_semantic\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m-- Except in case of vendored dependencies, these deps should be expressed\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m-- as caret-operator bounds relative to a version in Stackage.\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m-- These are currently pinned to lts-13.13.\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;190;132;255mbuild-depends\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239maeson\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1.4.2.0\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239malgebraic-graphs\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0.3\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mansi-terminal\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0.8.2\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239masync\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2.2.1\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mbase\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m4.13\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mbytestring\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0.10.8.2\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mcontainers\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0.6.0.1\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mdirectory-tree\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0.12.1\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mfilepath\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1.4.2.1\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mfused-effects\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1.1\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mghc-prim\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0.5\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0.7\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mhostname\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1.0\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mhscolour\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1.24.4\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mlens\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m4.17\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m4.20\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mnetwork\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2.8.0.0\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mnetwork-uri\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2.6.1.0\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239moptparse-applicative\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0.14.3\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0.16\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mpathtype\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0.8.1\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mpretty-show\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1.9.5\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mproto-lens\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0.5\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0.8\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239msemantic-analysis\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239msemantic-ast\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239msemantic-codeql\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239msemantic-go\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239msemantic-java\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239msemantic-json\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239msemantic-php\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239msemantic-proto\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239msemantic-python\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239msemantic-ruby\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239msemantic-scope-graph\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239msemantic-source\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0.1.0.1\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239msemantic-tags\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239msemantic-tsx\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239msemantic-typescript\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239msemilattices\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0.0.0.3\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239msplit\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0.2.3.3\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mstm-chans\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3.0.0.4\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mtext\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1.2.3.2\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mtime\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1.8.0.2\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1.10\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mtree-sitter\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0.9.0.1\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mtree-sitter-go\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0.5.0.0\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mtree-sitter-java\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0.7.0.0\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mtree-sitter-json\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0.7.0.0\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mtree-sitter-php\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0.5.0.0\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mtree-sitter-python\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0.9.0.1\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mtree-sitter-ql\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0.1.0.1\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mtree-sitter-ruby\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0.5.0.0\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mtree-sitter-tsx\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0.5.0.0\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mtree-sitter-typescript\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0.5.0.0\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239munix\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2.7.2.2\u001b[0m\n\n\u001b[38;2;249;38;114mexecutable\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;230;219;116msemantic\u001b[0m\n\u001b[38;2;166;226;46m  \u001b[0m\u001b[38;2;190;132;255mimport\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m              \u001b[0m\u001b[38;2;248;248;242mhaskell, executable-flags\u001b[0m\n\u001b[38;2;166;226;46m  \u001b[0m\u001b[38;2;190;132;255mhs-source-dirs\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m      \u001b[0m\u001b[38;2;248;248;242mapp\u001b[0m\n\u001b[38;2;166;226;46m  \u001b[0m\u001b[38;2;190;132;255mmain-is\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m             \u001b[0m\u001b[38;2;248;248;242mMain.hs\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;190;132;255mbuild-depends\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mbase\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239msemantic\u001b[0m\n\n\u001b[38;2;249;38;114mtest-suite\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;230;219;116mtest\u001b[0m\n\u001b[38;2;166;226;46m  \u001b[0m\u001b[38;2;190;132;255mimport\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m              \u001b[0m\u001b[38;2;248;248;242mhaskell, executable-flags\u001b[0m\n\u001b[38;2;166;226;46m  \u001b[0m\u001b[38;2;190;132;255mtype\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m                \u001b[0m\u001b[38;2;248;248;242mexitcode-stdio-1.0\u001b[0m\n\u001b[38;2;166;226;46m  \u001b[0m\u001b[38;2;190;132;255mhs-source-dirs\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m      \u001b[0m\u001b[38;2;248;248;242mtest\u001b[0m\n\u001b[38;2;166;226;46m  \u001b[0m\u001b[38;2;190;132;255mmain-is\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m             \u001b[0m\u001b[38;2;248;248;242mSpec.hs\u001b[0m\n\u001b[38;2;166;226;46m  \u001b[0m\u001b[38;2;190;132;255mother-modules\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m       \u001b[0m\u001b[38;2;248;248;242mData.Graph.Spec\u001b[0m\n\u001b[38;2;248;248;242m                     , Data.Language.Spec\u001b[0m\n\u001b[38;2;248;248;242m                     , Data.Semigroup.App.Spec\u001b[0m\n\u001b[38;2;248;248;242m                     , Integration.Spec\u001b[0m\n\u001b[38;2;248;248;242m                     , Semantic.Spec\u001b[0m\n\u001b[38;2;248;248;242m                     , Semantic.CLI.Spec\u001b[0m\n\u001b[38;2;248;248;242m                     , Semantic.IO.Spec\u001b[0m\n\u001b[38;2;248;248;242m                     , Semantic.Stat.Spec\u001b[0m\n\u001b[38;2;248;248;242m                     , Tags.Spec\u001b[0m\n\u001b[38;2;248;248;242m                     , SpecHelpers\u001b[0m\n\u001b[38;2;248;248;242m                     , Generators\u001b[0m\n\u001b[38;2;248;248;242m                     , Properties\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;190;132;255mbuild-depends\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239malgebraic-graphs\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0.3\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mbase\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m4.13\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mbytestring\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0.10.8.2\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mfused-effects\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mGlob\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0.10.0\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mhedgehog\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mhspec\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2.6\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mhspec-expectations\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0.8.2\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mnetwork\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2.8.0.0\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mpathtype\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0.8.1\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239msemantic\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239msemantic-analysis\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239msemantic-ast\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239msemantic-proto\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239msemantic-source\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0.1.0.1\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239msemantic-tags\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239msemilattices\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mtasty\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1.2.3\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mtasty-golden\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2.3.2\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mtasty-hedgehog\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1.0.0.1\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mtasty-hspec\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1.1.5.1\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mtasty-hunit\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0.10.0.2\u001b[0m\n\n\u001b[38;2;249;38;114mtest-suite\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;230;219;116mparse-examples\u001b[0m\n\u001b[38;2;166;226;46m  \u001b[0m\u001b[38;2;190;132;255mimport\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m              \u001b[0m\u001b[38;2;248;248;242mhaskell, executable-flags\u001b[0m\n\u001b[38;2;166;226;46m  \u001b[0m\u001b[38;2;190;132;255mtype\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m                \u001b[0m\u001b[38;2;248;248;242mexitcode-stdio-1.0\u001b[0m\n\u001b[38;2;166;226;46m  \u001b[0m\u001b[38;2;190;132;255mhs-source-dirs\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m      \u001b[0m\u001b[38;2;248;248;242mtest\u001b[0m\n\u001b[38;2;166;226;46m  \u001b[0m\u001b[38;2;190;132;255mmain-is\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m             \u001b[0m\u001b[38;2;248;248;242mExamples.hs\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;190;132;255mbuild-depends\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239masync\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2.2.1\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mbase\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mfused-effects\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1.1\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mGlob\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mlens\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m4.17\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m4.20\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mpathtype\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0.8.1\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mprocess\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1.6.3.0\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239msemantic\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239msemantic-analysis\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239msemantic-ast\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239msemantic-proto\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mtasty\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mtasty-hunit\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mtext\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1.2.3.2\u001b[0m\n\n\u001b[38;2;249;38;114mbenchmark\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;230;219;116mbenchmarks\u001b[0m\n\u001b[38;2;166;226;46m  \u001b[0m\u001b[38;2;190;132;255mimport\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m              \u001b[0m\u001b[38;2;248;248;242mhaskell, executable-flags\u001b[0m\n\u001b[38;2;166;226;46m  \u001b[0m\u001b[38;2;190;132;255mhs-source-dirs\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m      \u001b[0m\u001b[38;2;248;248;242mbench\u001b[0m\n\u001b[38;2;166;226;46m  \u001b[0m\u001b[38;2;190;132;255mtype\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m                \u001b[0m\u001b[38;2;248;248;242mexitcode-stdio-1.0\u001b[0m\n\u001b[38;2;166;226;46m  \u001b[0m\u001b[38;2;190;132;255mmain-is\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m             \u001b[0m\u001b[38;2;248;248;242mMain.hs\u001b[0m\n\u001b[38;2;166;226;46m  \u001b[0m\u001b[38;2;190;132;255mother-modules\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m       \u001b[0m\u001b[38;2;248;248;242mTagging\u001b[0m\n\u001b[38;2;166;226;46m  \u001b[0m\u001b[38;2;190;132;255mghc-options\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m         \u001b[0m\u001b[38;2;248;248;242m-static\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;190;132;255mbuild-depends\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mbase\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mfused-effects\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1.1\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mgauge\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0.2.5\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mGlob\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239mpathtype\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0.8.1\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239msemantic\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239msemantic-analysis\u001b[0m\u001b[38;2;248;248;242m ^\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;248;248;242m    , \u001b[0m\u001b[38;2;102;217;239msemantic-proto\u001b[0m\n\n\u001b[38;2;249;38;114msource-repository\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;230;219;116mhead\u001b[0m\n\u001b[38;2;166;226;46m  \u001b[0m\u001b[38;2;190;132;255mtype\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m     \u001b[0m\u001b[38;2;248;248;242mgit\u001b[0m\n\u001b[38;2;166;226;46m  \u001b[0m\u001b[38;2;190;132;255mlocation\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;248;248;242mhttps://github.com/github/semantic\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Clojure/test.clj",
    "content": "\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mns\u001b[0m\u001b[38;2;248;248;242m clojure-sample.core\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;190;132;255mgen-class\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mrequire\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m'\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mclj-time.core \u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;190;132;255mas\u001b[0m\u001b[38;2;248;248;242m t\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mrequire\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m'\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mclj-time.format \u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;190;132;255mas\u001b[0m\u001b[38;2;248;248;242m f\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m;;\u001b[0m\u001b[38;2;117;113;94m Product record\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mdefrecord\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mProduct\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mid name available price\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m;;\u001b[0m\u001b[38;2;117;113;94m Positional constructor\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mdef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mproduct1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m->Product\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mT-Shirt 1\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m15\u001b[0m\u001b[38;2;190;132;255m.\u001b[0m\u001b[38;2;190;132;255m00\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m;;\u001b[0m\u001b[38;2;117;113;94m Map constructor\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mdef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mproduct2\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mmap->Product\u001b[0m\n\u001b[38;2;248;248;242m                 \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;190;132;255mid\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m2\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m                  \u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;190;132;255mname\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mT-Shirt 2\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m                  \u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;190;132;255mavailable\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\n\u001b[38;2;248;248;242m                  \u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;190;132;255mprice\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m20\u001b[0m\u001b[38;2;190;132;255m.\u001b[0m\u001b[38;2;190;132;255m00\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m;;\u001b[0m\u001b[38;2;117;113;94m Nested\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mdef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mproduct3\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;190;132;255mid\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m                 \u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;190;132;255mname\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mProduct 1\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m                 \u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;190;132;255mavailable\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\n\u001b[38;2;248;248;242m                 \u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;190;132;255msellers\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;190;132;255mid\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;190;132;255mname\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mSeller 1\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;190;132;255mstock\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;117;113;94m,\u001b[0m\n\u001b[38;2;248;248;242m                           \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;190;132;255mid\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;190;132;255mname\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mSeller 2\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;190;132;255mstock\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m;;\u001b[0m\u001b[38;2;117;113;94m Set\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mdef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mcategories\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m#{\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mshirts\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mshoes\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mbelts\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m;;\u001b[0m\u001b[38;2;117;113;94m List\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mdef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mwishlist\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m'\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m;;\u001b[0m\u001b[38;2;117;113;94m Recursion\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mdefn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mfactorial\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mvalue\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mcond\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m<=\u001b[0m\u001b[38;2;248;248;242m value \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;190;132;255melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m*\u001b[0m\u001b[38;2;248;248;242m value \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mfactorial\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m-\u001b[0m\u001b[38;2;248;248;242m value \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mdef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mbasic-formatter\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mf/formatter\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mYYYY-MM-dd hh:mm:ss\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mdefn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mnow\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mf/unparse\u001b[0m\u001b[38;2;248;248;242m basic-formatter \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mt/now\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mdefn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mlog\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mprintln\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mnow\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mNo message\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mmessage\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mprintln\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mnow\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m  message\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mdefn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m-main\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m& args\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mprintln\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;190;132;255mid\u001b[0m\u001b[38;2;248;248;242m product1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mprintln\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;190;132;255mname\u001b[0m\u001b[38;2;248;248;242m product2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mprintln\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;190;132;255mname\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mget\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;190;132;255msellers\u001b[0m\u001b[38;2;248;248;242m product3\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mprintln\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mfirst\u001b[0m\u001b[38;2;248;248;242m categories\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mprintln\u001b[0m\u001b[38;2;248;248;242m wishlist\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mprintln\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mfactorial\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mlog\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mlog\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mMessage\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/CoffeeScript/coffeescript.coffee",
    "content": "\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m CoffeeScript can be used both on the server, as a command-line compiler based\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m on Node.js/V8, or to run CoffeeScript directly in the browser. This module\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m contains the main entry functions for tokenizing, parsing, and compiling\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m source CoffeeScript into JavaScript.\u001b[0m\n\n\u001b[38;2;249;38;114m{\u001b[0m\u001b[38;2;248;248;242mLexer\u001b[0m\u001b[38;2;249;38;114m}       =\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mrequire\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m./lexer\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\n\u001b[38;2;249;38;114m{\u001b[0m\u001b[38;2;248;248;242mparser\u001b[0m\u001b[38;2;249;38;114m}      =\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mrequire\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m./parser\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\n\u001b[38;2;248;248;242mhelpers       \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;102;217;239mrequire\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m./helpers\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\n\u001b[38;2;248;248;242mSourceMap     \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;102;217;239mrequire\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m./sourcemap\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Require `package.json`, which is two levels above this file, as this file is\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m evaluated from `lib/coffeescript`.\u001b[0m\n\u001b[38;2;248;248;242mpackageJson   \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;102;217;239mrequire\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m../../package.json\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m The current CoffeeScript version number.\u001b[0m\n\u001b[38;2;248;248;242mexports.VERSION \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mpackageJson\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mversion\u001b[0m\n\n\u001b[38;2;248;248;242mexports.FILE_EXTENSIONS \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mFILE_EXTENSIONS \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m.coffee\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m.litcoffee\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m.coffee.md\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Expose helpers for testing.\u001b[0m\n\u001b[38;2;248;248;242mexports.helpers \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mhelpers\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Function that allows for btoa in both nodejs and the browser.\u001b[0m\n\u001b[38;2;166;226;46mbase64encod\u001b[0m\u001b[38;2;166;226;46me\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31m(src)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mswitch\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mwhen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mtypeof\u001b[0m\u001b[38;2;248;248;242m Buffer \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mfunction\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\n\u001b[38;2;248;248;242m    Buffer\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mfrom\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;248;248;242msrc\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mtoString\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mbase64\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mwhen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mtypeof\u001b[0m\u001b[38;2;248;248;242m btoa \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mfunction\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m The contents of a `<script>` block are encoded via UTF-16, so if any extended\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m characters are used in the block, btoa will fail as it maxes out at UTF-8.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m See https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding#The_Unicode_Problem\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m for the gory details, and for the solution implemented here.\u001b[0m\n\u001b[38;2;248;248;242m    btoa \u001b[0m\u001b[38;2;102;217;239mencodeURIComponent\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;248;248;242msrc\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mreplace \u001b[0m\u001b[38;2;246;170;17m/%([0-9A-F]{2})/g\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;253;151;31m(match, p1)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m->\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[3;38;2;166;226;46mString\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mfromCharCode \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m0x\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m p1\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mthrow\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mnew\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mError\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mUnable to base64 encode inline sourcemap.\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Function wrapper to add source file information to SyntaxErrors thrown by the\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m lexer/parser/compiler.\u001b[0m\n\u001b[38;2;166;226;46mwithPrettyError\u001b[0m\u001b[38;2;166;226;46ms\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31m(fn)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m->\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;253;151;31m(code, options = {})\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m->\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mtry\u001b[0m\n\u001b[38;2;248;248;242m      fn\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242mcode\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242moptions\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mcatch\u001b[0m\u001b[38;2;248;248;242m err\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mthrow\u001b[0m\u001b[38;2;248;248;242m err \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mtypeof\u001b[0m\u001b[38;2;248;248;242m code \u001b[0m\u001b[38;2;249;38;114misnt\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mstring\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Support `CoffeeScript.nodes(tokens)`.\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mthrow\u001b[0m\u001b[38;2;248;248;242m helpers\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mupdateSyntaxError err\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242mcode\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242moptions\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mfilename\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m For each compiled file, save its source in memory in case we need to\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m recompile it later. We might need to recompile if the first compilation\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m didn’t create a source map (faster) but something went wrong and we need\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m a stack trace. Assuming that most of the time, code isn’t throwing\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m exceptions, it’s probably more efficient to compile twice only when we\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m need a stack trace, rather than always generating a source map even when\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m it’s not likely to be used. Save in form of `filename`: [`(source)`]\u001b[0m\n\u001b[38;2;248;248;242msources \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Also save source maps if generated, in form of `(source)`: [`(source map)`].\u001b[0m\n\u001b[38;2;248;248;242msourceMaps \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m This is exported to enable an external module to implement caching of\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m compilation results. When the compiled js source is loaded from cache, the\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m original coffee code should be added with this method in order to enable the\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Error.prepareStackTrace below to correctly adjust the stack trace for the\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m corresponding file (the source map will be generated on demand).\u001b[0m\n\u001b[38;2;248;248;242mexports.registerCompiled \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;166;226;46mregisterCompile\u001b[0m\u001b[38;2;166;226;46md\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31m(filename, source, sourcemap)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m->\u001b[0m\n\n\u001b[38;2;248;248;242m  sources\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mfilename\u001b[0m\u001b[38;2;248;248;242m] \u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m  sources\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mfilename\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mpush\u001b[0m\u001b[38;2;248;248;242m source\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m sourcemap\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\n\u001b[38;2;248;248;242m    sourceMaps\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mfilename\u001b[0m\u001b[38;2;248;248;242m] \u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m    sourceMaps\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mfilename\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mpush\u001b[0m\u001b[38;2;248;248;242m sourcemap\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Compile CoffeeScript code to JavaScript, using the Coffee/Jison compiler.\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m If `options.sourceMap` is specified, then `options.filename` must also be\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m specified. All options that can be passed to `SourceMap#generate` may also\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m be passed here.\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m This returns a javascript string, unless `options.sourceMap` is passed,\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m in which case this returns a `{js, v3SourceMap, sourceMap}`\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m object, where sourceMap is a sourcemap.coffee#SourceMap object, handy for\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m doing programmatic lookups.\u001b[0m\n\u001b[38;2;248;248;242mexports.compile \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mcompile \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mwithPrettyErrors \u001b[0m\u001b[3;38;2;253;151;31m(code, options = {})\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m->\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Clone `options`, to avoid mutating the `options` object passed in.\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242moptions \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[3;38;2;166;226;46mObject\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242massign \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242moptions\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Always generate a source map if no filename is passed in, since without a\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m a filename we have no way to retrieve this source later in the event that\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m we need to recompile it to get a source map for `prepareStackTrace`.\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242mgenerateSourceMap \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242moptions\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242msourceMap \u001b[0m\u001b[38;2;249;38;114mor\u001b[0m\u001b[38;2;248;248;242m options\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242minlineMap \u001b[0m\u001b[38;2;249;38;114mor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mnot\u001b[0m\u001b[38;2;248;248;242m options\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mfilename\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242mfilename \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242moptions\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mfilename \u001b[0m\u001b[38;2;249;38;114mor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m<anonymous>\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\n\n\u001b[38;2;248;248;242m  checkShebangLine filename\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242mcode\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242mmap \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;249;38;114mnew\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mSourceMap\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m generateSourceMap\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242mtokens \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mlexer\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mtokenize code\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242moptions\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Pass a list of referenced variables, so that generated variables won’t get\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m the same name.\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242moptions.referencedVars \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\n\u001b[38;2;248;248;242m    token\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m] \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m token \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m tokens \u001b[0m\u001b[38;2;249;38;114mwhen\u001b[0m\u001b[38;2;248;248;242m token\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m] \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mIDENTIFIER\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Check for import or export; if found, force bare mode.\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114munless\u001b[0m\u001b[38;2;248;248;242m options\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mbare\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mand\u001b[0m\u001b[38;2;248;248;242m options\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mbare \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255myes\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m token \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m tokens\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m token\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m] \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mIMPORT\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mEXPORT\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242moptions.bare \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;190;132;255myes\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mbreak\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242mnodes \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mparser\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mparse tokens\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m If all that was requested was a POJO representation of the nodes, e.g.\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m the abstract syntax tree (AST), we can stop now and just return that\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m (after fixing the location data for the root/`File`»`Program` node,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m which might’ve gotten misaligned from the original source due to the\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m `clean` function in the lexer).\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m options\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mast\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mnodes.allCommentTokens \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mhelpers\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mextractAllCommentTokens tokens\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242msourceCodeNumberOfLines \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;248;248;242mcode\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mmatch\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;246;170;17m/\\r?\\n/g\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mlength \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242msourceCodeLastLine \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;246;170;17m/.*$/\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mexec\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;248;248;242mcode\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m] \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m `.*` matches all but line break characters.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mast \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mnodes\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mast options\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mrange \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242mcode\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mlength\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mast.start \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mast.program.start \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mrange\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mast.end \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mast.program.end \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mrange\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mast.range \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mast.program.range \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mrange\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mast.loc.start \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mast.program.loc.start \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242mline\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242mcolumn\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mast.loc.end.line \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mast.program.loc.end.line \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242msourceCodeNumberOfLines\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mast.loc.end.column \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mast.program.loc.end.column \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242msourceCodeLastLine\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mlength\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mast.tokens \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mtokens\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m ast\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242mfragments \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mnodes\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mcompileToFragments options\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242mcurrentLine \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;248;248;242m  currentLine \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m options\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mheader\u001b[0m\n\u001b[38;2;248;248;242m  currentLine \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m options\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mshiftLine\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242mcurrentColumn \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242mjs \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m fragment \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m fragments\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Update the sourcemap with data from each fragment.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m generateSourceMap\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Do not include empty, whitespace, or semicolon-only fragments.\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m fragment\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mlocationData \u001b[0m\u001b[38;2;249;38;114mand\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mnot\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;246;170;17m/^[;\\s]*$/\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mtest fragment\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mcode\u001b[0m\n\u001b[38;2;248;248;242m        map\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242madd\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\n\u001b[38;2;248;248;242m          \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mfragment\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mlocationData\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mfirst_line\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242mfragment\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mlocationData\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mfirst_column\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m          \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mcurrentLine\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242mcurrentColumn\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m          \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242mnoReplace\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;248;248;242mnewLines \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mhelpers\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mcount fragment\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mcode\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;190;132;255m\\n\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m      currentLine \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m newLines\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m newLines\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242mcurrentColumn \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mfragment\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mcode\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mlength \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;248;248;242mfragment\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mcode\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mlastIndexOf\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;190;132;255m\\n\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;248;248;242m        currentColumn \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m fragment\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mcode\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mlength\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Copy the code from each fragment into the final JavaScript.\u001b[0m\n\u001b[38;2;248;248;242m    js \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m fragment\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mcode\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m options\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mheader\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mheader \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mGenerated by CoffeeScript \u001b[0m\u001b[38;2;230;159;102m#{\u001b[0m\u001b[38;2;255;255;255m@VERSION\u001b[0m\u001b[38;2;230;159;102m}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mjs \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m// \u001b[0m\u001b[38;2;230;159;102m#{\u001b[0m\u001b[38;2;230;219;116mheader\u001b[0m\u001b[38;2;230;159;102m}\u001b[0m\u001b[38;2;190;132;255m\\n\u001b[0m\u001b[38;2;230;159;102m#{\u001b[0m\u001b[38;2;230;219;116mjs\u001b[0m\u001b[38;2;230;159;102m}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m generateSourceMap\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mv3SourceMap \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mmap\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mgenerate options\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242mcode\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m options\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mtranspile\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mtypeof\u001b[0m\u001b[38;2;248;248;242m options\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mtranspile \u001b[0m\u001b[38;2;249;38;114misnt\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mobject\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m This only happens if run via the Node API and `transpile` is set to\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m something other than an object.\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mthrow\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mnew\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mError\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mThe transpile option must be given an object with options to pass to Babel\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Get the reference to Babel that we have been passed if this compiler\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m is run via the CLI or Node API.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mtranspiler \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242moptions\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mtranspile\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mtranspile\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mdelete\u001b[0m\u001b[38;2;248;248;242m options\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mtranspile\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mtranspile\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mtranspilerOptions \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[3;38;2;166;226;46mObject\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242massign \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242moptions\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mtranspile\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m See https://github.com/babel/babel/issues/827#issuecomment-77573107:\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Babel can take a v3 source map object as input in `inputSourceMap`\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m and it will return an *updated* v3 source map object in its output.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m v3SourceMap \u001b[0m\u001b[38;2;249;38;114mand\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mnot\u001b[0m\u001b[38;2;248;248;242m transpilerOptions\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242minputSourceMap\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;248;248;242mtranspilerOptions.inputSourceMap \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mv3SourceMap\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mtranspilerOutput \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mtranspiler js\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242mtranspilerOptions\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mjs \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mtranspilerOutput\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mcode\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m v3SourceMap \u001b[0m\u001b[38;2;249;38;114mand\u001b[0m\u001b[38;2;248;248;242m transpilerOutput\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mmap\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;248;248;242mv3SourceMap \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mtranspilerOutput\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mmap\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m options\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242minlineMap\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mencoded \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mbase64encode JSON\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mstringify v3SourceMap\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242msourceMapDataURI \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m//# sourceMappingURL=data:application/json;base64,\u001b[0m\u001b[38;2;230;159;102m#{\u001b[0m\u001b[38;2;230;219;116mencoded\u001b[0m\u001b[38;2;230;159;102m}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242msourceURL \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m//# sourceURL=\u001b[0m\u001b[38;2;230;159;102m#{\u001b[0m\u001b[38;2;230;219;116moptions\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116mfilename \u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mcoffeescript\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;159;102m}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mjs \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;159;102m#{\u001b[0m\u001b[38;2;230;219;116mjs\u001b[0m\u001b[38;2;230;159;102m}\u001b[0m\u001b[38;2;190;132;255m\\n\u001b[0m\u001b[38;2;230;159;102m#{\u001b[0m\u001b[38;2;230;219;116msourceMapDataURI\u001b[0m\u001b[38;2;230;159;102m}\u001b[0m\u001b[38;2;190;132;255m\\n\u001b[0m\u001b[38;2;230;159;102m#{\u001b[0m\u001b[38;2;230;219;116msourceURL\u001b[0m\u001b[38;2;230;159;102m}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\n\u001b[38;2;248;248;242m  registerCompiled filename\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242mcode\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242mmap\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m options\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242msourceMap\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m      js\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;248;248;242msourceMap\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m map\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;248;248;242mv3SourceMap\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m JSON\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mstringify v3SourceMap\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255mnull\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;248;248;242m    js\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Tokenize a string of CoffeeScript code, and return the array of tokens.\u001b[0m\n\u001b[38;2;248;248;242mexports.tokens \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mwithPrettyErrors \u001b[0m\u001b[3;38;2;253;151;31m(code, options)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m->\u001b[0m\n\u001b[38;2;248;248;242m  lexer\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mtokenize code\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242moptions\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Parse a string of CoffeeScript code or an array of lexed tokens, and\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m return the AST. You can then compile it by calling `.compile()` on the root,\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m or traverse it by using `.traverseChildren()` with a callback.\u001b[0m\n\u001b[38;2;248;248;242mexports.nodes \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mwithPrettyErrors \u001b[0m\u001b[3;38;2;253;151;31m(source, options)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m->\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242msource \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mlexer\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mtokenize source\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242moptions \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mtypeof\u001b[0m\u001b[38;2;248;248;242m source \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mstring\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\n\u001b[38;2;248;248;242m  parser\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mparse source\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m This file used to export these methods; leave stubs that throw warnings\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m instead. These methods have been moved into `index.coffee` to provide\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m separate entrypoints for Node and non-Node environments, so that static\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m analysis tools don’t choke on Node packages when compiling for a non-Node\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m environment.\u001b[0m\n\u001b[38;2;248;248;242mexports.run \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mexports.eval \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;166;226;46mexports.registe\u001b[0m\u001b[38;2;166;226;46mr\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m->\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mthrow\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mnew\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mError\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mrequire index.coffee, not this file\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Instantiate a Lexer for our use here.\u001b[0m\n\u001b[38;2;248;248;242mlexer \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;249;38;114mnew\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mLexer\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m The real Lexer produces a generic stream of tokens. This object provides a\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m thin wrapper around it, compatible with the Jison API. We can then pass it\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m directly as a “Jison lexer.”\u001b[0m\n\u001b[38;2;248;248;242mparser.lexer \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242myylloc\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mrange\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242moptions\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mranges\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255myes\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mle\u001b[0m\u001b[38;2;166;226;46mx\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m->\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mtoken \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mparser\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mtokens\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;255;255;255m@pos\u001b[0m\u001b[38;2;249;38;114m++\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m token\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mtag\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;255;255;255m@yytext\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;255;255;255m@yylloc\u001b[0m\u001b[38;2;249;38;114m] =\u001b[0m\u001b[38;2;248;248;242m token\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;248;248;242mparser.errorToken \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mtoken\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242morigin \u001b[0m\u001b[38;2;249;38;114mor\u001b[0m\u001b[38;2;248;248;242m token\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255m@yylineno\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m@yylloc\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mfirst_line\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;248;248;242mtag \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\n\u001b[38;2;248;248;242m    tag\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46msetInpu\u001b[0m\u001b[38;2;166;226;46mt\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31m(tokens)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m->\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mparser.tokens \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mtokens\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m@pos\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mupcomingInpu\u001b[0m\u001b[38;2;166;226;46mt\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Make all the AST nodes visible to the parser.\u001b[0m\n\u001b[38;2;248;248;242mparser.yy \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;102;217;239mrequire\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m./nodes\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Override Jison's default error handling function.\u001b[0m\n\u001b[38;2;166;226;46mparser.yy.parseErro\u001b[0m\u001b[38;2;166;226;46mr\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31m(message, {token})\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m->\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Disregard Jison's message, it contains redundant line number information.\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Disregard the token, we take its value directly from the lexer in case\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m the error is caused by a generated token which might refer to its origin.\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114m{\u001b[0m\u001b[38;2;248;248;242merrorToken\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242mtokens\u001b[0m\u001b[38;2;249;38;114m} =\u001b[0m\u001b[38;2;248;248;242m parser\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242merrorTag\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242merrorText\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242merrorLoc\u001b[0m\u001b[38;2;249;38;114m] =\u001b[0m\u001b[38;2;248;248;242m errorToken\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242merrorText \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;249;38;114mswitch\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mwhen\u001b[0m\u001b[38;2;248;248;242m errorToken \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\u001b[38;2;248;248;242m tokens\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mtokens\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mlength \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mend of input\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mwhen\u001b[0m\u001b[38;2;248;248;242m errorTag \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mINDENT\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mOUTDENT\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mindentation\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mwhen\u001b[0m\u001b[38;2;248;248;242m errorTag \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mIDENTIFIER\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mNUMBER\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mINFINITY\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mSTRING\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mSTRING_START\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mREGEX\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mREGEX_START\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m      errorTag\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mreplace\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;246;170;17m/_START$/\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mtoLowerCase\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;248;248;242m      helpers\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mnameWhitespaceCharacter errorText\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m The second argument has a `loc` property, which should have the location\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m data for this token. Unfortunately, Jison seems to send an outdated `loc`\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m (from the previous token), so we take the location information directly\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m from the lexer.\u001b[0m\n\u001b[38;2;248;248;242m  helpers\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mthrowSyntaxError \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116munexpected \u001b[0m\u001b[38;2;230;159;102m#{\u001b[0m\u001b[38;2;230;219;116merrorText\u001b[0m\u001b[38;2;230;159;102m}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242merrorLoc\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Based on http://v8.googlecode.com/svn/branches/bleeding_edge/src/messages.js\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Modified to handle sourceMap\u001b[0m\n\u001b[38;2;166;226;46mformatSourcePositio\u001b[0m\u001b[38;2;166;226;46mn\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31m(frame, getSourceMapping)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m->\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242mfilename \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;190;132;255mundefined\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242mfileLocation \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m frame\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242misNative\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mfileLocation \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mnative\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m frame\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242misEval\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;248;248;242mfilename \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mframe\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mgetScriptNameOrSourceURL\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;248;248;242mfileLocation \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;159;102m#{\u001b[0m\u001b[38;2;230;219;116mframe\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116mgetEvalOrigin\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;230;159;102m}\u001b[0m\u001b[38;2;230;219;116m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114munless\u001b[0m\u001b[38;2;248;248;242m filename\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;248;248;242mfilename \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mframe\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mgetFileName\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\n\u001b[38;2;248;248;242m    filename \u001b[0m\u001b[38;2;249;38;114mor=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m<anonymous>\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mline \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mframe\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mgetLineNumber\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mcolumn \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mframe\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mgetColumnNumber\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Check for a sourceMap position\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242msource \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mgetSourceMapping filename\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242mline\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242mcolumn\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mfileLocation \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m source\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;159;102m#{\u001b[0m\u001b[38;2;230;219;116mfilename\u001b[0m\u001b[38;2;230;159;102m}\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;230;159;102m#{\u001b[0m\u001b[38;2;230;219;116msource\u001b[0m\u001b[38;2;230;219;116m[\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;230;219;116m]\u001b[0m\u001b[38;2;230;159;102m}\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;230;159;102m#{\u001b[0m\u001b[38;2;230;219;116msource\u001b[0m\u001b[38;2;230;219;116m[\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;230;219;116m]\u001b[0m\u001b[38;2;230;159;102m}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;159;102m#{\u001b[0m\u001b[38;2;230;219;116mfilename\u001b[0m\u001b[38;2;230;159;102m}\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;230;159;102m#{\u001b[0m\u001b[38;2;230;219;116mline\u001b[0m\u001b[38;2;230;159;102m}\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;230;159;102m#{\u001b[0m\u001b[38;2;230;219;116mcolumn\u001b[0m\u001b[38;2;230;159;102m}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242mfunctionName \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mframe\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mgetFunctionName\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242misConstructor \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mframe\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242misConstructor\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242misMethodCall \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;249;38;114mnot\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;248;248;242mframe\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242misToplevel\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mor\u001b[0m\u001b[38;2;248;248;242m isConstructor\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m isMethodCall\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mmethodName \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mframe\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mgetMethodName\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mtypeName \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mframe\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mgetTypeName\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m functionName\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;248;248;242mtp \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mas \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m typeName \u001b[0m\u001b[38;2;249;38;114mand\u001b[0m\u001b[38;2;248;248;242m functionName\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mindexOf\u001b[0m\u001b[38;2;248;248;242m typeName\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242mtp \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;159;102m#{\u001b[0m\u001b[38;2;230;219;116mtypeName\u001b[0m\u001b[38;2;230;159;102m}\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m methodName \u001b[0m\u001b[38;2;249;38;114mand\u001b[0m\u001b[38;2;248;248;242m functionName\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mindexOf\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;159;102m#{\u001b[0m\u001b[38;2;230;219;116mmethodName\u001b[0m\u001b[38;2;230;159;102m}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114misnt\u001b[0m\u001b[38;2;248;248;242m functionName\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mlength \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m methodName\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mlength \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242mas \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m [as \u001b[0m\u001b[38;2;230;159;102m#{\u001b[0m\u001b[38;2;230;219;116mmethodName\u001b[0m\u001b[38;2;230;159;102m}\u001b[0m\u001b[38;2;230;219;116m]\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;159;102m#{\u001b[0m\u001b[38;2;230;219;116mtp\u001b[0m\u001b[38;2;230;159;102m}\u001b[0m\u001b[38;2;230;159;102m#{\u001b[0m\u001b[38;2;230;219;116mfunctionName\u001b[0m\u001b[38;2;230;159;102m}\u001b[0m\u001b[38;2;230;159;102m#{\u001b[0m\u001b[38;2;230;219;116mas\u001b[0m\u001b[38;2;230;159;102m}\u001b[0m\u001b[38;2;230;219;116m (\u001b[0m\u001b[38;2;230;159;102m#{\u001b[0m\u001b[38;2;230;219;116mfileLocation\u001b[0m\u001b[38;2;230;159;102m}\u001b[0m\u001b[38;2;230;219;116m)\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;159;102m#{\u001b[0m\u001b[38;2;230;219;116mtypeName\u001b[0m\u001b[38;2;230;159;102m}\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;159;102m#{\u001b[0m\u001b[38;2;230;219;116mmethodName \u001b[0m\u001b[38;2;249;38;114mor\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m<anonymous>\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;159;102m}\u001b[0m\u001b[38;2;230;219;116m (\u001b[0m\u001b[38;2;230;159;102m#{\u001b[0m\u001b[38;2;230;219;116mfileLocation\u001b[0m\u001b[38;2;230;159;102m}\u001b[0m\u001b[38;2;230;219;116m)\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m isConstructor\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mnew \u001b[0m\u001b[38;2;230;159;102m#{\u001b[0m\u001b[38;2;230;219;116mfunctionName \u001b[0m\u001b[38;2;249;38;114mor\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m<anonymous>\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;159;102m}\u001b[0m\u001b[38;2;230;219;116m (\u001b[0m\u001b[38;2;230;159;102m#{\u001b[0m\u001b[38;2;230;219;116mfileLocation\u001b[0m\u001b[38;2;230;159;102m}\u001b[0m\u001b[38;2;230;219;116m)\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m functionName\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;159;102m#{\u001b[0m\u001b[38;2;230;219;116mfunctionName\u001b[0m\u001b[38;2;230;159;102m}\u001b[0m\u001b[38;2;230;219;116m (\u001b[0m\u001b[38;2;230;159;102m#{\u001b[0m\u001b[38;2;230;219;116mfileLocation\u001b[0m\u001b[38;2;230;159;102m}\u001b[0m\u001b[38;2;230;219;116m)\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;248;248;242m    fileLocation\u001b[0m\n\n\u001b[38;2;166;226;46mgetSourceMa\u001b[0m\u001b[38;2;166;226;46mp\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31m(filename, line, column)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m->\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Skip files that we didn’t compile, like Node system files that appear in\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m the stack trace, as they never have source maps.\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mnull\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114munless\u001b[0m\u001b[38;2;248;248;242m filename \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m<anonymous>\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mor\u001b[0m\u001b[38;2;248;248;242m filename\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mslice\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;248;248;242mfilename\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mlastIndexOf\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m FILE_EXTENSIONS\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m filename \u001b[0m\u001b[38;2;249;38;114misnt\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m<anonymous>\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mand\u001b[0m\u001b[38;2;248;248;242m sourceMaps\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mfilename\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m sourceMaps\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mfilename\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242msourceMaps\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mfilename\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mlength \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m CoffeeScript compiled in a browser or via `CoffeeScript.compile` or `.run`\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m may get compiled with `options.filename` that’s missing, which becomes\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m `<anonymous>`; but the runtime might request the stack trace with the\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m filename of the script file. See if we have a source map cached under\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m `<anonymous>` that matches the error.\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m sourceMaps\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m<anonymous>\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Work backwards from the most recent anonymous source maps, until we find\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m one that works. This isn’t foolproof; there is a chance that multiple\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m source maps will have line/column pairs that match. But we have no other\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m way to match them. `frame.getFunction().toString()` doesn’t always work,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m and it’s not foolproof either.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m map \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m sourceMaps\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m<anonymous>\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m] \u001b[0m\u001b[38;2;249;38;114mby\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;248;248;242msourceLocation \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mmap\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242msourceLocation \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mline \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242mcolumn \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m map \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m sourceLocation\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mand\u001b[0m\u001b[38;2;248;248;242m sourceLocation\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m If all else fails, recompile this source to get a source map. We need the\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m previous section (for `<anonymous>`) despite this option, because after it\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m gets compiled we will still need to look it up from\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m `sourceMaps['<anonymous>']` in order to find and return it. That’s why we\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m start searching from the end in the previous block, because most of the\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m time the source map we want is the last one.\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m sources\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mfilename\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242manswer \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mcompile sources\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mfilename\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242msources\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mfilename\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mlength \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;248;248;242mfilename\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m filename\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;248;248;242msourceMap\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255myes\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;248;248;242mliterate\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m helpers\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242misLiterate filename\u001b[0m\n\u001b[38;2;248;248;242m    answer\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242msourceMap\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;190;132;255mnull\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Based on [michaelficarra/CoffeeScriptRedux](http://goo.gl/ZTx1p)\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m NodeJS / V8 have no support for transforming positions in stack traces using\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m sourceMap, so we must monkey-patch Error to display CoffeeScript source\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m positions.\u001b[0m\n\u001b[38;2;166;226;46mError.prepareStackTrac\u001b[0m\u001b[38;2;166;226;46me\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31m(err, stack)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m->\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mgetSourceMappin\u001b[0m\u001b[38;2;166;226;46mg\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31m(filename, line, column)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m->\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242msourceMap \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mgetSourceMap filename\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242mline\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242mcolumn\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242manswer \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242msourceMap\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242msourceLocation \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mline \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242mcolumn \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m] \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m sourceMap\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m answer\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242manswer\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m] \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242manswer\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m] \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m] \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mnull\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242mframes \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m frame \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m stack\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mbreak\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m frame\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mgetFunction\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\u001b[38;2;248;248;242m exports\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mrun\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m    at \u001b[0m\u001b[38;2;230;159;102m#{\u001b[0m\u001b[38;2;230;219;116mformatSourcePosition frame\u001b[0m\u001b[38;2;230;219;116m, \u001b[0m\u001b[38;2;230;219;116mgetSourceMapping\u001b[0m\u001b[38;2;230;159;102m}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;159;102m#{\u001b[0m\u001b[38;2;230;219;116merr\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;102;217;239mtoString\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;230;159;102m}\u001b[0m\u001b[38;2;190;132;255m\\n\u001b[0m\u001b[38;2;230;159;102m#{\u001b[0m\u001b[38;2;230;219;116mframes\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;102;217;239mjoin\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;190;132;255m\\n\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;159;102m}\u001b[0m\u001b[38;2;190;132;255m\\n\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\n\u001b[38;2;166;226;46mcheckShebangLin\u001b[0m\u001b[38;2;166;226;46me\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31m(file, input)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m->\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242mfirstLine \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242minput\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242msplit\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;246;170;17m/$/m\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242mrest \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mfirstLine\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mmatch\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;246;170;17m/^#!\\s*([^\\s]+\\s*)(.*)/\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242margs \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mrest\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242msplit\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;246;170;17m/\\s/\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mfilter\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31m(s)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m->\u001b[0m\u001b[38;2;248;248;242m s \u001b[0m\u001b[38;2;249;38;114misnt\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m args\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mlength \u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\u001b[38;2;248;248;242m    console\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239merror\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'''\u001b[0m\n\u001b[38;2;230;219;116m      The script to be run begins with a shebang line with more than one\u001b[0m\n\u001b[38;2;230;219;116m      argument. This script will fail on platforms such as Linux which only\u001b[0m\n\u001b[38;2;230;219;116m      allow a single argument.\u001b[0m\n\u001b[38;2;230;219;116m    \u001b[0m\u001b[38;2;230;219;116m'''\u001b[0m\n\u001b[38;2;248;248;242m    console\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239merror\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mThe shebang line was: '\u001b[0m\u001b[38;2;230;159;102m#{\u001b[0m\u001b[38;2;230;219;116mfirstLine\u001b[0m\u001b[38;2;230;159;102m}\u001b[0m\u001b[38;2;230;219;116m' in file '\u001b[0m\u001b[38;2;230;159;102m#{\u001b[0m\u001b[38;2;230;219;116mfile\u001b[0m\u001b[38;2;230;159;102m}\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m    console\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239merror\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mThe arguments were: \u001b[0m\u001b[38;2;230;159;102m#{\u001b[0m\u001b[38;2;230;219;116mJSON\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116mstringify args\u001b[0m\u001b[38;2;230;159;102m}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Cpp/test.cpp",
    "content": "\u001b[38;2;249;38;114m#include\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;230;219;116m<\u001b[0m\u001b[38;2;230;219;116mbits/stdc++.h\u001b[0m\u001b[38;2;230;219;116m>\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m includes most of the useful libraries\u001b[0m\n\u001b[38;2;249;38;114m#include\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mmainwindow.h\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\n\u001b[38;2;249;38;114musing\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mnamespace\u001b[0m\u001b[38;2;248;248;242m std\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;117;113;94m/*\u001b[0m\u001b[38;2;117;113;94m This C program was submitted to help bat\u001b[0m\n\u001b[38;2;117;113;94m \u001b[0m\u001b[38;2;117;113;94m*\u001b[0m\u001b[38;2;117;113;94m with its syntax highlighting tests\u001b[0m\n\u001b[38;2;117;113;94m \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\n\u001b[3;38;2;102;217;239mbool\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtest_function\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mx\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31my\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mx \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m y \u001b[0m\u001b[38;2;249;38;114m||\u001b[0m\u001b[38;2;248;248;242m x \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m y \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m x \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m y\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242mMainWindow\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;166;226;46mMainWindow\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mQWidget \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[3;38;2;253;151;31mparent\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mQMainWindow\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mparent\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mui\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mnew\u001b[0m\u001b[38;2;248;248;242m Ui\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242mMainWindow\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    ui\u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;248;248;242msetupUi\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mthis\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mresize\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m560\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m420\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Image menu\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mconnect\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mui\u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;255;255;255mactionOpen\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m&\u001b[0m\u001b[38;2;248;248;242mQAction\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242mtriggered\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mthis\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m&\u001b[0m\u001b[38;2;248;248;242mMainWindow\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242mopen\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    MainWindow\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;249;38;114m~\u001b[0m\u001b[38;2;248;248;242mMainWindow\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mdelete\u001b[0m\u001b[38;2;248;248;242m ui\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m y \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m ui\u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;255;255;255mgraphicsView\u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;248;248;242msize\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mheight\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m image\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mheight\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m x \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m ui\u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;255;255;255mgraphicsView\u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;248;248;242msize\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mwidth\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m image\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mwidth\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mvoid\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mMainWindow\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242mshowImage\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Reset scale\u001b[0m\n\u001b[38;2;248;248;242m        ui\u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;255;255;255mgraphicsView\u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;248;248;242mresetMatrix\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242mstatusBar\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;248;248;242mshowMessage\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mQString\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m%1 \u001b[0m\u001b[38;2;190;132;255m%2x\u001b[0m\u001b[38;2;190;132;255m%3p\u001b[0m\u001b[38;2;230;219;116mx %4 kB\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242marg\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mfile\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mfileName\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242marg\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mimage\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mwidth\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242marg\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mimage\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mheight\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242marg\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mQFile\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mcurrentFile\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242msize\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m/\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1000\u001b[0m\u001b[38;2;190;132;255m.\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mmain\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m tc\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    cin \u001b[0m\u001b[38;2;249;38;114m>>\u001b[0m\u001b[38;2;248;248;242m tc\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mwhile\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mtc\u001b[0m\u001b[38;2;249;38;114m--\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m for each test case\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m n\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        cin \u001b[0m\u001b[38;2;249;38;114m>>\u001b[0m\u001b[38;2;248;248;242m n\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m take n\u001b[0m\n\u001b[38;2;248;248;242m        vector\u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[38;2;248;248;242mpair\u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m string\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m v\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m a\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mn\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m b\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mn\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m i \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m i \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m n\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m i\u001b[0m\u001b[38;2;249;38;114m++\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m            cin \u001b[0m\u001b[38;2;249;38;114m>>\u001b[0m\u001b[38;2;248;248;242m a\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m take arrays\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m i \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m i \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m n\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m i\u001b[0m\u001b[38;2;249;38;114m++\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m            cin \u001b[0m\u001b[38;2;249;38;114m>>\u001b[0m\u001b[38;2;248;248;242m b\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m        priority_queue\u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m pq\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m inbuilt data structure - max heap (available in the bits/stdc++)\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m i \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m i \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m n\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m i\u001b[0m\u001b[38;2;249;38;114m++\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m            pq\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mpush\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242ma\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m push elements into heap\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m i \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m i \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m n\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m i\u001b[0m\u001b[38;2;249;38;114m++\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m for each element in B\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m top_ele \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m pq\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mtop\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m max element in heap\u001b[0m\n\u001b[38;2;248;248;242m            pq\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mpop\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m deletion\u001b[0m\n\u001b[38;2;248;248;242m            pq\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mpush\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mtop_ele \u001b[0m\u001b[38;2;249;38;114m^\u001b[0m\u001b[38;2;248;248;242m b\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m push after operation\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m i \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m n \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m i \u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m i\u001b[0m\u001b[38;2;249;38;114m--\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m restore A in ascending order\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m            a\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m pq\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mtop\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m            pq\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mpop\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m i \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m i \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m n\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m i\u001b[0m\u001b[38;2;249;38;114m++\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m            cout \u001b[0m\u001b[38;2;249;38;114m<<\u001b[0m\u001b[38;2;248;248;242m a\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<<\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m print A\u001b[0m\n\n\u001b[38;2;248;248;242m        cout \u001b[0m\u001b[38;2;249;38;114m<<\u001b[0m\u001b[38;2;248;248;242m endl\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/CpuInfo/test.cpuinfo",
    "content": "\u001b[38;2;249;38;114mprocessor    \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m 0\u001b[0m\n\u001b[38;2;249;38;114mmodel name    \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m ARMv7 Processor rev 3 (v7l)\u001b[0m\n\u001b[38;2;249;38;114mBogoMIPS    \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m 270.00\u001b[0m\n\u001b[38;2;249;38;114mFeatures    \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32\u001b[0m\n\u001b[38;2;249;38;114mCPU implementer    \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m 0x41\u001b[0m\n\u001b[38;2;249;38;114mCPU architecture\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m 7\u001b[0m\n\u001b[38;2;249;38;114mCPU variant    \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m 0x0\u001b[0m\n\u001b[38;2;249;38;114mCPU part    \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m 0xd08\u001b[0m\n\u001b[38;2;249;38;114mCPU revision    \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m 3\u001b[0m\n\n\u001b[38;2;249;38;114mprocessor    \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m 1\u001b[0m\n\u001b[38;2;249;38;114mmodel name    \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m ARMv7 Processor rev 3 (v7l)\u001b[0m\n\u001b[38;2;249;38;114mBogoMIPS    \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m 270.00\u001b[0m\n\u001b[38;2;249;38;114mFeatures    \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32\u001b[0m\n\u001b[38;2;249;38;114mCPU implementer    \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m 0x41\u001b[0m\n\u001b[38;2;249;38;114mCPU architecture\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m 7\u001b[0m\n\u001b[38;2;249;38;114mCPU variant    \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m 0x0\u001b[0m\n\u001b[38;2;249;38;114mCPU part    \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m 0xd08\u001b[0m\n\u001b[38;2;249;38;114mCPU revision    \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m 3\u001b[0m\n\n\u001b[38;2;249;38;114mprocessor    \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m 2\u001b[0m\n\u001b[38;2;249;38;114mmodel name    \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m ARMv7 Processor rev 3 (v7l)\u001b[0m\n\u001b[38;2;249;38;114mBogoMIPS    \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m 270.00\u001b[0m\n\u001b[38;2;249;38;114mFeatures    \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32\u001b[0m\n\u001b[38;2;249;38;114mCPU implementer    \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m 0x41\u001b[0m\n\u001b[38;2;249;38;114mCPU architecture\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m 7\u001b[0m\n\u001b[38;2;249;38;114mCPU variant    \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m 0x0\u001b[0m\n\u001b[38;2;249;38;114mCPU part    \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m 0xd08\u001b[0m\n\u001b[38;2;249;38;114mCPU revision    \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m 3\u001b[0m\n\n\u001b[38;2;249;38;114mprocessor    \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m 3\u001b[0m\n\u001b[38;2;249;38;114mmodel name    \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m ARMv7 Processor rev 3 (v7l)\u001b[0m\n\u001b[38;2;249;38;114mBogoMIPS    \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m 270.00\u001b[0m\n\u001b[38;2;249;38;114mFeatures    \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32\u001b[0m\n\u001b[38;2;249;38;114mCPU implementer    \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m 0x41\u001b[0m\n\u001b[38;2;249;38;114mCPU architecture\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m 7\u001b[0m\n\u001b[38;2;249;38;114mCPU variant    \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m 0x0\u001b[0m\n\u001b[38;2;249;38;114mCPU part    \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m 0xd08\u001b[0m\n\u001b[38;2;249;38;114mCPU revision    \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m 3\u001b[0m\n\n\u001b[38;2;249;38;114mHardware    \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m BCM2711\u001b[0m\n\u001b[38;2;249;38;114mRevision    \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m b03111\u001b[0m\n\u001b[38;2;249;38;114mSerial        \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m 1000000095fd9fc5\u001b[0m\n\u001b[38;2;249;38;114mModel        \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m Raspberry Pi 4 Model B Rev 1.1\u001b[0m\n\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Crontab/crontab.tab",
    "content": "\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/bin/sh\u001b[0m\u001b[38;2;255;255;255m backup.sh\u001b[0m\n\u001b[38;2;190;132;255m*\u001b[0m\u001b[38;2;248;248;242m/\u001b[0m\u001b[38;2;190;132;255m10\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/home/maverick/check-disk-space\u001b[0m\n\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m17\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/scripts/script.sh\u001b[0m\n\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239msun\u001b[0m\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239m[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255mdate\u001b[0m\u001b[38;2;255;255;255m +\u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;255;255;255md\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mle\u001b[0m\u001b[38;2;255;255;255m 07 \u001b[0m\u001b[38;2;102;217;239m]\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m/script/script.sh\u001b[0m\n\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;190;132;255mdaily\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/scripts/script.sh\u001b[0m\n\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;190;132;255mreboot\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/scripts/script.sh\u001b[0m\n\n\u001b[38;2;255;255;255mMAIL\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116mbob\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Crystal/test.cr",
    "content": "\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m An example file to test Crystal syntax highlighting in bat\u001b[0m\n\u001b[38;2;248;248;242mmy_var \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mNil\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mnil\u001b[0m\n\u001b[38;2;248;248;242mmy_var_also \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mInt32\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m42\u001b[0m\n\u001b[38;2;248;248;242mmy_other_var \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m4.0\u001b[0m\n\u001b[38;2;248;248;242manother_float \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m4.0_f32\u001b[0m\n\u001b[38;2;248;248;242manother_float_2 \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m4e10\u001b[0m\n\u001b[38;2;248;248;242manother_float_3 \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m0.5\u001b[0m\n\u001b[38;2;248;248;242mbig_one \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1_000_000.111_111e-4\u001b[0m\n\u001b[38;2;248;248;242mternary \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\n\u001b[38;2;248;248;242mmy_symbol \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;190;132;255mThisOne?\u001b[0m\n\u001b[38;2;248;248;242mmy_other_symbol \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;190;132;255mNo_That_One!\u001b[0m\n\u001b[38;2;248;248;242mplus \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;190;132;255m+\u001b[0m\n\u001b[38;2;248;248;242mminus \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;190;132;255m-\u001b[0m\n\u001b[38;2;248;248;242mmy_string \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mString\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mthis string right here, with an interpolated value of \u001b[0m\u001b[38;2;230;219;116m#{\u001b[0m\u001b[38;2;230;219;116mmy_var_also\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242mmy_array \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mArray\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;166;226;46mInt32\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242mmy_tuple \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mTuple\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;166;226;46mInt32\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mInt32\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mInt32\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mInt32\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242mmy_named_tuple \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mNamedTuple\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255mone\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mInt32\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtwo\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mInt32\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mone\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mtwo\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242mmy_hash \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mHash\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;166;226;46mString\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mInt32\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mone\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mtwo\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242mmy_proc \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mProc\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;166;226;46mInt32\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mInt32\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mx \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mInt32\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mx \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m x\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242mmy_other_proc \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mProc\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;166;226;46mString\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mWow, neat!\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242mputs my_string\u001b[0m\n\u001b[38;2;248;248;242mputs\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mmy_string\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;249;38;114menum\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mColors\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;166;226;46mRed\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;166;226;46mGreen\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;166;226;46mBlue\u001b[0m\n\u001b[38;2;249;38;114mend\u001b[0m\n\n\u001b[38;2;249;38;114mclass\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mGreeter\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;255;255;255minstance_field\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mColors\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[3;38;2;166;226;46mRed\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255m@@\u001b[0m\u001b[38;2;255;255;255mclass_field\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mColors\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[3;38;2;166;226;46mGreen\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mdef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46minitialize\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;255;255;255m@\u001b[0m\u001b[3;38;2;255;255;255mname\u001b[0m\u001b[3;38;2;253;151;31m \u001b[0m\u001b[3;38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31m \u001b[0m\u001b[3;38;2;230;219;116m\"\u001b[0m\u001b[3;38;2;230;219;116mworld\u001b[0m\u001b[3;38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mdef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mgreet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242m    puts \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mHello, \u001b[0m\u001b[38;2;230;219;116m#{\u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;255;255;255mname\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mdef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mrender_greeting\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31m:\u001b[0m\u001b[3;38;2;253;151;31m \u001b[0m\u001b[3;38;2;166;226;46mString\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mHello, \u001b[0m\u001b[38;2;230;219;116m#{\u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;255;255;255mname\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mdef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mwith_greeting\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114myield\u001b[0m\u001b[38;2;248;248;242m render_greeting\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mdef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mis_color_default?\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;255;255;255minstance_field\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m@@\u001b[0m\u001b[38;2;255;255;255mclass_field\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mdef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mself.greet_static\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mname \u001b[0m\u001b[3;38;2;253;151;31m:\u001b[0m\u001b[3;38;2;253;151;31m \u001b[0m\u001b[3;38;2;166;226;46mString\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mUnit\u001b[0m\n\u001b[38;2;248;248;242m    puts \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mHello, \u001b[0m\u001b[38;2;230;219;116m#{\u001b[0m\u001b[38;2;230;219;116mname\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\u001b[38;2;249;38;114mend\u001b[0m\n\n\u001b[38;2;248;248;242mgreeter \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mGreeter\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;249;38;114mnew\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mbat\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242mgreeter\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mwith_greeting \u001b[0m\u001b[38;2;249;38;114mdo \u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[38;2;255;255;255mgreeting\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\n\u001b[38;2;248;248;242m  puts greeting\u001b[0m\n\u001b[38;2;249;38;114mend\u001b[0m\n\n\u001b[38;2;248;248;242mputs \u001b[0m\u001b[38;2;230;219;116m<<-EOF\u001b[0m\n\u001b[38;2;230;219;116m  this is a heredoc and it has a value in it of \u001b[0m\u001b[38;2;230;219;116m#{\u001b[0m\u001b[38;2;230;219;116mgreeter\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116mrender_greeting\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;230;219;116m!\u001b[0m\n\u001b[38;2;230;219;116mEOF\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m This is a command:\u001b[0m\n\u001b[38;2;230;219;116m`\u001b[0m\u001b[38;2;230;219;116mecho yay!\u001b[0m\u001b[38;2;230;219;116m`\u001b[0m\n\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m?\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242msuccess?\u001b[0m\n\n\u001b[38;2;248;248;242mmy_color \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mColors\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[3;38;2;166;226;46mRed\u001b[0m\n\n\u001b[38;2;248;248;242mputs \u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;248;248;242m my_color\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mwhen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mColors\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[3;38;2;166;226;46mRed\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mred?\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mRed\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mwhen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mColors\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[3;38;2;166;226;46mGreen\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mgreen?\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mGreen\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mwhen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mColors\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[3;38;2;166;226;46mBlue\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mblue?\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mBlue\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mI dunno, man. Chartreuse? Maroon?\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\n\u001b[38;2;249;38;114mclass\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mMyGenericClass\u001b[0m\u001b[38;2;166;226;46m(\u001b[0m\u001b[3;38;2;166;226;46mT\u001b[0m\u001b[38;2;166;226;46m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mdef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46minitialize\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;255;255;255m@\u001b[0m\u001b[3;38;2;255;255;255mwrapped_value\u001b[0m\u001b[3;38;2;253;151;31m \u001b[0m\u001b[3;38;2;253;151;31m:\u001b[0m\u001b[3;38;2;253;151;31m \u001b[0m\u001b[3;38;2;166;226;46mT\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mdef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mget\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;255;255;255mwrapped_value\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\u001b[38;2;249;38;114mend\u001b[0m\n\n\n\u001b[38;2;249;38;114mdef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mdo_stuff_with_range\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mr \u001b[0m\u001b[3;38;2;253;151;31m:\u001b[0m\u001b[3;38;2;253;151;31m \u001b[0m\u001b[3;38;2;166;226;46mRange\u001b[0m\u001b[3;38;2;253;151;31m(\u001b[0m\u001b[3;38;2;166;226;46mInt\u001b[0m\u001b[3;38;2;249;38;114m|\u001b[0m\u001b[3;38;2;166;226;46mString\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m r\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mempty?\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114munless\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m!\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mr\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mempty?\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  r\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242meach \u001b[0m\u001b[38;2;249;38;114mdo \u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[38;2;255;255;255mitem\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;246;170;17m/\u001b[0m\u001b[38;2;246;170;17me\u001b[0m\u001b[38;2;246;170;17m/\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mmatch\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mitem\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mto_s\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m      puts \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m#{\u001b[0m\u001b[38;2;230;219;116mitem\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;230;219;116m contains the letter e!\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114melsif\u001b[0m\u001b[38;2;248;248;242m item\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mto_s\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mempty?\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mbreak\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mnext\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m this is unnecessary, but whatever\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\u001b[38;2;249;38;114mend\u001b[0m\n\n\n\u001b[38;2;249;38;114mmacro\u001b[0m\u001b[38;2;248;248;242m print_range\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mrange\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114m{%\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m i \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m range \u001b[0m\u001b[38;2;249;38;114m%}\u001b[0m\n\u001b[38;2;248;248;242m    puts \u001b[0m\u001b[38;2;249;38;114m{{\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mid\u001b[0m\u001b[38;2;249;38;114m}}\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114m{%\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m%}\u001b[0m\n\u001b[38;2;249;38;114mend\u001b[0m\n\n\u001b[38;2;248;248;242mprint_range\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242mprint_range\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/D/test.d",
    "content": "\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m selective import\u001b[0m\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mstd\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;255;255;255mstdio\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mwriteln\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mwritefln\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m non-selective import\u001b[0m\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mstd\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;255;255;255malgorithm\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;117;113;94m/*\u001b[0m\u001b[38;2;117;113;94m a multiline comment\u001b[0m\n\u001b[38;2;117;113;94m*\u001b[0m\n\u001b[38;2;117;113;94m*\u001b[0m\u001b[38;2;117;113;94m this function is safe because it doesn't use pointer arithmetic\u001b[0m\n\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mthe_ultimate_answer\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114msafe\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m assert1on\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;249;38;114massert\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m!=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m now we can safely return our answer\t\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m42\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[3;38;2;102;217;239mvoid\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mmain\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m function call with string literal\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mwriteln\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mHello World!\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m an int array declaration\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255marr1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m an immutable double\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mimmutable\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mdouble\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mpi\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;190;132;255m.\u001b[0m\u001b[38;2;190;132;255m14\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m a mutable double\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mdouble\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255md1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mpi\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m a pointer\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mdouble\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdp1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m&\u001b[0m\u001b[38;2;255;255;255md1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m another pointer to the same thingy\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mauto\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255ma1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m&\u001b[0m\u001b[38;2;255;255;255md1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m a constant bool\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mbool\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mb1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mb1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t    \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m another function call \u001b[0m\n\u001b[38;2;248;248;242m\t    \u001b[0m\u001b[38;2;248;248;242mwritefln\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m%s\u001b[0m\u001b[38;2;190;132;255m\\n\u001b[0m\u001b[38;2;230;219;116m%s\u001b[0m\u001b[38;2;190;132;255m\\n\u001b[0m\u001b[38;2;230;219;116m%s\u001b[0m\u001b[38;2;190;132;255m\\n\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255marr1\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255md1\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mthe_ultimate_answer\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114m!\u001b[0m\u001b[38;2;255;255;255mb1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t    \u001b[0m\u001b[38;2;248;248;242mwriteln\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mthis seems wrong\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t    \u001b[0m\u001b[38;2;248;248;242mwriteln\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mI'm giving up, this is too crazy for me\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Dart/inner_comment.dart",
    "content": "\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mObject\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;166;226;46mObject\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m// Not highlighted as a comment\u001b[0m\n\u001b[38;2;248;248;242m  )\u001b[0m\n\u001b[38;2;248;248;242m)\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Dart/test.dart",
    "content": "\u001b[38;2;117;113;94m/* array sorting alogorithm */\u001b[0m\n\u001b[3;38;2;166;226;46mint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mpartition\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;166;226;46mList\u001b[0m\u001b[38;2;248;248;242m list\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mint\u001b[0m\u001b[38;2;248;248;242m low\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mint\u001b[0m\u001b[38;2;248;248;242m high) {\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m (list \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mnull\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m list\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mlength \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;166;226;46mint\u001b[0m\u001b[38;2;248;248;242m pivot \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m list[high]\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;166;226;46mint\u001b[0m\u001b[38;2;248;248;242m i \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m low \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mvoid\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mswap\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;166;226;46mList\u001b[0m\u001b[38;2;248;248;242m list\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mint\u001b[0m\u001b[38;2;248;248;242m i\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mint\u001b[0m\u001b[38;2;248;248;242m j) {\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;166;226;46mint\u001b[0m\u001b[38;2;248;248;242m temp \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m list[i]\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    list[i] \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m list[j]\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    list[j] \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m temp\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  }\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[3;38;2;166;226;46mint\u001b[0m\u001b[38;2;248;248;242m j \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m low\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m j \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m high\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m j\u001b[0m\u001b[38;2;249;38;114m++\u001b[0m\u001b[38;2;248;248;242m) {\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m (list[j] \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m pivot) {\u001b[0m\n\u001b[38;2;248;248;242m      i\u001b[0m\u001b[38;2;249;38;114m++\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;166;226;46mswap\u001b[0m\u001b[38;2;248;248;242m(list\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m i\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m j)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    }\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46mswap\u001b[0m\u001b[38;2;248;248;242m(list\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m i \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m high)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m i \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  }\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[3;38;2;102;217;239mvoid\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mquickSort\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;166;226;46mList\u001b[0m\u001b[38;2;248;248;242m list\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mint\u001b[0m\u001b[38;2;248;248;242m low\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mint\u001b[0m\u001b[38;2;248;248;242m high) {\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m (low \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m high) {\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;166;226;46mint\u001b[0m\u001b[38;2;248;248;242m pi \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mpartition\u001b[0m\u001b[38;2;248;248;242m(list\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m low\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m high)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46mquickSort\u001b[0m\u001b[38;2;248;248;242m(list\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m low\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m pi \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46mquickSort\u001b[0m\u001b[38;2;248;248;242m(list\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m pi \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m high)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  }\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[3;38;2;102;217;239mvoid\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mmerge\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;166;226;46mList\u001b[0m\u001b[38;2;248;248;242m list\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mint\u001b[0m\u001b[38;2;248;248;242m leftIndex\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mint\u001b[0m\u001b[38;2;248;248;242m middleIndex\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mint\u001b[0m\u001b[38;2;248;248;242m rightIndex) {\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;166;226;46mint\u001b[0m\u001b[38;2;248;248;242m leftSize \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m middleIndex \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m leftIndex \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;166;226;46mint\u001b[0m\u001b[38;2;248;248;242m rightSize \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m rightIndex \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m middleIndex\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;166;226;46mList\u001b[0m\u001b[38;2;248;248;242m leftList \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mnew\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mList\u001b[0m\u001b[38;2;248;248;242m(leftSize)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;166;226;46mList\u001b[0m\u001b[38;2;248;248;242m rightList \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mnew\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mList\u001b[0m\u001b[38;2;248;248;242m(rightSize)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[3;38;2;166;226;46mint\u001b[0m\u001b[38;2;248;248;242m i \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m i \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m leftSize\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m i\u001b[0m\u001b[38;2;249;38;114m++\u001b[0m\u001b[38;2;248;248;242m) leftList[i] \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m list[leftIndex \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m i]\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[3;38;2;166;226;46mint\u001b[0m\u001b[38;2;248;248;242m j \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m j \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m rightSize\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m j\u001b[0m\u001b[38;2;249;38;114m++\u001b[0m\u001b[38;2;248;248;242m) rightList[j] \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m list[middleIndex \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m j \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;166;226;46mint\u001b[0m\u001b[38;2;248;248;242m i \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m j \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;166;226;46mint\u001b[0m\u001b[38;2;248;248;242m k \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m leftIndex\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mwhile\u001b[0m\u001b[38;2;248;248;242m (i \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m leftSize \u001b[0m\u001b[38;2;249;38;114m&\u001b[0m\u001b[38;2;249;38;114m&\u001b[0m\u001b[38;2;248;248;242m j \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m rightSize) {\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m (leftList[i] \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m rightList[j]) {\u001b[0m\n\u001b[38;2;248;248;242m      list[k] \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m leftList[i]\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m      i\u001b[0m\u001b[38;2;249;38;114m++\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    } \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m      list[k] \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m rightList[j]\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m      j\u001b[0m\u001b[38;2;249;38;114m++\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    }\u001b[0m\n\u001b[38;2;248;248;242m    k\u001b[0m\u001b[38;2;249;38;114m++\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  }\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mwhile\u001b[0m\u001b[38;2;248;248;242m (i \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m leftSize) {\u001b[0m\n\u001b[38;2;248;248;242m    list[k] \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m leftList[i]\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    i\u001b[0m\u001b[38;2;249;38;114m++\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    k\u001b[0m\u001b[38;2;249;38;114m++\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  }\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mwhile\u001b[0m\u001b[38;2;248;248;242m (j \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m rightSize) {\u001b[0m\n\u001b[38;2;248;248;242m    list[k] \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m rightList[j]\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    j\u001b[0m\u001b[38;2;249;38;114m++\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    k\u001b[0m\u001b[38;2;249;38;114m++\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  }\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[3;38;2;102;217;239mvoid\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mmergeSort\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;166;226;46mList\u001b[0m\u001b[38;2;248;248;242m list\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mint\u001b[0m\u001b[38;2;248;248;242m leftIndex\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mint\u001b[0m\u001b[38;2;248;248;242m rightIndex) {\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m (leftIndex \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m rightIndex) {\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;166;226;46mint\u001b[0m\u001b[38;2;248;248;242m middleIndex \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m (rightIndex \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m leftIndex) \u001b[0m\u001b[38;2;249;38;114m~\u001b[0m\u001b[38;2;249;38;114m/\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46mmergeSort\u001b[0m\u001b[38;2;248;248;242m(list\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m leftIndex\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m middleIndex)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46mmergeSort\u001b[0m\u001b[38;2;248;248;242m(list\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m middleIndex \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m rightIndex)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46mmerge\u001b[0m\u001b[38;2;248;248;242m(list\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m leftIndex\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m middleIndex\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m rightIndex)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  }\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;117;113;94m/* variables */\u001b[0m\n\u001b[3;38;2;102;217;239mvar\u001b[0m\u001b[38;2;248;248;242m name \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'Voyager I'\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[3;38;2;102;217;239mvar\u001b[0m\u001b[38;2;248;248;242m year \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1977\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[3;38;2;102;217;239mvar\u001b[0m\u001b[38;2;248;248;242m antennaDiameter \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3.7\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[3;38;2;102;217;239mvar\u001b[0m\u001b[38;2;248;248;242m flybyObjects \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m [\u001b[0m\u001b[38;2;230;219;116m'Jupiter'\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'Saturn'\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'Uranus'\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'Neptune'\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[3;38;2;102;217;239mvar\u001b[0m\u001b[38;2;248;248;242m image \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116m'tags'\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m [\u001b[0m\u001b[38;2;230;219;116m'saturn'\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116m'url'\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'//path/to/saturn.jpg'\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;117;113;94m/*classes */\u001b[0m\n\u001b[38;2;249;38;114mclass\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mSpacecraft\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;166;226;46mString\u001b[0m\u001b[38;2;248;248;242m name\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;166;226;46mDateTime\u001b[0m\u001b[38;2;248;248;242m launchDate\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;166;226;46mSpacecraft\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mthis\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mname\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mthis\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mlaunchDate) {}\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m// Named constructor that forwards to the default one.\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;166;226;46mSpacecraft\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;166;226;46munlaunched\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;166;226;46mString\u001b[0m\u001b[38;2;248;248;242m name) \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mthis\u001b[0m\u001b[38;2;248;248;242m(name\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mnull\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;166;226;46mint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mget\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mlaunchYear\u001b[0m\u001b[38;2;248;248;242m => launchDate\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242myear\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mvoid\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mdescribe\u001b[0m\u001b[38;2;248;248;242m() {\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m'Spacecraft: $\u001b[0m\u001b[3;38;2;253;151;31mname\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m (launchDate \u001b[0m\u001b[38;2;249;38;114m!=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mnull\u001b[0m\u001b[38;2;248;248;242m) {\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[3;38;2;166;226;46mint\u001b[0m\u001b[38;2;248;248;242m years \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mDateTime\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;166;226;46mnow\u001b[0m\u001b[38;2;248;248;242m()\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;166;226;46mdifference\u001b[0m\u001b[38;2;248;248;242m(launchDate)\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242minDays \u001b[0m\u001b[38;2;249;38;114m~\u001b[0m\u001b[38;2;249;38;114m/\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m365\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;166;226;46mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m'Launched: $\u001b[0m\u001b[3;38;2;253;151;31mlaunchYear\u001b[0m\u001b[38;2;230;219;116m ($\u001b[0m\u001b[3;38;2;253;151;31myears\u001b[0m\u001b[38;2;230;219;116m years ago)'\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    } \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;166;226;46mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m'Unlaunched'\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    }\u001b[0m\n\u001b[38;2;248;248;242m  }\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;117;113;94m/* Mixins */\u001b[0m\n\u001b[38;2;249;38;114mclass\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mPilotedCraft\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mextends\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mSpacecraft\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mwith\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mPiloted\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m// ···\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;117;113;94m/* Interfaces and abstract classes */\u001b[0m\n\u001b[38;2;249;38;114mclass\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mMockSpaceship\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mimplements\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mSpacecraft\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m// ···\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;117;113;94m/* async */\u001b[0m\n\u001b[3;38;2;166;226;46mFuture\u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[3;38;2;102;217;239mvoid\u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mprintWithDelay\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;166;226;46mString\u001b[0m\u001b[38;2;248;248;242m message) {\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mFuture\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;166;226;46mdelayed\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mDuration\u001b[0m\u001b[38;2;248;248;242m(seconds\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m))\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;166;226;46mthen\u001b[0m\u001b[38;2;248;248;242m((_) {\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46mprint\u001b[0m\u001b[38;2;248;248;242m(message)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  })\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[3;38;2;166;226;46mStream\u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[3;38;2;166;226;46mString\u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mreport\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;166;226;46mSpacecraft\u001b[0m\u001b[38;2;248;248;242m craft\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mIterable\u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[3;38;2;166;226;46mString\u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;248;248;242m objects) \u001b[0m\u001b[38;2;249;38;114masync\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[3;38;2;102;217;239mvar\u001b[0m\u001b[38;2;248;248;242m object \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m objects) {\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mawait\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mFuture\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;166;226;46mdelayed\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mDuration\u001b[0m\u001b[38;2;248;248;242m(seconds\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m))\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114myield\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'${\u001b[0m\u001b[3;38;2;253;151;31mcraft.name\u001b[0m\u001b[38;2;230;219;116m} flies by $\u001b[0m\u001b[3;38;2;253;151;31mobject\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  }\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Diff/82e7786e747b1fcfac1f963ae6415a22ec9caae1.diff",
    "content": "\u001b[38;2;248;248;242mdiff --git a/CHANGELOG.md b/CHANGELOG.md\u001b[0m\n\u001b[38;2;248;248;242mindex ced88213..973eba9a 100644\u001b[0m\n\u001b[38;2;117;113;94m---\u001b[0m\u001b[38;2;117;113;94m a/CHANGELOG.md\u001b[0m\n\u001b[38;2;117;113;94m+++\u001b[0m\u001b[38;2;117;113;94m b/CHANGELOG.md\u001b[0m\n\u001b[38;2;59;192;240m@@\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;59;192;240m-2,6 +2,11\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;59;192;240m@@\u001b[0m\n\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242m ## Features\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m- Add a new `--diff` option that can be used to only show lines surrounding\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m  Git changes, i.e. added, removed or modified lines. The amount of additional\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m  context can be controlled with `--diff-context=N`. See #23 and #940\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\n\u001b[38;2;248;248;242m ## Bugfixes\u001b[0m\n\u001b[38;2;248;248;242m ## Other\u001b[0m\n\u001b[38;2;248;248;242m ## `bat` as a library\u001b[0m\n\u001b[38;2;248;248;242mdiff --git a/src/bin/bat/app.rs b/src/bin/bat/app.rs\u001b[0m\n\u001b[38;2;248;248;242mindex e5221455..f0f519ea 100644\u001b[0m\n\u001b[38;2;117;113;94m---\u001b[0m\u001b[38;2;117;113;94m a/src/bin/bat/app.rs\u001b[0m\n\u001b[38;2;117;113;94m+++\u001b[0m\u001b[38;2;117;113;94m b/src/bin/bat/app.rs\u001b[0m\n\u001b[38;2;59;192;240m@@\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;59;192;240m-15,7 +15,7\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;59;192;240m@@\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;166;226;46muse console::Term;\u001b[0m\n\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242m use bat::{\u001b[0m\n\u001b[38;2;248;248;242m     assets::HighlightingAssets,\u001b[0m\n\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;249;38;114m    config::Config,\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m    config::{Config, VisibleLines},\u001b[0m\n\u001b[38;2;248;248;242m     error::*,\u001b[0m\n\u001b[38;2;248;248;242m     input::Input,\u001b[0m\n\u001b[38;2;248;248;242m     line_range::{HighlightedLineRanges, LineRange, LineRanges},\u001b[0m\n\u001b[38;2;59;192;240m@@\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;59;192;240m-196,13 +196,23\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;59;192;240m@@\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;166;226;46mimpl App {\u001b[0m\n\u001b[38;2;248;248;242m                     }\u001b[0m\n\u001b[38;2;248;248;242m                 })\u001b[0m\n\u001b[38;2;248;248;242m                 .unwrap_or_else(|| String::from(HighlightingAssets::default_theme())),\u001b[0m\n\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;249;38;114m            line_ranges: self\u001b[0m\n\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;249;38;114m                .matches\u001b[0m\n\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;249;38;114m                .values_of(\"line-range\")\u001b[0m\n\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;249;38;114m                .map(|vs| vs.map(LineRange::from).collect())\u001b[0m\n\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;249;38;114m                .transpose()?\u001b[0m\n\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;249;38;114m                .map(LineRanges::from)\u001b[0m\n\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;249;38;114m                .unwrap_or_default(),\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m            visible_lines: if self.matches.is_present(\"diff\") {\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                VisibleLines::DiffContext(\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                    self.matches\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                        .value_of(\"diff-context\")\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                        .and_then(|t| t.parse().ok())\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                        .unwrap_or(2),\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                )\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m            } else {\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                VisibleLines::Ranges(\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                    self.matches\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                        .values_of(\"line-range\")\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                        .map(|vs| vs.map(LineRange::from).collect())\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                        .transpose()?\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                        .map(LineRanges::from)\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                        .unwrap_or_default(),\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                )\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m            },\u001b[0m\n\u001b[38;2;248;248;242m             style_components,\u001b[0m\n\u001b[38;2;248;248;242m             syntax_mapping,\u001b[0m\n\u001b[38;2;248;248;242m             pager: self.matches.value_of(\"pager\"),\u001b[0m\n\u001b[38;2;248;248;242mdiff --git a/src/bin/bat/clap_app.rs b/src/bin/bat/clap_app.rs\u001b[0m\n\u001b[38;2;248;248;242mindex c7344991..85edefde 100644\u001b[0m\n\u001b[38;2;117;113;94m---\u001b[0m\u001b[38;2;117;113;94m a/src/bin/bat/clap_app.rs\u001b[0m\n\u001b[38;2;117;113;94m+++\u001b[0m\u001b[38;2;117;113;94m b/src/bin/bat/clap_app.rs\u001b[0m\n\u001b[38;2;59;192;240m@@\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;59;192;240m-105,6 +105,34\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;59;192;240m@@\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;166;226;46mpub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> {\u001b[0m\n\u001b[38;2;248;248;242m                             data to bat from STDIN when bat does not otherwise know \\\u001b[0m\n\u001b[38;2;248;248;242m                             the filename.\"),\u001b[0m\n\u001b[38;2;248;248;242m         )\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m        .arg(\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m            Arg::with_name(\"diff\")\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                .long(\"diff\")\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                .help(\"Only show lines that have been added/removed/modified.\")\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                .long_help(\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                    \"Only show lines that have been added/removed/modified with respect \\\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                     to the Git index. Use --diff-context=N to control how much context you want to see.\",\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                ),\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m        )\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m        .arg(\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m            Arg::with_name(\"diff-context\")\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                .long(\"diff-context\")\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                .overrides_with(\"diff-context\")\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                .takes_value(true)\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                .value_name(\"N\")\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                .validator(\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                    |n| {\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                        n.parse::<usize>()\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                            .map_err(|_| \"must be a number\")\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                            .map(|_| ()) // Convert to Result<(), &str>\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                            .map_err(|e| e.to_string())\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                    }, // Convert to Result<(), String>\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                )\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                .hidden_short_help(true)\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                .long_help(\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                    \"Include N lines of context around added/removed/modified lines when using '--diff'.\",\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                ),\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m        )\u001b[0m\n\u001b[38;2;248;248;242m         .arg(\u001b[0m\n\u001b[38;2;248;248;242m             Arg::with_name(\"tabs\")\u001b[0m\n\u001b[38;2;248;248;242m                 .long(\"tabs\")\u001b[0m\n\u001b[38;2;59;192;240m@@\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;59;192;240m-339,6 +367,7\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;59;192;240m@@\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;166;226;46mpub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> {\u001b[0m\n\u001b[38;2;248;248;242m                 .takes_value(true)\u001b[0m\n\u001b[38;2;248;248;242m                 .number_of_values(1)\u001b[0m\n\u001b[38;2;248;248;242m                 .value_name(\"N:M\")\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                .conflicts_with(\"diff\")\u001b[0m\n\u001b[38;2;248;248;242m                 .help(\"Only print the lines from N to M.\")\u001b[0m\n\u001b[38;2;248;248;242m                 .long_help(\u001b[0m\n\u001b[38;2;248;248;242m                     \"Only print the specified range of lines for each file. \\\u001b[0m\n\u001b[38;2;248;248;242mdiff --git a/src/config.rs b/src/config.rs\u001b[0m\n\u001b[38;2;248;248;242mindex d5df9910..3c24b77f 100644\u001b[0m\n\u001b[38;2;117;113;94m---\u001b[0m\u001b[38;2;117;113;94m a/src/config.rs\u001b[0m\n\u001b[38;2;117;113;94m+++\u001b[0m\u001b[38;2;117;113;94m b/src/config.rs\u001b[0m\n\u001b[38;2;59;192;240m@@\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;59;192;240m-5,6 +5,32\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;59;192;240m@@\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;166;226;46muse crate::style::StyleComponents;\u001b[0m\n\u001b[38;2;248;248;242m use crate::syntax_mapping::SyntaxMapping;\u001b[0m\n\u001b[38;2;248;248;242m use crate::wrapping::WrappingMode;\u001b[0m\n\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m#[derive(Debug, Clone)]\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46mpub enum VisibleLines {\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m    /// Show all lines which are included in the line ranges\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m    Ranges(LineRanges),\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m    #[cfg(feature = \"git\")]\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m    /// Only show lines surrounding added/deleted/modified lines\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m    DiffContext(usize),\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m}\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46mimpl VisibleLines {\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m    pub fn diff_context(&self) -> bool {\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m        match self {\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m            Self::Ranges(_) => false,\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m            #[cfg(feature = \"git\")]\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m            Self::DiffContext(_) => true,\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m        }\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m    }\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m}\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46mimpl Default for VisibleLines {\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m    fn default() -> Self {\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m        VisibleLines::Ranges(LineRanges::default())\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m    }\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m}\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\n\u001b[38;2;248;248;242m #[derive(Debug, Clone, Default)]\u001b[0m\n\u001b[38;2;248;248;242m pub struct Config<'a> {\u001b[0m\n\u001b[38;2;248;248;242m     /// The explicitly configured language, if any\u001b[0m\n\u001b[38;2;59;192;240m@@\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;59;192;240m-39,8 +65,8\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;59;192;240m@@\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;166;226;46mpub struct Config<'a> {\u001b[0m\n\u001b[38;2;248;248;242m     #[cfg(feature = \"paging\")]\u001b[0m\n\u001b[38;2;248;248;242m     pub paging_mode: PagingMode,\u001b[0m\n\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;249;38;114m    /// Specifies the lines that should be printed\u001b[0m\n\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;249;38;114m    pub line_ranges: LineRanges,\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m    /// Specifies which lines should be printed\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m    pub visible_lines: VisibleLines,\u001b[0m\n\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242m     /// The syntax highlighting theme\u001b[0m\n\u001b[38;2;248;248;242m     pub theme: String,\u001b[0m\n\u001b[38;2;59;192;240m@@\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;59;192;240m-62,10 +88,7\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;59;192;240m@@\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;166;226;46mpub struct Config<'a> {\u001b[0m\n\u001b[38;2;248;248;242m fn default_config_should_include_all_lines() {\u001b[0m\n\u001b[38;2;248;248;242m     use crate::line_range::RangeCheckResult;\u001b[0m\n\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;249;38;114m    assert_eq!(\u001b[0m\n\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;249;38;114m        Config::default().line_ranges.check(17),\u001b[0m\n\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;249;38;114m        RangeCheckResult::InRange\u001b[0m\n\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;249;38;114m    );\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m    assert_eq!(LineRanges::default().check(17), RangeCheckResult::InRange);\u001b[0m\n\u001b[38;2;248;248;242m }\u001b[0m\n\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242m #[test]\u001b[0m\n\u001b[38;2;248;248;242mdiff --git a/src/controller.rs b/src/controller.rs\u001b[0m\n\u001b[38;2;248;248;242mindex 09c6ec2a..f636d5fd 100644\u001b[0m\n\u001b[38;2;117;113;94m---\u001b[0m\u001b[38;2;117;113;94m a/src/controller.rs\u001b[0m\n\u001b[38;2;117;113;94m+++\u001b[0m\u001b[38;2;117;113;94m b/src/controller.rs\u001b[0m\n\u001b[38;2;59;192;240m@@\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;59;192;240m-1,9 +1,13\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;59;192;240m@@\u001b[0m\n\u001b[38;2;248;248;242m use std::io::{self, Write};\u001b[0m\n\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242m use crate::assets::HighlightingAssets;\u001b[0m\n\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;249;38;114muse crate::config::Config;\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46muse crate::config::{Config, VisibleLines};\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m#[cfg(feature = \"git\")]\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46muse crate::diff::{get_git_diff, LineChanges};\u001b[0m\n\u001b[38;2;248;248;242m use crate::error::*;\u001b[0m\n\u001b[38;2;248;248;242m use crate::input::{Input, InputReader, OpenedInput};\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m#[cfg(feature = \"git\")]\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46muse crate::line_range::LineRange;\u001b[0m\n\u001b[38;2;248;248;242m use crate::line_range::{LineRanges, RangeCheckResult};\u001b[0m\n\u001b[38;2;248;248;242m use crate::output::OutputType;\u001b[0m\n\u001b[38;2;248;248;242m #[cfg(feature = \"paging\")]\u001b[0m\n\u001b[38;2;59;192;240m@@\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;59;192;240m-68,6 +72,32\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;59;192;240m@@\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;166;226;46mimpl<'b> Controller<'b> {\u001b[0m\n\u001b[38;2;248;248;242m                     no_errors = false;\u001b[0m\n\u001b[38;2;248;248;242m                 }\u001b[0m\n\u001b[38;2;248;248;242m                 Ok(mut opened_input) => {\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                    #[cfg(feature = \"git\")]\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                    let line_changes = if self.config.visible_lines.diff_context()\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                        || (!self.config.loop_through && self.config.style_components.changes())\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                    {\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                        if let crate::input::OpenedInputKind::OrdinaryFile(ref path) =\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                            opened_input.kind\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                        {\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                            let diff = get_git_diff(path);\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                            if self.config.visible_lines.diff_context()\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                                && diff\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                                    .as_ref()\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                                    .map(|changes| changes.is_empty())\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                                    .unwrap_or(false)\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                            {\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                                continue;\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                            }\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                            diff\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                        } else {\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                            None\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                        }\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                    } else {\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                        None\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                    };\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\n\u001b[38;2;248;248;242m                     let mut printer: Box<dyn Printer> = if self.config.loop_through {\u001b[0m\n\u001b[38;2;248;248;242m                         Box::new(SimplePrinter::new())\u001b[0m\n\u001b[38;2;248;248;242m                     } else {\u001b[0m\n\u001b[38;2;59;192;240m@@\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;59;192;240m-75,10 +105,18\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;59;192;240m@@\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;166;226;46mimpl<'b> Controller<'b> {\u001b[0m\n\u001b[38;2;248;248;242m                             &self.config,\u001b[0m\n\u001b[38;2;248;248;242m                             &self.assets,\u001b[0m\n\u001b[38;2;248;248;242m                             &mut opened_input,\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                            #[cfg(feature = \"git\")]\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                            &line_changes,\u001b[0m\n\u001b[38;2;248;248;242m                         ))\u001b[0m\n\u001b[38;2;248;248;242m                     };\u001b[0m\n\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;249;38;114m                    let result = self.print_file(&mut *printer, writer, &mut opened_input);\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                    let result = self.print_file(\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                        &mut *printer,\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                        writer,\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                        &mut opened_input,\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                        #[cfg(feature = \"git\")]\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                        &line_changes,\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                    );\u001b[0m\n\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242m                     if let Err(error) = result {\u001b[0m\n\u001b[38;2;248;248;242m                         handle_error(&error);\u001b[0m\n\u001b[38;2;59;192;240m@@\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;59;192;240m-96,13 +134,31\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;59;192;240m@@\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;166;226;46mimpl<'b> Controller<'b> {\u001b[0m\n\u001b[38;2;248;248;242m         printer: &mut dyn Printer,\u001b[0m\n\u001b[38;2;248;248;242m         writer: &mut dyn Write,\u001b[0m\n\u001b[38;2;248;248;242m         input: &mut OpenedInput,\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m        #[cfg(feature = \"git\")] line_changes: &Option<LineChanges>,\u001b[0m\n\u001b[38;2;248;248;242m     ) -> Result<()> {\u001b[0m\n\u001b[38;2;248;248;242m         if !input.reader.first_line.is_empty() || self.config.style_components.header() {\u001b[0m\n\u001b[38;2;248;248;242m             printer.print_header(writer, input)?;\u001b[0m\n\u001b[38;2;248;248;242m         }\u001b[0m\n\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242m         if !input.reader.first_line.is_empty() {\u001b[0m\n\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;249;38;114m            self.print_file_ranges(printer, writer, &mut input.reader, &self.config.line_ranges)?;\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m            let line_ranges = match self.config.visible_lines {\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                VisibleLines::Ranges(ref line_ranges) => line_ranges.clone(),\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                #[cfg(feature = \"git\")]\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                VisibleLines::DiffContext(context) => {\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                    let mut line_ranges: Vec<LineRange> = vec![];\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                    if let Some(line_changes) = line_changes {\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                        for line in line_changes.keys() {\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                            let line = *line as usize;\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                            line_ranges.push(LineRange::new(line - context, line + context));\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                        }\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                    }\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                    LineRanges::from(line_ranges)\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m                }\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m            };\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m            self.print_file_ranges(printer, writer, &mut input.reader, &line_ranges)?;\u001b[0m\n\u001b[38;2;248;248;242m         }\u001b[0m\n\u001b[38;2;248;248;242m         printer.print_footer(writer, input)?;\u001b[0m\n\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242mdiff --git a/src/pretty_printer.rs b/src/pretty_printer.rs\u001b[0m\n\u001b[38;2;248;248;242mindex 0c78ea90..13bd5dbc 100644\u001b[0m\n\u001b[38;2;117;113;94m---\u001b[0m\u001b[38;2;117;113;94m a/src/pretty_printer.rs\u001b[0m\n\u001b[38;2;117;113;94m+++\u001b[0m\u001b[38;2;117;113;94m b/src/pretty_printer.rs\u001b[0m\n\u001b[38;2;59;192;240m@@\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;59;192;240m-6,7 +6,7\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;59;192;240m@@\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;166;226;46muse syntect::parsing::SyntaxReference;\u001b[0m\n\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242m use crate::{\u001b[0m\n\u001b[38;2;248;248;242m     assets::HighlightingAssets,\u001b[0m\n\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;249;38;114m    config::Config,\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m    config::{Config, VisibleLines},\u001b[0m\n\u001b[38;2;248;248;242m     controller::Controller,\u001b[0m\n\u001b[38;2;248;248;242m     error::Result,\u001b[0m\n\u001b[38;2;248;248;242m     input::Input,\u001b[0m\n\u001b[38;2;59;192;240m@@\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;59;192;240m-205,7 +205,7\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;59;192;240m@@\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;166;226;46mimpl<'a> PrettyPrinter<'a> {\u001b[0m\n\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242m     /// Specify the lines that should be printed (default: all)\u001b[0m\n\u001b[38;2;248;248;242m     pub fn line_ranges(&mut self, ranges: LineRanges) -> &mut Self {\u001b[0m\n\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;249;38;114m        self.config.line_ranges = ranges;\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m        self.config.visible_lines = VisibleLines::Ranges(ranges);\u001b[0m\n\u001b[38;2;248;248;242m         self\u001b[0m\n\u001b[38;2;248;248;242m     }\u001b[0m\n\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242mdiff --git a/src/printer.rs b/src/printer.rs\u001b[0m\n\u001b[38;2;248;248;242mindex 5eed437e..2b245cfd 100644\u001b[0m\n\u001b[38;2;117;113;94m---\u001b[0m\u001b[38;2;117;113;94m a/src/printer.rs\u001b[0m\n\u001b[38;2;117;113;94m+++\u001b[0m\u001b[38;2;117;113;94m b/src/printer.rs\u001b[0m\n\u001b[38;2;59;192;240m@@\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;59;192;240m-24,7 +24,7\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;59;192;240m@@\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;166;226;46muse crate::config::Config;\u001b[0m\n\u001b[38;2;248;248;242m use crate::decorations::LineChangesDecoration;\u001b[0m\n\u001b[38;2;248;248;242m use crate::decorations::{Decoration, GridBorderDecoration, LineNumberDecoration};\u001b[0m\n\u001b[38;2;248;248;242m #[cfg(feature = \"git\")]\u001b[0m\n\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;249;38;114muse crate::diff::{get_git_diff, LineChanges};\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46muse crate::diff::LineChanges;\u001b[0m\n\u001b[38;2;248;248;242m use crate::error::*;\u001b[0m\n\u001b[38;2;248;248;242m use crate::input::OpenedInput;\u001b[0m\n\u001b[38;2;248;248;242m use crate::line_range::RangeCheckResult;\u001b[0m\n\u001b[38;2;59;192;240m@@\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;59;192;240m-90,7 +90,7\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;59;192;240m@@\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;166;226;46mpub(crate) struct InteractivePrinter<'a> {\u001b[0m\n\u001b[38;2;248;248;242m     ansi_prefix_sgr: String,\u001b[0m\n\u001b[38;2;248;248;242m     content_type: Option<ContentType>,\u001b[0m\n\u001b[38;2;248;248;242m     #[cfg(feature = \"git\")]\u001b[0m\n\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;249;38;114m    pub line_changes: Option<LineChanges>,\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m    pub line_changes: &'a Option<LineChanges>,\u001b[0m\n\u001b[38;2;248;248;242m     highlighter: Option<HighlightLines<'a>>,\u001b[0m\n\u001b[38;2;248;248;242m     syntax_set: &'a SyntaxSet,\u001b[0m\n\u001b[38;2;248;248;242m     background_color_highlight: Option<Color>,\u001b[0m\n\u001b[38;2;59;192;240m@@\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;59;192;240m-101,6 +101,7\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;59;192;240m@@\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;166;226;46mimpl<'a> InteractivePrinter<'a> {\u001b[0m\n\u001b[38;2;248;248;242m         config: &'a Config,\u001b[0m\n\u001b[38;2;248;248;242m         assets: &'a HighlightingAssets,\u001b[0m\n\u001b[38;2;248;248;242m         input: &mut OpenedInput,\u001b[0m\n\u001b[38;2;166;226;46m+\u001b[0m\u001b[38;2;166;226;46m        #[cfg(feature = \"git\")] line_changes: &'a Option<LineChanges>,\u001b[0m\n\u001b[38;2;248;248;242m     ) -> Self {\u001b[0m\n\u001b[38;2;248;248;242m         let theme = assets.get_theme(&config.theme);\u001b[0m\n\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;59;192;240m@@\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;59;192;240m-145,9 +146,6\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;59;192;240m@@\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;166;226;46mimpl<'a> InteractivePrinter<'a> {\u001b[0m\n\u001b[38;2;248;248;242m             panel_width = 0;\u001b[0m\n\u001b[38;2;248;248;242m         }\u001b[0m\n\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;249;38;114m        #[cfg(feature = \"git\")]\u001b[0m\n\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;249;38;114m        let mut line_changes = None;\u001b[0m\n\u001b[38;2;249;38;114m-\u001b[0m\n\u001b[38;2;248;248;242m         let highlighter = if input\u001b[0m\n\u001b[38;2;248;248;242m             .reader\u001b[0m\n\u001b[38;2;248;248;242m             .content_type\u001b[0m\n\u001b[38;2;59;192;240m@@\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;59;192;240m-155,18 +153,6\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;59;192;240m@@\u001b[0m\u001b[38;2;59;192;240m \u001b[0m\u001b[38;2;166;226;46mimpl<'a> InteractivePrinter<'a> {\u001b[0m\n\u001b[38;2;248;248;242m         {\u001b[0m\n\u001b[38;2;248;248;242m             None\u001b[0m\n\u001b[38;2;248;248;242m         } else {\u001b[0m\n\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;249;38;114m            // Get the Git modifications\u001b[0m\n\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;249;38;114m            #[cfg(feature = \"git\")]\u001b[0m\n\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;249;38;114m            {\u001b[0m\n\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;249;38;114m                use crate::input::OpenedInputKind;\u001b[0m\n\u001b[38;2;249;38;114m-\u001b[0m\n\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;249;38;114m                if config.style_components.changes() {\u001b[0m\n\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;249;38;114m                    if let OpenedInputKind::OrdinaryFile(ref path) = input.kind {\u001b[0m\n\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;249;38;114m                        line_changes = get_git_diff(path);\u001b[0m\n\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;249;38;114m                    }\u001b[0m\n\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;249;38;114m                }\u001b[0m\n\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;249;38;114m            }\u001b[0m\n\u001b[38;2;249;38;114m-\u001b[0m\n\u001b[38;2;248;248;242m             // Determine the type of syntax for highlighting\u001b[0m\n\u001b[38;2;248;248;242m             let syntax = assets.get_syntax(config.language, input, &config.syntax_mapping);\u001b[0m\n\u001b[38;2;248;248;242m             Some(HighlightLines::new(syntax, theme))\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Dockerfile/Dockerfile",
    "content": "\u001b[38;2;249;38;114mARG \u001b[0m\u001b[38;2;248;248;242marchitecture=amd64\u001b[0m\n\u001b[38;2;249;38;114mFROM\u001b[0m\u001b[38;2;248;248;242m $architecture/centos:\u001b[0m\u001b[38;2;166;226;46m7\u001b[0m\n\u001b[38;2;249;38;114mLABEL \u001b[0m\u001b[38;2;248;248;242mcom.example.version=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m0.2.1-beta\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;249;38;114mARG \u001b[0m\u001b[38;2;248;248;242marchitecture\u001b[0m\n\n\u001b[38;2;249;38;114mENV \u001b[0m\u001b[38;2;248;248;242mINTERESTING_PATH /usr/bin/interesting-software\u001b[0m\n\n\n\u001b[38;2;249;38;114mCOPY\u001b[0m\u001b[38;2;248;248;242m entrypoint.sh /usr/bin/entrypoint.sh\u001b[0m\n\n\u001b[38;2;249;38;114mRUN \u001b[0m\u001b[38;2;248;248;242mif [ \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m$architecture\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m = \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mi386\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m ]; then echo \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mBuilding i386 docker image\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m && \\\u001b[0m\n\u001b[38;2;248;248;242m    linux32 yum update -y && linux32 yum install -y mysql ; \\\u001b[0m\n\u001b[38;2;248;248;242m    else yum update -y && yum install -y mysql\u001b[0m\n\n\u001b[38;2;249;38;114mEXPOSE \u001b[0m\u001b[38;2;248;248;242m80/tcp\u001b[0m\n\n\u001b[38;2;249;38;114mVOLUME \u001b[0m\u001b[38;2;248;248;242m[/var/lib/mysql/data]\u001b[0m\n\n\u001b[38;2;249;38;114mENTRYPOINT \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m/usr/bin/entrypoint.sh\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Elixir/command.ex",
    "content": "\u001b[38;2;249;38;114mdefmodule\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;102;217;239mCharlex\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[4;38;2;102;217;239mCommand\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mdo\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;255;255;255mcallback\u001b[0m\u001b[38;2;248;248;242m usage\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m :: \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[4;38;2;102;217;239mString\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mt\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;255;255;255mcallback\u001b[0m\u001b[38;2;248;248;242m description\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m :: \u001b[0m\u001b[4;38;2;102;217;239mString\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mt\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;255;255;255mcallback\u001b[0m\u001b[38;2;248;248;242m parse_args\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242margs :: \u001b[0m\u001b[4;38;2;102;217;239mString\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mt\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m :: any\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;255;255;255mcallback\u001b[0m\u001b[38;2;248;248;242m run\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mcontext :: \u001b[0m\u001b[4;38;2;102;217;239mMap\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mt\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m args :: \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[4;38;2;102;217;239mString\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mt\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m any\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m :: \u001b[0m\u001b[4;38;2;102;217;239mString\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mt\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m any\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;255;255;255moptional_callbacks\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255musage\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mdescription\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mparse_args\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mdefmacro\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m__using__\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m_opts\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mdo\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mquote\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mdo\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;255;255;255mbehaviour\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114munquote\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255m__MODULE__\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;255;255;255mimpl\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mdef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46musage\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mdo:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mThis command is without usage, will add it soon\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;255;255;255mimpl\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mdef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mdescription\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mdo:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mThis command is without description, will add it soon\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;255;255;255mimpl\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mdef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mrun\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m_context\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m _args\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mdo:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;190;132;255mok\u001b[0m\n\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;255;255;255mimpl\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mdef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mparse_args\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242margs\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mdo:\u001b[0m\u001b[38;2;248;248;242m args \u001b[0m\u001b[38;2;249;38;114m|>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;102;217;239mString\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242msplit\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m|>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;102;217;239mKernel\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mtl\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mdefoverridable\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mparse_args\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mdescription\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mrun\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255musage\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\u001b[38;2;249;38;114mend\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Elm/test.elm",
    "content": "\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m elm install elm-explorations/linear-algebra\u001b[0m\n\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m elm install elm-explorations/webgl\u001b[0m\n\n\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mBrowser\u001b[0m\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mBrowser.Events\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mas\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mE\u001b[0m\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mHtml\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mexposing\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mHtml\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mHtml.Attributes\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mexposing\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;166;226;46mwidth\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mheight\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mstyle\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mMath.Matrix4\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mas\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mMat4\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mexposing\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mMat4\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mMath.Vector3\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mas\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mVec3\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mexposing\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mVec3\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mvec3\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mWebGL\u001b[0m\n\n\n\n\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m MAIN\u001b[0m\n\n\n\u001b[38;2;166;226;46mmain \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;190;132;255mBrowser\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242melement\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239m{\u001b[0m\u001b[38;2;248;248;242m init \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m init\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239m,\u001b[0m\u001b[38;2;248;248;242m view \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m view\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239m,\u001b[0m\u001b[38;2;248;248;242m update \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m update\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239m,\u001b[0m\u001b[38;2;248;248;242m subscriptions \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m subscriptions\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239m}\u001b[0m\n\n\n\n\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m MODEL\u001b[0m\n\n\n\u001b[38;2;249;38;114mtype alias \u001b[0m\u001b[38;2;166;226;46mModel\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;190;132;255mFloat\u001b[0m\n\n\n\u001b[38;2;166;226;46minit\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239m()\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[3;38;2;102;217;239mModel\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mCmd\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mMsg\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;166;226;46minit \u001b[0m\u001b[38;2;190;132;255m()\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;102;217;239m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mCmd\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mnone \u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\n\n\n\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m UPDATE\u001b[0m\n\n\n\u001b[38;2;249;38;114mtype \u001b[0m\u001b[38;2;166;226;46mMsg\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mTimeDelta\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mFloat\u001b[0m\n\n\n\u001b[38;2;166;226;46mupdate\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mMsg\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mModel\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[3;38;2;102;217;239mModel\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mCmd\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mMsg\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;166;226;46mupdate \u001b[0m\u001b[38;2;248;248;242mmsg currentTime \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mcase \u001b[0m\u001b[38;2;248;248;242mmsg \u001b[0m\u001b[38;2;249;38;114mof\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;190;132;255mTimeDelta\u001b[0m\u001b[38;2;248;248;242m delta \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242m delta \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m currentTime\u001b[0m\u001b[38;2;102;217;239m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mCmd\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mnone \u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\n\n\n\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m SUBSCRIPTIONS\u001b[0m\n\n\n\u001b[38;2;166;226;46msubscriptions\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mModel\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mSub\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mMsg\u001b[0m\n\u001b[38;2;166;226;46msubscriptions \u001b[0m\u001b[38;2;248;248;242m_ \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;190;132;255mE\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242monAnimationFrameDelta \u001b[0m\u001b[38;2;190;132;255mTimeDelta\u001b[0m\n\n\n\n\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m VIEW\u001b[0m\n\n\n\u001b[38;2;166;226;46mview\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mModel\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mHtml\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mmsg\u001b[0m\n\u001b[38;2;166;226;46mview \u001b[0m\u001b[38;2;248;248;242mt \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;190;132;255mWebGL\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mtoHtml\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239m[\u001b[0m\u001b[38;2;248;248;242m width \u001b[0m\u001b[38;2;190;132;255m400\u001b[0m\u001b[38;2;102;217;239m,\u001b[0m\u001b[38;2;248;248;242m height \u001b[0m\u001b[38;2;190;132;255m400\u001b[0m\u001b[38;2;102;217;239m,\u001b[0m\u001b[38;2;248;248;242m style \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mdisplay\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mblock\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239m]\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239m[\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mWebGL\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mentity vertexShader fragmentShader mesh \u001b[0m\u001b[38;2;102;217;239m{\u001b[0m\u001b[38;2;248;248;242m perspective \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m perspective \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mt \u001b[0m\u001b[38;2;249;38;114m/\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1000\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239m}\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239m]\u001b[0m\n\n\n\u001b[38;2;166;226;46mperspective\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mFloat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mMat4\u001b[0m\n\u001b[38;2;166;226;46mperspective \u001b[0m\u001b[38;2;248;248;242mt \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;190;132;255mMat4\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mmul\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255mMat4\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mmakePerspective \u001b[0m\u001b[38;2;190;132;255m45\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0.01\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m100\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255mMat4\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mmakeLookAt \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mvec3 \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m cos t\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m sin t\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mvec3 \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mvec3 \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\n\n\n\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m MESH\u001b[0m\n\n\n\u001b[38;2;249;38;114mtype alias \u001b[0m\u001b[38;2;166;226;46mVertex\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239m{\u001b[0m\u001b[38;2;248;248;242m position \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mVec3\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239m,\u001b[0m\u001b[38;2;248;248;242m color \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mVec3\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239m}\u001b[0m\n\n\n\u001b[38;2;166;226;46mmesh\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mWebGL\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[3;38;2;102;217;239mMesh\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mVertex\u001b[0m\n\u001b[38;2;166;226;46mmesh \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;190;132;255mWebGL\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mtriangles\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239m[\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mVertex\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mvec3 \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mvec3 \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;102;217;239m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mVertex\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mvec3 \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mvec3 \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;102;217;239m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mVertex\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mvec3 \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mvec3 \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239m]\u001b[0m\n\n\n\n\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m SHADERS\u001b[0m\n\n\n\u001b[38;2;249;38;114mtype alias \u001b[0m\u001b[38;2;166;226;46mUniforms\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239m{\u001b[0m\u001b[38;2;248;248;242m perspective \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mMat4\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239m}\u001b[0m\n\n\n\u001b[38;2;166;226;46mvertexShader\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mWebGL\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[3;38;2;102;217;239mShader\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mVertex\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mUniforms\u001b[0m\u001b[38;2;248;248;242m { \u001b[0m\u001b[38;2;255;255;255mvcolor\u001b[0m\u001b[38;2;248;248;242m : \u001b[0m\u001b[3;38;2;102;217;239mVec3\u001b[0m\u001b[38;2;248;248;242m }\u001b[0m\n\u001b[38;2;166;226;46mvertexShader \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;102;217;239mglsl\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\n\u001b[38;2;166;226;46m        \u001b[0m\u001b[38;2;249;38;114mattribute\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[3;38;2;102;217;239mvec3\u001b[0m\u001b[38;2;166;226;46m position\u001b[0m\u001b[38;2;166;226;46m;\u001b[0m\n\u001b[38;2;166;226;46m        \u001b[0m\u001b[38;2;249;38;114mattribute\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[3;38;2;102;217;239mvec3\u001b[0m\u001b[38;2;166;226;46m color\u001b[0m\u001b[38;2;166;226;46m;\u001b[0m\n\u001b[38;2;166;226;46m        \u001b[0m\u001b[38;2;249;38;114muniform\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[3;38;2;102;217;239mmat4\u001b[0m\u001b[38;2;166;226;46m perspective\u001b[0m\u001b[38;2;166;226;46m;\u001b[0m\n\u001b[38;2;166;226;46m        \u001b[0m\u001b[38;2;249;38;114mvarying\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[3;38;2;102;217;239mvec3\u001b[0m\u001b[38;2;166;226;46m vcolor\u001b[0m\u001b[38;2;166;226;46m;\u001b[0m\n\n\u001b[38;2;166;226;46m        \u001b[0m\u001b[3;38;2;102;217;239mvoid\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;166;226;46mmain\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;166;226;46m(\u001b[0m\u001b[38;2;166;226;46m)\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;166;226;46m{\u001b[0m\n\u001b[38;2;166;226;46m            \u001b[0m\u001b[38;2;255;255;255mgl_Position\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;166;226;46m perspective \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[3;38;2;102;217;239mvec4\u001b[0m\u001b[38;2;166;226;46m(\u001b[0m\u001b[38;2;166;226;46mposition\u001b[0m\u001b[38;2;166;226;46m,\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;190;132;255m1.0\u001b[0m\u001b[38;2;166;226;46m)\u001b[0m\u001b[38;2;166;226;46m;\u001b[0m\n\u001b[38;2;166;226;46m            vcolor \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;166;226;46m color\u001b[0m\u001b[38;2;166;226;46m;\u001b[0m\n\u001b[38;2;166;226;46m        \u001b[0m\u001b[38;2;166;226;46m}\u001b[0m\n\u001b[38;2;166;226;46m    \u001b[0m\u001b[38;2;249;38;114m|]\u001b[0m\n\n\n\u001b[38;2;166;226;46mfragmentShader\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mWebGL\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[3;38;2;102;217;239mShader\u001b[0m\u001b[38;2;248;248;242m {} \u001b[0m\u001b[3;38;2;102;217;239mUniforms\u001b[0m\u001b[38;2;248;248;242m { \u001b[0m\u001b[38;2;255;255;255mvcolor\u001b[0m\u001b[38;2;248;248;242m : \u001b[0m\u001b[3;38;2;102;217;239mVec3\u001b[0m\u001b[38;2;248;248;242m }\u001b[0m\n\u001b[38;2;166;226;46mfragmentShader \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;102;217;239mglsl\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\n\u001b[38;2;166;226;46m        precision mediump \u001b[0m\u001b[3;38;2;102;217;239mfloat\u001b[0m\u001b[38;2;166;226;46m;\u001b[0m\n\u001b[38;2;166;226;46m        \u001b[0m\u001b[38;2;249;38;114mvarying\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[3;38;2;102;217;239mvec3\u001b[0m\u001b[38;2;166;226;46m vcolor\u001b[0m\u001b[38;2;166;226;46m;\u001b[0m\n\n\u001b[38;2;166;226;46m        \u001b[0m\u001b[3;38;2;102;217;239mvoid\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;166;226;46mmain\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;166;226;46m(\u001b[0m\u001b[38;2;166;226;46m)\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;166;226;46m{\u001b[0m\n\u001b[38;2;166;226;46m            \u001b[0m\u001b[38;2;255;255;255mgl_FragColor\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[3;38;2;102;217;239mvec4\u001b[0m\u001b[38;2;166;226;46m(\u001b[0m\u001b[38;2;166;226;46mvcolor\u001b[0m\u001b[38;2;166;226;46m,\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;190;132;255m1.0\u001b[0m\u001b[38;2;166;226;46m)\u001b[0m\u001b[38;2;166;226;46m;\u001b[0m\n\u001b[38;2;166;226;46m        \u001b[0m\u001b[38;2;166;226;46m}\u001b[0m\n\u001b[38;2;166;226;46m    \u001b[0m\u001b[38;2;249;38;114m|]\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Email/test.eml",
    "content": "\u001b[38;2;249;38;114mReturn-Path\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[4;38;2;166;226;46muser@example.com\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\u001b[38;2;249;38;114mReceived\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m from mail.example \u001b[0m\u001b[38;2;117;113;94m(\u001b[0m\u001b[38;2;117;113;94m[1.1.1.1]\u001b[0m\u001b[38;2;117;113;94m)\u001b[0m\n\u001b[38;2;248;248;242m\tby mail.example with LMTP\u001b[0m\n\u001b[38;2;248;248;242m\tid 123\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;117;113;94m(\u001b[0m\u001b[38;2;117;113;94menvelope-from <user@example.com>\u001b[0m\u001b[38;2;117;113;94m)\u001b[0m\n\u001b[38;2;248;248;242m\tfor \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[4;38;2;166;226;46ma@b\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mSun\u001b[0m\u001b[38;2;190;132;255m,\u001b[0m\u001b[38;2;190;132;255m 13\u001b[0m\u001b[38;2;190;132;255m Oct\u001b[0m\u001b[38;2;190;132;255m 2019\u001b[0m\u001b[38;2;190;132;255m 13\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;190;132;255m53\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;190;132;255m24\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;190;132;255m0000\u001b[0m\n\u001b[38;2;166;226;46mFrom\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mUser, Test\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[4;38;2;166;226;46muser@example.com\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\u001b[38;2;166;226;46mTo\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mUser2, Test\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[4;38;2;166;226;46muser2@example.com\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\u001b[38;2;166;226;46mSubject\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;166;226;46mDate\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mSun\u001b[0m\u001b[38;2;190;132;255m,\u001b[0m\u001b[38;2;190;132;255m 13\u001b[0m\u001b[38;2;190;132;255m Oct\u001b[0m\u001b[38;2;190;132;255m 2019\u001b[0m\u001b[38;2;190;132;255m 13\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;190;132;255m53\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;190;132;255m08\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;190;132;255m0000\u001b[0m\n\u001b[38;2;249;38;114mAccept-Language\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m de-DE, en-US\u001b[0m\n\u001b[38;2;249;38;114mContent-Language\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m de-DE\u001b[0m\n\u001b[38;2;249;38;114mX-\u001b[0m\u001b[38;2;249;38;114mMS-Has-Attach\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m yes\u001b[0m\n\u001b[38;2;249;38;114mMIME-Version\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m 1.0\u001b[0m\n\n\u001b[38;2;230;219;116mTest\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Erlang/bat_erlang.erl",
    "content": "\u001b[38;2;190;132;255m-\u001b[0m\u001b[38;2;249;38;114mmodule\u001b[0m\u001b[38;2;190;132;255m(\u001b[0m\u001b[38;2;166;226;46mbat_erlang\u001b[0m\u001b[38;2;190;132;255m)\u001b[0m\u001b[38;2;190;132;255m.\u001b[0m\n\n\u001b[38;2;190;132;255m-\u001b[0m\u001b[38;2;249;38;114mexport\u001b[0m\u001b[38;2;190;132;255m(\u001b[0m\u001b[38;2;190;132;255m[\u001b[0m\u001b[38;2;190;132;255mmain\u001b[0m\u001b[38;2;190;132;255m/\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;190;132;255m]\u001b[0m\u001b[38;2;190;132;255m)\u001b[0m\u001b[38;2;190;132;255m.\u001b[0m\n\n\u001b[38;2;190;132;255m-\u001b[0m\u001b[38;2;249;38;114mrecord\u001b[0m\u001b[38;2;190;132;255m(\u001b[0m\u001b[38;2;166;226;46mtest\u001b[0m\u001b[38;2;190;132;255m,\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;190;132;255m{\u001b[0m\n\u001b[38;2;190;132;255m    \u001b[0m\u001b[38;2;166;226;46mname\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;190;132;255m::\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[3;38;2;166;226;46mlist\u001b[0m\u001b[38;2;190;132;255m(\u001b[0m\u001b[38;2;190;132;255m)\u001b[0m\u001b[38;2;190;132;255m,\u001b[0m\n\u001b[38;2;190;132;255m    \u001b[0m\u001b[38;2;166;226;46mdata\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;190;132;255m::\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[3;38;2;166;226;46mbinary\u001b[0m\u001b[38;2;190;132;255m(\u001b[0m\u001b[38;2;190;132;255m)\u001b[0m\n\u001b[38;2;190;132;255m}\u001b[0m\u001b[38;2;190;132;255m)\u001b[0m\u001b[38;2;190;132;255m.\u001b[0m\n\n\u001b[38;2;190;132;255m-\u001b[0m\u001b[38;2;249;38;114mdefine\u001b[0m\u001b[38;2;190;132;255m(\u001b[0m\u001b[38;2;166;226;46mTESTMACRO\u001b[0m\u001b[38;2;190;132;255m,\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mtestmacro\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;190;132;255m)\u001b[0m\u001b[38;2;190;132;255m.\u001b[0m\n\n\u001b[38;2;190;132;255m-\u001b[0m\u001b[38;2;249;38;114mspec\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;166;226;46mmain\u001b[0m\u001b[38;2;190;132;255m(\u001b[0m\u001b[38;2;190;132;255m)\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;190;132;255m->\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;190;132;255mok\u001b[0m\u001b[38;2;190;132;255m.\u001b[0m\n\u001b[38;2;166;226;46mmain\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m%\u001b[0m\u001b[38;2;117;113;94m% Handling Lists and Numbers\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255mList\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m$\u001b[0m\u001b[38;2;190;132;255m6\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2#\u001b[0m\u001b[38;2;190;132;255m00111\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m_Sum\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mlists\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242msum\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mList\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m_\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mN\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mN\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mN\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m/\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mN\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mN\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m||\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mN\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mList\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mN\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;255;255;255m_Head\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m_SecondHead\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m_Tail\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mList\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m_\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255matom\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255mlist\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<<\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mbinary\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m>>\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;190;132;255mtuple\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtuple\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m#{\u001b[0m\u001b[38;2;190;132;255mmap\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mkey\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m#\u001b[0m\u001b[38;2;255;255;255mtest\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;255;255;255mname\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mrecord\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m%\u001b[0m\u001b[38;2;117;113;94m% Handling Binaries \u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255mBinHelloWorld\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<<\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mHello World\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m>>\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m<<\u001b[0m\u001b[38;2;255;255;255mX\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m||\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<<\u001b[0m\u001b[38;2;255;255;255mX\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m/\u001b[0m\u001b[3;38;2;102;217;239mbinary\u001b[0m\u001b[38;2;248;248;242m>>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mBinHelloWorld\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m>>\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m<<\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m151\u001b[0m\u001b[38;2;248;248;242m>>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<<\u001b[0m\u001b[38;2;190;132;255m151\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m64\u001b[0m\u001b[38;2;248;248;242m/\u001b[0m\u001b[38;2;249;38;114msigned\u001b[0m\u001b[38;2;248;248;242m-\u001b[0m\u001b[3;38;2;102;217;239minteger\u001b[0m\u001b[38;2;248;248;242m>>\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m%\u001b[0m\u001b[38;2;117;113;94m% Handling Boolean and Atoms\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mandalso\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mfalse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114morelse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m_\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=:=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m_\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mfalse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=/=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m_\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m'\u001b[0m\u001b[38;2;190;132;255mHELLO\u001b[0m\u001b[38;2;190;132;255m'\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m/=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mhello\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m_\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mhello\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mworld\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m%\u001b[0m\u001b[38;2;117;113;94m% Handling Maps and Records\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255mTestMap\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m#{\u001b[0m\u001b[38;2;190;132;255ma\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mb\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m#{\u001b[0m\u001b[38;2;190;132;255ma\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m:=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m_Value\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m:=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m_\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mTestMap\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m_\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mTestMap\u001b[0m\u001b[38;2;248;248;242m#{\u001b[0m\u001b[38;2;190;132;255md\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255mRecord\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m#\u001b[0m\u001b[38;2;255;255;255mtest\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;255;255;255mname\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m?\u001b[0m\u001b[38;2;190;132;255mTESTMACRO\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m_\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mRecord\u001b[0m\u001b[38;2;248;248;242m#\u001b[0m\u001b[38;2;255;255;255mtest\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;255;255;255mname\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m%\u001b[0m\u001b[38;2;117;113;94m% Conditionals\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mTestMap\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mof\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m#{\u001b[0m\u001b[38;2;190;132;255mb\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m:=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mB\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;255;255;255mB\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255m_\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;190;132;255mok\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242merlang\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;102;217;239mis_map\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mTestMap\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;190;132;255mmap\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242mtest_function\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m%\u001b[0m\u001b[38;2;117;113;94m% Messaging\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255mSelf\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242merlang\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;102;217;239mself\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255mSelf\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m!\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mhello_world\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mreceive\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;190;132;255mhello_world\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;190;132;255mok\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255m_\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242mio\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242mformat\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116munknown message\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mafter\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1000\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;190;132;255mtimeout\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;190;132;255mok\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\n\u001b[38;2;166;226;46mtest_function\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mN\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mwhen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242merlang\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;102;217;239mis_integer\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mN\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255minteger\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;166;226;46mtest_function\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;255;255;255m_\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[38;2;255;255;255m_\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mlist\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;166;226;46mtest_function\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m<<\u001b[0m\u001b[38;2;255;255;255m_\u001b[0m\u001b[38;2;248;248;242m/\u001b[0m\u001b[3;38;2;102;217;239mbinary\u001b[0m\u001b[38;2;248;248;242m>>\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;190;132;255mbinary\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;166;226;46mtest_function\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255m_\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;190;132;255mundefined\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/EtcGroup/test.group",
    "content": "\u001b[38;2;249;38;114mroot\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[3;38;2;253;151;31mroot\u001b[0m\n\u001b[38;2;249;38;114msys\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[3;38;2;253;151;31mbin\u001b[0m\n\u001b[38;2;249;38;114mmem\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m8\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114mftp\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m11\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114mmail\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m12\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114mlog\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m19\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114msmmsp\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m25\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114mproc\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m26\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[3;38;2;253;151;31mpolkitd\u001b[0m\n\u001b[38;2;249;38;114mgames\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m50\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114mlock\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m54\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114mnetwork\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m90\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114mfloppy\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m94\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114mscanner\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m96\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114mpower\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m98\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114madm\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m999\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[3;38;2;253;151;31mdaemon\u001b[0m\n\u001b[38;2;249;38;114mwheel\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m998\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[3;38;2;253;151;31musername\u001b[0m\n\u001b[38;2;249;38;114mkmem\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m997\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114mtty\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114mutmp\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m996\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114maudio\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m995\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[3;38;2;253;151;31mmpd,username\u001b[0m\n\u001b[38;2;249;38;114mdisk\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m994\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114minput\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m993\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114mkvm\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m992\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114mlp\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m991\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114moptical\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m990\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[3;38;2;253;151;31musername\u001b[0m\n\u001b[38;2;249;38;114mrender\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m989\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114mstorage\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m988\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[3;38;2;253;151;31musername\u001b[0m\n\u001b[38;2;249;38;114muucp\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m987\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114mvideo\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m986\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[3;38;2;253;151;31musername\u001b[0m\n\u001b[38;2;249;38;114musers\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m985\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114msystemd-journal\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m984\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114mrfkill\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m983\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114mbin\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[3;38;2;253;151;31mdaemon\u001b[0m\n\u001b[38;2;249;38;114mdaemon\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[3;38;2;253;151;31mbin\u001b[0m\n\u001b[38;2;249;38;114mhttp\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m33\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114mnobody\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m65534\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114mdbus\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m81\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114msystemd-journal-remote\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m982\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114msystemd-network\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m981\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114msystemd-resolve\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m980\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114msystemd-timesync\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m979\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114msystemd-coredump\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m978\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114muuidd\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m68\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114musername\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m1000\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114mgit\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m977\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114mavahi\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m976\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114mcolord\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m975\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114mpolkitd\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m102\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114mmpd\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m45\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114mrtkit\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m133\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114mtransmission\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m169\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114mwireshark\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m150\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[3;38;2;253;151;31musername\u001b[0m\n\u001b[38;2;249;38;114mlightdm\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m974\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114mgeoclue\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m973\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114musbmux\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m140\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114mdhcpcd\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m972\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114mbrlapi\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m971\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114mgdm\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m120\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114mlibvirt\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m970\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114mflatpak\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m969\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114mgluster\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m968\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114mrpc\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m32\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114mtor\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m43\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114mrslsync\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m967\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;249;38;114mdocker\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m966\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[3;38;2;253;151;31musername\u001b[0m\n\u001b[38;2;249;38;114msambashare\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m1002\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[3;38;2;253;151;31musername\u001b[0m\n\u001b[38;2;249;38;114mnamed\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m40\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/F#/string.fs",
    "content": "\u001b[38;2;117;113;94m// Copyright (c) Microsoft Corporation.  All Rights Reserved.  See License.txt in the project root for license information.\u001b[0m\n\n\u001b[38;2;249;38;114mnamespace\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;166;226;46mMicrosoft.FSharp.Core\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mopen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mSystem\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mopen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mSystem\u001b[0m\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mText\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mopen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mMicrosoft\u001b[0m\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mFSharp\u001b[0m\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mCore\u001b[0m\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mLanguagePrimitives\u001b[0m\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mIntrinsicOperators\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mopen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mMicrosoft\u001b[0m\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mFSharp\u001b[0m\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mCore\u001b[0m\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mOperators\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mopen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mMicrosoft\u001b[0m\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mFSharp\u001b[0m\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mCore\u001b[0m\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mOperators\u001b[0m\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mChecked\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mopen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mMicrosoft\u001b[0m\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mFSharp\u001b[0m\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mCollections\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mopen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mMicrosoft\u001b[0m\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mFSharp\u001b[0m\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mPrimitives\u001b[0m\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mBasics\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239m[<CompilationRepresentation\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;102;217;239mCompilationRepresentationFlags.ModuleSuffix\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;102;217;239m>]\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239m[<RequireQualifiedAccess>]\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mmodule\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;166;226;46mString \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;102;217;239m[<Literal>]\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;117;113;94m/// LOH threshold is calculated from Internal.Utilities.Library.LOH_SIZE_THRESHOLD_BYTES,\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;117;113;94m/// and is equal to 80_000 / sizeof<char>\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mLOH_CHAR_THRESHOLD\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m40_000\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;102;217;239m[<CompiledName\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mLength\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;102;217;239m>]\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mlength\u001b[0m\u001b[3;38;2;253;151;31m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[3;38;2;253;151;31mstr\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;166;226;46mstring\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m isNull str \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m str.Length\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;102;217;239m[<CompiledName\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mConcat\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;102;217;239m>]\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mconcat\u001b[0m\u001b[3;38;2;253;151;31m sep \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[3;38;2;253;151;31mstrings \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mseq\u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;166;226;46mstring\u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m  \u001b[0m\n\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mconcatArray\u001b[0m\u001b[3;38;2;253;151;31m sep \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[3;38;2;253;151;31mstrings\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mstring \u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114mmatch\u001b[0m\u001b[38;2;248;248;242m length sep \u001b[0m\u001b[38;2;249;38;114mwith\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m String.Concat strings\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;117;113;94m// following line should be used when this overload becomes part of .NET Standard (it's only in .NET Core)\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;117;113;94m//| 1 -> String.Join(sep.[0], strings, 0, strings.Length)\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m_\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m String.Join\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242msep\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m strings\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m strings.Length\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mmatch\u001b[0m\u001b[38;2;248;248;242m strings \u001b[0m\u001b[38;2;249;38;114mwith\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m? array\u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242mstring\u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mas\u001b[0m\u001b[38;2;248;248;242m arr \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242m                concatArray sep arr\u001b[0m\n\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m? list\u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242mstring\u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mas\u001b[0m\u001b[38;2;248;248;242m lst \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242m                lst \u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114m|>\u001b[0m\u001b[38;2;248;248;242m List.toArray \u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114m|>\u001b[0m\u001b[38;2;248;248;242m concatArray sep\u001b[0m\n\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m_\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\n\u001b[38;2;248;248;242m                String.Join\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242msep\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m strings\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;102;217;239m[<CompiledName\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mIterate\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;102;217;239m>]\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242miter\u001b[0m\u001b[3;38;2;253;151;31m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[3;38;2;253;151;31maction \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;166;226;46mchar \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;166;226;46m unit\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[3;38;2;253;151;31mstr\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;166;226;46mstring\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mnot\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mString.IsNullOrEmpty str\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m i \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mto\u001b[0m\u001b[38;2;248;248;242m str.Length \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mdo\u001b[0m\n\u001b[38;2;248;248;242m                    action str.\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;102;217;239m[<CompiledName\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mIterateIndexed\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;102;217;239m>]\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242miteri\u001b[0m\u001b[3;38;2;253;151;31m action \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[3;38;2;253;151;31mstr\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;166;226;46mstring\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mnot\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mString.IsNullOrEmpty str\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mf\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m OptimizedClosures.FSharpFunc\u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;249;38;114m_\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;249;38;114m_\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;249;38;114m_\u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;248;248;242m.Adapt\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242maction\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m i \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mto\u001b[0m\u001b[38;2;248;248;242m str.Length \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mdo\u001b[0m\n\u001b[38;2;248;248;242m                    f.Invoke\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m str.\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;102;217;239m[<CompiledName\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mMap\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;102;217;239m>]\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mmap\u001b[0m\u001b[3;38;2;253;151;31m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[3;38;2;253;151;31mmapping\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mchar \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mchar\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[3;38;2;253;151;31mstr\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;166;226;46mstring\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m String.IsNullOrEmpty str \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m                String.Empty\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mresult\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m str.ToCharArray\u001b[0m\u001b[38;2;190;132;255m()\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114mlet mutable\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m c \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m result \u001b[0m\u001b[38;2;249;38;114mdo\u001b[0m\n\u001b[38;2;248;248;242m                    result.\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m mapping c\u001b[0m\n\u001b[38;2;248;248;242m                    i \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m i \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114mnew\u001b[0m\u001b[38;2;248;248;242m String\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mresult\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;102;217;239m[<CompiledName\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mMapIndexed\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;102;217;239m>]\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mmapi\u001b[0m\u001b[3;38;2;253;151;31m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[3;38;2;253;151;31mmapping\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mint \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mchar \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mchar\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[3;38;2;253;151;31mstr\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;166;226;46mstring\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mlen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m length str\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m len \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242m                String.Empty\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mresult\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m str.ToCharArray\u001b[0m\u001b[38;2;190;132;255m()\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mf\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m OptimizedClosures.FSharpFunc\u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;249;38;114m_\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;249;38;114m_\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;249;38;114m_\u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;248;248;242m.Adapt\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mmapping\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114mlet mutable\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114mwhile\u001b[0m\u001b[38;2;248;248;242m i \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m len \u001b[0m\u001b[38;2;249;38;114mdo\u001b[0m\n\u001b[38;2;248;248;242m                    result.\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m f.Invoke\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m result.\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;248;248;242m                    i \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m i \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114mnew\u001b[0m\u001b[38;2;248;248;242m String\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mresult\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;102;217;239m[<CompiledName\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mFilter\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;102;217;239m>]\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mfilter\u001b[0m\u001b[3;38;2;253;151;31m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[3;38;2;253;151;31mpredicate\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mchar \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mbool\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[3;38;2;253;151;31mstr\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;166;226;46mstring\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mlen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m length str\u001b[0m\n\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m len \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242m                String.Empty\u001b[0m\n\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114melif\u001b[0m\u001b[38;2;248;248;242m len \u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;248;248;242m LOH\u001b[0m\u001b[38;2;249;38;114m_\u001b[0m\u001b[38;2;248;248;242mCHAR\u001b[0m\u001b[38;2;249;38;114m_\u001b[0m\u001b[38;2;248;248;242mTHRESHOLD \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;117;113;94m// By using SB here, which is twice slower than the optimized path, we prevent LOH allocations \u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;117;113;94m// and 'stop the world' collections if the filtering results in smaller strings.\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;117;113;94m// We also don't pre-allocate SB here, to allow for less mem pressure when filter result is small.\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mres\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m StringBuilder\u001b[0m\u001b[38;2;190;132;255m()\u001b[0m\n\u001b[38;2;248;248;242m                str \u001b[0m\u001b[38;2;249;38;114m|>\u001b[0m\u001b[38;2;248;248;242m iter \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114mfun\u001b[0m\u001b[3;38;2;253;151;31m c \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m predicate c \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\u001b[38;2;248;248;242m res.Append c \u001b[0m\u001b[38;2;249;38;114m|>\u001b[0m\u001b[38;2;248;248;242m ignore\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;248;248;242m                res.ToString\u001b[0m\u001b[38;2;190;132;255m()\u001b[0m\n\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;117;113;94m// Must do it this way, since array.fs is not yet in scope, but this is safe\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mtarget\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked len\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114mlet mutable\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m c \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m str \u001b[0m\u001b[38;2;249;38;114mdo\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m predicate c \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242m                        target.\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m c\u001b[0m\n\u001b[38;2;248;248;242m                        i \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m i \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\n\u001b[38;2;248;248;242m                String\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mtarget\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m i\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;102;217;239m[<CompiledName\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mCollect\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;102;217;239m>]\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mcollect\u001b[0m\u001b[3;38;2;253;151;31m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[3;38;2;253;151;31mmapping\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mchar \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mstring\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[3;38;2;253;151;31mstr\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;166;226;46mstring\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m String.IsNullOrEmpty str \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m                String.Empty\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mres\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m StringBuilder str.Length\u001b[0m\n\u001b[38;2;248;248;242m                str \u001b[0m\u001b[38;2;249;38;114m|>\u001b[0m\u001b[38;2;248;248;242m iter \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114mfun\u001b[0m\u001b[3;38;2;253;151;31m c \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m res.Append\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mmapping c\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m|>\u001b[0m\u001b[38;2;248;248;242m ignore\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;248;248;242m                res.ToString\u001b[0m\u001b[38;2;190;132;255m()\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;102;217;239m[<CompiledName\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mInitialize\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;102;217;239m>]\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242minit\u001b[0m\u001b[3;38;2;253;151;31m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[3;38;2;253;151;31mcount\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;166;226;46mint\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[3;38;2;253;151;31minitializer\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mint\u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mstring\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m count \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\u001b[38;2;248;248;242m invalidArgInputMustBeNonNegative \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mcount\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m count\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mres\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m StringBuilder count\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m i \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mto\u001b[0m\u001b[38;2;248;248;242m count \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mdo\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242m               res.Append\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242minitializer i\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m|>\u001b[0m\u001b[38;2;248;248;242m ignore\u001b[0m\n\u001b[38;2;248;248;242m            res.ToString\u001b[0m\u001b[38;2;190;132;255m()\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;102;217;239m[<CompiledName\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mReplicate\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;102;217;239m>]\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mreplicate\u001b[0m\u001b[3;38;2;253;151;31m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[3;38;2;253;151;31mcount\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;166;226;46mint\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[3;38;2;253;151;31mstr\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;166;226;46mstring\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m count \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\u001b[38;2;248;248;242m invalidArgInputMustBeNonNegative \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mcount\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m count\u001b[0m\n\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mlen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m length str\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m len \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m||\u001b[0m\u001b[38;2;248;248;242m count \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242m                String.Empty\u001b[0m\n\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114melif\u001b[0m\u001b[38;2;248;248;242m len \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114mnew\u001b[0m\u001b[38;2;248;248;242m String\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mstr.\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m count\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114melif\u001b[0m\u001b[38;2;248;248;242m count \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114mmatch\u001b[0m\u001b[38;2;248;248;242m count \u001b[0m\u001b[38;2;249;38;114mwith\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m str\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m String.Concat\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mstr\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m str\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m String.Concat\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mstr\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m str\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m str\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m_\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m String.Concat\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mstr\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m str\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m str\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m str\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;117;113;94m// Using the primitive, because array.fs is not yet in scope. It's safe: both len and count are positive.\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mtarget\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mlen \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m count\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242msource\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m str.ToCharArray\u001b[0m\u001b[38;2;190;132;255m()\u001b[0m\n\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;117;113;94m// O(log(n)) performance loop:\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;117;113;94m// Copy first string, then keep copying what we already copied \u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;117;113;94m// (i.e., doubling it) until we reach or pass the halfway point\u001b[0m\n\u001b[38;2;248;248;242m                Array.Copy\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242msource\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m target\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m len\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114mlet mutable\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m len\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114mwhile\u001b[0m\u001b[38;2;248;248;242m i \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m target.Length \u001b[0m\u001b[38;2;249;38;114mdo\u001b[0m\n\u001b[38;2;248;248;242m                    Array.Copy\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mtarget\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m target\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m i\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m i\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;248;248;242m                    i \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m i \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\n\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;117;113;94m// finally, copy the remain half, or less-then half\u001b[0m\n\u001b[38;2;248;248;242m                Array.Copy\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mtarget\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m target\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m i\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m target.Length \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m i\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114mnew\u001b[0m\u001b[38;2;248;248;242m String\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mtarget\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;102;217;239m[<CompiledName\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mForAll\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;102;217;239m>]\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mforall\u001b[0m\u001b[3;38;2;253;151;31m predicate \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[3;38;2;253;151;31mstr\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;166;226;46mstring\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m String.IsNullOrEmpty str \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;249;38;114m rec\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mcheck\u001b[0m\u001b[3;38;2;253;151;31m i \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mi \u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m str.Length\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m||\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mpredicate str.\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;248;248;242m check \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242m                check \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;102;217;239m[<CompiledName\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mExists\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;102;217;239m>]\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mexists\u001b[0m\u001b[3;38;2;253;151;31m predicate \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[3;38;2;253;151;31mstr\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;166;226;46mstring\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m String.IsNullOrEmpty str \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;190;132;255mfalse\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;249;38;114m rec\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mcheck\u001b[0m\u001b[3;38;2;253;151;31m i \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mi \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m str.Length\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mpredicate str.\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m||\u001b[0m\u001b[38;2;248;248;242m check \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242m                check \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m  \u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Fish/test.fish",
    "content": "\u001b[38;2;255;255;255mset\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mfish_greeting\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\n\u001b[38;2;249;38;114mbegin\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mset\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m--\u001b[0m\u001b[3;38;2;253;151;31mlocal\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mAUTOJUMP_PATH\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mXDG_CONFIG_HOME\u001b[0m\u001b[38;2;255;255;255m/fish/functions/autojump.fish\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mtest\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31me\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mAUTOJUMP_PATH\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255msource\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mAUTOJUMP_PATH\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\u001b[38;2;249;38;114mend\u001b[0m\n\n\u001b[38;2;255;255;255mfish_vi_key_bindings\u001b[0m\n\n\n\u001b[38;2;249;38;114mfunction\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;166;226;46mfish_prompt\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mset_color\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mbrblack\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mecho\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mn\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m[\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255mdate\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m+%H:%M\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m] \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mset_color\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mblue\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mecho\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mn\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255mhostname\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mPWD\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m!=\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mHOME\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m]\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255mset_color\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mbrblack\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255mecho\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mn\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255mset_color\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255myellow\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255mecho\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mn\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255mbasename\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mPWD\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mset_color\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mgreen\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mprintf\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m%s \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m__fish_git_prompt\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mset_color\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mred\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mecho\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mn\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m| \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mset_color\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mnormal\u001b[0m\n\u001b[38;2;249;38;114mend\u001b[0m\n\n\u001b[38;2;249;38;114mfunction\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;166;226;46mfish_greeting\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mecho\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mecho\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31me\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255muname\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mro\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mawk\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m{print \" \u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;230;219;116me[1mOS: \u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;230;219;116me[0;32m\"$0\"\u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;230;219;116me[0m\"}\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mecho\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31me\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255muptime\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mp\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255msed\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116ms/^up //\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mawk\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m{print \" \u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;230;219;116me[1mUptime: \u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;230;219;116me[0;32m\"$0\"\u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;230;219;116me[0m\"}\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mecho\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31me\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255muname\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mn\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mawk\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m{print \" \u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;230;219;116me[1mHostname: \u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;230;219;116me[0;32m\"$0\"\u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;230;219;116me[0m\"}\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mecho\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31me\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;230;219;116me[1mDisk usage:\u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;230;219;116me[0m\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mecho\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mecho\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mne\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;190;132;255m\\\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255mdf\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31ml\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mh\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mgrep\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mE\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mdev/(xvda|sd|mapper)\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;190;132;255m\\\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255mawk\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m{printf \"\u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;230;219;116mt%s\u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;230;219;116mt%4s / %4s  %s\u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;230;219;116mn\\n\", $6, $3, $2, $5}\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;190;132;255m\\\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255msed\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31me\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116ms/^\\(.*\\([8][5-9]\\|[9][0-9]\\)%.*\\)$/\u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;230;219;116me[0;31m\\1\u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;230;219;116me[0m/\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31me\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116ms/^\\(.*\\([7][5-9]\\|[8][0-4]\\)%.*\\)$/\u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;230;219;116me[0;33m\\1\u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;230;219;116me[0m/\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;190;132;255m\\\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255mpaste\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31msd\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;190;132;255m\\\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mecho\u001b[0m\n\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mecho\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31me\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;230;219;116me[1mNetwork:\u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;230;219;116me[0m\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mecho\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m http://tdt.rocks/linux_network_interface_naming.html\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mecho\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mne\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;190;132;255m\\\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255mip\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255maddr\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mshow\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mup\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mscope\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mglobal\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;190;132;255m\\\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;255;255;255mgrep\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mE\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m: <|inet\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;190;132;255m\\\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;255;255;255msed\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;190;132;255m\\\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31me\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116ms/^[[:digit:]]\\+: //\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;190;132;255m\\\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31me\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116ms/: <.*//\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;190;132;255m\\\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31me\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116ms/.*inet[[:digit:]]* //\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;190;132;255m\\\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31me\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116ms/\\/.*//\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;190;132;255m\\\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;255;255;255mawk\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mBEGIN {i=\"\"} /\\.|:/ {print i\" \"$0\"\u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;230;219;116m\\n\"; next} // {i = $0}\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;190;132;255m\\\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;255;255;255msort\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;190;132;255m\\\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;255;255;255mcolumn\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mt\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mR1\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;190;132;255m\\\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m public addresses are underlined for visibility \\\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;255;255;255msed\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116ms/ \\([^ ]\\+\\)$/ \u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;230;219;116m\\e[4m\\1/\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;190;132;255m\\\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m private addresses are not \\\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;255;255;255msed\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116ms/m\\(\\(10\\.\\|172\\.\\(1[6-9]\\|2[0-9]\\|3[01]\\)\\|192\\.168\\.\\).*\\)/m\u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;230;219;116m\\e[24m\\1/\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;190;132;255m\\\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m unknown interfaces are cyan \\\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;255;255;255msed\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116ms/^\\( *[^ ]\\+\\)/\u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;230;219;116m\\e[36m\\1/\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;190;132;255m\\\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m ethernet interfaces are normal \\\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;255;255;255msed\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116ms/\\(\\(en\\|em\\|eth\\)[^ ]* .*\\)/\u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;230;219;116m\\e[39m\\1/\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;190;132;255m\\\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m wireless interfaces are purple \\\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;255;255;255msed\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116ms/\\(wl[^ ]* .*\\)/\u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;230;219;116m\\e[35m\\1/\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;190;132;255m\\\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m wwan interfaces are yellow \\\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;255;255;255msed\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116ms/\\(ww[^ ]* .*\\).*/\u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;230;219;116m\\e[33m\\1/\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;190;132;255m\\\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;255;255;255msed\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116ms/$/\u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;230;219;116m\\e[0m/\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;190;132;255m\\\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;255;255;255msed\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116ms/^/\\t/\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;190;132;255m\\\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mecho\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mset_color\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mnormal\u001b[0m\n\u001b[38;2;249;38;114mend\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Fortran (Fixed Form)/quicksort_real_F77.F",
    "content": "\u001b[38;2;117;113;94mC  Fortran 77 implementation of a quicksort algorithm for arrays with\u001b[0m\n\u001b[38;2;117;113;94mC  real entries.\u001b[0m\n\u001b[38;2;117;113;94mC  ----------\u001b[0m\n\u001b[38;2;117;113;94mC  June 2019 \u001b[0m\n\u001b[38;2;117;113;94mC  Jason Allen Anema, Ph.D.\u001b[0m\n\u001b[38;2;117;113;94mC  Division of Statistical Genomics\u001b[0m\n\u001b[38;2;117;113;94mC  Department of Genetics\u001b[0m\n\u001b[38;2;117;113;94mC  Washington University School of Medicine in St. Louis\u001b[0m\n\u001b[38;2;117;113;94mC \u001b[0m\n\u001b[38;2;117;113;94mC  This work is partially supported NIH grant AG023746\u001b[0m\n\u001b[38;2;117;113;94mC  ----------\u001b[0m\n\u001b[38;2;117;113;94mC  Insertion sort is used for short arrays, as quicksort is slower on\u001b[0m\n\u001b[38;2;117;113;94mC  these.\u001b[0m\n\u001b[38;2;117;113;94mC  \u001b[0m\n\u001b[38;2;117;113;94mC  Hoare partition scheme is used (sweeping left and right), as it does\u001b[0m\n\u001b[38;2;117;113;94mC  three times fewer swaps on average that the Lamuto partition scheme.\u001b[0m\n\u001b[38;2;117;113;94mC  In conjunction with this, tripartite partition is performed\u001b[0m\n\u001b[38;2;117;113;94mC  concurrently (solving the \"Dutch National Flag problem\"). This avoids \u001b[0m\n\u001b[38;2;117;113;94mC  horrible runtimes on highly repetitive arrays. For example, without  \u001b[0m\n\u001b[38;2;117;113;94mC  this, an array of random zeros and ones would have a runtime of\u001b[0m\n\u001b[38;2;117;113;94mC  O(N^2), but now has a runtime of O(N). The runtime for this algorthm\u001b[0m\n\u001b[38;2;117;113;94mC  on arrays with k highly repetitive entries is now O(kN).\u001b[0m\n\u001b[38;2;117;113;94mC    \u001b[0m\n\u001b[38;2;117;113;94mC  For medium length (sub)arrays, pivots are choosen using\u001b[0m\n\u001b[38;2;117;113;94mC  Median-of-Three, and those three items are sorted. For longer (sub)arrays\u001b[0m\n\u001b[38;2;117;113;94mC  the pseudomedian of nine (Median of medians). This avoids O(N^2) runtime on\u001b[0m\n\u001b[38;2;117;113;94mC  nonrandom inputs such as increasing and decreasing sequences. \u001b[0m\n\u001b[38;2;117;113;94mC\u001b[0m\n\u001b[38;2;117;113;94mC  See Louis Bentley, Jon & McIlroy, Douglas. (1993). Engineering a Sort Function.\u001b[0m\n\u001b[38;2;117;113;94mC  Softw., Pract. Exper.. 23. 1249-1265. 10.1002/spe.4380231105 for details. \u001b[0m\n\u001b[38;2;117;113;94mC\u001b[0m\n\u001b[38;2;117;113;94mC  The ordering on elements of the array are defined by a comparison\u001b[0m\n\u001b[38;2;117;113;94mC  function,compar, that is a user-supplied INTEGER*2 function of the form\u001b[0m\n\u001b[38;2;117;113;94mC           compar(a,b) which returns:\u001b[0m\n\u001b[38;2;117;113;94mC              -1 if a precedes b\u001b[0m\n\u001b[38;2;117;113;94mC              +1 if b precedes a\u001b[0m\n\u001b[38;2;117;113;94mC              0 is a and b are considered equivalent\u001b[0m\n\u001b[38;2;117;113;94mC  and thus defines a total ordering.\u001b[0m\n\u001b[38;2;117;113;94mC  \u001b[0m\n\u001b[38;2;117;113;94mC  If one would like to use the standard order on integers, the\u001b[0m\n\u001b[38;2;117;113;94mC  compar function could be written in a file \"compint.F\" as:\u001b[0m\n\u001b[38;2;117;113;94mC  ----------------------------------------------------------------\u001b[0m\n\u001b[38;2;117;113;94mC      INTEGER*2 FUNCTION compint(a,b)\u001b[0m\n\u001b[38;2;117;113;94mC      INTEGER a, b\u001b[0m\n\u001b[38;2;117;113;94mC      if(a.lt.b)then\u001b[0m\n\u001b[38;2;117;113;94mC         compint = -1\u001b[0m\n\u001b[38;2;117;113;94mC      elseif(a.gt.b)then\u001b[0m\n\u001b[38;2;117;113;94mC         compint = +1\u001b[0m\n\u001b[38;2;117;113;94mC      else\u001b[0m\n\u001b[38;2;117;113;94mC         compint = 0\u001b[0m\n\u001b[38;2;117;113;94mC      endif\u001b[0m\n\u001b[38;2;117;113;94mC      END\u001b[0m\n\u001b[38;2;117;113;94mC  ----------------------------------------------------------------\u001b[0m\n\u001b[38;2;117;113;94mC  Then in your program, call quicksort with:\u001b[0m\n\u001b[38;2;117;113;94mC      call quicksort_real_F77(array, n, compint)\u001b[0m\n\u001b[38;2;117;113;94mC\u001b[0m\n\u001b[38;2;117;113;94mC  The maximal length of an array in this implementation is (2^31-1),\u001b[0m\n\u001b[38;2;117;113;94mC  but can be changed to allow for length up to (2^63-1) by changing the\u001b[0m\n\u001b[38;2;117;113;94mC  data types of the relevant variables and constants. If you wish to \u001b[0m\n\u001b[38;2;117;113;94mC  sort longer arrays, of length N, you'll need to customize variable \u001b[0m\n\u001b[38;2;117;113;94mC  and constant types and set mstack to be at least (2*log_2(N)+2). \u001b[0m\n\u001b[38;2;117;113;94mC\u001b[0m\n\u001b[38;2;117;113;94mC  ----------------------------------------------------------------\u001b[0m\n\u001b[38;2;117;113;94mC  Copyright 2019 Jason Allen Anema\u001b[0m\n\u001b[38;2;117;113;94mC  \u001b[0m\n\u001b[38;2;117;113;94mC  Permission is hereby granted, free of charge, to any person obtaining\u001b[0m\n\u001b[38;2;117;113;94mC  a copy of this software and associated documentation files (the \"Software\"),\u001b[0m\n\u001b[38;2;117;113;94mC  to deal in the Software without restriction, including without limitation the\u001b[0m\n\u001b[38;2;117;113;94mC  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\u001b[0m\n\u001b[38;2;117;113;94mC  sell copies of the Software, and to permit persons to whom the Software is\u001b[0m\n\u001b[38;2;117;113;94mC  furnished to do so, subject to the following conditions:\u001b[0m\n\u001b[38;2;117;113;94mC\u001b[0m\n\u001b[38;2;117;113;94mC  The above copyright notice and this permission notice shall be included\u001b[0m\n\u001b[38;2;117;113;94mC  in all copies or substantial portions of the Software.\u001b[0m\n\u001b[38;2;117;113;94mC\u001b[0m\n\u001b[38;2;117;113;94mC  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\u001b[0m\n\u001b[38;2;117;113;94mC  OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\u001b[0m\n\u001b[38;2;117;113;94mC  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\u001b[0m\n\u001b[38;2;117;113;94mC  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\u001b[0m\n\u001b[38;2;117;113;94mC  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\u001b[0m\n\u001b[38;2;117;113;94mC  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\u001b[0m\n\u001b[38;2;117;113;94mC  IN THE SOFTWARE.\u001b[0m\n\u001b[38;2;117;113;94mC  -------------------------------------------------------------------\u001b[0m\n\u001b[38;2;117;113;94mC\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[3;38;2;102;217;239mSUBROUTINE\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mquicksort_real_F77\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31marray\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[3;38;2;253;151;31mn\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[3;38;2;253;151;31mcompar\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[3;38;2;102;217;239mINTEGER\u001b[0m\u001b[38;2;248;248;242m n, maxins, maxmid, mstack\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[3;38;2;102;217;239mREAL\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(n)\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mPARAMETER\u001b[0m\u001b[38;2;248;248;242m (maxins\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;248;248;242m, maxmid\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;190;132;255m40\u001b[0m\u001b[38;2;248;248;242m, mstack\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;190;132;255m128\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;117;113;94mC        maxins: maximal size of (sub)arrays to be sorted with\u001b[0m\n\u001b[38;2;117;113;94mC           insertion sort.\u001b[0m\n\u001b[38;2;117;113;94mC        maxmid: maximal size of (sub)arrays that will be quicksorted with\u001b[0m\n\u001b[38;2;117;113;94mC           Median-of-Three pivots.\u001b[0m\n\u001b[38;2;117;113;94mC        mstack: maximal size of required auxiliary storage (a stack), plus 2 \u001b[0m\n\u001b[38;2;117;113;94mC           extra spots, which tracks the starts and ends of yet unsorted \u001b[0m\n\u001b[38;2;117;113;94mC           subarrays. mstack = 130 is large enough to handle arrays up to \u001b[0m\n\u001b[38;2;117;113;94mC           length 2^63-1. This maximal size follows from\u001b[0m\n\u001b[38;2;117;113;94mC           processing smaller arrays first and pigeonhole principal.\u001b[0m\n\u001b[38;2;117;113;94mC \u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[3;38;2;102;217;239mINTEGER\u001b[0m\u001b[38;2;248;248;242m  a, d, i, j, k, s, lo, mid, hi, tstack, \u001b[0m\u001b[38;2;248;248;242mbstack\u001b[0m\u001b[38;2;248;248;242m(mstack)\u001b[0m\n\u001b[38;2;117;113;94mC        a, d, i, j, k, s: indices\u001b[0m\n\u001b[38;2;117;113;94mC        lo, mid, and hi: their natural location in a (sub)array\u001b[0m\n\u001b[38;2;117;113;94mC        tstack:  equal to twice the number of additional subarrays still \u001b[0m\n\u001b[38;2;117;113;94mC          needing to be sorted\u001b[0m\n\u001b[38;2;117;113;94mC        bstack: stack of the endpoints of unsorted subarrays\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[3;38;2;102;217;239mINTEGER\u001b[0m\u001b[38;2;248;248;242m pm1, pm2, pm3, pm4, pm5, pm6, pm7, pm8, pm9\u001b[0m\n\u001b[38;2;117;113;94mC        for pseudomedian of nine positions in (sub)arrays\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[3;38;2;102;217;239mREAL\u001b[0m\u001b[38;2;248;248;242m piv, temp\u001b[0m\n\u001b[38;2;117;113;94mC        piv is to store the pivot's value\u001b[0m\n\u001b[38;2;117;113;94mC    \u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mEXTERNAL\u001b[0m\u001b[38;2;248;248;242m compar\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[3;38;2;102;217;239mINTEGER\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m compar\u001b[0m\n\u001b[38;2;117;113;94mC        compar is a user-supplied INTEGER*2 function of the form\u001b[0m\n\u001b[38;2;117;113;94mC           compar(a,b) which returns:\u001b[0m\n\u001b[38;2;117;113;94mC              -1 if a precedes b\u001b[0m\n\u001b[38;2;117;113;94mC              +1 if b precedes a\u001b[0m\n\u001b[38;2;117;113;94mC              0 is a and b are considered equivalent\u001b[0m\n\u001b[38;2;117;113;94mC           and thus defines a total ordering. \u001b[0m\n\u001b[38;2;248;248;242m      tstack\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;248;248;242m      lo\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242m      hi\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242mn\u001b[0m\n\u001b[38;2;117;113;94mC\u001b[0m\n\u001b[38;2;117;113;94mC  Insertion sort subarrays of size maxins or less\u001b[0m\n\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m(hi\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242mlo\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;190;132;255m1.\u001b[0m\u001b[38;2;248;248;242mle.maxins)\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mdo\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m10\u001b[0m\u001b[38;2;248;248;242m, i\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242mlo \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, hi, 1\u001b[0m\n\u001b[38;2;248;248;242m            temp\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(i)\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mdo\u001b[0m\u001b[3;38;2;253;151;31m 11 \u001b[0m\u001b[38;2;248;248;242mj\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242mi \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, lo, \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mcompar\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(j), temp)\u001b[0m\u001b[38;2;249;38;114m.le.\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114mgoto\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31m2\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(j\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(j)\u001b[0m\n\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31m11\u001b[0m\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mcontinue\u001b[0m\n\u001b[38;2;248;248;242m            j\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242mlo \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m          \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(j\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242mtemp\u001b[0m\n\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31m10\u001b[0m\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mcontinue\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m(tstack\u001b[0m\u001b[38;2;249;38;114m.eq.\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\n\u001b[38;2;117;113;94mC  Pop the bstack, and start new partitioning\u001b[0m\n\u001b[38;2;248;248;242m         hi\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242mbstack\u001b[0m\u001b[38;2;248;248;242m(tstack)\u001b[0m\n\u001b[38;2;248;248;242m         lo\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242mbstack\u001b[0m\u001b[38;2;248;248;242m(tstack\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m         tstack\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242mtstack \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;117;113;94mC  Use Median-of-Three as choice of pivot (median of lo, middle, hi)\u001b[0m\n\u001b[38;2;117;113;94mC  and reorder those elements appropriately when subarrays are medium\u001b[0m\n\u001b[38;2;117;113;94mC  length (between maxins and maxmid)\u001b[0m\n\u001b[38;2;248;248;242m         mid\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242mlo \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m  (hi\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242mlo)\u001b[0m\u001b[38;2;249;38;114m/\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m(hi\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242mlo\u001b[0m\u001b[38;2;249;38;114m.le.\u001b[0m\u001b[38;2;248;248;242mmaxmid)\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mcompar\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(mid), \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(lo))\u001b[0m\u001b[38;2;249;38;114m.eq.\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m               temp\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(lo)\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(lo)\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(mid)\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(mid)\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242mtemp\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mendif\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mcompar\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(hi), \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(lo))\u001b[0m\u001b[38;2;249;38;114m.eq.\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m               temp\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(hi)\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(hi)\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(lo)\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(lo)\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242mtemp\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mendif\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mcompar\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(hi), \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(mid))\u001b[0m\u001b[38;2;249;38;114m.eq.\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m               temp\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(hi)\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(hi)\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(mid)\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(mid)\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242mtemp\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mendif\u001b[0m\n\u001b[38;2;117;113;94mC  Use pseudomedian of nine (Median of medians) as choice of pivot when \u001b[0m\n\u001b[38;2;117;113;94mC  subarrays are longer than maxmid. Note that doing it this way requires only 12\u001b[0m\n\u001b[38;2;117;113;94mC  comparisons for finding the pivot.\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114melseif\u001b[0m\u001b[38;2;248;248;242m(hi\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242mlo\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;190;132;255m1.\u001b[0m\u001b[38;2;248;248;242mgt.maxmid)\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m            pm1\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242mlo\u001b[0m\n\u001b[38;2;248;248;242m            pm5\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242mlo \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m (hi\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242mlo)\u001b[0m\u001b[38;2;249;38;114m/\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\n\u001b[38;2;248;248;242m            pm9\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242mhi\u001b[0m\n\u001b[38;2;248;248;242m            pm3\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242mlo \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m (pm5\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242mlo)\u001b[0m\u001b[38;2;249;38;114m/\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\n\u001b[38;2;248;248;242m            pm7\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242mpm5 \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m (hi\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242mpm5)\u001b[0m\u001b[38;2;249;38;114m/\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\n\u001b[38;2;248;248;242m            pm2\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242mlo \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m (pm3\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242mlo)\u001b[0m\u001b[38;2;249;38;114m/\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\n\u001b[38;2;248;248;242m            pm4\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242mpm3 \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m (pm5\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242mpm3)\u001b[0m\u001b[38;2;249;38;114m/\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\n\u001b[38;2;248;248;242m            pm6\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242mpm5 \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m (pm7\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242mpm5)\u001b[0m\u001b[38;2;249;38;114m/\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\n\u001b[38;2;248;248;242m            pm8\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242mpm7 \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m (pm9\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242mpm7)\u001b[0m\u001b[38;2;249;38;114m/\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\n\u001b[38;2;117;113;94mC  Median and sorting for pm1, pm2, pm3\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mcompar\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm2), \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm1))\u001b[0m\u001b[38;2;249;38;114m.eq.\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m               temp\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm1)\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm1)\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm2)\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm2)\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242mtemp\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mendif\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mcompar\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm3), \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm1))\u001b[0m\u001b[38;2;249;38;114m.eq.\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m               temp\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm3)\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm3)\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm1)\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm1)\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242mtemp\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mendif\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mcompar\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm3), \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm2))\u001b[0m\u001b[38;2;249;38;114m.eq.\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m               temp\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm3)\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm3)\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm2)\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm2)\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242mtemp\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mendif\u001b[0m\n\u001b[38;2;117;113;94mC  Median and sorting for pm4, pm5, pm6\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mcompar\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm5), \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm4))\u001b[0m\u001b[38;2;249;38;114m.eq.\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m               temp\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm4)\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm4)\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm5)\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm5)\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242mtemp\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mendif\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mcompar\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm6), \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm4))\u001b[0m\u001b[38;2;249;38;114m.eq.\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m               temp\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm6)\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm6)\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm4)\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm4)\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242mtemp\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mendif\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mcompar\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm6), \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm5))\u001b[0m\u001b[38;2;249;38;114m.eq.\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m               temp\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm6)\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm6)\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm5)\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm5)\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242mtemp\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mendif\u001b[0m\n\u001b[38;2;117;113;94mC  Median and sorting for pm7, pm8, pm9\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mcompar\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm8), \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm7))\u001b[0m\u001b[38;2;249;38;114m.eq.\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m               temp\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm7)\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm7)\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm8)\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm8)\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242mtemp\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mendif\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mcompar\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm9), \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm7))\u001b[0m\u001b[38;2;249;38;114m.eq.\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m               temp\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm9)\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm9)\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm7)\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm7)\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242mtemp\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mendif\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mcompar\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm9), \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm8))\u001b[0m\u001b[38;2;249;38;114m.eq.\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m               temp\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm9)\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm9)\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm8)\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm8)\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242mtemp\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mendif\u001b[0m\n\u001b[38;2;117;113;94mC Median of the medians (which are now pm2, pm5, pm8)\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mcompar\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm5), \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm2))\u001b[0m\u001b[38;2;249;38;114m.eq.\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m               temp\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm2)\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm2)\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm5)\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm5)\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242mtemp\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mendif\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mcompar\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm8), \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm2))\u001b[0m\u001b[38;2;249;38;114m.eq.\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m               temp\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm8)\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm8)\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm2)\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm2)\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242mtemp\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mendif\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mcompar\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm8), \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm5))\u001b[0m\u001b[38;2;249;38;114m.eq.\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m               temp\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm8)\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm8)\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm5)\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(pm5)\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242mtemp\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mendif\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mendif\u001b[0m\n\u001b[38;2;117;113;94mC  Pivot assigned for medium and long length subarrays.\u001b[0m\n\u001b[38;2;117;113;94mC  Note that pm5 = mid\u001b[0m\n\u001b[38;2;248;248;242m             piv\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(mid)\u001b[0m\n\u001b[38;2;117;113;94mC  Initialize pointers for partitioning\u001b[0m\n\u001b[38;2;248;248;242m            i\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242mlo\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\u001b[38;2;248;248;242m            j\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242mhi\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\u001b[38;2;117;113;94mC  Initialize counts of repeat values of pivot.\u001b[0m\n\u001b[38;2;248;248;242m            a\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;248;248;242m            d\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;117;113;94mC  Beginning of outer loop for placing pivot.\u001b[0m\n\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31m3\u001b[0m\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;249;38;114mcontinue\u001b[0m\n\u001b[38;2;117;113;94mC  Scan up to find an element > piv.\u001b[0m\n\u001b[38;2;248;248;242m            i\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242mi \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\u001b[38;2;117;113;94mC  Check if pointers crossed.\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m(j\u001b[0m\u001b[38;2;249;38;114m.lt.\u001b[0m\u001b[38;2;248;248;242mi)\u001b[0m\u001b[38;2;249;38;114mgoto\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31m5\u001b[0m\n\u001b[38;2;117;113;94mC  Check if i pointer hit hi boundary.\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m(i\u001b[0m\u001b[38;2;249;38;114m.eq.\u001b[0m\u001b[38;2;248;248;242mhi)\u001b[0m\u001b[38;2;249;38;114mgoto\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31m4\u001b[0m\n\u001b[38;2;117;113;94mC      \u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mcompar\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(i), piv)\u001b[0m\u001b[38;2;249;38;114m.eq.\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114mgoto\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31m3\u001b[0m\n\u001b[38;2;117;113;94mC Check for copies of pivot from scanning right. \u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mcompar\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(i), piv)\u001b[0m\u001b[38;2;249;38;114m.eq.\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m             \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(i)\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(lo\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242ma)\u001b[0m\n\u001b[38;2;248;248;242m             \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(lo\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242ma)\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242mpiv\u001b[0m\n\u001b[38;2;248;248;242m             a\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242ma \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\u001b[38;2;248;248;242m             \u001b[0m\u001b[38;2;249;38;114mgoto\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31m3\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mendif\u001b[0m\n\u001b[38;2;117;113;94mC  Beginning of innerloop for placing pivot.\u001b[0m\n\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31m4\u001b[0m\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;249;38;114mcontinue\u001b[0m\n\u001b[38;2;117;113;94mC  Scan down to find an element < piv.\u001b[0m\n\u001b[38;2;248;248;242m            j\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242mj \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\u001b[38;2;117;113;94mC  Check if pointers crossed.\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m(j\u001b[0m\u001b[38;2;249;38;114m.lt.\u001b[0m\u001b[38;2;248;248;242mi)\u001b[0m\u001b[38;2;249;38;114mgoto\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31m5\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mcompar\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(j), piv)\u001b[0m\u001b[38;2;249;38;114m.eq.\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114mgoto\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31m4\u001b[0m\n\u001b[38;2;117;113;94mC  Check for copies of pivot from scanning left. \u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mcompar\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(j), piv)\u001b[0m\u001b[38;2;249;38;114m.eq.\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(j)\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(hi\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242md)\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(hi\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242md)\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242mpiv\u001b[0m\n\u001b[38;2;248;248;242m            d\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242md \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mgoto\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31m4\u001b[0m\u001b[38;2;248;248;242m      \u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mendif\u001b[0m\n\u001b[38;2;117;113;94mC Check if pointers crossed.\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m(j\u001b[0m\u001b[38;2;249;38;114m.lt.\u001b[0m\u001b[38;2;248;248;242mi)\u001b[0m\u001b[38;2;249;38;114mgoto\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31m5\u001b[0m\n\u001b[38;2;117;113;94mC  Exchange elements\u001b[0m\n\u001b[38;2;248;248;242m         temp\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(i)\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(i)\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(j)\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(j)\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242mtemp\u001b[0m\n\u001b[38;2;117;113;94mC  End of outermost loop for placing pivot.\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mgoto\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31m3\u001b[0m\n\u001b[38;2;117;113;94mC  Insert all copies of pivot in appropriate place\u001b[0m\n\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;248;248;242m       s\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;102;217;239mMIN\u001b[0m\u001b[38;2;248;248;242m(a, j\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242mlo\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242ma\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mDO\u001b[0m\u001b[3;38;2;253;151;31m 6 \u001b[0m\u001b[38;2;248;248;242mk\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, s\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(lo\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242mk)\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(i\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242mk)\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(i\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242mk)\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242mpiv\u001b[0m\n\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31m6\u001b[0m\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;249;38;114mCONTINUE\u001b[0m\n\u001b[38;2;248;248;242m         s\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;102;217;239mMIN\u001b[0m\u001b[38;2;248;248;242m(d, hi\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242mj\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242md)\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mDO\u001b[0m\u001b[3;38;2;253;151;31m 7 \u001b[0m\u001b[38;2;248;248;242mk\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, s\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(hi\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242mk)\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(j\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242mk)\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242marray\u001b[0m\u001b[38;2;248;248;242m(j\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242mk)\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242mpiv\u001b[0m\n\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31m7\u001b[0m\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;249;38;114mCONTINUE\u001b[0m\n\u001b[38;2;117;113;94mC  Increase effective stack size\u001b[0m\n\u001b[38;2;248;248;242m         tstack\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242mtstack \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;117;113;94mC  Push pointers to larger subarray on stack for later processing,\u001b[0m\n\u001b[38;2;117;113;94mC  process smaller subarray immediately. \u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m(tstack\u001b[0m\u001b[38;2;249;38;114m.gt.\u001b[0m\u001b[38;2;248;248;242mmstack) \u001b[0m\u001b[38;2;249;38;114mTHEN\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;102;217;239mWRITE\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;230;219;116m'Stack size is too small in quicksort fortran code quicksort_real_F77.F'\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;102;217;239mWRITE\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;230;219;116m'Are you sure you want to sort an array this long?'\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;102;217;239mWRITE\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;230;219;116m'Your array has more than 2^63-1  entries?'\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;102;217;239mWRITE\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;230;219;116m'If so, set mstack parameter to be at least:'\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;102;217;239mWRITE\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;230;219;116m'2*ceiling(log_2(N))+2, for N = length of array,'\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;102;217;239mWRITE\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;230;219;116m'and recompile this subroutine.'\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;249;38;114mRETURN\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mendif\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m(hi\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242mj\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242md\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1.\u001b[0m\u001b[38;2;248;248;242mge.j\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242ma\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242mlo)\u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242mbstack\u001b[0m\u001b[38;2;248;248;242m(tstack)\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242mhi\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242mbstack\u001b[0m\u001b[38;2;248;248;242m(tstack\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;102;217;239mMIN\u001b[0m\u001b[38;2;248;248;242m(j\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242md\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, hi)\u001b[0m\n\u001b[38;2;248;248;242m            hi\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;102;217;239mMAX\u001b[0m\u001b[38;2;248;248;242m(j\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242ma,lo)\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242mbstack\u001b[0m\u001b[38;2;248;248;242m(tstack)\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;102;217;239mMAX\u001b[0m\u001b[38;2;248;248;242m(j\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242ma,lo)\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242mbstack\u001b[0m\u001b[38;2;248;248;242m(tstack\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242mlo\u001b[0m\n\u001b[38;2;248;248;242m            lo\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;102;217;239mMIN\u001b[0m\u001b[38;2;248;248;242m(j\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242md\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m,hi)\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;249;38;114mendif\u001b[0m\n\u001b[38;2;117;113;94mC\u001b[0m\n\u001b[38;2;117;113;94mC     end of outermost if statement \u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mendif\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mgoto\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31m1\u001b[0m\n\u001b[38;2;117;113;94mC     END of subroutine quicksort\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mEND\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Fortran (Modern)/test_savetxt.f90",
    "content": "\u001b[38;2;249;38;114mprogram\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtest_savetxt\u001b[0m\n\u001b[38;2;249;38;114muse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mstdlib_kinds\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;249;38;114monly\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mint32\u001b[0m\u001b[38;2;248;248;242m, sp, dp\u001b[0m\n\u001b[38;2;249;38;114muse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mstdlib_io\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;249;38;114monly\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m loadtxt, savetxt\u001b[0m\n\u001b[38;2;249;38;114muse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mstdlib_error\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;249;38;114monly\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m check\u001b[0m\n\u001b[38;2;249;38;114mimplicit\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mnone\u001b[0m\n\n\u001b[3;38;2;102;217;239mcharacter(:)\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;249;38;114mallocatable\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m::\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255moutpath\u001b[0m\n\n\u001b[38;2;248;248;242moutpath \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mget_outpath\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m//\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"/tmp.dat\"\u001b[0m\n\n\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mtest_iint32\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242moutpath\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mtest_rsp\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242moutpath\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mtest_rdp\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242moutpath\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mtest_csp\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242moutpath\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mtest_cdp\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242moutpath\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;249;38;114mcontains\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mget_outpath\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mresult\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31moutpath\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    integer \u001b[0m\u001b[38;2;249;38;114m::\u001b[0m\u001b[38;2;248;248;242m ierr\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mcharacter(256)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m::\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255margv\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mcharacter(:)\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;249;38;114mallocatable\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m::\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255moutpath\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mget_command_argument\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, argv, status\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242mierr\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mierr\u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m        outpath \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mtrim\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242margv\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;248;248;242m        outpath \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'.'\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mget_outpath\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114msubroutine\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtest_iint32\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31moutpath\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mcharacter(*)\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;249;38;114mintent\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255min\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m::\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255moutpath\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242minteger\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mint32\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m::\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242md\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242me\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242minteger\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mint32\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m, allocatable \u001b[0m\u001b[38;2;249;38;114m::\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242md2\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m :\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    d \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mreshape\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m6\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239msavetxt\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242moutpath, d\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mloadtxt\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242moutpath, d2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mcheck\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mall\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mshape\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242md2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mcheck\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mall\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mabs\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242md\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242md2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;248;248;242m    e \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mreshape\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m6\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239msavetxt\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242moutpath, e\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mloadtxt\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242moutpath, d2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mcheck\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mall\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mshape\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242md2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mcheck\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mall\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mabs\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242me\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242md2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114msubroutine\u001b[0m\n\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114msubroutine\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtest_rsp\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31moutpath\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mcharacter(*)\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;249;38;114mintent\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255min\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m::\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255moutpath\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239mreal\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242msp\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m::\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242md\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242me\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239mreal\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242msp\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m, allocatable \u001b[0m\u001b[38;2;249;38;114m::\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242md2\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m :\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    d \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mreshape\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m6\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239msavetxt\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242moutpath, d\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mloadtxt\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242moutpath, d2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mcheck\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mall\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mshape\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242md2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mcheck\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mall\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mabs\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242md\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242md2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mepsilon\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m1._sp\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;248;248;242m    e \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mreshape\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m6\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239msavetxt\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242moutpath, e\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mloadtxt\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242moutpath, d2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mcheck\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mall\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mshape\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242md2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mcheck\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mall\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mabs\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242me\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242md2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mepsilon\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m1._sp\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114msubroutine\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtest_rsp\u001b[0m\n\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114msubroutine\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtest_rdp\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31moutpath\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mcharacter(*)\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;249;38;114mintent\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255min\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m::\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255moutpath\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239mreal\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mdp\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m::\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242md\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242me\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239mreal\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mdp\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m, allocatable \u001b[0m\u001b[38;2;249;38;114m::\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242md2\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m :\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    d \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mreshape\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m6\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239msavetxt\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242moutpath, d\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mloadtxt\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242moutpath, d2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mcheck\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mall\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mshape\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242md2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mcheck\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mall\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mabs\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242md\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242md2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mepsilon\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m1._dp\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;248;248;242m    e \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mreshape\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m6\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239msavetxt\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242moutpath, e\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mloadtxt\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242moutpath, d2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mcheck\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mall\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mshape\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242md2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mcheck\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mall\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mabs\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242me\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242md2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mepsilon\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m1._dp\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114msubroutine\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtest_rdp\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114msubroutine\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtest_csp\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31moutpath\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mcharacter(*)\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;249;38;114mintent\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255min\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m::\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255moutpath\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mcomplex\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242msp\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m::\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242md\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242me\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mcomplex\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242msp\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m, allocatable \u001b[0m\u001b[38;2;249;38;114m::\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242md2\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m :\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    d \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mcmplx\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m,kind\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242msp\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mreshape\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m6\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239msavetxt\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242moutpath, d\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mloadtxt\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242moutpath, d2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mcheck\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mall\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mshape\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242md2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mcheck\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mall\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mabs\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242md\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242md2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mepsilon\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m1._sp\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;248;248;242m    e \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mcmplx\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m,kind\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242msp\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mreshape\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m6\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239msavetxt\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242moutpath, e\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mloadtxt\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242moutpath, d2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mcheck\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mall\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mshape\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242md2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mcheck\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mall\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mabs\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242me\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242md2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mepsilon\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m1._sp\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114msubroutine\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtest_csp\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114msubroutine\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtest_cdp\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31moutpath\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mcharacter(*)\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;249;38;114mintent\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255min\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m::\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255moutpath\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mcomplex\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mdp\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m::\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242md\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242me\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mcomplex\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mdp\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m, allocatable \u001b[0m\u001b[38;2;249;38;114m::\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242md2\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m :\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    d \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mcmplx\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m1._dp\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m1._dp\u001b[0m\u001b[38;2;248;248;242m,kind\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242mdp\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mreshape\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m6\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239msavetxt\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242moutpath, d\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mloadtxt\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242moutpath, d2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mcheck\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mall\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mshape\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242md2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mcheck\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mall\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mabs\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242md\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242md2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mepsilon\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m1._dp\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;248;248;242m    e \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mcmplx\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m,kind\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242mdp\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mreshape\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m6\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239msavetxt\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242moutpath, e\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mloadtxt\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242moutpath, d2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mcheck\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mall\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mshape\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242md2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mcheck\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mall\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mabs\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242me\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242md2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mepsilon\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m1._dp\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114msubroutine\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtest_cdp\u001b[0m\n\n\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mprogram\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtest_savetxt\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Fortran Namelist/test.namelist",
    "content": "\u001b[38;2;249;38;114m&\u001b[0m\u001b[3;38;2;102;217;239mTEST\u001b[0m\n\u001b[38;2;249;38;114mFOO\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;249;38;114mBAR\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;190;132;255m1.0\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;249;38;114mBAZ\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m'Hello, World!'\u001b[0m\n\u001b[38;2;249;38;114m/\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Fstab/fstab",
    "content": "\u001b[38;2;117;113;94m# Static information about the filesystems.\u001b[0m\n\u001b[38;2;117;113;94m# See fstab(5) for details.\u001b[0m\n\n\u001b[38;2;117;113;94m# <file system> <dir> <type> <options> <dump> <pass>\u001b[0m\n\n\u001b[38;2;248;248;242mUUID=\u001b[0m\u001b[38;2;249;38;114m9e6faddf-31ab-3f3e-9b50-2ad4fbc2ea8b\u001b[0m\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;230;219;116m/         \t\u001b[0m\u001b[3;38;2;253;151;31mext4      \t\u001b[0m\u001b[38;2;166;226;46mrw\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;166;226;46mrelatime\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;166;226;46mdata\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[3;38;2;253;151;31mordered\u001b[0m\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;190;132;255m0 \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;248;248;242mUUID=\u001b[0m\u001b[38;2;249;38;114m9e6faddf-31ab-3f3e-9b50-2ad4fbc2ea8b\u001b[0m\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;230;219;116m/         \t\u001b[0m\u001b[3;38;2;253;151;31mext4      \t\u001b[0m\u001b[38;2;166;226;46mrw\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;166;226;46mrelatime\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;166;226;46mdata\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[3;38;2;253;151;31mordered\u001b[0m\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;190;132;255m1 \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\u001b[38;2;248;248;242mUUID=\u001b[0m\u001b[38;2;249;38;114m62F8-2047\u001b[0m\u001b[38;2;248;248;242m      \t\u001b[0m\u001b[38;2;230;219;116m/boot     \t\u001b[0m\u001b[3;38;2;253;151;31mvfat      \t\u001b[0m\u001b[38;2;166;226;46mrw\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;166;226;46mrelatime\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;166;226;46mfmask\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[3;38;2;253;151;31m0022\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;166;226;46mdmask\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[3;38;2;253;151;31m0022\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;166;226;46mcodepage\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[3;38;2;253;151;31m437\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;166;226;46miocharset\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[3;38;2;253;151;31miso8859-1\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;166;226;46mshortname\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[3;38;2;253;151;31mmixed\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;166;226;46merrors\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[3;38;2;253;151;31mremount-ro\u001b[0m\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;190;132;255m2 \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/GDScript/test.gd",
    "content": "\u001b[38;2;249;38;114mextends\u001b[0m\u001b[3;4;38;2;166;226;46m Node\u001b[0m\n\n\u001b[3;38;2;102;217;239msignal\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mcustom_signal\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mparam\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[3;38;2;102;217;239mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mPI\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3.14159\u001b[0m\n\n\u001b[3;38;2;102;217;239mvar\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255muntyped_var\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mHello, World!\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[3;38;2;102;217;239mvar\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mtyped_int\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m42\u001b[0m\n\u001b[3;38;2;102;217;239mvar\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mtyped_float\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[3;38;2;102;217;239mfloat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3.14\u001b[0m\n\u001b[3;38;2;102;217;239mvar\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mtyped_string\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[3;38;2;102;217;239mString\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mGDScript Test\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[3;38;2;102;217;239mvar\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mtyped_array\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[3;38;2;102;217;239mArray\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m [\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[3;38;2;102;217;239mvar\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mtyped_dict\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[3;38;2;102;217;239mDictionary\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mkey\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mvalue\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mnumber\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m100\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;249;38;114monready\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mvar\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mlabel\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m $Label\u001b[0m\n\n\u001b[3;38;2;102;217;239mfunc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46msay_hello\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mvoid\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;248;248;242mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mHello from GDScript!\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[3;38;2;102;217;239mfunc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46madd_numbers\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31ma\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[3;38;2;253;151;31mint\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mb\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[3;38;2;253;151;31mint\u001b[0m\u001b[38;2;248;248;242m = 10\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m a \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m b\u001b[0m\n\n\u001b[3;38;2;102;217;239mfunc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mprocess_value\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mvalue\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[3;38;2;253;151;31mint\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mString\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m value \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mNegative\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;249;38;114melif\u001b[0m\u001b[38;2;248;248;242m value \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mZero\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mPositive\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\n\u001b[3;38;2;102;217;239mfunc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46msum_array\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31marr\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[3;38;2;253;151;31mArray\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[3;38;2;102;217;239mvar\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mtotal\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m num \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m arr:\u001b[0m\n\u001b[38;2;248;248;242m\t\ttotal \u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;248;248;242m num\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m total\u001b[0m\n\n\u001b[3;38;2;102;217;239mfunc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mdescribe_number\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mnum\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[3;38;2;253;151;31mint\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mString\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;249;38;114mmatch\u001b[0m\u001b[38;2;248;248;242m num:\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mZero\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mSmall number\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m\t\t_:\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mLarge number\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\n\u001b[3;38;2;102;217;239mfunc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mlong_description\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mString\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\"\"\u001b[0m\u001b[38;2;230;219;116mThis is a test file for GDScript.\u001b[0m\n\u001b[38;2;230;219;116mIt covers variables, functions, control structures, loops, signals, inner classes,\u001b[0m\n\u001b[38;2;230;219;116mmultiline strings, arrays, and dictionaries.\u001b[0m\u001b[38;2;230;219;116m\"\"\"\u001b[0m\n\n\u001b[3;38;2;102;217;239mclass\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mInnerExample\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[3;38;2;102;217;239mvar\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255minner_value\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m99\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[3;38;2;102;217;239mfunc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mshow_value\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mvoid\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;248;248;242mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mInner value is:\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m inner_value\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[3;38;2;102;217;239mfunc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtest_inner_class\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mvoid\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[3;38;2;102;217;239mvar\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255minner\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m InnerExample.\u001b[0m\u001b[38;2;248;248;242mnew\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m\tinner.\u001b[0m\u001b[38;2;248;248;242mshow_value\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[3;38;2;102;217;239mfunc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtrigger_signal\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mvoid\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;248;248;242memit_signal\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mcustom_signal\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mTestParam\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[3;38;2;102;217;239mfunc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m_ready\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mvoid\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;248;248;242msay_hello\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[3;38;2;102;217;239mvar\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mresult_add\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242madd_numbers\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;248;248;242mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mAdd result:\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m result_add\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;248;248;242mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mProcess value for -5:\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mprocess_value\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;248;248;242mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mSum of array [10, 20, 30]:\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242msum_array\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m10\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m20\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m30\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;248;248;242mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mDescription for 2:\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mdescribe_number\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;248;248;242mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mLong description:\\n\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mlong_description\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;248;248;242mtest_inner_class\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;248;248;242mtrigger_signal\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/GLSL/test.glsl",
    "content": "\u001b[38;2;249;38;114m#version\u001b[0m\u001b[38;2;190;132;255m 330 \u001b[0m\u001b[38;2;166;226;46mcore\u001b[0m\n\n\u001b[38;2;249;38;114m#ifdef\u001b[0m\u001b[38;2;190;132;255m TEST\u001b[0m\n\u001b[38;2;249;38;114mlayout\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mlocation \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mvec4\u001b[0m\u001b[38;2;248;248;242m vertex\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;249;38;114m#else\u001b[0m\n\u001b[38;2;249;38;114mlayout\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mlocation \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m6\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mvec4\u001b[0m\u001b[38;2;248;248;242m vertex\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;249;38;114m#endif\u001b[0m\n\n\u001b[38;2;249;38;114mout\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mvec2\u001b[0m\u001b[38;2;248;248;242m p_textureVertex\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;117;113;94m/*\u001b[0m\n\u001b[38;2;117;113;94m * This stores offsets\u001b[0m\n\u001b[38;2;117;113;94m \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[3;38;2;102;217;239mstruct\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mData\u001b[0m\n\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mdouble\u001b[0m\u001b[38;2;248;248;242m offsetX\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mdouble\u001b[0m\u001b[38;2;248;248;242m offsetY\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;249;38;114muniform\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mmat4\u001b[0m\u001b[38;2;248;248;242m projectionMatrix\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;249;38;114muniform\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mbool\u001b[0m\u001b[38;2;248;248;242m test\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;249;38;114muniform\u001b[0m\u001b[38;2;248;248;242m Data data\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[3;38;2;102;217;239mdouble\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mcalc\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mtest\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1.0\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0.0\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[3;38;2;102;217;239mvoid\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mmain\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m This GLSL code serves the purpose of bat syntax highlighting tests\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mdouble\u001b[0m\u001b[38;2;248;248;242m x \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m data\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;255;255;255moffsetX\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mcalc\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255mgl_Position\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m projectionMatrix \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mvec4\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mvertex\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;255;255;255mxy\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m data\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;255;255;255moffsetX\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m data\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;255;255;255moffsetY\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    p_textureVertex \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m vertex\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;255;255;255mzw\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Git Attributes/example.gitattributes",
    "content": "\u001b[38;2;117;113;94m#\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Comment\u001b[0m\n\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mattr\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;255;255;255mbinary\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;255;255;255mdiff\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;255;255;255mmerge\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;255;255;255mtext\u001b[0m\n\n\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m          \u001b[0m\u001b[38;2;255;255;255mtext\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116mauto\u001b[0m\n\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mc\u001b[0m\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255mdiff\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116mc\u001b[0m\n\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mcc\u001b[0m\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;255;255;255mtext\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdiff\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116mcpp\u001b[0m\n\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mo\u001b[0m\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255mbinary\u001b[0m\n\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mbat\u001b[0m\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255mtext\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255meol\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116mcrlf\u001b[0m\n\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mlock\u001b[0m\u001b[38;2;248;248;242m     \u001b[0m\u001b[38;2;255;255;255mtext\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;255;255;255mdiff\u001b[0m\n\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;166;226;46mignore\u001b[0m\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255mtext\u001b[0m\n\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mpatch\u001b[0m\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;255;255;255mtext\u001b[0m\n\n\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mgitattributes\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mlinguist-language\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116mgitattributes\u001b[0m\n\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mgitkeep\u001b[0m\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;255;255;255mexport-ignore\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Git Config/text.gitconfig",
    "content": "\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46malias\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mbr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mbranch\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mbranch\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mbranch -a\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mclone --recursive\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mci\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mcommit\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mcl\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mclone\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mco\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mcheckout\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mcontributors\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mshortlog --summary --numbered\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mlg\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mlog --graph --abbrev-commit --decorate --format=\u001b[0m\u001b[38;2;249;38;114mformat\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m%C\u001b[0m\u001b[38;2;230;219;116m(\u001b[0m\u001b[38;2;102;217;239mbold\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;102;217;239mblue\u001b[0m\u001b[38;2;230;219;116m)\u001b[0m\u001b[38;2;190;132;255m%h\u001b[0m\u001b[38;2;255;255;255m%C\u001b[0m\u001b[38;2;230;219;116m(\u001b[0m\u001b[38;2;102;217;239mreset\u001b[0m\u001b[38;2;230;219;116m)\u001b[0m\u001b[38;2;230;219;116m - \u001b[0m\u001b[38;2;255;255;255m%C\u001b[0m\u001b[38;2;230;219;116m(\u001b[0m\u001b[38;2;102;217;239mbold\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;102;217;239mgreen\u001b[0m\u001b[38;2;230;219;116m)\u001b[0m\u001b[38;2;230;219;116m(\u001b[0m\u001b[38;2;190;132;255m%ar\u001b[0m\u001b[38;2;230;219;116m)\u001b[0m\u001b[38;2;255;255;255m%C\u001b[0m\u001b[38;2;230;219;116m(\u001b[0m\u001b[38;2;102;217;239mreset\u001b[0m\u001b[38;2;230;219;116m)\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;255;255;255m%C\u001b[0m\u001b[38;2;230;219;116m(\u001b[0m\u001b[38;2;102;217;239mwhite\u001b[0m\u001b[38;2;230;219;116m)\u001b[0m\u001b[38;2;190;132;255m%s\u001b[0m\u001b[38;2;255;255;255m%C\u001b[0m\u001b[38;2;230;219;116m(\u001b[0m\u001b[38;2;102;217;239mreset\u001b[0m\u001b[38;2;230;219;116m)\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;255;255;255m%C\u001b[0m\u001b[38;2;230;219;116m(\u001b[0m\u001b[38;2;102;217;239mdim\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;102;217;239mwhite\u001b[0m\u001b[38;2;230;219;116m)\u001b[0m\u001b[38;2;230;219;116m- \u001b[0m\u001b[38;2;190;132;255m%an\u001b[0m\u001b[38;2;255;255;255m%C\u001b[0m\u001b[38;2;230;219;116m(\u001b[0m\u001b[38;2;102;217;239mreset\u001b[0m\u001b[38;2;230;219;116m)\u001b[0m\u001b[38;2;255;255;255m%C\u001b[0m\u001b[38;2;230;219;116m(\u001b[0m\u001b[38;2;102;217;239mbold\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;102;217;239myellow\u001b[0m\u001b[38;2;230;219;116m)\u001b[0m\u001b[38;2;190;132;255m%d\u001b[0m\u001b[38;2;255;255;255m%C\u001b[0m\u001b[38;2;230;219;116m(\u001b[0m\u001b[38;2;102;217;239mreset\u001b[0m\u001b[38;2;230;219;116m)\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mremote\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mremote -v\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mstatus\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mtag\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mtag -l\u001b[0m\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mapply\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mwhitespace\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mfix\u001b[0m\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mcolor\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mui\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mcolor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mbranch\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mcurrent\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239myellow\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mlocal\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239myellow\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mremote\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mgreen\u001b[0m\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mcolor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mdiff\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mcommit\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239myellow\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mbold\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mfrag\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mmagenta\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mbold\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mmeta\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239myellow\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mnew\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mgreen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mbold\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mold\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mred\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mbold\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mwhitespace\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mred\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mreverse\u001b[0m\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mcolor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mdiff-highlight\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mnewHighlight\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mgreen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mbold\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m22\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mnewNormal\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mgreen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mbold\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255moldHighlight\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mred\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mbold\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m52\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255moldNormal\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mred\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mbold\u001b[0m\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mcolor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mstatus\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255madded\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mgreen\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mchanged\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239myellow\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255muntracked\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mcyan\u001b[0m\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mcommit\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mgpgsign\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mcore\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255meditor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m/usr/bin/vim\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m global exclude\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mexcludesfile\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m/home/frank/.config/git/ignore\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mpager\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mdelta\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;117;113;94m;\u001b[0m\u001b[38;2;117;113;94m broken on old machines\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255muntrackedCache\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mcredential\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mhelper\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mstore\u001b[0m\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mdelta\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mfeatures\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mline-numbers decorations\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mmax-line-length\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m1024\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mwhitespace-error-style\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m22 reverse\u001b[0m\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mdelta\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mdecorations\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mcommit-decoration-style\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mbold yellow box ul\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mfile-decoration-style\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mnone\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mfile-style\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mbold yellow\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255msyntax-theme\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mgruvbox\u001b[0m\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mdiff\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255msubmodule\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mdiff\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255malgorithm\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mhistogram\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mrenames\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mcopies\u001b[0m\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mdifftool\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mprompt\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mfalse\u001b[0m\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mdifftool\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mwrapper\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mbinary\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mcmd\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mgit-difftool-wrapper \u001b[0m\u001b[38;2;190;132;255m\\\"\u001b[0m\u001b[38;2;230;219;116m$LOCAL\u001b[0m\u001b[38;2;190;132;255m\\\"\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;190;132;255m\\\"\u001b[0m\u001b[38;2;230;219;116m$REMOTE\u001b[0m\u001b[38;2;190;132;255m\\\"\u001b[0m\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mdiff\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mpdfconv\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mtextconv\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mpdftohtml -stdout\u001b[0m\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mfetch\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mnegotiationAlgorithm\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mskipping\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mparallel\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m0\u001b[0m\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mhelp\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mautocorrect\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mindex\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mversion\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m4\u001b[0m\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46minteractive\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mdiffFilter\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mdelta --color-only\u001b[0m\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mmerge\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mlog\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mprotocol\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mversion\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m2\u001b[0m\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mpull\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mrebase\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mpush\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mdefault\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mcurrent\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mrecurseSubmodules\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mon\u001b[0m\u001b[38;2;230;219;116m-demand\u001b[0m\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mrebase\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mautoStash\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mrerere\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mautoUpdate\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255menabled\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46msequence\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255meditor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116minteractive-rebase-tool\u001b[0m\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46msubmodule\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mfetchJobs\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m0\u001b[0m\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mtag\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mgpgSign\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255msort\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m-version:refname\u001b[0m\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46murl\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mgit@gist.github.com:\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255minsteadOf\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mgist:\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mpushInsteadOf\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mhttps://gist.github.com/\u001b[0m\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46murl\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mgit@github.com:\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255minsteadOf\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mgh:\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mpushInsteadOf\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mhttps://github.com/\u001b[0m\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46muser\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255memail\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mf.nord@example.com\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mname\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mFrank Nord\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255msigningkey\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mAAAAAAAAAAAAAAAA\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Git Ignore/test.gitignore",
    "content": "\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;166;226;46m~\u001b[0m\n\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46m#\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\n\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mDS_Store\u001b[0m\n\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mcproject\u001b[0m\n\u001b[38;2;166;226;46m.hg\u001b[0m\u001b[38;2;166;226;46m/\u001b[0m\n\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mhgignore\u001b[0m\n\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46midea\u001b[0m\n\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46miml\u001b[0m\n\u001b[38;2;166;226;46m__pycache__\u001b[0m\u001b[38;2;166;226;46m/\u001b[0m\n\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mpy\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;190;132;255mc\u001b[0m\u001b[38;2;190;132;255mo\u001b[0m\u001b[38;2;190;132;255md\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\n\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;255;255;255m$py\u001b[0m\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mclass\u001b[0m\n\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mproject\u001b[0m\n\u001b[38;2;166;226;46m.settings\u001b[0m\u001b[38;2;166;226;46m/\u001b[0m\n\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mvalgrindrc\u001b[0m\n\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mvscode\u001b[0m\n\u001b[38;2;166;226;46m.favorites\u001b[0m\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mjson\u001b[0m\n\u001b[38;2;166;226;46m/\u001b[0m\u001b[38;2;166;226;46mMakefile\u001b[0m\n\u001b[38;2;166;226;46m/\u001b[0m\u001b[38;2;166;226;46mbuild\u001b[0m\u001b[38;2;166;226;46m/\u001b[0m\n\u001b[38;2;166;226;46m/\u001b[0m\u001b[38;2;166;226;46mconfig\u001b[0m\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mtoml\u001b[0m\n\u001b[38;2;166;226;46m/\u001b[0m\u001b[38;2;166;226;46mdist\u001b[0m\u001b[38;2;166;226;46m/\u001b[0m\n\u001b[38;2;166;226;46m/\u001b[0m\u001b[38;2;166;226;46mdl\u001b[0m\u001b[38;2;166;226;46m/\u001b[0m\n\u001b[38;2;166;226;46m/\u001b[0m\u001b[38;2;166;226;46mdoc\u001b[0m\u001b[38;2;166;226;46m/\u001b[0m\n\u001b[38;2;166;226;46m/\u001b[0m\u001b[38;2;166;226;46minst\u001b[0m\u001b[38;2;166;226;46m/\u001b[0m\n\u001b[38;2;166;226;46m/\u001b[0m\u001b[38;2;166;226;46mllvm\u001b[0m\u001b[38;2;166;226;46m/\u001b[0m\n\u001b[38;2;166;226;46m/\u001b[0m\u001b[38;2;166;226;46mmingw-build\u001b[0m\u001b[38;2;166;226;46m/\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Created by default with `src/ci/docker/run.sh`:\u001b[0m\n\u001b[38;2;166;226;46m/\u001b[0m\u001b[38;2;166;226;46mobj\u001b[0m\u001b[38;2;166;226;46m/\u001b[0m\n\u001b[38;2;166;226;46m/\u001b[0m\u001b[38;2;166;226;46municode-downloads\u001b[0m\n\u001b[38;2;166;226;46m/\u001b[0m\u001b[38;2;166;226;46mtarget\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Generated by compiletest for incremental:\u001b[0m\n\u001b[38;2;166;226;46m/\u001b[0m\u001b[38;2;166;226;46mtmp\u001b[0m\u001b[38;2;166;226;46m/\u001b[0m\n\u001b[38;2;166;226;46mtags\u001b[0m\n\u001b[38;2;166;226;46mtags\u001b[0m\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\n\u001b[38;2;166;226;46mTAGS\u001b[0m\n\u001b[38;2;166;226;46mTAGS\u001b[0m\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\n\u001b[38;2;190;132;255m\\#\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\n\u001b[38;2;190;132;255m\\#\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m\\#\u001b[0m\n\u001b[38;2;166;226;46mconfig\u001b[0m\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mmk\u001b[0m\n\u001b[38;2;166;226;46mconfig\u001b[0m\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mstamp\u001b[0m\n\u001b[38;2;166;226;46mSession\u001b[0m\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mvim\u001b[0m\n\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mcargo\u001b[0m\n\u001b[38;2;249;38;114m!\u001b[0m\u001b[38;2;166;226;46m/\u001b[0m\u001b[38;2;166;226;46msrc\u001b[0m\u001b[38;2;166;226;46m/\u001b[0m\u001b[38;2;166;226;46mtest\u001b[0m\u001b[38;2;166;226;46m/\u001b[0m\u001b[38;2;166;226;46mrun-make\u001b[0m\u001b[38;2;166;226;46m/\u001b[0m\u001b[38;2;166;226;46mthumb-none-qemu\u001b[0m\u001b[38;2;166;226;46m/\u001b[0m\u001b[38;2;166;226;46mexample\u001b[0m\u001b[38;2;166;226;46m/\u001b[0m\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mcargo\u001b[0m\n\u001b[38;2;166;226;46mno_llvm_build\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Go/go.mod",
    "content": "\u001b[38;2;249;38;114mmodule\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mhugeparam\u001b[0m\n\n\u001b[38;2;249;38;114mgo\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m1.25.1\u001b[0m\n\n\u001b[38;2;249;38;114mrequire\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mgolang.org/x/tools\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mv0.37.0\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Go/go.sum",
    "content": "\u001b[38;2;248;248;242mgolang.org/x/mod\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mv0.28.0\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mh1\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255mgQBtGhjxykdjY9YhZpSlZIsbnaE2+PgjfLWUQTnoZ1U=\u001b[0m\n\u001b[38;2;248;248;242mgolang.org/x/mod\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mv0.28.0\u001b[0m\u001b[38;2;248;248;242m/\u001b[0m\u001b[38;2;248;248;242mgo.mod\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mh1\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255myfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI=\u001b[0m\n\u001b[38;2;248;248;242mgolang.org/x/sync\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mv0.17.0\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mh1\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255ml60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=\u001b[0m\n\u001b[38;2;248;248;242mgolang.org/x/sync\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mv0.17.0\u001b[0m\u001b[38;2;248;248;242m/\u001b[0m\u001b[38;2;248;248;242mgo.mod\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mh1\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=\u001b[0m\n\u001b[38;2;248;248;242mgolang.org/x/tools\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mv0.37.0\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mh1\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255mDVSRzp7FwePZW356yEAChSdNcQo6Nsp+fex1SUW09lE=\u001b[0m\n\u001b[38;2;248;248;242mgolang.org/x/tools\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mv0.37.0\u001b[0m\u001b[38;2;248;248;242m/\u001b[0m\u001b[38;2;248;248;242mgo.mod\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mh1\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255mMBN5QPQtLMHVdvsbtarmTNukZDdgwdwlO5qGacAzF0w=\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Go/main.go",
    "content": "\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m The hugeparam command identifies by-value parameters that are larger than n bytes.\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Example:\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m\t$ ./hugeparams encoding/xml\u001b[0m\n\u001b[38;2;249;38;114mpackage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mmain\u001b[0m\n\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mflag\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mfmt\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mgo/ast\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mgo/token\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mgo/types\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mlog\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mgolang.org/x/tools/go/loader\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m!+\u001b[0m\n\u001b[3;38;2;102;217;239mvar\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mbytesFlag\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mflag\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mInt\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mbytes\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m48\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mmaximum parameter size in bytes\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[3;38;2;102;217;239mvar\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242msizeof\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114m&\u001b[0m\u001b[38;2;255;255;255mtypes\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;255;255;255mStdSizes\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;190;132;255m8\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m8\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;255;255;255mSizeof\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m the sizeof function\u001b[0m\n\n\u001b[3;38;2;102;217;239mfunc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mPrintHugeParams\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mfset\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;255;255;255mtoken\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[3;38;2;102;217;239mFileSet\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31minfo\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;255;255;255mtypes\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[3;38;2;102;217;239mInfo\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mfiles\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;255;255;255mast\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[3;38;2;102;217;239mFile\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;248;248;242mcheckTuple\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mfunc\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mdescr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mstring\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mtuple\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;255;255;255mtypes\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[3;38;2;102;217;239mTuple\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mi\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mtuple\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mLen\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mi\u001b[0m\u001b[38;2;249;38;114m++\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;248;248;242mv\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mtuple\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mAt\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mi\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242msz\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242msizeof\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mv\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mType\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255msz\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mint64\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;255;255;255mbytesFlag\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\u001b[0m\u001b[38;2;255;255;255mfmt\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mPrintf\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;190;132;255m%s\u001b[0m\u001b[38;2;230;219;116m: \u001b[0m\u001b[38;2;190;132;255m%q\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;190;132;255m%s\u001b[0m\u001b[38;2;230;219;116m: \u001b[0m\u001b[38;2;190;132;255m%s\u001b[0m\u001b[38;2;230;219;116m = \u001b[0m\u001b[38;2;190;132;255m%d\u001b[0m\u001b[38;2;230;219;116m bytes\u001b[0m\u001b[38;2;190;132;255m\\n\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\t\u001b[0m\u001b[38;2;255;255;255mfset\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mPosition\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mv\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mPos\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\t\u001b[0m\u001b[38;2;255;255;255mv\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mName\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdescr\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mv\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mType\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255msz\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;248;248;242mcheckSig\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mfunc\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31msig\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;255;255;255mtypes\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[3;38;2;102;217;239mSignature\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;248;248;242mcheckTuple\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mparameter\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255msig\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mParams\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;248;248;242mcheckTuple\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mresult\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255msig\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mResults\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m_\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mfile\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mrange\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mfiles\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;255;255;255mast\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mInspect\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mfile\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mfunc\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mast\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[3;38;2;102;217;239mNode\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mbool\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;249;38;114mswitch\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mn\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mtype\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;255;255;255mast\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;255;255;255mFuncDecl\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\u001b[0m\u001b[38;2;248;248;242mcheckSig\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255minfo\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;255;255;255mDefs\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;255;255;255mn\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;255;255;255mName\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mType\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;255;255;255mtypes\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[3;38;2;102;217;239mSignature\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;255;255;255mast\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;255;255;255mFuncLit\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\u001b[0m\u001b[38;2;248;248;242mcheckSig\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255minfo\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;255;255;255mTypes\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;255;255;255mn\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;255;255;255mType\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;255;255;255mType\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;255;255;255mtypes\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[3;38;2;102;217;239mSignature\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m!-\u001b[0m\n\n\u001b[3;38;2;102;217;239mfunc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mmain\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mflag\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mParse\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m The loader loads a complete Go program from source code.\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[3;38;2;102;217;239mvar\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mconf\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mloader\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[3;38;2;102;217;239mConfig\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255m_\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242merr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mconf\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mFromArgs\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mflag\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mArgs\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mfalse\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255merr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m!=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mnil\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;255;255;255mlog\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mFatal\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255merr\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m command syntax error\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;248;248;242mlprog\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242merr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mconf\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mLoad\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255merr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m!=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mnil\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;255;255;255mlog\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mFatal\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255merr\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m load error\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m_\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242minfo\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mrange\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mlprog\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mInitialPackages\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;248;248;242mPrintHugeParams\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mlprog\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;255;255;255mFset\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m&\u001b[0m\u001b[38;2;255;255;255minfo\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;255;255;255mInfo\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255minfo\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;255;255;255mFiles\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;117;113;94m/*\u001b[0m\n\u001b[38;2;117;113;94m//!+output\u001b[0m\n\u001b[38;2;117;113;94m% ./hugeparam encoding/xml\u001b[0m\n\u001b[38;2;117;113;94m/go/src/encoding/xml/marshal.go:167:50: \"start\" parameter: encoding/xml.StartElement = 56 bytes\u001b[0m\n\u001b[38;2;117;113;94m/go/src/encoding/xml/marshal.go:734:97: \"\" result: encoding/xml.StartElement = 56 bytes\u001b[0m\n\u001b[38;2;117;113;94m/go/src/encoding/xml/marshal.go:761:51: \"start\" parameter: encoding/xml.StartElement = 56 bytes\u001b[0m\n\u001b[38;2;117;113;94m/go/src/encoding/xml/marshal.go:781:68: \"start\" parameter: encoding/xml.StartElement = 56 bytes\u001b[0m\n\u001b[38;2;117;113;94m/go/src/encoding/xml/xml.go:72:30: \"\" result: encoding/xml.StartElement = 56 bytes\u001b[0m\n\u001b[38;2;117;113;94m//!-output\u001b[0m\n\u001b[38;2;117;113;94m*/\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/GraphQL/test.graphql",
    "content": "\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Token::\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m   Punctuator\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m   Name\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m   IntValue\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m   FloatValue\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m   StringValue\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Punctuator:: one of\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m   !\t$\t(\t)\t...\t:\t=\t@\t[\t]\t{\t|\t}\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Name::\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m   /[_A-Za-z][_0-9A-Za-z]*/\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Document :\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m   Definition (list)\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Definition :\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m    ExecutableDefinition\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m    TypeSystemDefinition\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m    TypeSystemExtension\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m ExecutableDefinition :\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m   FragmentDefinition\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m   OperationDefintion\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m FragmentDefinition\u001b[0m\n\n\u001b[38;2;249;38;114mtype\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46msomeType\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mid\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mID\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;249;38;114mfragment\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46msubsriberFields\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mon\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242msomeType\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mid\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mname\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mfooInt\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mint\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1234\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mnegInt\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m-56789\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mzero\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mfooFloat\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;253;151;31mfloat\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1.1\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;253;151;31mfloatExp\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1.4e10\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;253;151;31mfloatExpSign1\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1.4e+10\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;253;151;31mfloatExpSign2\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1.5e-40\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;253;151;31mfloatExpBigE\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1.5E10\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mfooBool\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31my\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mfalse\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mfooString\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mstr\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mhello\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mstrUni\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;190;132;255m\\u2116\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mstrEscWs\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;190;132;255m\\t\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mfooLongStr\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;253;151;31mlStr\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\"\"\u001b[0m\n\u001b[38;2;230;219;116m    Hello Reader,\u001b[0m\n\u001b[38;2;230;219;116m        This is a long string block.\u001b[0m\n\u001b[38;2;230;219;116m    Best,\u001b[0m\n\u001b[38;2;230;219;116m    Writer\u001b[0m\n\u001b[38;2;230;219;116m    \u001b[0m\u001b[38;2;230;219;116m\"\"\"\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mfooNull\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mnullThing\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mnull\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mfooList\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mnumList\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mstrList\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mb\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mc\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mfooObj\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31msomeObj\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mstr\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mhi\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mint\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m OperationDefintion\u001b[0m\n\n\u001b[38;2;249;38;114mquery\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m_A1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mgetThings\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mstrArg\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mstring\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46mid\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m commas here are ignored but valid\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46mname\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;249;38;114mquery\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m_A2\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[3;38;2;253;151;31mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mString\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46msomeFn\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mepisode\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mx\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46mname\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;249;38;114mmutation\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mB1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mchangeThings\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mintArg\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m123\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46mparent\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;166;226;46mnestedField1\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;166;226;46mnestedField2\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;249;38;114msubscription\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mC1_Hello\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46msubsribePlease\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mfloatArg\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1.4\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46mid\u001b[0m\n\u001b[38;2;248;248;242m    ...\u001b[0m\u001b[38;2;166;226;46msubsriberFields\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m TypeSystemDefinition :\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m   SchemaDefinition\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m   TypeDefinition\u001b[0m\n\n\u001b[38;2;249;38;114mschema\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mquery\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mQuery\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mmutation\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mMutation\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;249;38;114mtype\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mQuery\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116m\"\"\"\u001b[0m\n\u001b[38;2;230;219;116m  Can provide documentation this way.\u001b[0m\n\u001b[38;2;230;219;116m  \u001b[0m\u001b[38;2;230;219;116m\"\"\"\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mscalars\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mScalars\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46msomeList\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mSomeLists\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mfooBar\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mFooBar\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;249;38;114minterface\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mThing\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mid\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mID\u001b[0m\u001b[38;2;249;38;114m!\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;249;38;114mtype\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mScalars\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mimplements\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mThing\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mid\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mID\u001b[0m\u001b[38;2;249;38;114m!\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mint\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mInt\u001b[0m\u001b[38;2;249;38;114m!\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mfloat\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mFloat\u001b[0m\u001b[38;2;249;38;114m!\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mstr\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mString\u001b[0m\u001b[38;2;249;38;114m!\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m@\u001b[0m\u001b[38;2;102;217;239mdeprecated\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mreason\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mNeed to test a directive\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mbool\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mBoolean\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mtype\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mStringTypes\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;249;38;114mtype\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mSomeLists\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mints\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[3;38;2;166;226;46mInt\u001b[0m\u001b[38;2;249;38;114m!\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;249;38;114m!\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;249;38;114mtype\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mFoo\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mfooVal\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mString\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;249;38;114mtype\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mBar\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mbarVal\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mString\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;249;38;114munion\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mFooBar\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mFoo\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mBar\u001b[0m\n\n\u001b[38;2;249;38;114menum\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mStringTypes\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mONE\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mTWO\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;249;38;114minput\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mXyz\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;253;151;31mid\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mID\u001b[0m\u001b[38;2;249;38;114m!\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;249;38;114mtype\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mMutation\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mcreateXyz\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31minput\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mxyz\u001b[0m\u001b[38;2;249;38;114m!\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mXyz\u001b[0m\u001b[38;2;249;38;114m!\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Graphviz DOT/test_digraph.dot",
    "content": "\u001b[3;38;2;102;217;239mdigraph\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;102;217;239mlabel\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[38;2;248;248;242mLabel \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mfont\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;166;226;46mcolor\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116mred\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mb\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mformating\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mb\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mfont\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mbr\u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\u001b[38;2;248;248;242m test \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mfont\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;166;226;46mpoint-size\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116m20\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mis\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mfont\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m done\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mbr\u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\u001b[38;2;248;248;242m here \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mi\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mnow.\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mi\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[3;38;2;102;217;239mnode\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;102;217;239mshape\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242mbox\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;102;217;239mrankdir\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242mLR\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;102;217;239mmargin\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m0.1\u001b[0m\n\u001b[38;2;248;248;242m\ta\u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;248;248;242mb\u001b[0m\n\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m http://www.graphviz.org/doc/info/colors.html\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m note: style=filled!\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[3;38;2;102;217;239mnode\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;102;217;239mshape\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242mbox colorscheme\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242mpaired12 \u001b[0m\u001b[38;2;102;217;239mstyle\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242mfilled\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;102;217;239mmargin\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m0.1\u001b[0m\n\u001b[38;2;248;248;242m\ta2\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;102;217;239mfillcolor\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m1\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\tb2\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;102;217;239mfillcolor\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m3\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\ta2\u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;248;248;242mb2\u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;248;248;242mx2\u001b[0m\n\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m http://www.graphviz.org/doc/info/colors.html\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m note: style=filled!\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[3;38;2;102;217;239mnode\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;102;217;239mshape\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242mbox colorscheme\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242mpaired12 \u001b[0m\u001b[38;2;102;217;239mstyle\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242mfilled\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;102;217;239mrankdir\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242mLR\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;102;217;239mmargin\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m0.1\u001b[0m\n\u001b[38;2;248;248;242m\tc1\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;102;217;239mfillcolor\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m1\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\tc2\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;102;217;239mfillcolor\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m2\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\tc3\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;102;217;239mfillcolor\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m3\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\tc4\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;102;217;239mfillcolor\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m4\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\tc5\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;102;217;239mfillcolor\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m5\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\tc6\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;102;217;239mfillcolor\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m6\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\tc7\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;102;217;239mfillcolor\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m7\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\tc8\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;102;217;239mfillcolor\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m8\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\tc9\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;102;217;239mfillcolor\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m9\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\tc10\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;102;217;239mfillcolor\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m10\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\tc11\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;102;217;239mfillcolor\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m11\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\tc12\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;102;217;239mfillcolor\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m12\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m\tc\u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[38;2;248;248;242mc1 c3 c5 c7 c9 c11\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\n\u001b[38;2;248;248;242m\tc1\u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;248;248;242mc2\u001b[0m\n\u001b[38;2;248;248;242m\tc3\u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;248;248;242mc4\u001b[0m\n\u001b[38;2;248;248;242m\tc5\u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;248;248;242mc6\u001b[0m\n\u001b[38;2;248;248;242m\tc7\u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;248;248;242mc8\u001b[0m\n\u001b[38;2;248;248;242m\tc9\u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;248;248;242mc10\u001b[0m\n\u001b[38;2;248;248;242m\tc11\u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;248;248;242mc12\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Graphviz DOT/test_graph.dot",
    "content": "\u001b[3;38;2;102;217;239mgraph\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;248;248;242m\ta\u001b[0m\u001b[38;2;248;248;242m--\u001b[0m\u001b[38;2;248;248;242mb\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Groff/rustdoc.1",
    "content": "\u001b[38;2;249;38;114m.\u001b[0m\u001b[3;38;2;102;217;239mTH\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mRUSTDOC\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m<INSERT DATE HERE>\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \"rustdoc <INSERT VERSION HERE>\" \"User Commands\"\u001b[0m\n\u001b[38;2;249;38;114m.\u001b[0m\u001b[3;38;2;102;217;239mSH\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mNAME\u001b[0m\n\u001b[38;2;248;248;242mrustdoc \u001b[0m\u001b[38;2;190;132;255m\\-\u001b[0m\u001b[38;2;248;248;242m generate documentation from Rust source code\u001b[0m\n\u001b[38;2;249;38;114m.\u001b[0m\u001b[3;38;2;102;217;239mSH\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mSYNOPSIS\u001b[0m\n\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;249;38;114mB\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[1;38;2;249;38;114mrustdoc\u001b[0m\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;249;38;114m\\fI\u001b[0m\u001b[3;38;2;228;46;112mOPTIONS\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\u001b[38;2;248;248;242m] \u001b[0m\u001b[38;2;249;38;114m\\fI\u001b[0m\u001b[3;38;2;228;46;112mINPUT\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\n\n\u001b[38;2;249;38;114m.\u001b[0m\u001b[3;38;2;102;217;239mSH\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mDESCRIPTION\u001b[0m\n\u001b[38;2;248;248;242mThis tool generates API reference documentation by extracting comments from\u001b[0m\n\u001b[38;2;248;248;242msource code written in the Rust language, available at\u001b[0m\n\u001b[38;2;248;248;242m<\u001b[0m\u001b[38;2;249;38;114m\\fB\u001b[0m\u001b[1;38;2;249;38;114mhttps://www.rust-lang.org\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\u001b[38;2;248;248;242m>. It accepts several input formats and\u001b[0m\n\u001b[38;2;248;248;242mprovides several output formats for the generated documentation.\u001b[0m\n\n\u001b[38;2;249;38;114m.\u001b[0m\u001b[3;38;2;102;217;239mSH\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mOPTIONS\u001b[0m\n\n\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;249;38;114mTP\u001b[0m\n\u001b[38;2;249;38;114m\\fB\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mr\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;249;38;114m\\fB\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114minput\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mformat\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m\\fI\u001b[0m\u001b[3;38;2;228;46;112mFORMAT\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\n\u001b[38;2;248;248;242mrust\u001b[0m\n\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;249;38;114mTP\u001b[0m\n\u001b[38;2;249;38;114m\\fB\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mw\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;249;38;114m\\fB\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114moutput\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mformat\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m\\fI\u001b[0m\u001b[3;38;2;228;46;112mFORMAT\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\n\u001b[38;2;248;248;242mhtml\u001b[0m\n\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;249;38;114mTP\u001b[0m\n\u001b[38;2;249;38;114m\\fB\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mo\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;249;38;114m\\fB\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114moutput\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m\\fI\u001b[0m\u001b[3;38;2;228;46;112mOUTPUT\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242mwhere to place the output (default: \u001b[0m\u001b[38;2;249;38;114m\\fI\u001b[0m\u001b[3;38;2;228;46;112mdoc/\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\u001b[38;2;248;248;242m for html)\u001b[0m\n\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;249;38;114mTP\u001b[0m\n\u001b[38;2;249;38;114m\\fB\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mpasses\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m\\fI\u001b[0m\u001b[3;38;2;228;46;112mLIST\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\n\u001b[38;2;248;248;242mspace\u001b[0m\u001b[38;2;190;132;255m\\[hy]\u001b[0m\u001b[38;2;248;248;242mseparated list of passes to run (default: '')\u001b[0m\n\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;249;38;114mTP\u001b[0m\n\u001b[38;2;249;38;114m\\fB\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mno\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mdefaults\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\n\u001b[38;2;248;248;242mdon't run the default passes\u001b[0m\n\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;249;38;114mTP\u001b[0m\n\u001b[38;2;249;38;114m\\fB\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mplugins\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m\\fI\u001b[0m\u001b[3;38;2;228;46;112mLIST\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\n\u001b[38;2;248;248;242mspace-separated list of plugins to run (default: '')\u001b[0m\n\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;249;38;114mTP\u001b[0m\n\u001b[38;2;249;38;114m\\fB\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mplugin\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mpath\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m\\fI\u001b[0m\u001b[3;38;2;228;46;112mDIR\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\n\u001b[38;2;248;248;242mdirectory to load plugins from (default: \u001b[0m\u001b[38;2;249;38;114m\\fI\u001b[0m\u001b[3;38;2;228;46;112m/tmp/rustdoc_ng/plugins\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;249;38;114mTP\u001b[0m\n\u001b[38;2;249;38;114m\\fB\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mtarget\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m\\fI\u001b[0m\u001b[3;38;2;228;46;112mTRIPLE\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\n\u001b[38;2;248;248;242mtarget triple to document\u001b[0m\n\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;249;38;114mTP\u001b[0m\n\u001b[38;2;249;38;114m\\fB\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mcrate\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mname\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m\\fI\u001b[0m\u001b[3;38;2;228;46;112mNAME\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\n\u001b[38;2;248;248;242mspecify the name of this crate\u001b[0m\n\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;249;38;114mTP\u001b[0m\n\u001b[38;2;249;38;114m\\fB\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mL\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;249;38;114m\\fB\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mlibrary\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mpath\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m\\fI\u001b[0m\u001b[3;38;2;228;46;112mDIR\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\n\u001b[38;2;248;248;242mdirectory to add to crate search path\u001b[0m\n\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;249;38;114mTP\u001b[0m\n\u001b[38;2;249;38;114m\\fB\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mcfg\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m\\fI\u001b[0m\u001b[3;38;2;228;46;112mSPEC\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\n\u001b[38;2;248;248;242mpass a \u001b[0m\u001b[38;2;249;38;114m\\fI\u001b[0m\u001b[3;38;2;190;132;255m\\-\u001b[0m\u001b[3;38;2;190;132;255m\\-\u001b[0m\u001b[3;38;2;228;46;112mcfg\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\u001b[38;2;248;248;242m to rustc\u001b[0m\n\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;249;38;114mTP\u001b[0m\n\u001b[38;2;249;38;114m\\fB\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mextern\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m\\fI\u001b[0m\u001b[3;38;2;228;46;112mVAL\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\n\u001b[38;2;248;248;242mpass an \u001b[0m\u001b[38;2;249;38;114m\\fI\u001b[0m\u001b[3;38;2;190;132;255m\\-\u001b[0m\u001b[3;38;2;190;132;255m\\-\u001b[0m\u001b[3;38;2;228;46;112mextern\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\u001b[38;2;248;248;242m to rustc\u001b[0m\n\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;249;38;114mTP\u001b[0m\n\u001b[38;2;249;38;114m\\fB\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mtest\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\n\u001b[38;2;248;248;242mrun code examples as tests\u001b[0m\n\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;249;38;114mTP\u001b[0m\n\u001b[38;2;249;38;114m\\fB\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mtest\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114margs\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m\\fI\u001b[0m\u001b[3;38;2;228;46;112mARGS\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\n\u001b[38;2;248;248;242mpass arguments to the test runner\u001b[0m\n\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;249;38;114mTP\u001b[0m\n\u001b[38;2;249;38;114m\\fB\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mhtml\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114min\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mheader\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m\\fI\u001b[0m\u001b[3;38;2;228;46;112mFILE\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\n\u001b[38;2;248;248;242mfile to add to <head>\u001b[0m\n\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;249;38;114mTP\u001b[0m\n\u001b[38;2;249;38;114m\\fB\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mhtml\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mbefore\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mcontent\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m\\fI\u001b[0m\u001b[3;38;2;228;46;112mFILES\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\n\u001b[38;2;248;248;242mfiles to include inline between <body> and the content of a rendered Markdown\u001b[0m\n\u001b[38;2;248;248;242mfile or generated documentation\u001b[0m\n\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;249;38;114mTP\u001b[0m\n\u001b[38;2;249;38;114m\\fB\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mmarkdown\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mbefore\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mcontent\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m\\fI\u001b[0m\u001b[3;38;2;228;46;112mFILES\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\n\u001b[38;2;248;248;242mfiles to include inline between <body> and the content of a rendered\u001b[0m\n\u001b[38;2;248;248;242mMarkdown file or generated documentation\u001b[0m\n\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;249;38;114mTP\u001b[0m\n\u001b[38;2;249;38;114m\\fB\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mhtml\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mafter\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mcontent\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m\\fI\u001b[0m\u001b[3;38;2;228;46;112mFILES\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\n\u001b[38;2;248;248;242mfiles to include inline between the content and </body> of a rendered\u001b[0m\n\u001b[38;2;248;248;242mMarkdown file or generated documentation\u001b[0m\n\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;249;38;114mTP\u001b[0m\n\u001b[38;2;249;38;114m\\fB\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mmarkdown\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mafter\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mcontent\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m\\fI\u001b[0m\u001b[3;38;2;228;46;112mFILES\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\n\u001b[38;2;248;248;242mfiles to include inline between the content and </body> of a rendered\u001b[0m\n\u001b[38;2;248;248;242mMarkdown file or generated documentation\u001b[0m\n\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;249;38;114mTP\u001b[0m\n\u001b[38;2;249;38;114m\\fB\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mmarkdown\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mcss\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m\\fI\u001b[0m\u001b[3;38;2;228;46;112mFILES\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\n\u001b[38;2;248;248;242mCSS files to include via <link> in a rendered Markdown file Markdown file or\u001b[0m\n\u001b[38;2;248;248;242mgenerated documentation\u001b[0m\n\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;249;38;114mTP\u001b[0m\n\u001b[38;2;249;38;114m\\fB\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mmarkdown\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mplayground\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114murl\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m\\fI\u001b[0m\u001b[3;38;2;228;46;112mURL\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\n\u001b[38;2;248;248;242mURL to send code snippets to\u001b[0m\n\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;249;38;114mTP\u001b[0m\n\u001b[38;2;249;38;114m\\fB\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mmarkdown\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mno\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mtoc\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\n\u001b[38;2;248;248;242mdon't include table of contents\u001b[0m\n\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;249;38;114mTP\u001b[0m\n\u001b[38;2;249;38;114m\\fB\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mh\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;249;38;114m\\fB\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mextend\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mcss\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\n\u001b[38;2;248;248;242mto redefine some css rules with a given file to generate doc with your own theme\u001b[0m\n\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;249;38;114mTP\u001b[0m\n\u001b[38;2;249;38;114m\\fB\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mV\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;249;38;114m\\fB\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mversion\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\n\u001b[38;2;248;248;242mPrint rustdoc's version\u001b[0m\n\n\u001b[38;2;249;38;114m.\u001b[0m\u001b[3;38;2;102;217;239mSH\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m\"OUTPUT FORMATS\"\u001b[0m\n\n\u001b[38;2;248;248;242mThe rustdoc tool can generate output in an HTML format.\u001b[0m\n\n\u001b[38;2;248;248;242mIf using an HTML format, then the specified output destination will be the root\u001b[0m\n\u001b[38;2;248;248;242mdirectory of an HTML structure for all the documentation.\u001b[0m\n\u001b[38;2;248;248;242mPages will be placed into this directory, and source files will also\u001b[0m\n\u001b[38;2;248;248;242mpossibly be rendered into it as well.\u001b[0m\n\n\u001b[38;2;249;38;114m.\u001b[0m\u001b[3;38;2;102;217;239mSH\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m\"EXAMPLES\"\u001b[0m\n\n\u001b[38;2;248;248;242mTo generate documentation for the source in the current directory:\u001b[0m\n\u001b[38;2;248;248;242m    $ rustdoc hello.rs\u001b[0m\n\n\u001b[38;2;248;248;242mList all available passes that rustdoc has, along with default passes:\u001b[0m\n\u001b[38;2;248;248;242m    $ rustdoc \u001b[0m\u001b[38;2;190;132;255m\\-\u001b[0m\u001b[38;2;190;132;255m\\-\u001b[0m\u001b[38;2;248;248;242mpasses list\u001b[0m\n\n\u001b[38;2;248;248;242mThe generated HTML can be viewed with any standard web browser.\u001b[0m\n\n\u001b[38;2;249;38;114m.\u001b[0m\u001b[3;38;2;102;217;239mSH\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m\"SEE ALSO\"\u001b[0m\n\n\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;249;38;114mBR\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[1;38;2;249;38;114mrustc\u001b[0m\u001b[38;2;248;248;242m (1)\u001b[0m\n\n\u001b[38;2;249;38;114m.\u001b[0m\u001b[3;38;2;102;217;239mSH\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m\"BUGS\"\u001b[0m\n\u001b[38;2;248;248;242mSee <\u001b[0m\u001b[38;2;249;38;114m\\fB\u001b[0m\u001b[1;38;2;249;38;114mhttps://github.com/rust\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mlang/rust/issues\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\u001b[38;2;248;248;242mfor issues.\u001b[0m\n\n\u001b[38;2;249;38;114m.\u001b[0m\u001b[3;38;2;102;217;239mSH\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m\"AUTHOR\"\u001b[0m\n\u001b[38;2;248;248;242mSee the version control history or <\u001b[0m\u001b[38;2;249;38;114m\\fB\u001b[0m\u001b[1;38;2;249;38;114mhttps://thanks.rust\u001b[0m\u001b[1;38;2;190;132;255m\\-\u001b[0m\u001b[1;38;2;249;38;114mlang.org\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\n\u001b[38;2;249;38;114m.\u001b[0m\u001b[3;38;2;102;217;239mSH\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m\"COPYRIGHT\"\u001b[0m\n\u001b[38;2;248;248;242mThis work is dual\u001b[0m\u001b[38;2;190;132;255m\\[hy]\u001b[0m\u001b[38;2;248;248;242mlicensed under Apache\u001b[0m\u001b[38;2;190;132;255m\\ \u001b[0m\u001b[38;2;248;248;242m2.0 and MIT terms.\u001b[0m\n\u001b[38;2;248;248;242mSee \u001b[0m\u001b[38;2;249;38;114m\\fI\u001b[0m\u001b[3;38;2;228;46;112mCOPYRIGHT\u001b[0m\u001b[38;2;249;38;114m\\fR\u001b[0m\u001b[38;2;248;248;242m file in the rust source distribution.\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Groovy/test.groovy",
    "content": "\u001b[38;2;248;248;242minterface \u001b[0m\u001b[3;38;2;102;217;239mDisplay\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mString\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242masText\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242mtrait \u001b[0m\u001b[3;38;2;102;217;239mEntity\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mInteger\u001b[0m\u001b[38;2;248;248;242m id\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[3;38;2;102;217;239mclass\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mProduct\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mimplements\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;4;38;2;166;226;46mEntity\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;4;38;2;166;226;46mDisplay\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mpublic\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mString\u001b[0m\u001b[38;2;248;248;242m name\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mpublic\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mBoolean\u001b[0m\u001b[38;2;248;248;242m available\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mpublic\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mFloat\u001b[0m\u001b[38;2;248;248;242m price\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mprivate\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mString\u001b[0m\u001b[38;2;248;248;242m key\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mprotected\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mString\u001b[0m\u001b[38;2;248;248;242m data\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m/**\u001b[0m\n\u001b[38;2;117;113;94m     \u001b[0m\u001b[38;2;117;113;94m*\u001b[0m\u001b[38;2;117;113;94m Creates a new product instance.\u001b[0m\n\u001b[38;2;117;113;94m     \u001b[0m\u001b[38;2;117;113;94m*\u001b[0m\u001b[38;2;117;113;94m \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114mparam\u001b[0m\u001b[38;2;117;113;94m \u001b[0m\u001b[3;38;2;253;151;31mid\u001b[0m\u001b[38;2;117;113;94m Product ID.\u001b[0m\n\u001b[38;2;117;113;94m     \u001b[0m\u001b[38;2;117;113;94m*\u001b[0m\u001b[38;2;117;113;94m \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114mparam\u001b[0m\u001b[38;2;117;113;94m \u001b[0m\u001b[3;38;2;253;151;31mname\u001b[0m\u001b[38;2;117;113;94m Product name.\u001b[0m\n\u001b[38;2;117;113;94m     \u001b[0m\u001b[38;2;117;113;94m*\u001b[0m\u001b[38;2;117;113;94m \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114mparam\u001b[0m\u001b[38;2;117;113;94m \u001b[0m\u001b[3;38;2;253;151;31mavailable\u001b[0m\u001b[38;2;117;113;94m Product availability.\u001b[0m\n\u001b[38;2;117;113;94m     \u001b[0m\u001b[38;2;117;113;94m*\u001b[0m\u001b[38;2;117;113;94m \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114mparam\u001b[0m\u001b[38;2;117;113;94m \u001b[0m\u001b[3;38;2;253;151;31mprice\u001b[0m\u001b[38;2;117;113;94m Product price.\u001b[0m\n\u001b[38;2;117;113;94m     \u001b[0m\u001b[38;2;117;113;94m*\u001b[0m\u001b[38;2;117;113;94m \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114mparam\u001b[0m\u001b[38;2;117;113;94m \u001b[0m\u001b[3;38;2;253;151;31mkey\u001b[0m\u001b[38;2;117;113;94m Product key.\u001b[0m\n\u001b[38;2;117;113;94m     \u001b[0m\u001b[38;2;117;113;94m*\u001b[0m\u001b[38;2;117;113;94m \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114mparam\u001b[0m\u001b[38;2;117;113;94m \u001b[0m\u001b[3;38;2;253;151;31mdata\u001b[0m\u001b[38;2;117;113;94m Product internal data.\u001b[0m\n\u001b[38;2;117;113;94m     \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46mProduct\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mid\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mname\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mavailable\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mprice\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mkey\u001b[0m\u001b[38;2;248;248;242m = \"\u001b[0m\u001b[3;38;2;253;151;31mkey\u001b[0m\u001b[38;2;248;248;242m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mdata\u001b[0m\u001b[38;2;248;248;242m = \"\u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[3;38;2;253;151;31mernal\u001b[0m\u001b[38;2;248;248;242m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255mthis\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mid \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m id\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255mthis\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mname \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m name\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255mthis\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mavailable \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m available\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255mthis\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mprice \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m price\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255mthis\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mkey \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m key\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255mthis\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mdata \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m data\u001b[0m\n\u001b[38;2;248;248;242m    }\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m/**\u001b[0m\u001b[38;2;117;113;94m@\u001b[0m\n\u001b[38;2;117;113;94m     * Returns product data as text.\u001b[0m\n\u001b[38;2;117;113;94m     \u001b[0m\u001b[38;2;117;113;94m*\u001b[0m\u001b[38;2;117;113;94m \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;117;113;94m Data string.\u001b[0m\n\u001b[38;2;117;113;94m     \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mString\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46masText\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\"\"\u001b[0m\u001b[38;2;230;219;116mID [\u001b[0m\u001b[38;2;230;219;116m${\u001b[0m\u001b[38;2;230;219;116mid\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;230;219;116m] Name [\u001b[0m\u001b[38;2;230;219;116m${\u001b[0m\u001b[38;2;230;219;116mname\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;230;219;116m] Available [\u001b[0m\u001b[38;2;230;219;116m${\u001b[0m\u001b[38;2;230;219;116mavailable\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;230;219;116m] Price [\u001b[0m\u001b[38;2;230;219;116m${\u001b[0m\u001b[38;2;230;219;116mprice\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;230;219;116m]\u001b[0m\u001b[38;2;230;219;116m\"\"\"\u001b[0m\n\u001b[38;2;248;248;242m    }\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;117;113;94m/*\u001b[0m\u001b[38;2;117;113;94m Creates a new product instance \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[3;38;2;102;217;239mdef\u001b[0m\u001b[38;2;248;248;242m product \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mnew\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mProduct\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mT-Shirt\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m15.00\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;102;217;239mprintln\u001b[0m\u001b[38;2;248;248;242m(product\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242masText\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;248;248;242mproduct\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mavailable \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mfalse\u001b[0m\n\u001b[38;2;248;248;242mproduct\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mprice \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0.0\u001b[0m\n\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Check values\u001b[0m\n\u001b[38;2;249;38;114massert\u001b[0m\u001b[38;2;248;248;242m product\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242masText\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mID [1] Name [T-Shirt] Available [false] Price [0.0]\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\n\u001b[3;38;2;102;217;239mdef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mfactorial\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mInteger\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mvalue\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m (value \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m value \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mfactorial\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mvalue \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;249;38;114massert\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mfactorial\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m120\u001b[0m\n\n\u001b[38;2;249;38;114mstatic\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mString\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mjoin\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mList<String>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mlist\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mString\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mseparator\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mString\u001b[0m\u001b[38;2;248;248;242m data \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\n\u001b[38;2;248;248;242m    list\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242meach \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m item \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\n\u001b[38;2;248;248;242m        data \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m item \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m separator\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m    data \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m data\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242msubstring\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m data\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mlength\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m data\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;249;38;114massert\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mjoin\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mg\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mv\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116my\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mg r o o v y\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/HTML/test.html",
    "content": "\u001b[38;2;255;255;255m<!\u001b[0m\u001b[38;2;249;38;114mDOCTYPE\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mhtml\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mSYSTEM\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mabout:legacy-compat\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mhtml\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;124;120;101m<!--\u001b[0m\u001b[38;2;124;120;101m Behold my erudite commentary \u001b[0m\u001b[38;2;124;120;101m-->\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mhead\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtitle\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mBat Syntax Test\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtitle\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mmeta\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;166;226;46mcharset\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mutf-8\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[3;38;2;249;38;114mscript\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[3;38;2;102;217;239mconst\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;255;255;255mx\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mworld\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;166;226;46m;\u001b[0m\n\u001b[38;2;166;226;46m      \u001b[0m\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;166;226;46mlogGreeting\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;166;226;46m{\u001b[0m\n\u001b[38;2;166;226;46m        \u001b[0m\u001b[3;38;2;166;226;46mconsole\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;102;217;239mlog\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;249;38;114m`\u001b[0m\u001b[38;2;230;219;116mH\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116m,\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;249;38;114m${\u001b[0m\u001b[38;2;255;255;255mx\u001b[0m\u001b[38;2;249;38;114m}\u001b[0m\u001b[38;2;249;38;114m`\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;166;226;46m;\u001b[0m\n\u001b[38;2;166;226;46m      \u001b[0m\u001b[38;2;166;226;46m}\u001b[0m\n\u001b[38;2;166;226;46m    \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[3;38;2;249;38;114mscript\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mhead\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mbody\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mdiv\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mh1\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mHere find some simple tags\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mh1\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mbr\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mp\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;166;226;46mcenter\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;166;226;46mstyle\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[3;38;2;102;217;239mcolor\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;102;217;239mrebeccapurple\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m        Lorem \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mstrong\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mipsum\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mstrong\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m dolor sit amet consectetur adipisicing\u001b[0m\n\u001b[38;2;248;248;242m        elit. A quo, autem quaerat explicabo impedit mollitia amet molestiae\u001b[0m\n\u001b[38;2;248;248;242m        nulla cum architecto ducimus itaque sit blanditiis quasi animi optio ab\u001b[0m\n\u001b[38;2;248;248;242m        facilis nihil?\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mp\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mp\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m        Here are some escaped characters: \u001b[0m\u001b[38;2;190;132;255m&\u001b[0m\u001b[38;2;190;132;255mamp\u001b[0m\u001b[38;2;190;132;255m;\u001b[0m\u001b[38;2;248;248;242m (ampersand), \u001b[0m\u001b[38;2;190;132;255m&\u001b[0m\u001b[38;2;190;132;255magrave\u001b[0m\u001b[38;2;190;132;255m;\u001b[0m\u001b[38;2;248;248;242m (a with grave), \u001b[0m\u001b[38;2;190;132;255m&#\u001b[0m\u001b[38;2;190;132;255m8470\u001b[0m\u001b[38;2;190;132;255m;\u001b[0m\u001b[38;2;248;248;242m (numero sign).\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mp\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mdiv\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mdiv\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mh1\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mThis is a form that demonstrates loose attribute formatting\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mh1\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mform\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46maction\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mPOST\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114minput\u001b[0m\n\u001b[38;2;248;248;242m          \u001b[0m\u001b[38;2;166;226;46mdisabled\u001b[0m\n\u001b[38;2;248;248;242m          \u001b[0m\u001b[38;2;166;226;46mtype\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mtext\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;248;248;242m          \u001b[0m\u001b[38;2;166;226;46mname\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mtext input\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;248;248;242m          \u001b[0m\u001b[38;2;166;226;46mid\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mspecificTextInput\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;248;248;242m          \u001b[0m\u001b[38;2;166;226;46mvalue\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116myes\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mform\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mdiv\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mdiv\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mh1\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mA table with normal closing tags\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mh1\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtable\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mcaption\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m          Pet Features\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mcaption\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mcolgroup\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m          \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mcol\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m          \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mcol\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m          \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mcol\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mcolgroup\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mthead\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m          \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mth\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mFeature\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mth\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mth\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mCat\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mth\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mth\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mDog\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mth\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m          \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mthead\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtbody\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m          \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mTail\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m✔\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m✔\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m          \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m          \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mEyes\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m✔\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m✔\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m          \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m          \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mEars\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m✔\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m✔\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m          \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m          \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mBarking\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m✔\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m          \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m          \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mLitter Box\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m✔\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m          \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtbody\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtable\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mdiv\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mdiv\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mh1\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mA table without closing tags\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mh1\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtable\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mcaption\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mPet Features\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mcolgroup\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mcol\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mcol\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mcol\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mthead\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m          \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mth\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mFeature    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mth\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mCat \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mth\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mDog\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtbody\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m          \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mTail       \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m✔   \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m✔\u001b[0m\n\u001b[38;2;248;248;242m          \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mEyes       \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m✔   \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m✔\u001b[0m\n\u001b[38;2;248;248;242m          \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mEars       \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m✔   \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m✔\u001b[0m\n\u001b[38;2;248;248;242m          \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mBarking    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m✔\u001b[0m\n\u001b[38;2;248;248;242m          \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mLitter Box \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m✔   \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtbody\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtable\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mdiv\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mdiv\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mh1\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mA math section with CDATA\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mh1\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mp\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mYou can add a string to a number, but this stringifies the number:\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mp\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mmath\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mms\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;255;255;255m<![\u001b[0m\u001b[38;2;249;38;114mCDATA\u001b[0m\u001b[38;2;255;255;255m[\u001b[0m\u001b[38;2;230;219;116ma / b\u001b[0m\u001b[38;2;255;255;255m]]>\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mms\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mmo\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m-\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mmo\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mmn\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m7\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mmn\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mmo\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mmo\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mms\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;255;255;255m<![\u001b[0m\u001b[38;2;249;38;114mCDATA\u001b[0m\u001b[38;2;255;255;255m[\u001b[0m\u001b[38;2;230;219;116ma / b - 7\u001b[0m\u001b[38;2;255;255;255m]]>\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mms\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mmath\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mdiv\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mbody\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mhtml\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Haskell/test.hs",
    "content": "\u001b[38;2;190;132;255m{-# \u001b[0m\u001b[38;2;249;38;114mLANGUAGE\u001b[0m\u001b[38;2;190;132;255m OverloadedStrings #-}\u001b[0m\n\n\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m simple parser for a Lisp-like syntax I wrote some time ago\u001b[0m\n\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mData.Void\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mVoid\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mData.Text\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mText\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mqualified\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mData.Text\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mas\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mT\u001b[0m\n\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mText.Megaparsec.Char\u001b[0m\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mText.Megaparsec.Error\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;166;226;46merrorBundlePretty\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mText.Megaparsec\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mhiding\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mState\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mqualified\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mText.Megaparsec.Char.Lexer\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mas\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mL\u001b[0m\n\n\u001b[38;2;249;38;114mdata\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mLispVal\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mSymbol\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mText\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mList\u001b[0m\u001b[38;2;248;248;242m [\u001b[0m\u001b[38;2;190;132;255mLispVal\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mNumber\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mInteger\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mString\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mText\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mLispTrue\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mLispFalse\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mNil\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mderiving\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[3;4;38;2;166;226;46mShow\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;4;38;2;166;226;46mEq\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;249;38;114mtype\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mParser\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mParsec\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mVoid\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mText\u001b[0m\n\n\u001b[38;2;166;226;46mreadStr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m::\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mText\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mEither\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mString\u001b[0m\u001b[38;2;248;248;242m [\u001b[0m\u001b[3;38;2;102;217;239mLispVal\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242mreadStr t \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;248;248;242m parse pLisp \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mf\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m t \u001b[0m\u001b[38;2;249;38;114mof\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;190;132;255mRight\u001b[0m\u001b[38;2;248;248;242m parsed \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mRight\u001b[0m\u001b[38;2;248;248;242m parsed\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;190;132;255mLeft\u001b[0m\u001b[38;2;248;248;242m err \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mLeft\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m$\u001b[0m\u001b[38;2;248;248;242m errorBundlePretty err\u001b[0m\n\u001b[38;2;190;132;255m{-# \u001b[0m\u001b[38;2;249;38;114mINLINABLE\u001b[0m\u001b[38;2;190;132;255m readStr #-}\u001b[0m\n\n\u001b[38;2;166;226;46msc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m::\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mParser\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239m()\u001b[0m\n\u001b[38;2;248;248;242msc \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mL\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mspace space1 (\u001b[0m\u001b[38;2;190;132;255mL\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mskipLineComment \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m;\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m) empty\u001b[0m\n\u001b[38;2;190;132;255m{-# \u001b[0m\u001b[38;2;249;38;114mINLINABLE\u001b[0m\u001b[38;2;190;132;255m sc #-}\u001b[0m\n\n\u001b[38;2;166;226;46mlexeme\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m::\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mParser\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255ma\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mParser\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255ma\u001b[0m\n\u001b[38;2;248;248;242mlexeme \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mL\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mlexeme sc\u001b[0m\n\u001b[38;2;190;132;255m{-# \u001b[0m\u001b[38;2;249;38;114mINLINE\u001b[0m\u001b[38;2;190;132;255m lexeme #-}\u001b[0m\n\n\u001b[38;2;166;226;46msymbol\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m::\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mText\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mParser\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mText\u001b[0m\n\u001b[38;2;248;248;242msymbol \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mL\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242msymbol sc\u001b[0m\n\u001b[38;2;190;132;255m{-# \u001b[0m\u001b[38;2;249;38;114mINLINE\u001b[0m\u001b[38;2;190;132;255m symbol #-}\u001b[0m\n\n\u001b[38;2;166;226;46msymbol'\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m::\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mText\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mParser\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mText\u001b[0m\n\u001b[38;2;248;248;242msymbol' \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mL\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242msymbol' sc\u001b[0m\n\u001b[38;2;190;132;255m{-# \u001b[0m\u001b[38;2;249;38;114mINLINE\u001b[0m\u001b[38;2;190;132;255m symbol' #-}\u001b[0m\n\n\u001b[38;2;166;226;46mpNil\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m::\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mParser\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mLispVal\u001b[0m\n\u001b[38;2;248;248;242mpNil \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m symbol' \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mnil\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m>>\u001b[0m\u001b[38;2;248;248;242m return \u001b[0m\u001b[38;2;190;132;255mNil\u001b[0m\n\u001b[38;2;190;132;255m{-# \u001b[0m\u001b[38;2;249;38;114mINLINE\u001b[0m\u001b[38;2;190;132;255m pNil #-}\u001b[0m\n\n\u001b[38;2;166;226;46minteger\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m::\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mParser\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mInteger\u001b[0m\n\u001b[38;2;248;248;242minteger \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m lexeme \u001b[0m\u001b[38;2;190;132;255mL\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mdecimal\u001b[0m\n\u001b[38;2;190;132;255m{-# \u001b[0m\u001b[38;2;249;38;114mINLINE\u001b[0m\u001b[38;2;190;132;255m integer #-}\u001b[0m\n\n\u001b[38;2;166;226;46mlispSymbols\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m::\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mParser\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mChar\u001b[0m\n\u001b[38;2;248;248;242mlispSymbols \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m oneOf (\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m#$%&|*+-/:<=>?@\u001b[0m\u001b[38;2;190;132;255m^_\u001b[0m\u001b[38;2;230;219;116m~\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m::\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mString\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;190;132;255m{-# \u001b[0m\u001b[38;2;249;38;114mINLINE\u001b[0m\u001b[38;2;190;132;255m lispSymbols #-}\u001b[0m\n\n\u001b[38;2;166;226;46mpLispVal\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m::\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mParser\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mLispVal\u001b[0m\n\u001b[38;2;248;248;242mpLispVal \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m choice [pList\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m pNumber\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m pSymbol\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m pNil\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m pString]\u001b[0m\n\u001b[38;2;190;132;255m{-# \u001b[0m\u001b[38;2;249;38;114mINLINE\u001b[0m\u001b[38;2;190;132;255m pLispVal #-}\u001b[0m\n\n\u001b[38;2;166;226;46mpSymbol\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m::\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mParser\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mLispVal\u001b[0m\n\u001b[38;2;248;248;242mpSymbol \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;190;132;255mSymbol\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mT\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mpack \u001b[0m\u001b[38;2;249;38;114m<$>\u001b[0m\u001b[38;2;248;248;242m lexeme (some (letterChar \u001b[0m\u001b[38;2;249;38;114m<|>\u001b[0m\u001b[38;2;248;248;242m lispSymbols)))\u001b[0m\n\u001b[38;2;190;132;255m{-# \u001b[0m\u001b[38;2;249;38;114mINLINABLE\u001b[0m\u001b[38;2;190;132;255m pSymbol #-}\u001b[0m\n\n\u001b[38;2;166;226;46mpList\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m::\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mParser\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mLispVal\u001b[0m\n\u001b[38;2;248;248;242mpList \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mList\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<$>\u001b[0m\u001b[38;2;248;248;242m between (symbol \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m) (symbol \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m)\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m) (many pLispVal)\u001b[0m\n\u001b[38;2;190;132;255m{-# \u001b[0m\u001b[38;2;249;38;114mINLINABLE\u001b[0m\u001b[38;2;190;132;255m pList #-}\u001b[0m\n\n\u001b[38;2;166;226;46mpLisp\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m::\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mParser\u001b[0m\u001b[38;2;248;248;242m [\u001b[0m\u001b[3;38;2;102;217;239mLispVal\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242mpLisp \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m some pLispVal\u001b[0m\n\u001b[38;2;190;132;255m{-# \u001b[0m\u001b[38;2;249;38;114mINLINE\u001b[0m\u001b[38;2;190;132;255m pLisp #-}\u001b[0m\n\n\u001b[38;2;166;226;46mpNumber\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m::\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mParser\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mLispVal\u001b[0m\n\u001b[38;2;248;248;242mpNumber \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mNumber\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<$>\u001b[0m\u001b[38;2;248;248;242m integer\u001b[0m\n\u001b[38;2;190;132;255m{-# \u001b[0m\u001b[38;2;249;38;114mINLINE\u001b[0m\u001b[38;2;190;132;255m pNumber #-}\u001b[0m\n\n\u001b[38;2;166;226;46mpString\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m::\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mParser\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mLispVal\u001b[0m\n\u001b[38;2;248;248;242mpString \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mdo\u001b[0m\n\u001b[38;2;248;248;242m  str \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m char \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;190;132;255m\\\"\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m *\u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;248;248;242m manyTill \u001b[0m\u001b[38;2;190;132;255mL\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mcharLiteral (char \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;190;132;255m\\\"\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  return \u001b[0m\u001b[38;2;249;38;114m$\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mString\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;190;132;255mT\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mpack str)\u001b[0m\n\u001b[38;2;190;132;255m{-# \u001b[0m\u001b[38;2;249;38;114mINLINABLE\u001b[0m\u001b[38;2;190;132;255m pString #-}\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Hosts/hosts",
    "content": "\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94mthis is a comment in the hosts file\u001b[0m\n\u001b[38;2;190;132;255m127.0.0.1\u001b[0m\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;230;219;116mlocalhost\u001b[0m\n\n\u001b[38;2;102;217;239m192.168.0.1\u001b[0m\u001b[38;2;248;248;242m          \u001b[0m\u001b[38;2;230;219;116msample\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116mtest\u001b[0m\u001b[38;2;248;248;242m             \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94ma comment\u001b[0m\n\u001b[38;2;190;132;255m192.160.0.200\u001b[0m\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;230;219;116mtry\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116msample\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116mtest\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mtry\u001b[0m\u001b[38;2;248;248;242m     \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94manother comment\u001b[0m\n\u001b[38;2;190;132;255m216.58.223.238\u001b[0m\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;230;219;116mgoogle\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116mcom\u001b[0m\n\n\u001b[38;2;190;132;255m::1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mlocalhost\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116mtry\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mip6\u001b[0m\u001b[38;2;230;219;116m-\u001b[0m\u001b[38;2;230;219;116mlocalhost\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/INI/test.inf",
    "content": "\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46msection\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;249;38;114mkey\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116mvalue\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m This file is just for testing that the INI syntax is registered to handle\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m the .inf file extension, it is not testing the syntax highlighting capabilities\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m of the INI syntax itself\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/INI/test.ini",
    "content": "\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46msection\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;249;38;114mkey\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116mvalue\u001b[0m\n\u001b[38;2;249;38;114mnumeric\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m42\u001b[0m\n\u001b[38;2;249;38;114mquotes\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m\"\u001b[0m\u001b[38;2;230;219;116mthis value is quoted\u001b[0m\u001b[38;2;248;248;242m\"\u001b[0m\n\u001b[38;2;249;38;114mquotes2\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m\"\u001b[0m\u001b[38;2;230;219;116mthis is not a comment ;foo\u001b[0m\u001b[38;2;248;248;242m\"\u001b[0m\n\u001b[38;2;249;38;114mdifferent_quotes\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m'\u001b[0m\u001b[38;2;230;219;116mthese are other characters\u001b[0m\u001b[38;2;248;248;242m'\u001b[0m\n\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46manother one\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;249;38;114mfirst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mvalue\u001b[0m\n\u001b[38;2;117;113;94m;\u001b[0m\u001b[38;2;117;113;94m comment on own line\u001b[0m\n\u001b[38;2;117;113;94m;\u001b[0m\u001b[38;2;117;113;94manother one\u001b[0m\n\u001b[38;2;249;38;114msecond\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116mvalue\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m; comment at the end of a line\u001b[0m\n\u001b[38;2;249;38;114mthird\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mvalue\u001b[0m\u001b[38;2;117;113;94m;another one\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m is this a comment? maybe.\u001b[0m\n\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46msection.with.dots\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46msection\\with\\backspaces\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46msection;with;semicola\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Idris2/test.idr",
    "content": "\u001b[38;2;117;113;94m-- some code in Idris\u001b[0m\n\u001b[38;2;249;38;114mmodule\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mXX.X'''\u001b[0m\n\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mData.Nat\u001b[0m\n\n\u001b[38;2;249;38;114mdata\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mX\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mA\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mB\u001b[0m\n\n\u001b[38;2;249;38;114mnamespace\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mX\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m||| Documentation\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mrecord\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mY\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mwhere\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mnoHints\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mconstructor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mMkY'\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46mfield1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mNat\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;249;38;114mauto\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mx\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mNat\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;249;38;114mnamespace\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mX'\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mparameters\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mx\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mA\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[3;38;2;102;217;239mMaybe\u001b[0m\u001b[38;2;248;248;242m b\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46mx\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mNat\u001b[0m\n\u001b[38;2;249;38;114m}\u001b[0m\n\n\u001b[38;2;166;226;46mu\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m()\u001b[0m\n\u001b[38;2;248;248;242mu \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m()\u001b[0m\n\n\u001b[38;2;166;226;46mk\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;166;226;46mw\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;166;226;46mu\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mChar\u001b[0m\n\u001b[38;2;248;248;242mk \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m'\u001b[0m\u001b[38;2;190;132;255m\\NUL\u001b[0m\u001b[38;2;190;132;255m'\u001b[0m\n\u001b[38;2;248;248;242mw \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m'\u001b[0m\u001b[38;2;190;132;255mw\u001b[0m\u001b[38;2;190;132;255m'\u001b[0m\n\n\u001b[38;2;248;248;242mx \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116msdf\u001b[0m\u001b[38;2;248;248;242m\\{\u001b[0m\u001b[38;2;248;248;242md\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0xFF\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0o77\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0b10_1\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m100_100\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\n\n\u001b[38;2;166;226;46mf\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mInt\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mInt\u001b[0m\n\u001b[38;2;248;248;242mf \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m x \u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\u001b[38;2;248;248;242m x \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m()\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mSS\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m`\u001b[0m\u001b[38;2;249;38;114melem\u001b[0m\u001b[38;2;249;38;114m`\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mS\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m$\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mdo\u001b[0m\n\u001b[38;2;248;248;242m  x \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m a \u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m ukuk \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m akak\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mrewrite\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m$\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mWow\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mWow\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mWow\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mWow.\u001b[0m\u001b[3;38;2;102;217;239mWow\u001b[0m\u001b[38;2;248;248;242m b \u001b[0m\u001b[3;38;2;102;217;239mW\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[3;38;2;102;217;239mW\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;248;248;242m  pure \u001b[0m\u001b[38;2;249;38;114m$\u001b[0m\u001b[38;2;248;248;242m f \u001b[0m\u001b[3;38;2;102;217;239mA\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mB\u001b[0m\u001b[38;2;248;248;242m c \u001b[0m\u001b[3;38;2;102;217;239mD\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[3;38;2;102;217;239mEE\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mE\u001b[0m\n\n\u001b[38;2;166;226;46m(&&&)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mNat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mNat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mNat\u001b[0m\n\u001b[38;2;248;248;242mz \u001b[0m\u001b[38;2;249;38;114m&&&\u001b[0m\u001b[38;2;248;248;242m y \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m d \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m?foo\u001b[0m\n\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242m&&&\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m x y \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m?asfda\u001b[0m\n\n\u001b[38;2;249;38;114mpublic\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mexport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mcovering\u001b[0m\n\u001b[38;2;166;226;46m(.fun)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mX\u001b[0m\u001b[38;2;248;248;242m a \u001b[0m\u001b[3;38;2;102;217;239mY\u001b[0m\u001b[38;2;248;248;242m b \u001b[0m\u001b[38;2;249;38;114m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mNat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mNat\u001b[0m\n\u001b[3;38;2;102;217;239mZ\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mfun \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m haha\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mfun haha \u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mN\u001b[0m\n\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mfun\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mZ\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m ahah \u001b[0m\u001b[38;2;249;38;114m$\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m\\case\u001b[0m\n\u001b[38;2;248;248;242m  x\u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mx\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m y\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mPrelude.Types.\u001b[0m\u001b[38;2;248;248;242mahahah\u001b[0m\n\n\u001b[38;2;166;226;46m(.N)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mNat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mNat\u001b[0m\n\u001b[3;38;2;102;217;239mZ\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mN \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mZ\u001b[0m\n\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mN\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[3;38;2;102;217;239mS\u001b[0m\u001b[38;2;248;248;242m n\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mN\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m n\u001b[0m\n\n\u001b[38;2;166;226;46mxx\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mName\u001b[0m\n\u001b[38;2;248;248;242mxx \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m`{\u001b[0m\u001b[38;2;166;226;46mFull.\u001b[0m\u001b[3;38;2;102;217;239mName\u001b[0m\u001b[38;2;249;38;114m}\u001b[0m\n\n\u001b[38;2;249;38;114minfixr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m^^^\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m&&&\u001b[0m\n\n\u001b[38;2;166;226;46mxxx\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m?\u001b[0m\n\u001b[38;2;248;248;242mxxx \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;248;248;242m x \u001b[0m\u001b[38;2;249;38;114mof\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mZ\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=>\u001b[0m\u001b[38;2;248;248;242m lalalaCamelCase\u001b[0m\n\u001b[38;2;248;248;242m  z \u001b[0m\u001b[38;2;249;38;114m=>\u001b[0m\u001b[38;2;248;248;242m alalalCamelCase\u001b[0m\n\n\u001b[38;2;166;226;46mff\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mNat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mTTImp\u001b[0m\n\u001b[38;2;248;248;242mff \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m x \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m val\u001b[0m\n\u001b[38;2;248;248;242mff \u001b[0m\u001b[38;2;190;132;255m_\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m`(\u001b[0m\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m x \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m~\u001b[0m\u001b[38;2;248;248;242mval \u001b[0m\u001b[38;2;249;38;114m^~^\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m~\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mabc\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;248;248;242mff \u001b[0m\u001b[38;2;190;132;255m_\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m f \u001b[0m\u001b[38;2;249;38;114m`(\u001b[0m\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m x \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m~\u001b[0m\u001b[38;2;248;248;242mval \u001b[0m\u001b[38;2;249;38;114m^~^\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m~\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mabc\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m x\u001b[0m\n\n\u001b[38;2;249;38;114m%language\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mElabReflection\u001b[0m\n\u001b[38;2;249;38;114m%runElab\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mX.\u001b[0m\u001b[38;2;248;248;242msf ads\u001b[0m\n\n\u001b[38;2;249;38;114m%macro\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m%inline\u001b[0m\n\u001b[38;2;166;226;46mfff\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mList\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mDecl\u001b[0m\n\u001b[38;2;248;248;242mfff \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m`[\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mf\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mNat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mNat\u001b[0m\n\n\u001b[38;2;248;248;242m  f \u001b[0m\u001b[3;38;2;102;217;239mZ\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m haha \u001b[0m\u001b[38;2;249;38;114m%runElab\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m%search\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114m{\u001b[0m\u001b[38;2;249;38;114m%World\u001b[0m\u001b[38;2;249;38;114m}\u001b[0m\n\u001b[38;2;249;38;114m]\u001b[0m\n\n\u001b[38;2;249;38;114mprivate\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114minfixr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m^--^\u001b[0m\n\n\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m^--^\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mNat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mNat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mNat\u001b[0m\n\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m^--^\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mZ\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mZ\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mZ\u001b[0m\n\u001b[38;2;248;248;242mx \u001b[0m\u001b[38;2;249;38;114m^--^\u001b[0m\u001b[38;2;248;248;242m y \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m x \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m y\u001b[0m\n\n\u001b[38;2;166;226;46mx\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31my\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mVect\u001b[0m\u001b[38;2;248;248;242m n \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[3;38;2;102;217;239mMaybe\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[3;38;2;102;217;239mMaybe\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242m&&&\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mNat\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[3;38;2;253;151;31mx\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mNat\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;249;38;114mauto\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31m_\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mMonoid\u001b[0m\u001b[38;2;248;248;242m a\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;249;38;114mdefault \u001b[0m\u001b[38;2;249;38;114m4\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mxx\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mNat\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;249;38;114mdefault \u001b[0m\u001b[38;2;249;38;114m(f x Y)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mxx'\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mNat\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mString\u001b[0m\n\u001b[38;2;248;248;242mx \u001b[0m\u001b[3;38;2;102;217;239mZ\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mS\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m?foo\u001b[0m\n\u001b[38;2;248;248;242mx y \u001b[0m\u001b[38;2;190;132;255m_\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116ma b \u001b[0m\u001b[38;2;248;248;242m\\{\u001b[0m\u001b[38;2;248;248;242mshow \u001b[0m\u001b[38;2;249;38;114m$\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m x \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m y\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;230;219;116m y >>= z\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\n\u001b[38;2;166;226;46mmultiline\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mString\u001b[0m\n\u001b[38;2;248;248;242mmultiline \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;230;219;116m  A multiline string\u001b[0m\u001b[38;2;190;132;255m\\NUL\u001b[0m\n\u001b[38;2;230;219;116m  \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\n\u001b[38;2;166;226;46mf'\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mNat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mNat\u001b[0m\n\u001b[38;2;248;248;242mf' \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m x' \u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\n\n\u001b[38;2;166;226;46mx\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mChar\u001b[0m\n\u001b[38;2;248;248;242mx \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m'\u001b[0m\u001b[38;2;190;132;255m\\BEL\u001b[0m\u001b[38;2;190;132;255m'\u001b[0m\n\u001b[38;2;248;248;242mx \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m'\u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\u001b[38;2;190;132;255m'\u001b[0m\n\u001b[38;2;248;248;242mx \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m'\u001b[0m\u001b[38;2;190;132;255m\\'\u001b[0m\u001b[38;2;190;132;255m'\u001b[0m\n\u001b[38;2;248;248;242mx \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m'\u001b[0m\u001b[38;2;190;132;255m\\o755\u001b[0m\u001b[38;2;190;132;255m'\u001b[0m\n\u001b[38;2;248;248;242mx \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m'\u001b[0m\u001b[38;2;190;132;255ma\u001b[0m\u001b[38;2;190;132;255m'\u001b[0m\n\n\u001b[38;2;166;226;46mxx\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mInt\u001b[0m\n\u001b[38;2;248;248;242mxx \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0o7_5_5\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Ignored suffixes/test.rs.bak",
    "content": "\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m foo.bak (editor etc backup) should highlight same as foo\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Ignored suffixes/test.rs.dpkg-dist",
    "content": "\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m foo.dpkg-dist (Debian dpkg backup) should highlight same as foo\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Ignored suffixes/test.rs.dpkg-old",
    "content": "\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m foo.dpkg-old (Debian dpkg backup) should highlight same as foo\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Ignored suffixes/test.rs.in",
    "content": "\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m foo.in (build system input) should highlight same as foo\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Ignored suffixes/test.rs.in.in",
    "content": "\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m foo.in.in (build system input, doubly replaced) should highlight same as foo\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Ignored suffixes/test.rs.old",
    "content": "\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m foo.old (editor etc backup) should highlight same as foo\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Ignored suffixes/test.rs.orig",
    "content": "\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m foo.orig (editor, diff etc backup) should highlight same as foo\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Ignored suffixes/test.rs.orig~",
    "content": "\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m foo.orig~ (backup of an editor, diff etc backup) should highlight same as foo\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Ignored suffixes/test.rs.rpmnew",
    "content": "\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m foo.rpmnew (Red Hat rpm backup) should highlight same as foo\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Ignored suffixes/test.rs.rpmorig",
    "content": "\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m foo.rpmorig (Red Hat rpm backup) should highlight same as foo\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Ignored suffixes/test.rs.rpmsave",
    "content": "\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m foo.rpmsave (Red Hat rpm backup) should highlight same as foo\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Ignored suffixes/test.rs.ucf-dist",
    "content": "\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m foo.ucf-dist (Debian ucf backup) should highlight same as foo\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Ignored suffixes/test.rs.ucf-new",
    "content": "\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m foo.ucf-new (Debian ucf backup) should highlight same as foo\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Ignored suffixes/test.rs.ucf-old",
    "content": "\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m foo.ucf-old (Debian ucf backup) should highlight same as foo\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Ignored suffixes/test.rs~",
    "content": "\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m foo~ (editor backup) should highlight same as foo\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Ignored suffixes/test.unknown~",
    "content": "\u001b[38;2;248;248;242m// foo~ for unknown foo should not highlight\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/JQ/sample.jq",
    "content": "\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m../imported-file\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m With Comments !\u001b[0m\n\u001b[38;2;249;38;114mdef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mweird\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31m$a\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31m$b\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31m$c\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255ma\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mb\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mtranspose\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mreduce\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mas\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mitem\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mitem\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mproperty\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m weird \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242ma\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mb\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mc\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\n\n\u001b[38;2;248;248;242m(\u001b[0m\n\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mcontains\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mnever\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mWhy yes\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;190;132;255m12.23\u001b[0m\n\u001b[38;2;249;38;114mend\u001b[0m\n\n\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mas\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mnever\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\n\n\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;166;226;46mhello\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;166;226;46mwhy\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mbecause\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;166;226;46mhello\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m weird \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mascii_upcase\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;166;226;46mformat_eg\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m@json\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mMy json string \u001b[0m\u001b[38;2;190;132;255m\\(\u001b[0m\u001b[38;2;248;248;242m . | this | part | just | white | ascii_upcase | transpose\u001b[0m\u001b[38;2;190;132;255m)\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;166;226;46mnever\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mnever\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mliteral_key\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m literal_value\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mthis\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m12.1e12\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mpart\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116malmost\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mlike\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;190;132;255m12\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mjson\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mquite\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\u001b[0m\u001b[38;2;166;226;46msimilar\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mbut not quite\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m And with very basic brace matching\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Invalid End\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;248;248;240m]\u001b[0m\u001b[38;2;248;248;242m\t\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Other invalid ends\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;240m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;240m]\u001b[0m\u001b[38;2;248;248;242m )\u001b[0m\n\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m A \"valid\" sequence\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mkey\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mother_key\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mgaga\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m A \"invalid\" sequence\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mkey\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mother_key\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;240m)\u001b[0m\u001b[38;2;248;248;242m, gaga \u001b[0m\u001b[38;2;248;248;240m}\u001b[0m\u001b[38;2;248;248;242m  ] )\u001b[0m\n\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mA string\u001b[0m\u001b[38;2;190;132;255m\\\u001b[0m\u001b[38;2;190;132;255mn\u001b[0m\u001b[38;2;230;219;116m whith escaped characters \u001b[0m\u001b[38;2;190;132;255m\\\u001b[0m\u001b[38;2;190;132;255m\"\u001b[0m\u001b[38;2;230;219;116m because we can\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m)\u001b[0m\n\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/JSON/example.ndjson",
    "content": "\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;253;151;31msome\u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mthing\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;253;151;31mfoo\u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m17\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;253;151;31mbar\u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255mfalse\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;253;151;31mquux\u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;253;151;31mmay\u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;253;151;31minclude\u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mnested\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;253;151;31mobjects\u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mand\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116marrays\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/JSON/test.json",
    "content": "\u001b[38;2;248;248;242m[\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;253;151;31mname\u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mjohn\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;253;151;31mage\u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m42\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;253;151;31misCustomer\u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mfalse\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;253;151;31mchildren\u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;253;151;31mname\u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mjames\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;253;151;31mage\u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m35\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;253;151;31misCustomer\u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;253;151;31mchildren\u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;253;151;31mname\u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mlinus\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;253;151;31mage\u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;253;151;31mname\u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116msandra\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;253;151;31mage\u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;253;151;31mname\u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mjessica\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;253;151;31mage\u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mnull\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;253;151;31misCustomer\u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mfalse\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;253;151;31mchildren\u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m]\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Java/test.java",
    "content": "\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mjava\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[3;38;2;166;226;46mutil\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[3;38;2;166;226;46mScanner\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;117;113;94m/*\u001b[0m\u001b[38;2;117;113;94m This Java program was submitted to help bat\u001b[0m\n\u001b[38;2;117;113;94m * with its syntax highlighting tests\u001b[0m\n\u001b[38;2;117;113;94m \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\n\u001b[38;2;249;38;114mpublic\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mclass\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;102;217;239mMain\u001b[0m\n\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mpublic\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mstatic\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mvoid\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mmain\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;166;226;46mString\u001b[0m\u001b[38;2;249;38;114m[]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31marg\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[3;38;2;166;226;46mScanner\u001b[0m\u001b[38;2;248;248;242m st \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mnew\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mScanner\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;166;226;46mSystem\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242min\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m t\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        t \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m st\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mnextInt\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[3;38;2;166;226;46mString\u001b[0m\u001b[38;2;248;248;242m tem\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        tem \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m st\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mnextLine\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m zz\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242mzz\u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242mt\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242mzz\u001b[0m\u001b[38;2;249;38;114m++\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[3;38;2;166;226;46mString\u001b[0m\u001b[38;2;248;248;242m str\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m            str \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m st\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mnextLine\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m n \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m str\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mlength\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[3;38;2;102;217;239mchar\u001b[0m\u001b[38;2;248;248;242m ch\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m i\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242mn\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m++\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m                ch \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m str\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mcharAt\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mch\u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[3;38;2;166;226;46mSystem\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mout\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mch\u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[3;38;2;166;226;46mSystem\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mout\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[3;38;2;166;226;46mSystem\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mout\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mch\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[3;38;2;166;226;46mSystem\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mout\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mprintln\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mwhile\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mt\u001b[0m\u001b[38;2;249;38;114m!=\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Decrement t\u001b[0m\n\u001b[38;2;248;248;242m            t \u001b[0m\u001b[38;2;249;38;114m-=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Java Server Page (JSP)/sessionDetail.jsp",
    "content": "\u001b[38;2;255;255;255m<?\u001b[0m\u001b[38;2;249;38;114mxml\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mversion\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m1.0\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mencoding\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mUTF-8\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m?>\u001b[0m\n\u001b[38;2;117;113;94m<%--\u001b[0m\n\u001b[38;2;117;113;94m Licensed to the Apache Software Foundation (ASF) under one or more\u001b[0m\n\u001b[38;2;117;113;94m  contributor license agreements.  See the NOTICE file distributed with\u001b[0m\n\u001b[38;2;117;113;94m  this work for additional information regarding copyright ownership.\u001b[0m\n\u001b[38;2;117;113;94m  The ASF licenses this file to You under the Apache License, Version 2.0\u001b[0m\n\u001b[38;2;117;113;94m  (the \"License\"); you may not use this file except in compliance with\u001b[0m\n\u001b[38;2;117;113;94m  the License.  You may obtain a copy of the License at\u001b[0m\n\n\u001b[38;2;117;113;94m      http://www.apache.org/licenses/LICENSE-2.0\u001b[0m\n\n\u001b[38;2;117;113;94m  Unless required by applicable law or agreed to in writing, software\u001b[0m\n\u001b[38;2;117;113;94m  distributed under the License is distributed on an \"AS IS\" BASIS,\u001b[0m\n\u001b[38;2;117;113;94m  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\u001b[0m\n\u001b[38;2;117;113;94m  See the License for the specific language governing permissions and\u001b[0m\n\u001b[38;2;117;113;94m  limitations under the License.\u001b[0m\n\u001b[38;2;117;113;94m--%>\u001b[0m\n\u001b[38;2;248;248;242m<%@\u001b[0m\u001b[38;2;249;38;114mpage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255msession\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mfalse\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mcontentType\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mtext/html; charset=ISO-8859-1\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m%>\u001b[0m\n\u001b[38;2;248;248;242m<%@\u001b[0m\u001b[38;2;249;38;114mpage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mimport\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mjava.util.Enumeration\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m%>\u001b[0m\n\u001b[38;2;248;248;242m<%@\u001b[0m\u001b[38;2;249;38;114mpage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mimport\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mjakarta.servlet.http.HttpSession\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m%>\u001b[0m\n\u001b[38;2;248;248;242m<%@\u001b[0m\u001b[38;2;249;38;114mpage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mimport\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116morg.apache.catalina.Session\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m%>\u001b[0m\n\u001b[38;2;248;248;242m<%@\u001b[0m\u001b[38;2;249;38;114mpage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mimport\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116morg.apache.catalina.manager.JspHelper\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m%>\u001b[0m\n\u001b[38;2;248;248;242m<%@\u001b[0m\u001b[38;2;249;38;114mpage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mimport\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116morg.apache.catalina.util.ContextName\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m%>\u001b[0m\n\u001b[38;2;255;255;255m<!\u001b[0m\u001b[38;2;249;38;114mDOCTYPE\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mhtml\u001b[0m\n\u001b[38;2;248;248;242m     \u001b[0m\u001b[38;2;249;38;114mPUBLIC\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m-//W3C//DTD XHTML 1.0 Strict//EN\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;248;248;242m     \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mhttp://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;117;113;94m<%--\u001b[0m\u001b[38;2;117;113;94m!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\"\u001b[0m\n\u001b[38;2;117;113;94m \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\"\u001b[0m\u001b[38;2;117;113;94m--%>\u001b[0m\n\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mhtml\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mxmlns\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mhttp://www.w3.org/1999/xhtml\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mxml:lang\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116men\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m<%\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mString\u001b[0m\u001b[38;2;248;248;242m path \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;166;226;46mString\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m request\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mgetAttribute\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mpath\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[3;38;2;166;226;46mString\u001b[0m\u001b[38;2;248;248;242m version \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;166;226;46mString\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m request\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mgetAttribute\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mversion\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[3;38;2;166;226;46mContextName\u001b[0m\u001b[38;2;248;248;242m cn \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mnew\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mContextName\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mpath\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m version\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[3;38;2;166;226;46mSession\u001b[0m\u001b[38;2;248;248;242m currentSession \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;166;226;46mSession\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242mrequest\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mgetAttribute\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mcurrentSession\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[3;38;2;166;226;46mString\u001b[0m\u001b[38;2;248;248;242m currentSessionId \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mnull\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[3;38;2;166;226;46mHttpSession\u001b[0m\u001b[38;2;248;248;242m currentHttpSession \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mnull\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mcurrentSession \u001b[0m\u001b[38;2;249;38;114m!=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mnull\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m       currentHttpSession \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m currentSession\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mgetSession\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m       currentSessionId \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mJspHelper\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mescapeXml\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mcurrentSession\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mgetId\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m   }\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m       currentSessionId \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mSession invalidated\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m   }\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[3;38;2;166;226;46mString\u001b[0m\u001b[38;2;248;248;242m submitUrl \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mJspHelper\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mescapeXml\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mresponse\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mencodeURL\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;166;226;46mHttpServletRequest\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m pageContext\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mgetRequest\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mgetRequestURI\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m?path=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m path \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m&version=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m version\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m%>\u001b[0m\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mhead\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mmeta\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mhttp-equiv\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mcontent-type\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mcontent\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mtext/html; charset=iso-8859-1\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mmeta\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mhttp-equiv\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mpragma\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mcontent\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mno-cache\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\u001b[38;2;124;120;101m<!--\u001b[0m\u001b[38;2;124;120;101m HTTP 1.0 \u001b[0m\u001b[38;2;124;120;101m-->\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mmeta\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mhttp-equiv\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mcache-control\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mcontent\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mno-cache,must-revalidate\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\u001b[38;2;124;120;101m<!--\u001b[0m\u001b[38;2;124;120;101m HTTP 1.1 \u001b[0m\u001b[38;2;124;120;101m-->\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mmeta\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mhttp-equiv\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mexpires\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mcontent\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m0\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\u001b[38;2;124;120;101m<!--\u001b[0m\u001b[38;2;124;120;101m 0 is an invalid value and should be treated as 'now' \u001b[0m\u001b[38;2;124;120;101m-->\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mmeta\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mhttp-equiv\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mcontent-language\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mcontent\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116men\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mmeta\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mname\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mauthor\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mcontent\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mCedrik LIME\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mmeta\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mname\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mcopyright\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mcontent\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mcopyright 2005-2021 the Apache Software Foundation\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mmeta\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mname\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mrobots\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mcontent\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mnoindex,nofollow,noarchive\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtitle\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mSessions Administration: details for \u001b[0m\u001b[38;2;248;248;242m<%=\u001b[0m\u001b[38;2;248;248;242m currentSessionId \u001b[0m\u001b[38;2;248;248;242m%>\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtitle\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mhead\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mbody\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m<%\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mcurrentHttpSession \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mnull\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{ \u001b[0m\u001b[38;2;248;248;242m%>\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mh1\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m<%=\u001b[0m\u001b[38;2;248;248;242mcurrentSessionId\u001b[0m\u001b[38;2;248;248;242m%>\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mh1\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m<%\u001b[0m\u001b[38;2;248;248;242m }\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{ \u001b[0m\u001b[38;2;248;248;242m%>\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mh1\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mDetails for Session \u001b[0m\u001b[38;2;248;248;242m<%=\u001b[0m\u001b[38;2;248;248;242m currentSessionId \u001b[0m\u001b[38;2;248;248;242m%>\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mh1\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtable\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mstyle\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[3;38;2;102;217;239mtext-align\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mleft\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mborder\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m0\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m     \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mth\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mSession Id\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mth\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m<%=\u001b[0m\u001b[38;2;248;248;242m currentSessionId \u001b[0m\u001b[38;2;248;248;242m%>\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m     \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m     \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mth\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mGuessed Locale\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mth\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m<%=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mJspHelper\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mguessDisplayLocaleFromSession\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mcurrentSession\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m%>\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m     \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m     \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mth\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mGuessed User\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mth\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m<%=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mJspHelper\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mguessDisplayUserFromSession\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mcurrentSession\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m%>\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m     \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m     \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mth\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mCreation Time\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mth\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m<%=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mJspHelper\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mgetDisplayCreationTimeForSession\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mcurrentSession\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m%>\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m     \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m     \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mth\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mLast Accessed Time\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mth\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m<%=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mJspHelper\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mgetDisplayLastAccessedTimeForSession\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mcurrentSession\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m%>\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m     \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m     \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mth\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mSession Max Inactive Interval\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mth\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m<%=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mJspHelper\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242msecondsToTimeString\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mcurrentSession\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mgetMaxInactiveInterval\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m%>\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m     \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m     \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mth\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mUsed Time\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mth\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m<%=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mJspHelper\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mgetDisplayUsedTimeForSession\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mcurrentSession\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m%>\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m     \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m     \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mth\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mInactive Time\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mth\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m<%=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mJspHelper\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mgetDisplayInactiveTimeForSession\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mcurrentSession\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m%>\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m     \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m     \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mth\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mTTL\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mth\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m<%=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mJspHelper\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mgetDisplayTTLForSession\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mcurrentSession\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m%>\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m     \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtable\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mform\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mmethod\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mpost\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46maction\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m<%= submitUrl %>\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m     \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mdiv\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114minput\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtype\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mhidden\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mname\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116msessionId\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mvalue\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m<%= currentSessionId %>\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114minput\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtype\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mhidden\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mname\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116maction\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mvalue\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116msessionDetail\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;248;248;242m<%\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mPrimary\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mequals\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mrequest\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mgetParameter\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116msessionType\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;248;248;242m%>\u001b[0m\n\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114minput\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtype\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mhidden\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mname\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116msessionType\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mvalue\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mPrimary\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;248;248;242m<%\u001b[0m\n\u001b[38;2;248;248;242m       }\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;248;248;242m%>\u001b[0m\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114minput\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtype\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116msubmit\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mvalue\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mRefresh\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m     \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mdiv\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mform\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mdiv\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mclass\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116merror\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m<%=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mJspHelper\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mescapeXml\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mrequest\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mgetAttribute\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116merror\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m%>\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mdiv\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mdiv\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mclass\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mmessage\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m<%=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mJspHelper\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mescapeXml\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mrequest\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mgetAttribute\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mmessage\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m%>\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mdiv\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtable\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mstyle\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[3;38;2;102;217;239mtext-align\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mleft\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mborder\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mcellpadding\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m2\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mcellspacing\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m2\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;248;248;242m<%\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m nAttributes \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[3;38;2;166;226;46mEnumeration\u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;166;226;46mString\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m attributeNamesEnumeration \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m currentHttpSession\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mgetAttributeNames\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mwhile\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mattributeNamesEnumeration\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mhasMoreElements\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m          attributeNamesEnumeration\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mnextElement\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m          \u001b[0m\u001b[38;2;249;38;114m++\u001b[0m\u001b[38;2;248;248;242mnAttributes\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m      }\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;248;248;242m%>\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mcaption\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mstyle\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[3;38;2;102;217;239mfont-variant\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239msmall-caps\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m<%=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mJspHelper\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mformatNumber\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mnAttributes\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m%>\u001b[0m\u001b[38;2;248;248;242m attributes\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mcaption\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mthead\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mth\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mRemove Attribute\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mth\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mth\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mAttribute name\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mth\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mth\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mAttribute value\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mth\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mthead\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;117;113;94m<%--\u001b[0m\u001b[38;2;117;113;94mtfoot>\u001b[0m\n\u001b[38;2;117;113;94m           <tr>\u001b[0m\n\u001b[38;2;117;113;94m               <td colspan=\"3\" style=\"text-align: center;\">\u001b[0m\n\u001b[38;2;117;113;94m                   TODO: set Max Inactive Interval on sessions\u001b[0m\n\u001b[38;2;117;113;94m               </td>\u001b[0m\n\u001b[38;2;117;113;94m           </tr>\u001b[0m\n\u001b[38;2;117;113;94m       </tfoot\u001b[0m\u001b[38;2;117;113;94m--%>\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtbody\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;248;248;242m<%\u001b[0m\u001b[38;2;248;248;242m attributeNamesEnumeration \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m currentHttpSession\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mgetAttributeNames\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mwhile\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mattributeNamesEnumeration\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mhasMoreElements\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m          \u001b[0m\u001b[3;38;2;166;226;46mString\u001b[0m\u001b[38;2;248;248;242m attributeName \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m attributeNamesEnumeration\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mnextElement\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;248;248;242m%>\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46malign\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mcenter\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                   \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mform\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mmethod\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mpost\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46maction\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m<%= submitUrl %>\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                       \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mdiv\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                           \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114minput\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtype\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mhidden\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mname\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116maction\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mvalue\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mremoveSessionAttribute\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                           \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114minput\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtype\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mhidden\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mname\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116msessionId\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mvalue\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m<%= currentSessionId %>\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                           \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114minput\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtype\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mhidden\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mname\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mattributeName\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mvalue\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m<%= JspHelper.escapeXml(attributeName) %>\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                           \u001b[0m\u001b[38;2;248;248;242m<%\u001b[0m\n\u001b[38;2;248;248;242m                             \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mPrimary\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mequals\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mrequest\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mgetParameter\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116msessionType\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m                           \u001b[0m\u001b[38;2;248;248;242m%>\u001b[0m\n\u001b[38;2;248;248;242m                             \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114minput\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtype\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116msubmit\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mvalue\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mRemove\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                             \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114minput\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtype\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mhidden\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mname\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116msessionType\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mvalue\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mPrimary\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                           \u001b[0m\u001b[38;2;248;248;242m<%\u001b[0m\n\u001b[38;2;248;248;242m                             }\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m                               out\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mPrimary sessions only\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m                             }\u001b[0m\n\u001b[38;2;248;248;242m                           \u001b[0m\u001b[38;2;248;248;242m%>\u001b[0m\n\u001b[38;2;248;248;242m                       \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mdiv\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                   \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mform\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m<%=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mJspHelper\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mescapeXml\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mattributeName\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m%>\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m<%\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mObject\u001b[0m\u001b[38;2;248;248;242m attributeValue \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m currentHttpSession\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mgetAttribute\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mattributeName\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m%>\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mspan\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtitle\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m<%= attributeValue == null ? \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;240m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mattributeValue.getClass().toString()\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m%\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m\">\u001b[0m\u001b[38;2;248;248;242m<%=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mJspHelper\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mescapeXml\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mattributeValue\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m%>\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mspan\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtd\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;248;248;242m<%\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m end while \u001b[0m\u001b[38;2;248;248;242m%>\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtbody\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtable\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m<%\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m endif\u001b[0m\u001b[38;2;248;248;242m%>\u001b[0m\n\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mform\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mmethod\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mpost\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46maction\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m<%=submitUrl%>\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mp\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mstyle\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[3;38;2;102;217;239mtext-align\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mcenter\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114minput\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtype\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116msubmit\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mvalue\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mReturn to session list\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mp\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mform\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\n\u001b[38;2;117;113;94m<%--\u001b[0m\u001b[38;2;117;113;94mdiv style=\"display: none;\">\u001b[0m\n\u001b[38;2;117;113;94m<p>\u001b[0m\n\u001b[38;2;117;113;94m    <a href=\"http://validator.w3.org/check?uri=referer\"><img\u001b[0m\n\u001b[38;2;117;113;94m        src=\"http://www.w3.org/Icons/valid-html401\"\u001b[0m\n\u001b[38;2;117;113;94m        alt=\"Valid HTML 4.01!\" height=\"31\" width=\"88\"></a>\u001b[0m\n\u001b[38;2;117;113;94m    <a href=\"http://validator.w3.org/check?uri=referer\"><img\u001b[0m\n\u001b[38;2;117;113;94m        src=\"http://www.w3.org/Icons/valid-xhtml10\"\u001b[0m\n\u001b[38;2;117;113;94m        alt=\"Valid XHTML 1.0!\" height=\"31\" width=\"88\" /></a>\u001b[0m\n\u001b[38;2;117;113;94m    <a href=\"http://validator.w3.org/check?uri=referer\"><img\u001b[0m\n\u001b[38;2;117;113;94m        src=\"http://www.w3.org/Icons/valid-xhtml11\"\u001b[0m\n\u001b[38;2;117;113;94m        alt=\"Valid XHTML 1.1!\" height=\"31\" width=\"88\" /></a>\u001b[0m\n\u001b[38;2;117;113;94m</p>\u001b[0m\n\u001b[38;2;117;113;94m</div\u001b[0m\u001b[38;2;117;113;94m--%>\u001b[0m\n\n\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mbody\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mhtml\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/JavaScript/test.js",
    "content": "\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mletNumber\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;174;129;255m1000\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[3;38;2;102;217;239mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mconstNumber\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;174;129;255m10\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[3;38;2;102;217;239mvar\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mvarNumber\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;174;129;255m-1234\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[3;38;2;102;217;239mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mconstNegativeFloat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;174;129;255m-1.23\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[3;38;2;102;217;239mvar\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mtooMuch\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mInfinity\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;255;255;255mnothing\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mnull\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mlistofthings\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mthing\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mthing2\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;249;38;114m`\u001b[0m\u001b[38;2;230;219;116mf\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;249;38;114m`\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mbar\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Simple comment\u001b[0m\n\n\u001b[38;2;117;113;94m/**\u001b[0m\n\u001b[38;2;117;113;94m* #########\u001b[0m\n\u001b[38;2;117;113;94m* Multiline\u001b[0m\n\u001b[38;2;117;113;94m* comment\u001b[0m\n\u001b[38;2;117;113;94m* #########\u001b[0m\n\u001b[38;2;117;113;94m*/\u001b[0m\n\n\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mtest\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mi\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;174;129;255m0\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mi\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mconstNumber\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mi\u001b[0m\u001b[38;2;249;38;114m++\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255mtest\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mcontinue\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mtest\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;174;129;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m random things\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;249;38;114mwhile\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255mtest\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;174;129;255m100\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mtypeof\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mtest\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m===\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mnumber\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mtest\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mtest\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;174;129;255m30\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mtest\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;174;129;255m5\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mtest\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;174;129;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;166;226;46mweatherSays\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[3;38;2;253;151;31mwhen\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;166;226;46mDate\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;166;226;46mnow\u001b[0m\u001b[38;2;166;226;46m()\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mrain\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[3;38;2;102;217;239mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mthereAreClouds\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[3;38;2;102;217;239mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mcloudsCount\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;174;129;255m20\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;249;38;114mswitch\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;248;248;242mweatherSays\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[3;38;2;166;226;46mDate\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;248;248;242mnow\u001b[0m\u001b[38;2;248;248;242m()\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mrain\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;249;38;114mbreak\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116msun\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;249;38;114mdefault\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;249;38;114mbreak\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mrain\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mfalse\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255mthereAreClouds\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mcloudsCount\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;174;129;255m20\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m||\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mweatherSays\u001b[0m\u001b[38;2;248;248;242m()\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m===\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mrain\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mrain\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mfalse\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255mthereAreClouds\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mweatherSays\u001b[0m\u001b[38;2;248;248;242m()\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mrain\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m oh no, unsafe two equals checking!\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mrain\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mrain\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m!\u001b[0m\u001b[38;2;249;38;114m!\u001b[0m\u001b[38;2;255;255;255mcloudsCount\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[3;38;2;102;217;239mclass\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;102;217;239mForecast\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;166;226;46mconstructor\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[3;38;2;253;151;31mwhere\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31misGonnaRainA\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31misGonnaRainB\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;190;132;255mfalse\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31misGonnaRainC\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;190;132;255mfalse\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m...\u001b[0m\u001b[3;38;2;253;151;31mrandomArgs\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[3;38;2;102;217;239mthis\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mstation\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;255;255;255mlocation\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;255;255;255mwhere\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mx\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;255;255;255mwhere\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255my\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;255;255;255mwhere\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mz\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;255;255;255msurroundings\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\u001b[0m\u001b[38;2;255;255;255mzoneA\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\t\u001b[0m\u001b[38;2;255;255;255mlocation\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;174;129;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;174;129;255m2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;174;129;255m3\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\t\u001b[0m\u001b[38;2;255;255;255misGonnaRain\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255misGonnaRainA\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\u001b[0m\u001b[38;2;255;255;255mzoneB\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\t\u001b[0m\u001b[38;2;255;255;255mlocation\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;174;129;255m-1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;174;129;255m2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;174;129;255m2\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\t\u001b[0m\u001b[38;2;255;255;255misGonnaRain\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255misGonnaRainB\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\u001b[0m\u001b[38;2;255;255;255mzoneC\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\t\u001b[0m\u001b[38;2;255;255;255mlocation\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;174;129;255m-2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;174;129;255m0\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;174;129;255m0\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\t\u001b[0m\u001b[38;2;255;255;255misGonnaRainC\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255misGonnaRainC\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[3;38;2;102;217;239masync\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mgetLocalPrevisions\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[3;38;2;102;217;239mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mrainZones\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;102;217;239mthis\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mstation\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255msurroundings\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mzoneA\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255misGonnaRain\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mthis\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mstation\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255msurroundings\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mzoneB\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255misGonnaRain\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mthis\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mstation\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255msurroundings\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mzoneC\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255misGonnaRain\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mawait\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mrainZones\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;248;248;242mfilter\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[3;38;2;253;151;31mz\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m!\u001b[0m\u001b[38;2;249;38;114m!\u001b[0m\u001b[38;2;255;255;255mz\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mlength\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255mrainZones\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mlength\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m/\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;174;129;255m2\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;166;226;46mcommunicatePrevisions\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[3;38;2;253;151;31misGonnaRain\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;190;132;255mundefined\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255misGonnaRain\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mconsole\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;102;217;239mlog\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mTake the umbrella.\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;166;226;46mdestroy\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;249;38;114mdelete\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mthis\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mstation\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;249;38;114mstatic\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mstartHiring\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[3;38;2;166;226;46mconsole\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;102;217;239mlog\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mWe're looking for weather presenters.\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[3;38;2;166;226;46mconsole\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;102;217;239mlog\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mA lot of presenters came. Hiring stops.\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;117;113;94m/*\u001b[0m\u001b[38;2;117;113;94m This forecasting station is magic. It can generate rain, but this method is secret because it's a generator function - nobody uses them! \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mgenerateRainInZoneC\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[3;38;2;253;151;31mclouds\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;174;129;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;174;129;255m2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;174;129;255m3\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[3;38;2;102;217;239mthis\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mstation\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255msurroundings\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mzoneC\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255misGonnaRain\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[3;38;2;102;217;239mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mmakeRain\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mraining!\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;249;38;114myield\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mclouds\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m first, keeps clouds\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;249;38;114mdo\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[3;38;2;166;226;46mconsole\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;102;217;239mlog\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;248;248;242mmakeRain\u001b[0m\u001b[38;2;248;248;242m()\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;249;38;114myield\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mclouds\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;248;248;242mpop\u001b[0m\u001b[38;2;248;248;242m()\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m then all clouds do rain\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mwhile\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255mclouds\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mlength\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;174;129;255m1\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;255;255;255mForecast\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;248;248;242mstartHiring\u001b[0m\u001b[38;2;248;248;242m()\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[3;38;2;102;217;239mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mforecasting\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mnew\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mForecast\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;174;129;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;174;129;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;174;129;255m3\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;248;248;242masync\u001b[0m\u001b[38;2;248;248;242m()\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[3;38;2;102;217;239mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mraining\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mforecasting\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;248;248;242mgenerateRainInZoneC\u001b[0m\u001b[38;2;248;248;242m()\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mraining\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;248;248;242mnext\u001b[0m\u001b[38;2;248;248;242m()\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mforecasting\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;248;248;242mcommunicatePrevisions\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;249;38;114mawait\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mforecasting\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;248;248;242mgetLocalPrevisions\u001b[0m\u001b[38;2;248;248;242m()\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mraining\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;248;248;242mnext\u001b[0m\u001b[38;2;248;248;242m()\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mraining\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;248;248;242mnext\u001b[0m\u001b[38;2;248;248;242m()\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mraining\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;248;248;242mreturn\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mstop!\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mforecasting\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;248;248;242mdestroy\u001b[0m\u001b[38;2;248;248;242m()\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Jinja2/template.jinja2",
    "content": "\u001b[38;2;166;226;46m{%\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mextends\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mbase.jinja2\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m%}\u001b[0m\n\u001b[38;2;248;248;242m<h1>\u001b[0m\u001b[38;2;166;226;46m{%\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mblock\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mtitle\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m%}\u001b[0m\u001b[38;2;166;226;46m{%\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mendblock\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m%}\u001b[0m\u001b[38;2;248;248;242m</h1>\u001b[0m\n\u001b[38;2;166;226;46m{%\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mentry\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mentries\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m%}\u001b[0m\n\u001b[38;2;248;248;242m  <span>Entry \u001b[0m\u001b[38;2;166;226;46m{{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mloop\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;255;255;255mindex\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m}}\u001b[0m\u001b[38;2;248;248;242m</span>\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46m{%\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mentry\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;255;255;255mshow\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m%}\u001b[0m\n\u001b[38;2;248;248;242m    <p>\u001b[0m\u001b[38;2;166;226;46m{{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mentry\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;255;255;255mvalue\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m}}\u001b[0m\u001b[38;2;248;248;242m</p>\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46m{%\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mfalse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m%}\u001b[0m\n\u001b[38;2;248;248;242m    <p>No value</p>\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46m{%\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mendif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m%}\u001b[0m\n\u001b[38;2;166;226;46m{%\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mendfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m%}\u001b[0m\n\u001b[38;2;166;226;46m{%\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mset\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255msome_value\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m 123 \u001b[0m\u001b[38;2;166;226;46m%}\u001b[0m\n\u001b[38;2;248;248;242m  <div>\u001b[0m\u001b[38;2;166;226;46m{{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255msome_value\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mcustom_filter\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m}}\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;166;226;46m{{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255msome_value\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mabs\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m}}\u001b[0m\u001b[38;2;248;248;242m</div>\u001b[0m\n\u001b[38;2;166;226;46m{%\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mendset\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m%}\u001b[0m\n\u001b[38;2;166;226;46m{{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255msome_dict\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mval\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;255;255;255mval\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m}}\u001b[0m\n\u001b[38;2;166;226;46m{#\u001b[0m\u001b[38;2;117;113;94m comment \u001b[0m\u001b[38;2;166;226;46m#}\u001b[0m\n\u001b[38;2;166;226;46m{#\u001b[0m\n\u001b[38;2;117;113;94m  longer comment\u001b[0m\n\u001b[38;2;117;113;94m  {{ value }}\u001b[0m\n\u001b[38;2;166;226;46m#}\u001b[0m\n\u001b[38;2;166;226;46m{%\u001b[0m\u001b[38;2;117;113;94m \u001b[0m\u001b[38;2;249;38;114mraw\u001b[0m\u001b[38;2;117;113;94m \u001b[0m\u001b[38;2;166;226;46m%}\u001b[0m\n\u001b[38;2;117;113;94m  {{ do not transform }}\u001b[0m\n\u001b[38;2;166;226;46m{%\u001b[0m\u001b[38;2;117;113;94m \u001b[0m\u001b[38;2;249;38;114mendraw\u001b[0m\u001b[38;2;117;113;94m \u001b[0m\u001b[38;2;166;226;46m%}\u001b[0m\n\u001b[38;2;166;226;46m{%\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mmacro\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255msome_macro\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mvalue\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m-%}\u001b[0m\n\u001b[38;2;248;248;242m  <p style=\"color: red;\">\u001b[0m\u001b[38;2;166;226;46m{{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mvalue\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m}}\u001b[0m\u001b[38;2;248;248;242m</p>\u001b[0m\n\u001b[38;2;166;226;46m{%-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mendmacro\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m%}\u001b[0m\n\u001b[38;2;166;226;46m{%\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255manother_val\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdefined\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m%}\u001b[0m\n\u001b[38;2;248;248;242m  <h3>\u001b[0m\u001b[38;2;166;226;46m{{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255manother_val\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m}}\u001b[0m\u001b[38;2;248;248;242m</h3>\u001b[0m\n\u001b[38;2;166;226;46m{%\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m%}\u001b[0m\n\u001b[38;2;248;248;242m  <h3>Unknown</h3>\u001b[0m\n\u001b[38;2;166;226;46m{%\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mendif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m%}\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Julia/test.jl",
    "content": "\u001b[38;2;248;248;242mx\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\n\n\u001b[38;2;248;248;242my\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242mx\u001b[0m\n\n\u001b[38;2;248;248;242mtypeof\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242my\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;248;248;242mf\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mx\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mx\u001b[0m\n\n\n\u001b[38;2;248;248;242mf\u001b[0m\n\n\u001b[38;2;248;248;242mf\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m10\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\n\u001b[38;2;249;38;114mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mg\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mx\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242my\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mz\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mx\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242my\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mz\u001b[0m\u001b[38;2;249;38;114m^\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\n\u001b[38;2;249;38;114mend\u001b[0m\n\n\u001b[38;2;248;248;242mg\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242ms\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m10\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242ms\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Equivalent to s = s + i\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242ms\u001b[0m\n\u001b[38;2;249;38;114mend\u001b[0m\n\n\n\u001b[38;2;248;248;242mtypeof\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m10\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;249;38;114mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mmysum\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mn\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242ms\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242mn\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242ms\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242ms\u001b[0m\n\u001b[38;2;249;38;114mend\u001b[0m\n\n\u001b[38;2;248;248;242mmysum\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m100\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;248;248;242ma\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\n\n\u001b[38;2;248;248;242ma\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\n\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242ma\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116msmall\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mbig\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;249;38;114mend\u001b[0m\n\n\u001b[38;2;248;248;242mv\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\n\u001b[38;2;248;248;242mtypeof\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mv\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;248;248;242mv\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\n\u001b[38;2;248;248;242mv\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m10\u001b[0m\n\n\u001b[38;2;248;248;242mv2\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m^\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m10\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\n\u001b[38;2;248;248;242mM\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\n\u001b[38;2;248;248;242m     \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\n\u001b[38;2;248;248;242mtypeof\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mM\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;248;248;242mzeros\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;248;248;242mzeros\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;166;226;46mInt\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mj\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242mj\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m6\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Kotlin/test.kt",
    "content": "\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m kotlin.math.*\u001b[0m\n\n\u001b[38;2;249;38;114mdata\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mclass\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mExample\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mval\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mname\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mString\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mval\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mnumbers\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mList\u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;102;217;239mInt\u001b[0m\u001b[38;2;248;248;242m?>\u001b[0m\n\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;249;38;114mfun\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46minterface\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mJokeInterface\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46mfun\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46misFunny\u001b[0m\u001b[38;2;248;248;242m()\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mBoolean\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;249;38;114mabstract\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mclass\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mAbstractJoke\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;4;38;2;166;226;46mJokeInterface\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114moverride\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mfun\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46misFunny\u001b[0m\u001b[38;2;248;248;242m() \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mfalse\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mabstract\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mfun\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mcontent\u001b[0m\u001b[38;2;248;248;242m()\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mString\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;249;38;114mclass\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mJoke\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;4;38;2;166;226;46mAbstractJoke\u001b[0m\u001b[38;2;248;248;242m() {\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114moverride\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mfun\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46misFunny\u001b[0m\u001b[38;2;248;248;242m()\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mBoolean\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\n\u001b[38;2;248;248;242m    }\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114moverride\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mfun\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mcontent\u001b[0m\u001b[38;2;248;248;242m()\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mString\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mcontent of joke here, haha\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;249;38;114mclass\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mDelegatedJoke\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mval\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mjoke\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m Joke) \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;4;38;2;166;226;46mJokeInterface\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;4;38;2;166;226;46mby\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;4;38;2;166;226;46mjoke\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mval\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mnumber\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mLong\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m123L\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mcompanion \u001b[0m\u001b[38;2;249;38;114mobject\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mval\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46msomeConstant\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116msome constant text\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m    }\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;249;38;114mobject\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mSomeSingleton\u001b[0m\n\n\u001b[38;2;249;38;114msealed\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mclass\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mShape\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mabstract\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mfun\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46marea\u001b[0m\u001b[38;2;248;248;242m()\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mDouble\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;249;38;114mdata\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mclass\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mSquare\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mval\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31msideLength\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mDouble\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;4;38;2;166;226;46mShape\u001b[0m\u001b[38;2;248;248;242m() {\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114moverride\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mfun\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46marea\u001b[0m\u001b[38;2;248;248;242m()\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mDouble\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m sideLength\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mpow(\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;249;38;114mobject\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mPoint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;4;38;2;166;226;46mShape\u001b[0m\u001b[38;2;248;248;242m() {\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114moverride\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mfun\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46marea\u001b[0m\u001b[38;2;248;248;242m() \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;249;38;114mclass\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mCircle\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mval\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mradius\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mDouble\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;4;38;2;166;226;46mShape\u001b[0m\u001b[38;2;248;248;242m() {\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114moverride\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mfun\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46marea\u001b[0m\u001b[38;2;248;248;242m()\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mDouble\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mPI\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m radius \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m radius\u001b[0m\n\u001b[38;2;248;248;242m    }\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;249;38;114mfun\u001b[0m\u001b[38;2;248;248;242m String.\u001b[0m\u001b[38;2;166;226;46mextensionMethod\u001b[0m\u001b[38;2;248;248;242m() \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mtest\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\n\u001b[38;2;249;38;114mfun\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mmain\u001b[0m\u001b[38;2;248;248;242m() {\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mval\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mname\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\"\"\u001b[0m\n\u001b[38;2;230;219;116m       multiline\u001b[0m\n\u001b[38;2;230;219;116m       string\u001b[0m\n\u001b[38;2;230;219;116m       \u001b[0m\n\u001b[38;2;230;219;116m       some numbers: 123123 42\u001b[0m\n\u001b[38;2;230;219;116m    \u001b[0m\u001b[38;2;230;219;116m\"\"\"\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mtrimIndent()\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mval\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mexample\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m Example(name \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m name, numbers \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m listOf(\u001b[0m\u001b[38;2;190;132;255m512\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m42\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255mnull\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m))\u001b[0m\n\n\u001b[38;2;248;248;242m    example\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mnumbers\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mfilterNotNull()\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mforEach { println(it) }\u001b[0m\n\n\u001b[38;2;248;248;242m    setOf(Joke(), DelegatedJoke(Joke())\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mjoke)\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mfilter(JokeInterface\u001b[0m\u001b[38;2;249;38;114m::\u001b[0m\u001b[38;2;248;248;242misFunny)\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mmap(AbstractJoke\u001b[0m\u001b[38;2;249;38;114m::\u001b[0m\u001b[38;2;248;248;242mcontent)\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mforEachIndexed { index\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mInt\u001b[0m\u001b[38;2;248;248;242m, joke \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\n\u001b[38;2;248;248;242m            println(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mI heard a funny joke(#\u001b[0m\u001b[3;38;2;253;151;31m${index + 1}\u001b[0m\u001b[38;2;230;219;116m): \u001b[0m\u001b[3;38;2;253;151;31m$joke\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m        }\u001b[0m\n\n\u001b[38;2;248;248;242m    listOf(Square(\u001b[0m\u001b[38;2;190;132;255m12.3\u001b[0m\u001b[38;2;248;248;242m), Point, Circle(\u001b[0m\u001b[38;2;190;132;255m5.2\u001b[0m\u001b[38;2;248;248;242m))\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242massociateWith(Shape\u001b[0m\u001b[38;2;249;38;114m::\u001b[0m\u001b[38;2;248;248;242marea)\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mtoList()\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242msortedBy { it\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242msecond }\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mforEach {\u001b[0m\n\u001b[38;2;248;248;242m            println(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[3;38;2;253;151;31m${it.first}\u001b[0m\u001b[38;2;230;219;116m: \u001b[0m\u001b[3;38;2;253;151;31m${it.second}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m        }\u001b[0m\n\n\u001b[38;2;248;248;242m    println(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116msome string\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mextensionMethod())\u001b[0m\n\n\u001b[38;2;248;248;242m    require(SomeSingleton\u001b[0m\u001b[38;2;249;38;114m::\u001b[0m\u001b[38;2;248;248;242mclass\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242msimpleName \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mSomeSingletonName\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m) { \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116msomething does not seem right...\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m }\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/LLVM/test.ll",
    "content": "\u001b[38;2;117;113;94m; ModuleID = 'test.c'\u001b[0m\n\u001b[38;2;248;248;242msource_filename = \u001b[0m\u001b[38;2;230;219;116m\"test.c\"\u001b[0m\n\u001b[38;2;249;38;114mtarget\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mdatalayout\u001b[0m\u001b[38;2;248;248;242m = \u001b[0m\u001b[38;2;230;219;116m\"e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128\"\u001b[0m\n\u001b[38;2;249;38;114mtarget\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mtriple\u001b[0m\u001b[38;2;248;248;242m = \u001b[0m\u001b[38;2;230;219;116m\"x86_64-pc-linux-gnu\"\u001b[0m\n\n\u001b[38;2;255;255;255m@.str\u001b[0m\u001b[38;2;248;248;242m = \u001b[0m\u001b[38;2;249;38;114mprivate\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114munnamed_addr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mconstant\u001b[0m\u001b[38;2;248;248;242m [\u001b[0m\u001b[38;2;190;132;255m13\u001b[0m\u001b[38;2;248;248;242m x \u001b[0m\u001b[3;38;2;102;217;239mi8\u001b[0m\u001b[38;2;248;248;242m] \u001b[0m\u001b[38;2;249;38;114mc\u001b[0m\u001b[38;2;230;219;116m\"Hello World!\u001b[0m\u001b[38;2;190;132;255m\\00\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;249;38;114malign\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\n\u001b[38;2;117;113;94m; Function Attrs: noinline norecurse optnone uwtable\u001b[0m\n\u001b[38;2;249;38;114mdefine\u001b[0m\u001b[38;2;248;248;242m dso_local \u001b[0m\u001b[3;38;2;102;217;239mi32\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m@main\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mi32\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m%0\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mi8**\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m%1\u001b[0m\u001b[38;2;248;248;242m) #\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255m%3\u001b[0m\u001b[38;2;248;248;242m = \u001b[0m\u001b[38;2;249;38;114malloca\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mi32\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;249;38;114malign\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255m%4\u001b[0m\u001b[38;2;248;248;242m = \u001b[0m\u001b[38;2;249;38;114malloca\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mi32\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;249;38;114malign\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255m%5\u001b[0m\u001b[38;2;248;248;242m = \u001b[0m\u001b[38;2;249;38;114malloca\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mi8**\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;249;38;114malign\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m8\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mstore\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mi32\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mi32*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m%3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;249;38;114malign\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mstore\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mi32\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m%0\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mi32*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m%4\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;249;38;114malign\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mstore\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mi8**\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m%1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mi8***\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m%5\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;249;38;114malign\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m8\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255m%6\u001b[0m\u001b[38;2;248;248;242m = \u001b[0m\u001b[38;2;249;38;114mcall\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mi32\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m@puts\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mi8*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mgetelementptr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114minbounds\u001b[0m\u001b[38;2;248;248;242m ([\u001b[0m\u001b[38;2;190;132;255m13\u001b[0m\u001b[38;2;248;248;242m x \u001b[0m\u001b[3;38;2;102;217;239mi8\u001b[0m\u001b[38;2;248;248;242m], [\u001b[0m\u001b[38;2;190;132;255m13\u001b[0m\u001b[38;2;248;248;242m x \u001b[0m\u001b[3;38;2;102;217;239mi8\u001b[0m\u001b[38;2;248;248;242m]* \u001b[0m\u001b[38;2;255;255;255m@.str\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mi64\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mi64\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m))\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mret\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mi32\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1337\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;249;38;114mdeclare\u001b[0m\u001b[38;2;248;248;242m dso_local \u001b[0m\u001b[3;38;2;102;217;239mi32\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m@puts\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mi8*\u001b[0m\u001b[38;2;248;248;242m) #\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\n\u001b[38;2;249;38;114mattributes\u001b[0m\u001b[38;2;248;248;242m #\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m = { \u001b[0m\u001b[38;2;249;38;114mnoinline\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mnorecurse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114moptnone\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114muwtable\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"correctly-rounded-divide-sqrt-fp-math\"\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"false\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"disable-tail-calls\"\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"false\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"frame-pointer\"\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"all\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"less-precise-fpmad\"\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"false\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"min-legal-vector-width\"\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"0\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"no-infs-fp-math\"\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"false\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"no-jump-tables\"\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"false\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"no-nans-fp-math\"\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"false\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"no-signed-zeros-fp-math\"\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"false\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"no-trapping-math\"\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"false\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"stack-protector-buffer-size\"\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"8\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"target-cpu\"\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"x86-64\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"target-features\"\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"+cx8,+fxsr,+mmx,+sse,+sse2,+x87\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"unsafe-fp-math\"\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"false\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"use-soft-float\"\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"false\"\u001b[0m\u001b[38;2;248;248;242m }\u001b[0m\n\u001b[38;2;249;38;114mattributes\u001b[0m\u001b[38;2;248;248;242m #\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m = { \u001b[0m\u001b[38;2;230;219;116m\"correctly-rounded-divide-sqrt-fp-math\"\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"false\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"disable-tail-calls\"\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"false\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"frame-pointer\"\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"all\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"less-precise-fpmad\"\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"false\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"no-infs-fp-math\"\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"false\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"no-nans-fp-math\"\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"false\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"no-signed-zeros-fp-math\"\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"false\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"no-trapping-math\"\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"false\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"stack-protector-buffer-size\"\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"8\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"target-cpu\"\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"x86-64\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"target-features\"\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"+cx8,+fxsr,+mmx,+sse,+sse2,+x87\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"unsafe-fp-math\"\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"false\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"use-soft-float\"\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"false\"\u001b[0m\u001b[38;2;248;248;242m }\u001b[0m\n\n\u001b[38;2;248;248;242m!llvm.module.flags\u001b[0m\u001b[38;2;248;248;242m = !{\u001b[0m\u001b[38;2;248;248;242m!0\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m!llvm.ident\u001b[0m\u001b[38;2;248;248;242m = !{\u001b[0m\u001b[38;2;248;248;242m!1\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m!0\u001b[0m\u001b[38;2;248;248;242m = !{\u001b[0m\u001b[3;38;2;102;217;239mi32\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, !\u001b[0m\u001b[38;2;230;219;116m\"wchar_size\"\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mi32\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m!1\u001b[0m\u001b[38;2;248;248;242m = !{!\u001b[0m\u001b[38;2;230;219;116m\"clang version 10.0.0-4ubuntu1 \"\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Lean/test.lean",
    "content": "\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m MIL.Common\u001b[0m\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m Mathlib.Topology.Instances.Real.Defs\u001b[0m\n\n\u001b[38;2;249;38;114mopen\u001b[0m\u001b[38;2;248;248;242m Set Filter Topology\u001b[0m\n\n\u001b[38;2;249;38;114mvariable\u001b[0m\u001b[38;2;248;248;242m {α : \u001b[0m\u001b[3;38;2;102;217;239mType\u001b[0m\u001b[38;2;248;248;242m*}\u001b[0m\n\u001b[38;2;249;38;114mvariable\u001b[0m\u001b[38;2;248;248;242m (s t : Set ℕ)\u001b[0m\n\u001b[38;2;249;38;114mvariable\u001b[0m\u001b[38;2;248;248;242m (ssubt : s ⊆ t)\u001b[0m\n\u001b[38;2;249;38;114mvariable\u001b[0m\u001b[38;2;248;248;242m {α : \u001b[0m\u001b[3;38;2;102;217;239mType\u001b[0m\u001b[38;2;248;248;242m*} (s : Set (Set α))\u001b[0m\n\u001b[38;2;117;113;94m-- Apostrophes are allowed in variable names\u001b[0m\n\u001b[38;2;249;38;114mvariable\u001b[0m\u001b[38;2;248;248;242m (f'_x x' : ℕ)\u001b[0m\n\u001b[38;2;249;38;114mvariable\u001b[0m\u001b[38;2;248;248;242m (bangwI' jablu'DI' QaQqu' nay' Ghay'cha' he' : ℕ)\u001b[0m\n\n\u001b[38;2;117;113;94m-- In the next example we could use `tauto` in each proof instead of knowing the lemmas\u001b[0m\n\u001b[38;2;249;38;114mexample\u001b[0m\u001b[38;2;248;248;242m {α : \u001b[0m\u001b[3;38;2;102;217;239mType\u001b[0m\u001b[38;2;248;248;242m*} (s : Set α) : Filter α :=\u001b[0m\n\u001b[38;2;248;248;242m  { sets := { t | s ⊆ t }\u001b[0m\n\u001b[38;2;248;248;242m    univ_sets := subset_univ s\u001b[0m\n\u001b[38;2;248;248;242m    sets_of_superset := \u001b[0m\u001b[38;2;249;38;114mfun\u001b[0m\u001b[38;2;248;248;242m hU hUV ↦ Subset.trans hU hUV\u001b[0m\n\u001b[38;2;248;248;242m    inter_sets := \u001b[0m\u001b[38;2;249;38;114mfun\u001b[0m\u001b[38;2;248;248;242m hU hV ↦ subset_inter hU hV }\u001b[0m\n\n\n\u001b[38;2;249;38;114mnamespace\u001b[0m\u001b[38;2;248;248;242m chess.utils\u001b[0m\n\n\u001b[38;2;249;38;114msection\u001b[0m\u001b[38;2;248;248;242m repr\u001b[0m\n\n\u001b[38;2;249;38;114m@[class]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mstructure\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mOne₂\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(α : \u001b[0m\u001b[3;38;2;102;217;239mType\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mwhere\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m/-- The element one -/\u001b[0m\n\u001b[38;2;248;248;242m  one : α\u001b[0m\n\n\u001b[38;2;249;38;114mstructure\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mStandardTwoSimplex\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mwhere\u001b[0m\n\u001b[38;2;248;248;242m  x : ℝ\u001b[0m\n\u001b[38;2;248;248;242m  y : ℝ\u001b[0m\n\u001b[38;2;248;248;242m  z : ℝ\u001b[0m\n\u001b[38;2;248;248;242m  x_nonneg : \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m ≤ x\u001b[0m\n\u001b[38;2;248;248;242m  y_nonneg : \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m ≤ y\u001b[0m\n\u001b[38;2;248;248;242m  z_nonneg : \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m ≤ z\u001b[0m\n\u001b[38;2;248;248;242m  sum_eq : x + y + z = \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\n\u001b[38;2;249;38;114m#check\u001b[0m\u001b[38;2;248;248;242m Pi.ringHom\u001b[0m\n\u001b[38;2;249;38;114m#check\u001b[0m\u001b[38;2;248;248;242m ker_Pi_Quotient_mk\u001b[0m\n\u001b[38;2;249;38;114m#eval\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m + \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\n\u001b[38;2;117;113;94m/-- The homomorphism from ``R ⧸ ⨅ i, I i`` to ``Π i, R ⧸ I i`` featured in the Chinese\u001b[0m\n\u001b[38;2;117;113;94m  Remainder Theorem. -/\u001b[0m\n\u001b[38;2;249;38;114mdef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mchineseMap\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(I : ι → Ideal R) : (R ⧸ ⨅ i, I i) →+* Π i, R ⧸ I i :=\u001b[0m\n\u001b[38;2;248;248;242m  Ideal.Quotient.lift (⨅ i, I i) (Pi.ringHom \u001b[0m\u001b[38;2;249;38;114mfun\u001b[0m\u001b[38;2;248;248;242m i : ι ↦ Ideal.Quotient.mk (I i))\u001b[0m\n\u001b[38;2;248;248;242m    (\u001b[0m\u001b[38;2;249;38;114mby\u001b[0m\u001b[38;2;248;248;242m simp [← RingHom.mem_ker, ker_Pi_Quotient_mk])\u001b[0m\n\n\u001b[38;2;249;38;114mlemma\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mchineseMap_mk\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(I : ι → Ideal R) (x : R) :\u001b[0m\n\u001b[38;2;248;248;242m    chineseMap I (Quotient.mk _ x) = \u001b[0m\u001b[38;2;249;38;114mfun\u001b[0m\u001b[38;2;248;248;242m i : ι ↦ Ideal.Quotient.mk (I i) x :=\u001b[0m\n\u001b[38;2;248;248;242m  rfl\u001b[0m\n\n\u001b[38;2;249;38;114mtheorem\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46misCoprime_Inf\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{I : Ideal R} {J : ι → Ideal R} {s : Finset ι}\u001b[0m\n\u001b[38;2;248;248;242m    (hf : ∀ j ∈ s, IsCoprime I (J j)) : IsCoprime I (⨅ j ∈ s, J j) := \u001b[0m\u001b[38;2;249;38;114mby\u001b[0m\n\u001b[38;2;248;248;242m  classical\u001b[0m\n\u001b[38;2;248;248;242m  simp_rw [isCoprime_iff_add] at *\u001b[0m\n\u001b[38;2;248;248;242m  induction s using Finset.induction \u001b[0m\u001b[38;2;249;38;114mwith\u001b[0m\n\u001b[38;2;248;248;242m  | empty =>\u001b[0m\n\u001b[38;2;248;248;242m      simp\u001b[0m\n\u001b[38;2;248;248;242m  | @insert i s _ hs =>\u001b[0m\n\u001b[38;2;248;248;242m      rw [Finset.iInf_insert, inf_comm, one_eq_top, eq_top_iff, ← one_eq_top]\u001b[0m\n\u001b[38;2;248;248;242m      set K := ⨅ j ∈ s, J j\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mcalc\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m = I + K                  := (hs \u001b[0m\u001b[38;2;249;38;114mfun\u001b[0m\u001b[38;2;248;248;242m j hj ↦ hf j (Finset.mem_insert_of_mem hj)).symm\u001b[0m\n\u001b[38;2;248;248;242m        _ = I + K * (I + J i)      := \u001b[0m\u001b[38;2;249;38;114mby\u001b[0m\u001b[38;2;248;248;242m rw [hf i (Finset.mem_insert_self i s), mul_one]\u001b[0m\n\u001b[38;2;248;248;242m        _ = (\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m + K) * I + K * J i  := \u001b[0m\u001b[38;2;249;38;114mby\u001b[0m\u001b[38;2;248;248;242m ring\u001b[0m\n\u001b[38;2;248;248;242m        _ ≤ I + K ⊓ J i            := \u001b[0m\u001b[38;2;249;38;114mby\u001b[0m\u001b[38;2;248;248;242m gcongr ; apply mul_le_left ; apply mul_le_inf\u001b[0m\n\n\n\u001b[38;2;249;38;114mclass\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mRing₃\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(R : \u001b[0m\u001b[3;38;2;102;217;239mType\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mextends\u001b[0m\u001b[38;2;248;248;242m AddGroup₃ R, Monoid₃ R, MulZeroClass R \u001b[0m\u001b[38;2;249;38;114mwhere\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m/-- Multiplication is left distributive over addition -/\u001b[0m\n\u001b[38;2;248;248;242m  left_distrib : ∀ a b c : R, a * (b + c) = a * b + a * c\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m/-- Multiplication is right distributive over addition -/\u001b[0m\n\u001b[38;2;248;248;242m  right_distrib : ∀ a b c : R, (a + b) * c = a * c + b * c\u001b[0m\n\n\u001b[38;2;249;38;114minstance\u001b[0m\u001b[38;2;248;248;242m {R : Type} \u001b[0m\u001b[38;2;248;248;242m[Ring₃ R] : AddCommGroup₃ R :=\u001b[0m\n\u001b[38;2;248;248;242m{ Ring₃.toAddGroup₃ \u001b[0m\u001b[38;2;249;38;114mwith\u001b[0m\n\u001b[38;2;248;248;242m  add_comm := \u001b[0m\u001b[38;2;249;38;114mby\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;240msorry\u001b[0m\u001b[38;2;248;248;242m }\u001b[0m\n\n\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m repr\u001b[0m\n\n\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m chess.utils\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Less/example.less",
    "content": "\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Load fonts\u001b[0m\n\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239murl\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116mh\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mp\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;230;219;116m/\u001b[0m\u001b[38;2;230;219;116m/\u001b[0m\u001b[38;2;230;219;116mf\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116mg\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mg\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mp\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116mc\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mm\u001b[0m\u001b[38;2;230;219;116m/\u001b[0m\u001b[38;2;230;219;116mc\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116m?\u001b[0m\u001b[38;2;230;219;116mf\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mm\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116my\u001b[0m\u001b[38;2;230;219;116m=\u001b[0m\u001b[38;2;230;219;116mL\u001b[0m\u001b[38;2;230;219;116mu\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116m|\u001b[0m\u001b[38;2;230;219;116mL\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;230;219;116m7\u001b[0m\u001b[38;2;230;219;116m0\u001b[0m\u001b[38;2;230;219;116m0\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Color scheme https://kuler.adobe.com/Salmon-on-Ice-color-theme-2291686/\u001b[0m\n\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;248;248;242mdk\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;190;132;255m#\u001b[0m\u001b[38;2;190;132;255m3E454C\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m dark\u001b[0m\n\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;248;248;242mhl\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;190;132;255m#\u001b[0m\u001b[38;2;190;132;255m2185C5\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m highlight\u001b[0m\n\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;248;248;242mhll\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m#\u001b[0m\u001b[38;2;190;132;255m7ECEFD\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m lighter highlight\u001b[0m\n\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;248;248;242mlt\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;190;132;255m#\u001b[0m\u001b[38;2;190;132;255mFFF6E5\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m light\u001b[0m\n\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;248;248;242mct\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;190;132;255m#\u001b[0m\u001b[38;2;190;132;255mFF7F66\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m contrast\u001b[0m\n\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Sizes\u001b[0m\n\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;248;248;242mcontentWidth\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m750\u001b[0m\u001b[38;2;249;38;114mpx\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;248;248;242mmarginTop\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;190;132;255m50\u001b[0m\u001b[38;2;249;38;114mpx\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;248;248;242mmarginSide\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;190;132;255m100\u001b[0m\u001b[38;2;249;38;114mpx\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Fonts and Text\u001b[0m\n\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;248;248;242mfont\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mLustria\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mserif\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;248;248;242mheaderFont\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mLato\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116msans\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\n\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;248;248;242mfontSize\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;190;132;255m19\u001b[0m\u001b[38;2;249;38;114mpx\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;248;248;242mfontSizeH1\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;190;132;255m50\u001b[0m\u001b[38;2;249;38;114mpx\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;248;248;242mfontSizeH2\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;190;132;255m30\u001b[0m\u001b[38;2;249;38;114mpx\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;248;248;242mparSep\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;190;132;255m40\u001b[0m\u001b[38;2;249;38;114mpx\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\n\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;248;248;242mlinkSizeFactor\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;190;132;255m.\u001b[0m\u001b[38;2;190;132;255m8\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Sizes for small devices\u001b[0m\n\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;248;248;242msmallMarginTop\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m     \u001b[0m\u001b[38;2;190;132;255m25\u001b[0m\u001b[38;2;249;38;114mpx\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;248;248;242msmallMarginSide\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;190;132;255m25\u001b[0m\u001b[38;2;249;38;114mpx\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;248;248;242msmallFontSize\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;190;132;255m18\u001b[0m\u001b[38;2;249;38;114mpx\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;248;248;242msmallFontSizeH1\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;190;132;255m40\u001b[0m\u001b[38;2;249;38;114mpx\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;248;248;242msmallFontSizeH2\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;190;132;255m28\u001b[0m\u001b[38;2;249;38;114mpx\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;248;248;242msmallParSep\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;190;132;255m25\u001b[0m\u001b[38;2;249;38;114mpx\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\n\u001b[38;2;246;170;17m#\u001b[0m\u001b[38;2;246;170;17mwrapper\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mwidth\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m100\u001b[0m\u001b[38;2;249;38;114m%\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mmargin\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mauto\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mmin-height\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m100\u001b[0m\u001b[38;2;249;38;114m%\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mheight\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mauto\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m!important\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mheight\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m100\u001b[0m\u001b[38;2;249;38;114m%\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239moverflow\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mhidden\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m!important\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mposition\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mrelative\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Lisp/utils.lisp",
    "content": "\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mcl\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;249;38;114mdefpackage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;249;38;114mchillax.utils\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;249;38;114muse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;249;38;114mcl\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;249;38;114malexandria\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;249;38;114mexport\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;249;38;114mfun\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;249;38;114mmkhash\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;249;38;114mhashget\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;249;38;114mstrcat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;249;38;114mdequote\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;249;38;114mat\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239min-package\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;249;38;114mchillax.utils\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;117;113;94m;;;\u001b[0m\u001b[38;2;117;113;94m Functions\u001b[0m\n\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mdefmacro\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mfun\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m&\u001b[0m\u001b[38;2;248;248;242mbody\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mbody\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mThis macro puts the FUN back in FUNCTION.\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m`\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mlambda\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m&\u001b[0m\u001b[38;2;248;248;242moptional\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31m_\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mdeclare\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mignorable\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m_\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m,@\u001b[0m\u001b[38;2;255;255;255mbody\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;117;113;94m;;;\u001b[0m\u001b[38;2;117;113;94m Hash tables\u001b[0m\n\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mdefun\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mmkhash\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m&\u001b[0m\u001b[38;2;248;248;242mrest\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mkeys-and-values\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m&\u001b[0m\u001b[38;2;248;248;242maux\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mtable\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mmake-hash-table\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;249;38;114mtest\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m#'\u001b[0m\u001b[38;2;249;38;114mequal\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mConvenience function for `literal' hash table definition.\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mloop\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mkey\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mval\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mon\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mkeys-and-values\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mby\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m#'\u001b[0m\u001b[38;2;102;217;239mcddr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mdo\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239msetf\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mgethash\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mkey\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mtable\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mval\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m     \u001b[0m\u001b[38;2;249;38;114mfinally\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mtable\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mdefun\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mhashget\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mhash\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m&\u001b[0m\u001b[38;2;248;248;242mrest\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mkeys\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mConvenience function for recursively accessing hash tables.\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mreduce\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mlambda\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mh\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mk\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mgethash\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mk\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mh\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mkeys\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;249;38;114minitial-value\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mhash\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mdefine-compiler-macro\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mhashget\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mhash\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m&\u001b[0m\u001b[38;2;248;248;242mrest\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mkeys\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255mnull\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mkeys\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mhash\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mhash-sym\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mmake-symbol\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mHASH\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mkey-syms\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mloop\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mi\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mbelow\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mlength\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mkeys\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m                         \u001b[0m\u001b[38;2;102;217;239mcollect\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mmake-symbol\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mformat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mnil\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m~:@(\u001b[0m\u001b[38;2;190;132;255m~\u001b[0m\u001b[38;2;190;132;255m:R\u001b[0m\u001b[38;2;230;219;116m~)-KEY\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mi\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m`\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255m,\u001b[0m\u001b[38;2;255;255;255mhash-sym\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m,\u001b[0m\u001b[38;2;255;255;255mhash\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m               ,\u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mloop\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mkey\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255min\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mkeys\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255msym\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255min\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mkey-syms\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;255;255;255mcollect\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m`\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255m,\u001b[0m\u001b[38;2;255;255;255msym\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m,\u001b[0m\u001b[38;2;255;255;255mkey\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;255;255;255m,\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mreduce\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mlambda\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mhash\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mkey\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m`\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mgethash\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m,\u001b[0m\u001b[38;2;255;255;255mkey\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m,\u001b[0m\u001b[38;2;255;255;255mhash\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;255;255;255mkey-syms\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;249;38;114minitial-value\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mhash-sym\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mdefun\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31msetf\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mhashget\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mnew-value\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mhash\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mkey\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m&\u001b[0m\u001b[38;2;248;248;242mrest\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mmore-keys\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mUses the last key given to hashget to insert NEW-VALUE into the hash table\u001b[0m\n\u001b[38;2;230;219;116mreturned by the second-to-last key.\u001b[0m\n\u001b[38;2;230;219;116mtl;dr: DWIM SETF function for HASHGET.\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mmore-keys\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239msetf\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mgethash\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mcar\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mlast\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mmore-keys\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m                     \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mapply\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m#'\u001b[0m\u001b[38;2;248;248;242mhashget\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mhash\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mkey\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mbutlast\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mmore-keys\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;255;255;255mnew-value\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239msetf\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mgethash\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mkey\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mhash\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mnew-value\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;117;113;94m;;;\u001b[0m\u001b[38;2;117;113;94m Strings\u001b[0m\n\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mdefun\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mstrcat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m&\u001b[0m\u001b[38;2;248;248;242mrest\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mmore-strings\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mapply\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m#'\u001b[0m\u001b[38;2;102;217;239mconcatenate\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m'\u001b[0m\u001b[38;2;190;132;255mstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mmore-strings\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mdefun\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mdequote\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mstring\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mlen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mlength\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mstring\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mand\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mlen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mstarts-with\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m#\\\u001b[0m\u001b[38;2;190;132;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mstring\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mends-with\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m#\\\u001b[0m\u001b[38;2;190;132;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mstring\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239msubseq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mlen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[3;38;2;102;217;239mstring\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;117;113;94m;;;\u001b[0m\n\u001b[38;2;117;113;94m;;;\u001b[0m\u001b[38;2;117;113;94m At\u001b[0m\n\u001b[38;2;117;113;94m;;;\u001b[0m\n\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mdefgeneric\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mdoc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m&\u001b[0m\u001b[38;2;248;248;242mrest\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mkeys\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mdefgeneric\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31msetf\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mat\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mnew-value\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdoc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mkey\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m&\u001b[0m\u001b[38;2;248;248;242mrest\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mmore-keys\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mdefmethod\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mdoc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mhash-table\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m&\u001b[0m\u001b[38;2;248;248;242mrest\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mkeys\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mapply\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m#'\u001b[0m\u001b[38;2;248;248;242mhashget\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdoc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mkeys\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mdefmethod\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31msetf\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mat\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mnew-value\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mdoc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mhash-table\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mkey\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m&\u001b[0m\u001b[38;2;248;248;242mrest\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mmore-keys\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mapply\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m#'\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239msetf\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mhashget\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mnew-value\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdoc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mkey\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mmore-keys\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mdefmethod\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mdoc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mlist\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m&\u001b[0m\u001b[38;2;248;248;242mrest\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mkeys\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mreduce\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mlambda\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31malist\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mkey\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mcdr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239massoc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mkey\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255malist\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;249;38;114mtest\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m#'\u001b[0m\u001b[38;2;249;38;114mequal\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m          \u001b[0m\u001b[38;2;255;255;255mkeys\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;249;38;114minitial-value\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdoc\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mdefmethod\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31msetf\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mat\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mnew-value\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mdoc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mlist\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mkey\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m&\u001b[0m\u001b[38;2;248;248;242mrest\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mmore-keys\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mmore-keys\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239msetf\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mcdr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239massoc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mcar\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mlast\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mmore-keys\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mapply\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m#'\u001b[0m\u001b[38;2;248;248;242mat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdoc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mkey\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mbutlast\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mmore-keys\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;249;38;114mtest\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m#'\u001b[0m\u001b[38;2;249;38;114mequal\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;255;255;255mnew-value\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239msetf\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mcdr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239massoc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mkey\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdoc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;249;38;114mtest\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m#'\u001b[0m\u001b[38;2;249;38;114mequal\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mnew-value\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;117;113;94m;;\u001b[0m\u001b[38;2;117;113;94m A playful alias.\u001b[0m\n\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mdefun\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m@\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mdoc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m&\u001b[0m\u001b[38;2;248;248;242mrest\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mkeys\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mapply\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m#'\u001b[0m\u001b[38;2;248;248;242mat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdoc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mkeys\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mdefun\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31msetf\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31m@\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mnew-value\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdoc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mkey\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m&\u001b[0m\u001b[38;2;248;248;242mrest\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mmore-keys\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mapply\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m#'\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239msetf\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mat\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mnew-value\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdoc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mkey\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mmore-keys\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Literate Haskell/Main.lhs",
    "content": "\u001b[38;2;249;38;114m\\\u001b[0m\u001b[38;2;249;38;114mdocumentclass\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[3;38;2;166;226;46ma\u001b[0m\u001b[3;38;2;166;226;46mr\u001b[0m\u001b[3;38;2;166;226;46mt\u001b[0m\u001b[3;38;2;166;226;46mi\u001b[0m\u001b[3;38;2;166;226;46mc\u001b[0m\u001b[3;38;2;166;226;46ml\u001b[0m\u001b[3;38;2;166;226;46me\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;249;38;114m\\\u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[3;38;2;253;151;31mdocument\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;102;217;239m\\\u001b[0m\u001b[38;2;102;217;239msection*\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[38;2;166;226;46mIntroduction\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;248;248;242mText outside code environments should follow TeX/LaTeX highlighting.\u001b[0m\n\n\u001b[38;2;248;248;242mThe code environment delimiters themselves should be highlighted.\u001b[0m\n\n\u001b[38;2;248;248;242mText inside code environments should follow regular Haskell highlighting.\u001b[0m\n\n\u001b[38;2;102;217;239m\\\u001b[0m\u001b[38;2;102;217;239mbegin\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[3;38;2;253;151;31mcode\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;248;248;242mData.List\u001b[0m\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;248;248;242mSystem.Environment\u001b[0m\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;248;248;242mText.Printf\u001b[0m\n\n\u001b[38;2;166;226;46mtwoSumN\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m::\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mInt\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m [\u001b[0m\u001b[3;38;2;102;217;239mInt\u001b[0m\u001b[38;2;248;248;242m] \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m [\u001b[0m\u001b[3;38;2;102;217;239mInt\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242mtwoSumN _ \u001b[0m\u001b[38;2;190;132;255m[]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m[]\u001b[0m\n\u001b[38;2;248;248;242mtwoSumN n (x \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m xs) \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m (n \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m x) \u001b[0m\u001b[38;2;249;38;114m`\u001b[0m\u001b[38;2;249;38;114melem\u001b[0m\u001b[38;2;249;38;114m`\u001b[0m\u001b[38;2;248;248;242m xs \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m [x\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m n \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m x]\u001b[0m\n\u001b[38;2;248;248;242m                   \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m otherwise         \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m twoSumN n xs\u001b[0m\n\n\u001b[38;2;166;226;46mthreeSumN\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m::\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mInt\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m [\u001b[0m\u001b[3;38;2;102;217;239mInt\u001b[0m\u001b[38;2;248;248;242m] \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m [\u001b[0m\u001b[3;38;2;102;217;239mInt\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242mthreeSumN _ \u001b[0m\u001b[38;2;190;132;255m[]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m[]\u001b[0m\n\u001b[38;2;248;248;242mthreeSumN n (x \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m xs) \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m null partial \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m threeSumN n xs\u001b[0m\n\u001b[38;2;248;248;242m                     \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m otherwise    \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m x \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m partial\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mwhere\u001b[0m\u001b[38;2;248;248;242m partial \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m twoSumN (n \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m x) xs\u001b[0m\n\u001b[38;2;102;217;239m\\\u001b[0m\u001b[38;2;102;217;239mend\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[3;38;2;253;151;31mcode\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;248;248;242mText in-between code environments.\u001b[0m\n\u001b[38;2;117;113;94m% LaTeX comment.\u001b[0m\n\n\u001b[38;2;102;217;239m\\\u001b[0m\u001b[38;2;102;217;239mbegin\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[3;38;2;253;151;31mcode\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\n\u001b[38;2;166;226;46moutput\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m::\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mString\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mIO\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239m()\u001b[0m\n\u001b[38;2;248;248;242moutput path \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mdo\u001b[0m\n\u001b[38;2;248;248;242m  input \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m sort \u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242m map read \u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242m filter (not \u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242m null) \u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242m lines \u001b[0m\u001b[38;2;249;38;114m<$>\u001b[0m\u001b[38;2;248;248;242m readFile path\u001b[0m\n\u001b[38;2;248;248;242m  printf \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mFile: %s\u001b[0m\u001b[38;2;190;132;255m\\n\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m path\u001b[0m\n\u001b[38;2;248;248;242m  printf \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m  Part 1: %d\u001b[0m\u001b[38;2;190;132;255m\\n\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242m product \u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242m twoSumN \u001b[0m\u001b[38;2;190;132;255m2020\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m$\u001b[0m\u001b[38;2;248;248;242m input\u001b[0m\n\u001b[38;2;248;248;242m  printf \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m  Part 2: %d\u001b[0m\u001b[38;2;190;132;255m\\n\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242m product \u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242m threeSumN \u001b[0m\u001b[38;2;190;132;255m2020\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m$\u001b[0m\u001b[38;2;248;248;242m input\u001b[0m\n\n\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m Haskell comment inside code environment.\u001b[0m\n\n\u001b[38;2;166;226;46mmain\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m::\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mIO\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239m()\u001b[0m\n\u001b[38;2;248;248;242mmain \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m getArgs \u001b[0m\u001b[38;2;249;38;114m>>=\u001b[0m\u001b[38;2;248;248;242m mapM_ output\u001b[0m\n\u001b[38;2;102;217;239m\\\u001b[0m\u001b[38;2;102;217;239mend\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[3;38;2;253;151;31mcode\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;249;38;114m\\\u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[3;38;2;253;151;31mdocument\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/LiveScript/livescript-demo.ls",
    "content": "\u001b[38;2;166;226;46ma\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\u001b[38;2;249;38;114mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mb\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m-->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\n\u001b[38;2;249;38;114mvar\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m~>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\n\u001b[38;2;166;226;46md\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m~~>\u001b[0m\n\u001b[38;2;166;226;46me\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255ma\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255mb\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m~>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255mc\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m-->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255md\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;102;217;239me\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m~~>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\n\u001b[38;2;166;226;46mdashes-identifier\u001b[0m\u001b[38;2;166;226;46ms\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m->\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255ma\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255ma\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255mb\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m--\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mc\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255ma-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255ma\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242ma\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;255;255;255ma\u001b[0m\n\n\u001b[38;2;246;170;17m//abc \u001b[0m\u001b[38;2;246;170;17m#\u001b[0m\u001b[38;2;246;170;17meaze \u001b[0m\u001b[38;2;246;170;17m#\u001b[0m\u001b[38;2;246;170;17m@ //\u001b[0m\n\u001b[38;2;246;170;17m//\u001b[0m\n\u001b[38;2;246;170;17ma \u001b[0m\u001b[38;2;246;170;17m#\u001b[0m\u001b[38;2;246;170;17mbaze\u001b[0m\n\u001b[38;2;246;170;17m//\u001b[0m\n\n\u001b[38;2;255;255;255mpubli\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mit\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\\\u001b[0m\u001b[38;2;230;219;116mabc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mand\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;166;226;46m$-\u001b[0m\u001b[38;2;166;226;46my\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m!\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255ma\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m->\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m~\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mmap\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;246;170;17m//a\u001b[0m\u001b[38;2;246;170;17m#\u001b[0m\u001b[38;2;246;170;17m//\u001b[0m\n\u001b[38;2;249;38;114mthen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mmatch\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mthat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m| _\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114motherwise\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mimplements\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m$\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m#\u001b[0m\u001b[38;2;230;219;116mabc \u001b[0m\u001b[38;2;230;219;116m#\u001b[0m\u001b[38;2;230;219;116m@a\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\n\u001b[38;2;249;38;114mswitch\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255ma\u001b[0m\u001b[38;2;249;38;114m=>\u001b[0m\u001b[38;2;255;255;255mb\u001b[0m\n\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255ma\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mb\u001b[0m\n\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255ma\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mb\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mc\u001b[0m\n\n\u001b[38;2;166;226;46munderscores_i$\u001b[0m\u001b[38;2;166;226;46md\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m->\u001b[0m\n\u001b[38;2;246;170;17m/regexp1/\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mand\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;246;170;17m//regexp2//g\u001b[0m\n\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mstrings\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mand\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mstrings\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mand\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\\\u001b[0m\u001b[38;2;230;219;116mstrings\u001b[0m\n\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mtil\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m10\u001b[0m\u001b[38;2;248;248;242m] \u001b[0m\u001b[38;2;249;38;114mor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mto\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m50\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114m|>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mmap\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m(\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114m|>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mfilter\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m(\u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114m|>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mfold\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m(\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[3;38;2;102;217;239m)\u001b[0m\n\n\u001b[38;2;248;248;242msetTimeout\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239m_\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3000\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdo-stuff\u001b[0m\n\u001b[38;2;102;217;239m_\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mmap\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m_abc\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m__\u001b[0m\n\n\n\u001b[38;2;249;38;114mclass\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mClass\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mextends\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mAnc-est-or\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255margs\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m->\u001b[0m\n\n\u001b[38;2;166;226;46mcop\u001b[0m\u001b[38;2;166;226;46my\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;249;38;114mfrom\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;249;38;114mto\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;255;255;255mcallback\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m-->\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255merror\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;255;255;255mdata\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m<-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mread\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mfile\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mcallback\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255merror\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255merror\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255merror\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m<~\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mwrite\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mfile\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;255;255;255mdata\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mcallback\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255merror\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255merror\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242mcallback\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\n\u001b[38;2;248;248;242m$\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\\\u001b[0m\u001b[38;2;230;219;116m#gafBr\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mtext\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$t\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mfmtFloat\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mefb\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;255;255;255mgaf\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\n\u001b[3;38;2;102;217;239m->\u001b[0m\n\u001b[3;38;2;102;217;239m~>\u001b[0m\n\u001b[3;38;2;102;217;239m~~>\u001b[0m\n\u001b[3;38;2;102;217;239m-->\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Comment\u001b[0m\n\u001b[38;2;117;113;94m/*\u001b[0m\u001b[38;2;117;113;94m Comment \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m error, data <- read file\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m/*\u001b[0m\u001b[38;2;117;113;94m error, data <- read file \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\n\u001b[38;2;166;226;46mad\u001b[0m\u001b[38;2;166;226;46md\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;248;248;242ma\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242mb\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m-->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255ma\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mb\u001b[0m\n\u001b[38;2;248;248;242madd\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\n\u001b[38;2;248;248;242mdo-stuff\u001b[0m\u001b[38;2;249;38;114m!\u001b[0m\n\u001b[38;2;255;255;255mdo-stuff\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\n\u001b[38;2;248;248;242mdo-stuff\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\u001b[38;2;255;255;255mdo-stuff\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;248;248;242mdo-stuff\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;255;255;255mdo-stuff\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m/\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\u001b[38;2;248;248;242ma\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mb\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m|>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255md\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242me\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mf\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mg\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mcats\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mcats\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\n\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mcats\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m`\u001b[0m\u001b[38;2;102;217;239m_\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mis-insensitive\u001b[0m\u001b[38;2;249;38;114m`\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mCATS\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\n\u001b[38;2;248;248;242msetTimeout\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239m_\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m1000\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m!->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mconsole\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mlog\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mWho summoned me\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\n\u001b[38;2;248;248;242mprivate-list\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114myield\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;248;248;242mget-private-list\u001b[0m\u001b[38;2;249;38;114m!\u001b[0m\n\u001b[38;2;249;38;114mswitch\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m#\u001b[0m\u001b[38;2;230;219;116m@@spaghetti\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[3;38;2;102;217;239m~function\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46madd\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242ma\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;248;248;242mb\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255ma\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mb\u001b[0m\n\u001b[38;2;255;255;255mrow\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;255;255;255m_id\u001b[0m\n\u001b[38;2;249;38;114mnew\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mSpaghetti\u001b[0m\n\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;249;38;114m++\u001b[0m\u001b[38;2;255;255;255ma\u001b[0m\u001b[38;2;249;38;114m++\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;249;38;114m++\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m++\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[3;38;2;102;217;239m(\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;255;255;255mcool\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[3;38;2;102;217;239m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m(\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255ma\u001b[0m\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[3;38;2;102;217;239m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m(\u001b[0m\u001b[38;2;249;38;114m/\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[3;38;2;102;217;239m)\u001b[0m\n\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;248;248;242mina\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;255;255;255ma\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[3;38;2;102;217;239m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[3;38;2;102;217;239m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255ma\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255mina\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;255;255;255m$a\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255ma\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mis-in\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[3;38;2;102;217;239m(\u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[3;38;2;102;217;239m)\u001b[0m\n\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[3;38;2;102;217;239m(\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242ma\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255ma\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Log/example.log",
    "content": "\u001b[38;2;190;132;255m2021-03-06\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m23:22:21\u001b[0m\u001b[38;2;190;132;255m.\u001b[0m\u001b[38;2;190;132;255m392\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;166;226;46mhttps://\u001b[0m\u001b[4;38;2;166;226;46m[\u001b[0m\u001b[4;38;2;190;132;255m2001\u001b[0m\u001b[4;38;2;166;226;46m:\u001b[0m\u001b[4;38;2;190;132;255mdb8\u001b[0m\u001b[4;38;2;166;226;46m:\u001b[0m\u001b[4;38;2;190;132;255m4006\u001b[0m\u001b[4;38;2;166;226;46m:\u001b[0m\u001b[4;38;2;190;132;255m812\u001b[0m\u001b[4;38;2;166;226;46m:\u001b[0m\u001b[4;38;2;166;226;46m:\u001b[0m\u001b[4;38;2;190;132;255m200e\u001b[0m\u001b[4;38;2;166;226;46m]\u001b[0m\u001b[4;38;2;166;226;46m:\u001b[0m\u001b[4;38;2;190;132;255m8080\u001b[0m\u001b[4;38;2;166;226;46m/path/the\u001b[0m\u001b[4;38;2;190;132;255m%\u001b[0m\u001b[4;38;2;190;132;255m20\u001b[0m\u001b[4;38;2;166;226;46mpage\u001b[0m\u001b[4;38;2;166;226;46m.\u001b[0m\u001b[4;38;2;166;226;46mhtml\u001b[0m\n\u001b[38;2;190;132;255m2021-03-06\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m23:22:21\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;166;226;46mhttps://\u001b[0m\u001b[4;38;2;166;226;46mexample.com\u001b[0m\u001b[4;38;2;166;226;46m:\u001b[0m\u001b[4;38;2;190;132;255m8080\u001b[0m\u001b[4;38;2;166;226;46m/path/the\u001b[0m\u001b[4;38;2;190;132;255m%\u001b[0m\u001b[4;38;2;190;132;255m20\u001b[0m\u001b[4;38;2;166;226;46mpage\u001b[0m\u001b[4;38;2;166;226;46m(with_parens)\u001b[0m\u001b[4;38;2;166;226;46m.\u001b[0m\u001b[4;38;2;166;226;46mhtml\u001b[0m\n\u001b[38;2;190;132;255m2022-03-16\u001b[0m\u001b[38;2;249;38;114mT\u001b[0m\u001b[38;2;190;132;255m17:41:02\u001b[0m\u001b[38;2;190;132;255m.\u001b[0m\u001b[38;2;190;132;255m519\u001b[0m\u001b[38;2;248;248;240m helix_term::application [\u001b[0m\u001b[38;2;248;248;240mWARN\u001b[0m\u001b[38;2;248;248;240m] unhandled window/showMessage: ShowMessageParams { typ: \u001b[0m\u001b[38;2;221;32;32mError\u001b[0m\u001b[38;2;248;248;240m, message: \u001b[0m\u001b[38;2;230;219;116m\"rust-analyzer failed to load workspace: Failed to read Cargo metadata from Cargo.toml file /home/zeta/dev/raytracer/Cargo.toml, cargo 1.61.0-nightly (65c8266 2022-03-09): Failed to run `\u001b[0m\u001b[38;2;190;132;255m\\\"\u001b[0m\u001b[38;2;230;219;116mcargo\u001b[0m\u001b[38;2;190;132;255m\\\"\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;190;132;255m\\\"\u001b[0m\u001b[38;2;230;219;116mmetadata\u001b[0m\u001b[38;2;190;132;255m\\\"\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;190;132;255m\\\"\u001b[0m\u001b[38;2;230;219;116m--format-version\u001b[0m\u001b[38;2;190;132;255m\\\"\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;190;132;255m\\\"\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;190;132;255m\\\"\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;190;132;255m\\\"\u001b[0m\u001b[38;2;230;219;116m--manifest-path\u001b[0m\u001b[38;2;190;132;255m\\\"\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;190;132;255m\\\"\u001b[0m\u001b[38;2;230;219;116m/home/zeta/dev/raytracer/Cargo.toml\u001b[0m\u001b[38;2;190;132;255m\\\"\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;190;132;255m\\\"\u001b[0m\u001b[38;2;230;219;116m--filter-platform\u001b[0m\u001b[38;2;190;132;255m\\\"\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;190;132;255m\\\"\u001b[0m\u001b[38;2;230;219;116mwasm32-unknown-unknown\u001b[0m\u001b[38;2;190;132;255m\\\"\u001b[0m\u001b[38;2;230;219;116m`: `cargo metadata` exited with an error:     Updating crates.io index\u001b[0m\u001b[38;2;190;132;255m\\n\u001b[0m\u001b[38;2;230;219;116merror: failed to select a version for `parking_lot`.\u001b[0m\u001b[38;2;190;132;255m\\n\u001b[0m\u001b[38;2;230;219;116m    ... required by package `raytracer v0.1.0 (/home/zeta/dev/raytracer)`\u001b[0m\u001b[38;2;190;132;255m\\n\u001b[0m\u001b[38;2;230;219;116mversions that meet the requirements `^0.12.0` are: 0.12.0\u001b[0m\u001b[38;2;190;132;255m\\n\u001b[0m\u001b[38;2;190;132;255m\\n\u001b[0m\u001b[38;2;230;219;116mthe package `raytracer` depends on `parking_lot`, with features: `wasm-bindgen` but `parking_lot` does not have these features.\u001b[0m\u001b[38;2;190;132;255m\\n\u001b[0m\u001b[38;2;190;132;255m\\n\u001b[0m\u001b[38;2;190;132;255m\\n\u001b[0m\u001b[38;2;230;219;116mfailed to select a version for `parking_lot` which could resolve this conflict\u001b[0m\u001b[38;2;190;132;255m\\n\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;240m }\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Lua/test.lua",
    "content": "\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m- Finds factorial of a number.\u001b[0m\n\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m @param value Number to find factorial.\u001b[0m\n\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m @return Factorial of number.\u001b[0m\n\u001b[38;2;249;38;114mlocal\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mfactorial\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mvalue\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mvalue\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mvalue\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mfactorial\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mvalue\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\u001b[38;2;249;38;114mend\u001b[0m\n\n\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m- Joins a table of strings into a new string.\u001b[0m\n\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m @param table Table of strings.\u001b[0m\n\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m @param separator Separator character.\u001b[0m\n\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m @return Joined string.\u001b[0m\n\u001b[38;2;249;38;114mlocal\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mjoin\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mtable\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mseparator\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mlocal\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdata\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mindex\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mvalue\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mipairs\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mtable\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mdo\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255mdata\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdata\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m..\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mvalue\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m..\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mseparator\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255mdata\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdata\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242msub\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdata\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242mlen\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdata\u001b[0m\n\u001b[38;2;249;38;114mend\u001b[0m\n\n\u001b[38;2;249;38;114mlocal\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255ma\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mfactorial\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255ma\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;249;38;114mlocal\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mb\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mjoin\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mu\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m,\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mb\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/MATLAB/test.matlab",
    "content": "\u001b[38;2;249;38;114mfunction\u001b[0m\u001b[38;2;248;248;242m zz\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;166;226;46msample\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31maa\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;117;113;94m%%\u001b[0m\u001b[38;2;117;113;94m%%%%%%%%%%%%%%%%\u001b[0m\n\u001b[38;2;117;113;94m%\u001b[0m\u001b[38;2;117;113;94m some comments\u001b[0m\n\u001b[38;2;117;113;94m%%\u001b[0m\u001b[38;2;117;113;94m%%%%%%%%%%%%%%%%\u001b[0m\n\n\u001b[38;2;248;248;242mx\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116ma string\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m;    \u001b[0m\u001b[38;2;117;113;94m%\u001b[0m\u001b[38;2;117;113;94m some 'ticks' in a comment\u001b[0m\n\u001b[38;2;248;248;242my\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116ma string with \u001b[0m\u001b[38;2;190;132;255m''\u001b[0m\u001b[38;2;230;219;116minteral\u001b[0m\u001b[38;2;190;132;255m''\u001b[0m\u001b[38;2;230;219;116m quotes\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mi\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m20\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mdisp\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255mi\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;249;38;114mend\u001b[0m\n\n\u001b[38;2;248;248;242ma\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;249;38;114mrand\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m30\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242mb\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;249;38;114mrand\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m30\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242mc\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242ma\u001b[0m\u001b[38;2;249;38;114m .* \u001b[0m\u001b[38;2;248;248;242mb\u001b[0m\u001b[38;2;249;38;114m ./ \u001b[0m\u001b[38;2;248;248;242ma\u001b[0m\u001b[38;2;249;38;114m \\ \u001b[0m\u001b[38;2;248;248;242m... \u001b[0m\u001b[38;2;248;248;242mcomment\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mof\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mline\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mand\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mcontinuation\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mb\u001b[0m\u001b[38;2;249;38;114m .* \u001b[0m\u001b[38;2;248;248;242ma\u001b[0m\u001b[38;2;249;38;114m + \u001b[0m\u001b[38;2;248;248;242mb\u001b[0m\u001b[38;2;249;38;114m - \u001b[0m\u001b[38;2;248;248;242ma\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242mc\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;248;248;242ma\u001b[0m\u001b[38;2;249;38;114m'\u001b[0m\u001b[38;2;249;38;114m * \u001b[0m\u001b[38;2;248;248;242mb\u001b[0m\u001b[38;2;249;38;114m'\u001b[0m\u001b[38;2;248;248;242m;  \u001b[0m\u001b[38;2;117;113;94m%\u001b[0m\u001b[38;2;117;113;94m note: these ticks are for transpose, not quotes.\u001b[0m\n\n\u001b[38;2;249;38;114mdisp\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116ma comment symbol, %, in a string\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;249;38;114m!echo abc % this isn't a comment - it's passed to system command\u001b[0m\n\n\u001b[38;2;249;38;114mfunction\u001b[0m\u001b[38;2;248;248;242m y\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;166;226;46mmyfunc\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mx\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242my\u001b[0m\u001b[38;2;249;38;114m = \u001b[0m\u001b[38;2;249;38;114mexp\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mx\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;117;113;94m%{\u001b[0m\n\u001b[38;2;117;113;94m  a block comment\u001b[0m\n\u001b[38;2;117;113;94m%}\u001b[0m\n\n\u001b[38;2;249;38;114mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mno_arg_func\u001b[0m\n\u001b[38;2;249;38;114mfprintf\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;190;132;255m%s\u001b[0m\u001b[38;2;190;132;255m\\n\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mfunction with no args\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114mend\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Makefile/Makefile",
    "content": "\u001b[38;2;124;120;101m#\u001b[0m\u001b[38;2;124;120;101m Redis Makefile\u001b[0m\n\u001b[38;2;124;120;101m#\u001b[0m\u001b[38;2;124;120;101m Copyright (C) 2009 Salvatore Sanfilippo <antirez at gmail dot com>\u001b[0m\n\u001b[38;2;124;120;101m#\u001b[0m\u001b[38;2;124;120;101m This file is released under the BSD license, see the COPYING file\u001b[0m\n\u001b[38;2;124;120;101m#\u001b[0m\n\u001b[38;2;124;120;101m#\u001b[0m\u001b[38;2;124;120;101m The Makefile composes the final FINAL_CFLAGS and FINAL_LDFLAGS using\u001b[0m\n\u001b[38;2;124;120;101m#\u001b[0m\u001b[38;2;124;120;101m what is needed for Redis plus the standard CFLAGS and LDFLAGS passed.\u001b[0m\n\u001b[38;2;124;120;101m#\u001b[0m\u001b[38;2;124;120;101m However when building the dependencies (Jemalloc, Lua, Hiredis, ...)\u001b[0m\n\u001b[38;2;124;120;101m#\u001b[0m\u001b[38;2;124;120;101m CFLAGS and LDFLAGS are propagated to the dependencies, so to pass\u001b[0m\n\u001b[38;2;124;120;101m#\u001b[0m\u001b[38;2;124;120;101m flags only to be used when compiling / linking Redis itself REDIS_CFLAGS\u001b[0m\n\u001b[38;2;124;120;101m#\u001b[0m\u001b[38;2;124;120;101m and REDIS_LDFLAGS are used instead (this is the case of 'make gcov').\u001b[0m\n\u001b[38;2;124;120;101m#\u001b[0m\n\u001b[38;2;124;120;101m#\u001b[0m\u001b[38;2;124;120;101m Dependencies are stored in the Makefile.dep file. To rebuild this file\u001b[0m\n\u001b[38;2;124;120;101m#\u001b[0m\u001b[38;2;124;120;101m Just use 'make dep', but this is only needed by developers.\u001b[0m\n\n\u001b[38;2;249;38;114mrelease_hdr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m$(\u001b[0m\u001b[38;2;102;217;239mshell\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;255;255;255msh\u001b[0m\u001b[3;38;2;253;151;31m -\u001b[0m\u001b[3;38;2;253;151;31mc\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m./mkreleasehdr.sh\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;249;38;114muname_S\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m$(\u001b[0m\u001b[38;2;102;217;239mshell\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;255;255;255msh\u001b[0m\u001b[3;38;2;253;151;31m -\u001b[0m\u001b[3;38;2;253;151;31mc\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116muname -s 2>/dev/null || echo not\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;249;38;114muname_M\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m$(\u001b[0m\u001b[38;2;102;217;239mshell\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;255;255;255msh\u001b[0m\u001b[3;38;2;253;151;31m -\u001b[0m\u001b[3;38;2;253;151;31mc\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116muname -m 2>/dev/null || echo not\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;249;38;114mOPTIMIZATION\u001b[0m\u001b[38;2;249;38;114m?=\u001b[0m\u001b[38;2;230;219;116m-O2\u001b[0m\n\u001b[38;2;249;38;114mDEPENDENCY_TARGETS\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116mhiredis linenoise lua\u001b[0m\n\u001b[38;2;249;38;114mNODEPS\u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;230;219;116mclean distclean\u001b[0m\n\n\u001b[38;2;124;120;101m#\u001b[0m\u001b[38;2;124;120;101m Default settings\u001b[0m\n\u001b[38;2;249;38;114mSTD\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m-std=c11 -pedantic -DREDIS_STATIC=''\u001b[0m\n\u001b[38;2;249;38;114mifneq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;249;38;114m$(\u001b[0m\u001b[38;2;102;217;239mfindstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mclang\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mCC\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114mifneq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;249;38;114m$(\u001b[0m\u001b[38;2;102;217;239mfindstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mFreeBSD\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31muname_S\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114m  STD\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;230;219;116m-Wno-c11-extensions\u001b[0m\n\u001b[38;2;249;38;114mendif\u001b[0m\n\u001b[38;2;249;38;114mendif\u001b[0m\n\u001b[38;2;249;38;114mWARN\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m-Wall -W -Wno-missing-field-initializers\u001b[0m\n\u001b[38;2;249;38;114mOPT\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mOPTIMIZATION\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\n\n\u001b[38;2;249;38;114mPREFIX\u001b[0m\u001b[38;2;249;38;114m?=\u001b[0m\u001b[38;2;230;219;116m/usr/local\u001b[0m\n\u001b[38;2;249;38;114mINSTALL_BIN\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mPREFIX\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;230;219;116m/bin\u001b[0m\n\u001b[38;2;249;38;114mINSTALL\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116minstall\u001b[0m\n\u001b[38;2;249;38;114mPKG_CONFIG\u001b[0m\u001b[38;2;249;38;114m?=\u001b[0m\u001b[38;2;230;219;116mpkg-config\u001b[0m\n\n\u001b[38;2;124;120;101m#\u001b[0m\u001b[38;2;124;120;101m Default allocator defaults to Jemalloc if it's not an ARM\u001b[0m\n\u001b[38;2;249;38;114mMALLOC\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116mlibc\u001b[0m\n\u001b[38;2;249;38;114mifneq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31muname_M\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242marmv6l\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114mifneq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31muname_M\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242marmv7l\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114mifeq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31muname_S\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242mLinux\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114m\tMALLOC\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116mjemalloc\u001b[0m\n\u001b[38;2;249;38;114mendif\u001b[0m\n\u001b[38;2;249;38;114mendif\u001b[0m\n\u001b[38;2;249;38;114mendif\u001b[0m\n\n\u001b[38;2;124;120;101m#\u001b[0m\u001b[38;2;124;120;101m To get ARM stack traces if Redis crashes we need a special C flag.\u001b[0m\n\u001b[38;2;249;38;114mifneq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;249;38;114m$(\u001b[0m\u001b[38;2;102;217;239mfilter\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242maarch64 armv\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31muname_M\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114m        CFLAGS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;230;219;116m-funwind-tables\u001b[0m\n\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;249;38;114mifneq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;249;38;114m$(\u001b[0m\u001b[38;2;102;217;239mfindstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242marmv\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31muname_M\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114m        CFLAGS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;230;219;116m-funwind-tables\u001b[0m\n\u001b[38;2;249;38;114mendif\u001b[0m\n\u001b[38;2;249;38;114mendif\u001b[0m\n\n\u001b[38;2;124;120;101m#\u001b[0m\u001b[38;2;124;120;101m Backwards compatibility for selecting an allocator\u001b[0m\n\u001b[38;2;249;38;114mifeq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mUSE_TCMALLOC\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242myes\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114m\tMALLOC\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116mtcmalloc\u001b[0m\n\u001b[38;2;249;38;114mendif\u001b[0m\n\n\u001b[38;2;249;38;114mifeq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mUSE_TCMALLOC_MINIMAL\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242myes\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114m\tMALLOC\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116mtcmalloc_minimal\u001b[0m\n\u001b[38;2;249;38;114mendif\u001b[0m\n\n\u001b[38;2;249;38;114mifeq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mUSE_JEMALLOC\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242myes\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114m\tMALLOC\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116mjemalloc\u001b[0m\n\u001b[38;2;249;38;114mendif\u001b[0m\n\n\u001b[38;2;249;38;114mifeq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mUSE_JEMALLOC\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242mno\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114m\tMALLOC\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116mlibc\u001b[0m\n\u001b[38;2;249;38;114mendif\u001b[0m\n\n\u001b[38;2;124;120;101m#\u001b[0m\u001b[38;2;124;120;101m Override default settings if possible\u001b[0m\n\u001b[38;2;249;38;114m-include\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m.make-settings\u001b[0m\n\n\u001b[38;2;249;38;114mFINAL_CFLAGS\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mSTD\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mWARN\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mOPT\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mDEBUG\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mCFLAGS\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_CFLAGS\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\n\u001b[38;2;249;38;114mFINAL_LDFLAGS\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mLDFLAGS\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_LDFLAGS\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mDEBUG\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\n\u001b[38;2;249;38;114mFINAL_LIBS\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m-lm\u001b[0m\n\u001b[38;2;249;38;114mDEBUG\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m-g -ggdb\u001b[0m\n\n\u001b[38;2;124;120;101m#\u001b[0m\u001b[38;2;124;120;101m Linux ARM needs -latomic at linking time\u001b[0m\n\u001b[38;2;249;38;114mifneq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;249;38;114m$(\u001b[0m\u001b[38;2;102;217;239mfilter\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242maarch64 armv\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31muname_M\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114m        FINAL_LIBS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;230;219;116m-latomic\u001b[0m\n\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;249;38;114mifneq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;249;38;114m$(\u001b[0m\u001b[38;2;102;217;239mfindstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242marmv\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31muname_M\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114m        FINAL_LIBS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;230;219;116m-latomic\u001b[0m\n\u001b[38;2;249;38;114mendif\u001b[0m\n\u001b[38;2;249;38;114mendif\u001b[0m\n\n\u001b[38;2;249;38;114mifeq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31muname_S\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242mSunOS\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;124;120;101m#\u001b[0m\u001b[38;2;124;120;101m SunOS\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mifneq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31m@@\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m32bit\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114m\t\tCFLAGS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m-m64\u001b[0m\n\u001b[38;2;249;38;114m\t\tLDFLAGS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m-m64\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;249;38;114mendif\u001b[0m\n\u001b[38;2;249;38;114m\tDEBUG\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m-g\u001b[0m\n\u001b[38;2;249;38;114m\tDEBUG_FLAGS\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m-g\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;249;38;114mexport\u001b[0m\u001b[38;2;249;38;114m CFLAGS LDFLAGS DEBUG DEBUG_FLAGS\u001b[0m\n\u001b[38;2;249;38;114m\tINSTALL\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116mcp -pf\u001b[0m\n\u001b[38;2;249;38;114m\tFINAL_CFLAGS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m-D__EXTENSIONS__ -D_XPG6\u001b[0m\n\u001b[38;2;249;38;114m\tFINAL_LIBS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m-ldl -lnsl -lsocket -lresolv -lpthread -lrt\u001b[0m\n\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;249;38;114mifeq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31muname_S\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242mDarwin\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;124;120;101m#\u001b[0m\u001b[38;2;124;120;101m Darwin\u001b[0m\n\u001b[38;2;249;38;114m\tFINAL_LIBS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m-ldl\u001b[0m\n\u001b[38;2;249;38;114m\tOPENSSL_CFLAGS\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m-I/usr/local/opt/openssl/include\u001b[0m\n\u001b[38;2;249;38;114m\tOPENSSL_LDFLAGS\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m-L/usr/local/opt/openssl/lib\u001b[0m\n\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;249;38;114mifeq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31muname_S\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242mAIX\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;124;120;101m#\u001b[0m\u001b[38;2;124;120;101m AIX\u001b[0m\n\u001b[38;2;249;38;114m        FINAL_LDFLAGS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m-Wl,-bexpall\u001b[0m\n\u001b[38;2;249;38;114m        FINAL_LIBS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;230;219;116m-ldl -pthread -lcrypt -lbsd\u001b[0m\n\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;249;38;114mifeq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31muname_S\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242mOpenBSD\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;124;120;101m#\u001b[0m\u001b[38;2;124;120;101m OpenBSD\u001b[0m\n\u001b[38;2;249;38;114m\tFINAL_LIBS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m-lpthread\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;249;38;114mifeq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mUSE_BACKTRACE\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242myes\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114m\t    FINAL_CFLAGS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m-DUSE_BACKTRACE -I/usr/local/include\u001b[0m\n\u001b[38;2;249;38;114m\t    FINAL_LDFLAGS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m-L/usr/local/lib\u001b[0m\n\u001b[38;2;249;38;114m\t    FINAL_LIBS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m-lexecinfo\u001b[0m\n\u001b[38;2;248;248;242m    \t\u001b[0m\u001b[38;2;249;38;114mendif\u001b[0m\n\n\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;249;38;114mifeq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31muname_S\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242mFreeBSD\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;124;120;101m#\u001b[0m\u001b[38;2;124;120;101m FreeBSD\u001b[0m\n\u001b[38;2;249;38;114m\tFINAL_LIBS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m-lpthread -lexecinfo\u001b[0m\n\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;249;38;114mifeq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31muname_S\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242mDragonFly\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;124;120;101m#\u001b[0m\u001b[38;2;124;120;101m FreeBSD\u001b[0m\n\u001b[38;2;249;38;114m\tFINAL_LIBS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m-lpthread -lexecinfo\u001b[0m\n\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;249;38;114mifeq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31muname_S\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242mOpenBSD\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;124;120;101m#\u001b[0m\u001b[38;2;124;120;101m OpenBSD\u001b[0m\n\u001b[38;2;249;38;114m\tFINAL_LIBS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m-lpthread -lexecinfo\u001b[0m\n\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;249;38;114mifeq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31muname_S\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242mNetBSD\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;124;120;101m#\u001b[0m\u001b[38;2;124;120;101m NetBSD\u001b[0m\n\u001b[38;2;249;38;114m\tFINAL_LIBS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m-lpthread -lexecinfo\u001b[0m\n\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;124;120;101m#\u001b[0m\u001b[38;2;124;120;101m All the other OSes (notably Linux)\u001b[0m\n\u001b[38;2;249;38;114m\tFINAL_LDFLAGS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m-rdynamic\u001b[0m\n\u001b[38;2;249;38;114m\tFINAL_LIBS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;230;219;116m-ldl -pthread -lrt\u001b[0m\n\u001b[38;2;249;38;114mendif\u001b[0m\n\u001b[38;2;249;38;114mendif\u001b[0m\n\u001b[38;2;249;38;114mendif\u001b[0m\n\u001b[38;2;249;38;114mendif\u001b[0m\n\u001b[38;2;249;38;114mendif\u001b[0m\n\u001b[38;2;249;38;114mendif\u001b[0m\n\u001b[38;2;249;38;114mendif\u001b[0m\n\u001b[38;2;249;38;114mendif\u001b[0m\n\u001b[38;2;124;120;101m#\u001b[0m\u001b[38;2;124;120;101m Include paths to dependencies\u001b[0m\n\u001b[38;2;249;38;114mFINAL_CFLAGS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m-I../deps/hiredis -I../deps/linenoise -I../deps/lua/src\u001b[0m\n\n\u001b[38;2;124;120;101m#\u001b[0m\u001b[38;2;124;120;101m Determine systemd support and/or build preference (defaulting to auto-detection)\u001b[0m\n\u001b[38;2;249;38;114mBUILD_WITH_SYSTEMD\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116mno\u001b[0m\n\u001b[38;2;124;120;101m#\u001b[0m\u001b[38;2;124;120;101m If 'USE_SYSTEMD' in the environment is neither \"no\" nor \"yes\", try to\u001b[0m\n\u001b[38;2;124;120;101m#\u001b[0m\u001b[38;2;124;120;101m auto-detect libsystemd's presence and link accordingly.\u001b[0m\n\u001b[38;2;249;38;114mifneq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mUSE_SYSTEMD\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242mno\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114m\tLIBSYSTEMD_PKGCONFIG\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m$(\u001b[0m\u001b[38;2;102;217;239mshell\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mPKG_CONFIG\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m--exists\u001b[0m\u001b[38;2;255;255;255m libsystemd\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$$?\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;124;120;101m#\u001b[0m\u001b[38;2;124;120;101m If libsystemd cannot be detected, continue building without support for it\u001b[0m\n\u001b[38;2;124;120;101m#\u001b[0m\u001b[38;2;124;120;101m (unless a later check tells us otherwise)\u001b[0m\n\u001b[38;2;249;38;114mifeq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mLIBSYSTEMD_PKGCONFIG\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114m\tBUILD_WITH_SYSTEMD\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116myes\u001b[0m\n\u001b[38;2;249;38;114mendif\u001b[0m\n\u001b[38;2;249;38;114mendif\u001b[0m\n\u001b[38;2;249;38;114mifeq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mUSE_SYSTEMD\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242myes\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114mifneq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mLIBSYSTEMD_PKGCONFIG\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114m$(\u001b[0m\u001b[38;2;102;217;239merror\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mUSE_SYSTEMD is set to \"\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mUSE_SYSTEMD\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m but \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mPKG_CONFIG\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m cannot find libsystemd\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;249;38;114mendif\u001b[0m\n\u001b[38;2;124;120;101m#\u001b[0m\u001b[38;2;124;120;101m Force building with libsystemd\u001b[0m\n\u001b[38;2;249;38;114m\tBUILD_WITH_SYSTEMD\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116myes\u001b[0m\n\u001b[38;2;249;38;114mendif\u001b[0m\n\u001b[38;2;249;38;114mifeq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mBUILD_WITH_SYSTEMD\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242myes\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114m\tFINAL_LIBS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;249;38;114m$(\u001b[0m\u001b[38;2;102;217;239mshell\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mPKG_CONFIG\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m--libs\u001b[0m\u001b[38;2;255;255;255m libsystemd\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;249;38;114m\tFINAL_CFLAGS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m-DHAVE_LIBSYSTEMD\u001b[0m\n\u001b[38;2;249;38;114mendif\u001b[0m\n\n\u001b[38;2;249;38;114mifeq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mMALLOC\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242mtcmalloc\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114m\tFINAL_CFLAGS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m-DUSE_TCMALLOC\u001b[0m\n\u001b[38;2;249;38;114m\tFINAL_LIBS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m-ltcmalloc\u001b[0m\n\u001b[38;2;249;38;114mendif\u001b[0m\n\n\u001b[38;2;249;38;114mifeq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mMALLOC\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242mtcmalloc_minimal\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114m\tFINAL_CFLAGS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m-DUSE_TCMALLOC\u001b[0m\n\u001b[38;2;249;38;114m\tFINAL_LIBS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m-ltcmalloc_minimal\u001b[0m\n\u001b[38;2;249;38;114mendif\u001b[0m\n\n\u001b[38;2;249;38;114mifeq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mMALLOC\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242mjemalloc\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114m\tDEPENDENCY_TARGETS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mjemalloc\u001b[0m\n\u001b[38;2;249;38;114m\tFINAL_CFLAGS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m-DUSE_JEMALLOC -I../deps/jemalloc/include\u001b[0m\n\u001b[38;2;249;38;114m\tFINAL_LIBS\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m../deps/jemalloc/lib/libjemalloc.a \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mFINAL_LIBS\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\n\u001b[38;2;249;38;114mendif\u001b[0m\n\n\u001b[38;2;249;38;114mifeq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mBUILD_TLS\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242myes\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114m\tFINAL_CFLAGS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;230;219;116m-DUSE_OPENSSL \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mOPENSSL_CFLAGS\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\n\u001b[38;2;249;38;114m\tFINAL_LDFLAGS\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mOPENSSL_LDFLAGS\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\n\u001b[38;2;249;38;114m\tLIBSSL_PKGCONFIG\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m$(\u001b[0m\u001b[38;2;102;217;239mshell\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mPKG_CONFIG\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m--exists\u001b[0m\u001b[38;2;255;255;255m libssl\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$$?\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;249;38;114mifeq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mLIBSSL_PKGCONFIG\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114m\tLIBSSL_LIBS\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;249;38;114m$(\u001b[0m\u001b[38;2;102;217;239mshell\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mPKG_CONFIG\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m--libs\u001b[0m\u001b[38;2;255;255;255m libssl\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;249;38;114m\tLIBSSL_LIBS\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m-lssl\u001b[0m\n\u001b[38;2;249;38;114mendif\u001b[0m\n\u001b[38;2;249;38;114m\tLIBCRYPTO_PKGCONFIG\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m$(\u001b[0m\u001b[38;2;102;217;239mshell\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mPKG_CONFIG\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m--exists\u001b[0m\u001b[38;2;255;255;255m libcrypto\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$$?\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;249;38;114mifeq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mLIBCRYPTO_PKGCONFIG\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114m\tLIBCRYPTO_LIBS\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;249;38;114m$(\u001b[0m\u001b[38;2;102;217;239mshell\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mPKG_CONFIG\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m--libs\u001b[0m\u001b[38;2;255;255;255m libcrypto\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;249;38;114m\tLIBCRYPTO_LIBS\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m-lcrypto\u001b[0m\n\u001b[38;2;249;38;114mendif\u001b[0m\n\u001b[38;2;249;38;114m\tFINAL_LIBS\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m../deps/hiredis/libhiredis_ssl.a \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mLIBSSL_LIBS\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mLIBCRYPTO_LIBS\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\n\u001b[38;2;249;38;114mendif\u001b[0m\n\n\u001b[38;2;249;38;114mREDIS_CC\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mQUIET_CC\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mCC\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mFINAL_CFLAGS\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\n\u001b[38;2;249;38;114mREDIS_LD\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mQUIET_LINK\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mCC\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mFINAL_LDFLAGS\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\n\u001b[38;2;249;38;114mREDIS_INSTALL\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mQUIET_INSTALL\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mINSTALL\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\n\n\u001b[38;2;249;38;114mCCCOLOR\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;230;219;116m33[34m\"\u001b[0m\n\u001b[38;2;249;38;114mLINKCOLOR\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;230;219;116m33[34;1m\"\u001b[0m\n\u001b[38;2;249;38;114mSRCCOLOR\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;230;219;116m33[33m\"\u001b[0m\n\u001b[38;2;249;38;114mBINCOLOR\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;230;219;116m33[37;1m\"\u001b[0m\n\u001b[38;2;249;38;114mMAKECOLOR\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;230;219;116m33[32;1m\"\u001b[0m\n\u001b[38;2;249;38;114mENDCOLOR\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;230;219;116m33[0m\"\u001b[0m\n\n\u001b[38;2;249;38;114mifndef\u001b[0m\u001b[38;2;248;248;242m V\u001b[0m\n\u001b[38;2;249;38;114mQUIET_CC\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m@printf '    %b %b\u001b[0m\u001b[38;2;190;132;255m\\n\u001b[0m\u001b[38;2;230;219;116m' \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mCCCOLOR\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;230;219;116mCC\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mENDCOLOR\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mSRCCOLOR\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m$@\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mENDCOLOR\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;230;219;116m 1>&2;\u001b[0m\n\u001b[38;2;249;38;114mQUIET_LINK\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m@printf '    %b %b\u001b[0m\u001b[38;2;190;132;255m\\n\u001b[0m\u001b[38;2;230;219;116m' \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mLINKCOLOR\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;230;219;116mLINK\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mENDCOLOR\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mBINCOLOR\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m$@\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mENDCOLOR\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;230;219;116m 1>&2;\u001b[0m\n\u001b[38;2;249;38;114mQUIET_INSTALL\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m@printf '    %b %b\u001b[0m\u001b[38;2;190;132;255m\\n\u001b[0m\u001b[38;2;230;219;116m' \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mLINKCOLOR\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;230;219;116mINSTALL\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mENDCOLOR\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mBINCOLOR\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m$@\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mENDCOLOR\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;230;219;116m 1>&2;\u001b[0m\n\u001b[38;2;249;38;114mendif\u001b[0m\n\n\u001b[38;2;249;38;114mREDIS_SERVER_NAME\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116mredis-server\u001b[0m\n\u001b[38;2;249;38;114mREDIS_SENTINEL_NAME\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116mredis-sentinel\u001b[0m\n\u001b[38;2;249;38;114mREDIS_SERVER_OBJ\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116madlist.o quicklist.o ae.o anet.o dict.o server.o sds.o zmalloc.o lzf_c.o lzf_d.o pqsort.o zipmap.o sha1.o ziplist.o release.o networking.o util.o object.o db.o replication.o rdb.o t_string.o t_list.o t_set.o t_zset.o t_hash.o config.o aof.o pubsub.o multi.o debug.o sort.o intset.o syncio.o cluster.o crc16.o endianconv.o slowlog.o scripting.o bio.o rio.o rand.o memtest.o crcspeed.o crc64.o bitops.o sentinel.o notify.o setproctitle.o blocked.o hyperloglog.o latency.o sparkline.o redis-check-rdb.o redis-check-aof.o geo.o lazyfree.o module.o evict.o expire.o geohash.o geohash_helper.o childinfo.o defrag.o siphash.o rax.o t_stream.o listpack.o localtime.o lolwut.o lolwut5.o lolwut6.o acl.o gopher.o tracking.o connection.o tls.o sha256.o timeout.o setcpuaffinity.o\u001b[0m\n\u001b[38;2;249;38;114mREDIS_CLI_NAME\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116mredis-cli\u001b[0m\n\u001b[38;2;249;38;114mREDIS_CLI_OBJ\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116manet.o adlist.o dict.o redis-cli.o zmalloc.o release.o ae.o crcspeed.o crc64.o siphash.o crc16.o\u001b[0m\n\u001b[38;2;249;38;114mREDIS_BENCHMARK_NAME\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116mredis-benchmark\u001b[0m\n\u001b[38;2;249;38;114mREDIS_BENCHMARK_OBJ\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116mae.o anet.o redis-benchmark.o adlist.o dict.o zmalloc.o siphash.o\u001b[0m\n\u001b[38;2;249;38;114mREDIS_CHECK_RDB_NAME\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116mredis-check-rdb\u001b[0m\n\u001b[38;2;249;38;114mREDIS_CHECK_AOF_NAME\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116mredis-check-aof\u001b[0m\n\n\u001b[38;2;166;226;46mall\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_SERVER_NAME\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_SENTINEL_NAME\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_CLI_NAME\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_BENCHMARK_NAME\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_CHECK_RDB_NAME\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_CHECK_AOF_NAME\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;190;132;255m@\u001b[0m\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;190;132;255m@\u001b[0m\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mHint: It's a good idea to run 'make test' ;)\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;190;132;255m@\u001b[0m\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\n\u001b[38;2;166;226;46mMakefile.dep\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;190;132;255m-\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_CC\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m-MM\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;255;255;255m.c \u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;255;255;255m Makefile.dep \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;255;255;255m /dev/null\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m||\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mtrue\u001b[0m\n\n\u001b[38;2;249;38;114mifeq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m0\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m$(\u001b[0m\u001b[38;2;102;217;239mwords\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m$(\u001b[0m\u001b[38;2;102;217;239mfindstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mMAKECMDGOALS\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mNODEPS\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114m-include\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mMakefile.dep\u001b[0m\n\u001b[38;2;249;38;114mendif\u001b[0m\n\n\u001b[38;2;166;226;46m.PHONY\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mall\u001b[0m\n\n\u001b[38;2;166;226;46mpersist-settings\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mdistclean\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;255;255;255m STD=\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mSTD\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m>>\u001b[0m\u001b[38;2;255;255;255m .make-settings\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;255;255;255m WARN=\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mWARN\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m>>\u001b[0m\u001b[38;2;255;255;255m .make-settings\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;255;255;255m OPT=\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mOPT\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m>>\u001b[0m\u001b[38;2;255;255;255m .make-settings\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;255;255;255m MALLOC=\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mMALLOC\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m>>\u001b[0m\u001b[38;2;255;255;255m .make-settings\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;255;255;255m BUILD_TLS=\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mBUILD_TLS\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m>>\u001b[0m\u001b[38;2;255;255;255m .make-settings\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;255;255;255m USE_SYSTEMD=\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mUSE_SYSTEMD\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m>>\u001b[0m\u001b[38;2;255;255;255m .make-settings\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;255;255;255m CFLAGS=\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mCFLAGS\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m>>\u001b[0m\u001b[38;2;255;255;255m .make-settings\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;255;255;255m LDFLAGS=\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mLDFLAGS\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m>>\u001b[0m\u001b[38;2;255;255;255m .make-settings\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;255;255;255m REDIS_CFLAGS=\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_CFLAGS\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m>>\u001b[0m\u001b[38;2;255;255;255m .make-settings\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;255;255;255m REDIS_LDFLAGS=\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_LDFLAGS\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m>>\u001b[0m\u001b[38;2;255;255;255m .make-settings\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;255;255;255m PREV_FINAL_CFLAGS=\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mFINAL_CFLAGS\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m>>\u001b[0m\u001b[38;2;255;255;255m .make-settings\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;255;255;255m PREV_FINAL_LDFLAGS=\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mFINAL_LDFLAGS\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m>>\u001b[0m\u001b[38;2;255;255;255m .make-settings\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;190;132;255m-\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;102;217;239mcd\u001b[0m\u001b[38;2;255;255;255m ../deps\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mMAKE\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mDEPENDENCY_TARGETS\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\n\u001b[38;2;166;226;46m.PHONY\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mpersist-settings\u001b[0m\n\n\u001b[38;2;124;120;101m#\u001b[0m\u001b[38;2;124;120;101m Prerequisites target\u001b[0m\n\u001b[38;2;166;226;46m.make-prerequisites\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;190;132;255m@\u001b[0m\u001b[38;2;255;255;255mtouch\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$@\u001b[0m\n\n\u001b[38;2;124;120;101m#\u001b[0m\u001b[38;2;124;120;101m Clean everything, persist settings and build dependencies if anything changed\u001b[0m\n\u001b[38;2;249;38;114mifneq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114m$(\u001b[0m\u001b[38;2;102;217;239mstrip\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mPREV_FINAL_CFLAGS\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m$(\u001b[0m\u001b[38;2;102;217;239mstrip\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mFINAL_CFLAGS\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;166;226;46m.make-prerequisites\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mpersist-settings\u001b[0m\n\u001b[38;2;249;38;114mendif\u001b[0m\n\n\u001b[38;2;249;38;114mifneq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114m$(\u001b[0m\u001b[38;2;102;217;239mstrip\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mPREV_FINAL_LDFLAGS\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m$(\u001b[0m\u001b[38;2;102;217;239mstrip\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mFINAL_LDFLAGS\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;166;226;46m.make-prerequisites\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mpersist-settings\u001b[0m\n\u001b[38;2;249;38;114mendif\u001b[0m\n\n\u001b[38;2;124;120;101m#\u001b[0m\u001b[38;2;124;120;101m redis-server\u001b[0m\n\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_SERVER_NAME\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_SERVER_OBJ\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_LD\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m-o\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$@\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$^\u001b[0m\u001b[38;2;255;255;255m ../deps/hiredis/libhiredis.a ../deps/lua/src/liblua.a \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mFINAL_LIBS\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\n\n\u001b[38;2;124;120;101m#\u001b[0m\u001b[38;2;124;120;101m redis-sentinel\u001b[0m\n\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_SENTINEL_NAME\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_SERVER_NAME\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_INSTALL\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_SERVER_NAME\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_SENTINEL_NAME\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\n\n\u001b[38;2;124;120;101m#\u001b[0m\u001b[38;2;124;120;101m redis-check-rdb\u001b[0m\n\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_CHECK_RDB_NAME\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_SERVER_NAME\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_INSTALL\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_SERVER_NAME\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_CHECK_RDB_NAME\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\n\n\u001b[38;2;124;120;101m#\u001b[0m\u001b[38;2;124;120;101m redis-check-aof\u001b[0m\n\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_CHECK_AOF_NAME\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_SERVER_NAME\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_INSTALL\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_SERVER_NAME\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_CHECK_AOF_NAME\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\n\n\u001b[38;2;124;120;101m#\u001b[0m\u001b[38;2;124;120;101m redis-cli\u001b[0m\n\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_CLI_NAME\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_CLI_OBJ\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_LD\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m-o\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$@\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$^\u001b[0m\u001b[38;2;255;255;255m ../deps/hiredis/libhiredis.a ../deps/linenoise/linenoise.o \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mFINAL_LIBS\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\n\n\u001b[38;2;124;120;101m#\u001b[0m\u001b[38;2;124;120;101m redis-benchmark\u001b[0m\n\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_BENCHMARK_NAME\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_BENCHMARK_OBJ\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_LD\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m-o\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$@\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$^\u001b[0m\u001b[38;2;255;255;255m ../deps/hiredis/libhiredis.a \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mFINAL_LIBS\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\n\n\u001b[38;2;166;226;46mdict-benchmark\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mdict.c zmalloc.c sds.c siphash.c\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_CC\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mFINAL_CFLAGS\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$^\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m-D\u001b[0m\u001b[38;2;255;255;255m DICT_BENCHMARK_MAIN\u001b[0m\u001b[3;38;2;253;151;31m -\u001b[0m\u001b[3;38;2;253;151;31mo\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$@\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mFINAL_LIBS\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\n\n\u001b[38;2;249;38;114mDEP\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_SERVER_OBJ\u001b[0m\u001b[3;38;2;253;151;31m:\u001b[0m\u001b[3;38;2;255;255;255m%\u001b[0m\u001b[3;38;2;253;151;31m.o\u001b[0m\u001b[3;38;2;253;151;31m=\u001b[0m\u001b[3;38;2;255;255;255m%\u001b[0m\u001b[3;38;2;253;151;31m.d\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_CLI_OBJ\u001b[0m\u001b[3;38;2;253;151;31m:\u001b[0m\u001b[3;38;2;255;255;255m%\u001b[0m\u001b[3;38;2;253;151;31m.o\u001b[0m\u001b[3;38;2;253;151;31m=\u001b[0m\u001b[3;38;2;255;255;255m%\u001b[0m\u001b[3;38;2;253;151;31m.d\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_BENCHMARK_OBJ\u001b[0m\u001b[3;38;2;253;151;31m:\u001b[0m\u001b[3;38;2;255;255;255m%\u001b[0m\u001b[3;38;2;253;151;31m.o\u001b[0m\u001b[3;38;2;253;151;31m=\u001b[0m\u001b[3;38;2;255;255;255m%\u001b[0m\u001b[3;38;2;253;151;31m.d\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\n\u001b[38;2;249;38;114m-include\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mDEP\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\n\n\u001b[38;2;124;120;101m#\u001b[0m\u001b[38;2;124;120;101m Because the jemalloc.h header is generated as a part of the jemalloc build,\u001b[0m\n\u001b[38;2;124;120;101m#\u001b[0m\u001b[38;2;124;120;101m building it should complete before building any other object. Instead of\u001b[0m\n\u001b[38;2;124;120;101m#\u001b[0m\u001b[38;2;124;120;101m depending on a single artifact, build all dependencies first.\u001b[0m\n\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;166;226;46m.o\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;230;219;116m.c .make-prerequisites\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_CC\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m-MMD\u001b[0m\u001b[3;38;2;253;151;31m -\u001b[0m\u001b[3;38;2;253;151;31mo\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$@\u001b[0m\u001b[3;38;2;253;151;31m -\u001b[0m\u001b[3;38;2;253;151;31mc\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$<\u001b[0m\n\n\u001b[38;2;166;226;46mclean\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mrm\u001b[0m\u001b[3;38;2;253;151;31m -\u001b[0m\u001b[3;38;2;253;151;31mrf\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_SERVER_NAME\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_SENTINEL_NAME\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_CLI_NAME\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_BENCHMARK_NAME\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_CHECK_RDB_NAME\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_CHECK_AOF_NAME\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;255;255;255m.o \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;255;255;255m.gcda \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;255;255;255m.gcno \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;255;255;255m.gcov redis.info lcov-html Makefile.dep dict-benchmark\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mrm\u001b[0m\u001b[3;38;2;253;151;31m -\u001b[0m\u001b[3;38;2;253;151;31mf\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mDEP\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\n\n\u001b[38;2;166;226;46m.PHONY\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mclean\u001b[0m\n\n\u001b[38;2;166;226;46mdistclean\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mclean\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;190;132;255m-\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;102;217;239mcd\u001b[0m\u001b[38;2;255;255;255m ../deps\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mMAKE\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mdistclean\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;190;132;255m-\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255mrm\u001b[0m\u001b[3;38;2;253;151;31m -\u001b[0m\u001b[3;38;2;253;151;31mf\u001b[0m\u001b[38;2;255;255;255m .make-\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\n\u001b[38;2;166;226;46m.PHONY\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mdistclean\u001b[0m\n\n\u001b[38;2;166;226;46mtest\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_SERVER_NAME\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_CHECK_AOF_NAME\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;190;132;255m@\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;102;217;239mcd\u001b[0m\u001b[38;2;255;255;255m ..\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m./runtest\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\n\u001b[38;2;166;226;46mtest-sentinel\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_SENTINEL_NAME\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;190;132;255m@\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;102;217;239mcd\u001b[0m\u001b[38;2;255;255;255m ..\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m./runtest-sentinel\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\n\u001b[38;2;166;226;46mcheck\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mtest\u001b[0m\n\n\u001b[38;2;166;226;46mlcov\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mMAKE\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mgcov\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;190;132;255m@\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;102;217;239mset\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31me\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239mcd\u001b[0m\u001b[38;2;255;255;255m ..\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m./runtest\u001b[0m\u001b[3;38;2;253;151;31m --\u001b[0m\u001b[3;38;2;253;151;31mclients\u001b[0m\u001b[38;2;255;255;255m 1\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;190;132;255m@\u001b[0m\u001b[38;2;255;255;255mgeninfo\u001b[0m\u001b[3;38;2;253;151;31m -\u001b[0m\u001b[3;38;2;253;151;31mo\u001b[0m\u001b[38;2;255;255;255m redis.info .\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;190;132;255m@\u001b[0m\u001b[38;2;255;255;255mgenhtml\u001b[0m\u001b[3;38;2;253;151;31m --\u001b[0m\u001b[3;38;2;253;151;31mlegend\u001b[0m\u001b[3;38;2;253;151;31m -\u001b[0m\u001b[3;38;2;253;151;31mo\u001b[0m\u001b[38;2;255;255;255m lcov-html redis.info\u001b[0m\n\n\u001b[38;2;166;226;46mtest-sds\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116msds.c sds.h\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_CC\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255msds.c\u001b[0m\u001b[38;2;255;255;255m zmalloc.c\u001b[0m\u001b[3;38;2;253;151;31m -\u001b[0m\u001b[3;38;2;253;151;31mDSDS_TEST_MAIN\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mFINAL_LIBS\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[3;38;2;253;151;31m -\u001b[0m\u001b[3;38;2;253;151;31mo\u001b[0m\u001b[38;2;255;255;255m /tmp/sds_test\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255m/tmp/sds_test\u001b[0m\n\n\u001b[38;2;166;226;46m.PHONY\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mlcov\u001b[0m\n\n\u001b[38;2;166;226;46mbench\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_BENCHMARK_NAME\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255m./\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_BENCHMARK_NAME\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\n\n\u001b[38;2;166;226;46m32bit\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;190;132;255m@\u001b[0m\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;190;132;255m@\u001b[0m\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mWARNING: if it fails under Linux you probably need to install libc6-dev-i386\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;190;132;255m@\u001b[0m\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mMAKE\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mCFLAGS\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m-m32\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mLDFLAGS\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m-m32\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\n\u001b[38;2;166;226;46mgcov\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mMAKE\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mREDIS_CFLAGS\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m-fprofile-arcs -ftest-coverage -DCOVERAGE_TEST\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mREDIS_LDFLAGS\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m-fprofile-arcs -ftest-coverage\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\n\u001b[38;2;166;226;46mnoopt\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mMAKE\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mOPTIMIZATION\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m-O0\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\n\u001b[38;2;166;226;46mvalgrind\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mMAKE\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mOPTIMIZATION\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m-O0\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mMALLOC\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mlibc\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\n\u001b[38;2;166;226;46mhelgrind\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mMAKE\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mOPTIMIZATION\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m-O0\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mMALLOC\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mlibc\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mCFLAGS\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m-D__ATOMIC_VAR_FORCE_SYNC_MACROS\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\n\u001b[38;2;166;226;46msrc/help.h\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;190;132;255m@\u001b[0m\u001b[38;2;255;255;255m../utils/generate-command-help.rb\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;255;255;255m help.h\u001b[0m\n\n\u001b[38;2;166;226;46minstall\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mall\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;190;132;255m@\u001b[0m\u001b[38;2;255;255;255mmkdir\u001b[0m\u001b[3;38;2;253;151;31m -\u001b[0m\u001b[3;38;2;253;151;31mp\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mINSTALL_BIN\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_INSTALL\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_SERVER_NAME\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mINSTALL_BIN\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_INSTALL\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_BENCHMARK_NAME\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mINSTALL_BIN\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_INSTALL\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_CLI_NAME\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mINSTALL_BIN\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_INSTALL\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_CHECK_RDB_NAME\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mINSTALL_BIN\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_INSTALL\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_CHECK_AOF_NAME\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mINSTALL_BIN\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;190;132;255m@\u001b[0m\u001b[38;2;255;255;255mln\u001b[0m\u001b[3;38;2;253;151;31m -\u001b[0m\u001b[3;38;2;253;151;31msf\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_SERVER_NAME\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mINSTALL_BIN\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m/\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_SENTINEL_NAME\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\n\n\u001b[38;2;166;226;46muninstall\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mrm\u001b[0m\u001b[3;38;2;253;151;31m -\u001b[0m\u001b[3;38;2;253;151;31mf\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mINSTALL_BIN\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m/\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_SERVER_NAME\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m,\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_BENCHMARK_NAME\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m,\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_CLI_NAME\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m,\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_CHECK_RDB_NAME\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m,\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_CHECK_AOF_NAME\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m,\u001b[0m\u001b[3;38;2;249;38;114m$(\u001b[0m\u001b[3;38;2;253;151;31mREDIS_SENTINEL_NAME\u001b[0m\u001b[3;38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Manpage/bat-0.16.man",
    "content": "\u001b[38;2;190;132;255mBAT\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m                      \u001b[0m\u001b[38;2;253;151;31mGeneral\u001b[0m\u001b[38;2;253;151;31m \u001b[0m\u001b[38;2;253;151;31mCommands\u001b[0m\u001b[38;2;253;151;31m \u001b[0m\u001b[38;2;253;151;31mManual\u001b[0m\u001b[38;2;248;248;242m                     \u001b[0m\u001b[38;2;190;132;255mBAT\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\n\u001b[38;2;253;151;31mNAME\u001b[0m\n\u001b[38;2;248;248;242m       bat - a \u001b[0m\u001b[38;2;166;226;46mcat\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m clone with syntax highlighting and Git integration.\u001b[0m\n\n\u001b[38;2;253;151;31mUSAGE\u001b[0m\n\u001b[38;2;248;248;242m       bat \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mOPTIONS\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mFILE\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m...\u001b[0m\n\n\u001b[38;2;248;248;242m       bat cache \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mCACHE-OPTIONS\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46m--build\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;166;226;46m--clear\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\n\u001b[38;2;253;151;31mDESCRIPTION\u001b[0m\n\u001b[38;2;248;248;242m       bat  prints  the syntax-highlighted content of a collection of FILEs to\u001b[0m\n\u001b[38;2;248;248;242m       the terminal. If no FILE is specified, or when FILE is  '-',  it  reads\u001b[0m\n\u001b[38;2;248;248;242m       from standard input.\u001b[0m\n\n\u001b[38;2;248;248;242m       bat  supports  a  large number of programming and markup languages.  It\u001b[0m\n\u001b[38;2;248;248;242m       also communicates with \u001b[0m\u001b[38;2;166;226;46mgit\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m to show modifications with respect to the\u001b[0m\n\u001b[38;2;248;248;242m       git  index.  bat automatically pipes its output through a pager (by de‐\u001b[0m\n\u001b[38;2;248;248;242m       fault: less).\u001b[0m\n\n\u001b[38;2;248;248;242m       Whenever the output of bat goes to  a  non-interactive  terminal,  i.e.\u001b[0m\n\u001b[38;2;248;248;242m       when  the output is piped into another process or into a file, bat will\u001b[0m\n\u001b[38;2;248;248;242m       act as a drop-in replacement for \u001b[0m\u001b[38;2;166;226;46mcat\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m and fall back to  printing  the\u001b[0m\n\u001b[38;2;248;248;242m       plain file contents.\u001b[0m\n\n\u001b[38;2;253;151;31mOPTIONS\u001b[0m\n\u001b[38;2;248;248;242m       General  remarks: Command-line options like '\u001b[0m\u001b[38;2;166;226;46m-l\u001b[0m\u001b[38;2;248;248;242m'/'\u001b[0m\u001b[38;2;166;226;46m--language\u001b[0m\u001b[38;2;248;248;242m' that take\u001b[0m\n\u001b[38;2;248;248;242m       values  can  be  specified  as  either  '\u001b[0m\u001b[38;2;166;226;46m--language\u001b[0m\u001b[38;2;248;248;242m   value',   '\u001b[0m\u001b[38;2;166;226;46m--lan\u001b[0m\u001b[38;2;248;248;242m‐\u001b[0m\n\u001b[38;2;248;248;242m       guage=value', '\u001b[0m\u001b[38;2;166;226;46m-l\u001b[0m\u001b[38;2;248;248;242m value' or '\u001b[0m\u001b[38;2;166;226;46m-lvalue\u001b[0m\u001b[38;2;248;248;242m'.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m-A\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m--show-all\u001b[0m\n\n\u001b[38;2;248;248;242m              Show  non-printable  characters  like space, tab or newline. Use\u001b[0m\n\u001b[38;2;248;248;242m              '\u001b[0m\u001b[38;2;166;226;46m--tabs\u001b[0m\u001b[38;2;248;248;242m' to control the width of the tab-placeholders.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m-p\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m--plain\u001b[0m\n\n\u001b[38;2;248;248;242m              Only show plain style, no decorations.  This  is  an  alias  for\u001b[0m\n\u001b[38;2;248;248;242m              '\u001b[0m\u001b[38;2;166;226;46m--style\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31mplain'\u001b[0m\u001b[38;2;248;248;242m.  When  '\u001b[0m\u001b[38;2;166;226;46m-p\u001b[0m\u001b[38;2;248;248;242m' is used twice ('\u001b[0m\u001b[38;2;166;226;46m-pp\u001b[0m\u001b[38;2;248;248;242m'), it also dis‐\u001b[0m\n\u001b[38;2;248;248;242m              ables    automatic    paging    (alias    for     '\u001b[0m\u001b[38;2;166;226;46m--style\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31mplain\u001b[0m\n\u001b[38;2;248;248;242m              \u001b[0m\u001b[38;2;166;226;46m--pager\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31mnever'\u001b[0m\u001b[38;2;248;248;242m).\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m-l\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m--language\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mlanguage\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\n\u001b[38;2;248;248;242m              Explicitly  set  the  language for syntax highlighting. The lan‐\u001b[0m\n\u001b[38;2;248;248;242m              guage can be specified as a name (like 'C++' or 'LaTeX') or pos‐\u001b[0m\n\u001b[38;2;248;248;242m              sible   file   extension   (like  'cpp',  'hpp'  or  'md').  Use\u001b[0m\n\u001b[38;2;248;248;242m              '\u001b[0m\u001b[38;2;166;226;46m--list-languages\u001b[0m\u001b[38;2;248;248;242m' to show all supported language names and file\u001b[0m\n\u001b[38;2;248;248;242m              extensions.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m-H\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;166;226;46m--highlight-line\u001b[0m\u001b[38;2;248;248;242m <N:M>...\u001b[0m\n\n\u001b[38;2;248;248;242m              Highlight  the specified line ranges with a different background\u001b[0m\n\u001b[38;2;248;248;242m              color For example:\u001b[0m\n\n\u001b[38;2;248;248;242m              \u001b[0m\u001b[38;2;166;226;46m--highlight-line\u001b[0m\u001b[38;2;248;248;242m 40\u001b[0m\n\u001b[38;2;248;248;242m                     highlights line 40\u001b[0m\n\n\u001b[38;2;248;248;242m              \u001b[0m\u001b[38;2;166;226;46m--highlight-line\u001b[0m\u001b[38;2;248;248;242m 30:40\u001b[0m\n\u001b[38;2;248;248;242m                     highlights lines 30 to 40\u001b[0m\n\n\u001b[38;2;248;248;242m              \u001b[0m\u001b[38;2;166;226;46m--highlight-line\u001b[0m\u001b[38;2;248;248;242m :40\u001b[0m\n\u001b[38;2;248;248;242m                     highlights lines 1 to 40\u001b[0m\n\n\u001b[38;2;248;248;242m              \u001b[0m\u001b[38;2;166;226;46m--highlight-line\u001b[0m\u001b[38;2;248;248;242m 40:\u001b[0m\n\u001b[38;2;248;248;242m                     highlights lines 40 to the end of the file\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--tabs\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mT\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\n\u001b[38;2;248;248;242m              Set the tab width to T spaces. Use a width of  0  to  pass  tabs\u001b[0m\n\u001b[38;2;248;248;242m              through directly\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--wrap\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mmode\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\n\u001b[38;2;248;248;242m              Specify  the  text-wrapping mode (*auto*, never, character). The\u001b[0m\n\u001b[38;2;248;248;242m              '\u001b[0m\u001b[38;2;166;226;46m--terminal-width\u001b[0m\u001b[38;2;248;248;242m' option can be used in addition to control the\u001b[0m\n\u001b[38;2;248;248;242m              output width.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--terminal-width\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mwidth\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\n\u001b[38;2;248;248;242m              Explicitly  set the width of the terminal instead of determining\u001b[0m\n\u001b[38;2;248;248;242m              it automatically. If prefixed with '+' or '-', the value will be\u001b[0m\n\u001b[38;2;248;248;242m              treated  as  an  offset  to the actual terminal width. See also:\u001b[0m\n\u001b[38;2;248;248;242m              '\u001b[0m\u001b[38;2;166;226;46m--wrap\u001b[0m\u001b[38;2;248;248;242m'.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m-n\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m--number\u001b[0m\n\n\u001b[38;2;248;248;242m              Only show line numbers, no other decorations. This is  an  alias\u001b[0m\n\u001b[38;2;248;248;242m              for '\u001b[0m\u001b[38;2;166;226;46m--style\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31mnumbers'\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--color\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mwhen\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\n\u001b[38;2;248;248;242m              Specify  when to use colored output. The automatic mode only en‐\u001b[0m\n\u001b[38;2;248;248;242m              ables colors if an interactive terminal  is  detected.  Possible\u001b[0m\n\u001b[38;2;248;248;242m              values: *auto*, never, always.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--italic-text\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mwhen\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\n\u001b[38;2;248;248;242m              Specify  when  to use ANSI sequences for italic text in the out‐\u001b[0m\n\u001b[38;2;248;248;242m              put. Possible values: always, *never*.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--decorations\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mwhen\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\n\u001b[38;2;248;248;242m              Specify when to use the decorations that have been specified via\u001b[0m\n\u001b[38;2;248;248;242m              '\u001b[0m\u001b[38;2;166;226;46m--style\u001b[0m\u001b[38;2;248;248;242m'. The automatic mode only enables decorations if an in‐\u001b[0m\n\u001b[38;2;248;248;242m              teractive terminal is detected. Possible values: *auto*,  never,\u001b[0m\n\u001b[38;2;248;248;242m              always.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m-f\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m--force-colorization\u001b[0m\n\n\u001b[38;2;248;248;242m              Alias  for '\u001b[0m\u001b[38;2;166;226;46m--decorations\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31malways\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m--color\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31malways'\u001b[0m\u001b[38;2;248;248;242m. This is useful\u001b[0m\n\u001b[38;2;248;248;242m              if the output of bat is piped to another program, but  you  want\u001b[0m\n\u001b[38;2;248;248;242m              to keep the colorization/decorations.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--paging\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mwhen\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\n\u001b[38;2;248;248;242m              Specify when to use the pager. To disable the pager, use '\u001b[0m\u001b[38;2;166;226;46m--pag\u001b[0m\u001b[38;2;248;248;242m‐\u001b[0m\n\u001b[38;2;248;248;242m              ing=never' or its alias, \u001b[0m\u001b[38;2;166;226;46m-P\u001b[0m\u001b[38;2;248;248;242m. To disable the  pager  permanently,\u001b[0m\n\u001b[38;2;248;248;242m              set  BAT_PAGER  to  an  empty  string. To control which pager is\u001b[0m\n\u001b[38;2;248;248;242m              used, see the '\u001b[0m\u001b[38;2;166;226;46m--pager\u001b[0m\u001b[38;2;248;248;242m' option. Possible values: *auto*,  never,\u001b[0m\n\u001b[38;2;248;248;242m              always.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--pager\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mcommand\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\n\u001b[38;2;248;248;242m              Determine  which  pager  is  used. This option will override the\u001b[0m\n\u001b[38;2;248;248;242m              PAGER and BAT_PAGER environment variables. The default pager  is\u001b[0m\n\u001b[38;2;248;248;242m              'less'.  To  control  when the pager is used, see the '\u001b[0m\u001b[38;2;166;226;46m--paging\u001b[0m\u001b[38;2;248;248;242m'\u001b[0m\n\u001b[38;2;248;248;242m              option. Example: '\u001b[0m\u001b[38;2;166;226;46m--pager\u001b[0m\u001b[38;2;248;248;242m \"less \u001b[0m\u001b[38;2;166;226;46m-RF\u001b[0m\u001b[38;2;248;248;242m\"'.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m-m\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;166;226;46m--map-syntax\u001b[0m\u001b[38;2;248;248;242m <glob-pattern:syntax-name>...\u001b[0m\n\n\u001b[38;2;248;248;242m              Map a glob pattern to an existing syntax name. The glob  pattern\u001b[0m\n\u001b[38;2;248;248;242m              is  matched  on  the full path and the filename. For example, to\u001b[0m\n\u001b[38;2;248;248;242m              highlight  *.build  files  with  the  Python  syntax,   use   \u001b[0m\u001b[38;2;166;226;46m-m\u001b[0m\n\u001b[38;2;248;248;242m              '*.build:Python'.  To highlight files named '.myignore' with the\u001b[0m\n\u001b[38;2;248;248;242m              Git Ignore syntax, use \u001b[0m\u001b[38;2;166;226;46m-m\u001b[0m\u001b[38;2;248;248;242m '.myignore:Git Ignore'.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--theme\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mtheme\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\n\u001b[38;2;248;248;242m              Set the theme for syntax highlighting.  Use  '\u001b[0m\u001b[38;2;166;226;46m--list-themes\u001b[0m\u001b[38;2;248;248;242m'  to\u001b[0m\n\u001b[38;2;248;248;242m              see  all  available  themes.   To  set  a default theme, add the\u001b[0m\n\u001b[38;2;248;248;242m              '\u001b[0m\u001b[38;2;166;226;46m--theme\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31m\"\u001b[0m\u001b[38;2;248;248;242m...\"' option to the configuration file or  export  the\u001b[0m\n\u001b[38;2;248;248;242m              BAT_THEME environment variable (e.g.: export BAT_THEME=\"...\").\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--list-themes\u001b[0m\n\n\u001b[38;2;248;248;242m              Display a list of supported themes for syntax highlighting.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--style\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mstyle-components\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\n\u001b[38;2;248;248;242m              Configure  which elements (line numbers, file headers, grid bor‐\u001b[0m\n\u001b[38;2;248;248;242m              ders, Git modifications, ..) to display in addition to the  file\u001b[0m\n\u001b[38;2;248;248;242m              contents.  The  argument is a comma-separated list of components\u001b[0m\n\u001b[38;2;248;248;242m              to display (e.g. 'numbers,changes,grid') or a pre-defined  style\u001b[0m\n\u001b[38;2;248;248;242m              ('full').  To set a default style, add the '\u001b[0m\u001b[38;2;166;226;46m--style\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31m\"\u001b[0m\u001b[38;2;248;248;242m..\"' option\u001b[0m\n\u001b[38;2;248;248;242m              to the configuration file or export  the  BAT_STYLE  environment\u001b[0m\n\u001b[38;2;248;248;242m              variable (e.g.: export BAT_STYLE=\"..\"). Possible values: *auto*,\u001b[0m\n\u001b[38;2;248;248;242m              full, plain, changes, header, grid, numbers, snip.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m-r\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;166;226;46m--line-range\u001b[0m\u001b[38;2;248;248;242m <N:M>...\u001b[0m\n\n\u001b[38;2;248;248;242m              Only print the specified range of lines for each file. For exam‐\u001b[0m\n\u001b[38;2;248;248;242m              ple:\u001b[0m\n\n\u001b[38;2;248;248;242m              \u001b[0m\u001b[38;2;166;226;46m--line-range\u001b[0m\u001b[38;2;248;248;242m 30:40\u001b[0m\n\u001b[38;2;248;248;242m                     prints lines 30 to 40\u001b[0m\n\n\u001b[38;2;248;248;242m              \u001b[0m\u001b[38;2;166;226;46m--line-range\u001b[0m\u001b[38;2;248;248;242m :40\u001b[0m\n\u001b[38;2;248;248;242m                     prints lines 1 to 40\u001b[0m\n\n\u001b[38;2;248;248;242m              \u001b[0m\u001b[38;2;166;226;46m--line-range\u001b[0m\u001b[38;2;248;248;242m 40:\u001b[0m\n\u001b[38;2;248;248;242m                     prints lines 40 to the end of the file\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m-L\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m--list-languages\u001b[0m\n\n\u001b[38;2;248;248;242m              Display a list of supported languages for syntax highlighting.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m-u\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m--unbuffered\u001b[0m\n\n\u001b[38;2;248;248;242m              This option exists for POSIX-compliance reasons ('u' is for 'un‐\u001b[0m\n\u001b[38;2;248;248;242m              buffered'). The output is always unbuffered  -  this  option  is\u001b[0m\n\u001b[38;2;248;248;242m              simply ignored.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m-h\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m--help\u001b[0m\n\n\u001b[38;2;248;248;242m              Print this help message.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m-V\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m--version\u001b[0m\n\n\u001b[38;2;248;248;242m              Show version information.\u001b[0m\n\n\u001b[38;2;253;151;31mPOSITIONAL ARGUMENTS\u001b[0m\n\u001b[38;2;248;248;242m       <FILE>...\u001b[0m\n\n\u001b[38;2;248;248;242m              Files  to print and concatenate. Use a dash ('-') or no argument\u001b[0m\n\u001b[38;2;248;248;242m              at all to read from standard input.\u001b[0m\n\n\u001b[38;2;253;151;31mSUBCOMMANDS\u001b[0m\n\u001b[38;2;248;248;242m       cache - Modify the syntax-definition and theme cache.\u001b[0m\n\n\u001b[38;2;253;151;31mFILES\u001b[0m\n\u001b[38;2;248;248;242m       bat can also be customized with a configuration file. The  location  of\u001b[0m\n\u001b[38;2;248;248;242m       the file is dependent on your operating system. To get the default path\u001b[0m\n\u001b[38;2;248;248;242m       for your system, call:\u001b[0m\n\n\u001b[38;2;248;248;242m       bat \u001b[0m\u001b[38;2;166;226;46m--config-file\u001b[0m\n\n\u001b[38;2;248;248;242m       Alternatively, you can use the BAT_CONFIG_PATH environment variable  to\u001b[0m\n\u001b[38;2;248;248;242m       point bat to a non-default location of the configuration file.\u001b[0m\n\n\u001b[38;2;253;151;31mADDING CUSTOM LANGUAGES\u001b[0m\n\u001b[38;2;248;248;242m       bat  supports  Sublime  Text .sublime-syntax language files, and can be\u001b[0m\n\u001b[38;2;248;248;242m       customized to add additional languages to your local  installation.  To\u001b[0m\n\u001b[38;2;248;248;242m       do  this,  add  the  .sublime-snytax language files to `$(bat \u001b[0m\u001b[38;2;166;226;46m--config-\u001b[0m\n\u001b[38;2;248;248;242m       dir)/syntaxes` and run `bat cache \u001b[0m\u001b[38;2;166;226;46m--build\u001b[0m\u001b[38;2;248;248;242m`.\u001b[0m\n\n\u001b[38;2;248;248;242m       Example:\u001b[0m\n\n\u001b[38;2;248;248;242m            mkdir \u001b[0m\u001b[38;2;166;226;46m-p\u001b[0m\u001b[38;2;248;248;242m \"$(bat \u001b[0m\u001b[38;2;166;226;46m--config-dir\u001b[0m\u001b[38;2;248;248;242m)/syntaxes\"\u001b[0m\n\u001b[38;2;248;248;242m            cd \"$(bat \u001b[0m\u001b[38;2;166;226;46m--config-dir\u001b[0m\u001b[38;2;248;248;242m)/syntaxes\"\u001b[0m\n\n\u001b[38;2;248;248;242m            # Put new '.sublime-syntax' language definition files\u001b[0m\n\u001b[38;2;248;248;242m            # in this folder (or its subdirectories), for example:\u001b[0m\n\u001b[38;2;248;248;242m            git clone https://github.com/tellnobody1/sublime-purescript-syntax\u001b[0m\n\n\u001b[38;2;248;248;242m            # And then build the cache.\u001b[0m\n\u001b[38;2;248;248;242m            bat cache \u001b[0m\u001b[38;2;166;226;46m--build\u001b[0m\n\n\u001b[38;2;248;248;242m       Once the cache is built, the new  language  will  be  visible  in  `bat\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--list-languages\u001b[0m\u001b[38;2;248;248;242m`.\u001b[0m\n\u001b[38;2;248;248;242m       If  you  ever  want  to  remove the custom languages, you can clear the\u001b[0m\n\u001b[38;2;248;248;242m       cache with `bat cache \u001b[0m\u001b[38;2;166;226;46m--clear\u001b[0m\u001b[38;2;248;248;242m`.\u001b[0m\n\n\u001b[38;2;253;151;31mADDING CUSTOM THEMES\u001b[0m\n\u001b[38;2;248;248;242m       Similarly to custom  languages,  bat  supports  Sublime  Text  .tmTheme\u001b[0m\n\u001b[38;2;248;248;242m       themes.   These  can  be installed to `$(bat \u001b[0m\u001b[38;2;166;226;46m--config-dir\u001b[0m\u001b[38;2;248;248;242m)/themes`, and\u001b[0m\n\u001b[38;2;248;248;242m       are added to the cache with `bat cache \u001b[0m\u001b[38;2;166;226;46m--build\u001b[0m\u001b[38;2;248;248;242m`.\u001b[0m\n\n\u001b[38;2;253;151;31mMORE INFORMATION\u001b[0m\n\u001b[38;2;248;248;242m       For more information and up-to-date documentation, visit the bat repo:\u001b[0m\n\u001b[38;2;248;248;242m       https://github.com/sharkdp/bat\u001b[0m\n\n\u001b[38;2;248;248;242m                                                                        \u001b[0m\u001b[38;2;166;226;46mBAT\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Manpage/fzf-0.33.0.man",
    "content": "\u001b[38;2;248;248;242mfzf(1)                                                                         fzf - a command-line fuzzy finder                                                                         fzf(1)\u001b[0m\n\n\u001b[38;2;253;151;31mNAME\u001b[0m\n\u001b[38;2;248;248;242m       fzf - a command-line fuzzy finder\u001b[0m\n\n\u001b[38;2;253;151;31mSYNOPSIS\u001b[0m\n\u001b[38;2;248;248;242m       fzf \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242moptions\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\n\u001b[38;2;253;151;31mDESCRIPTION\u001b[0m\n\u001b[38;2;248;248;242m       fzf is a general-purpose command-line fuzzy finder.\u001b[0m\n\n\u001b[38;2;253;151;31mOPTIONS\u001b[0m\n\u001b[38;2;248;248;242m   Search mode\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m-x\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m--extended\u001b[0m\n\u001b[38;2;248;248;242m              Extended-search mode. Since 0.10.9, this is enabled by default. You can disable it with +x or \u001b[0m\u001b[38;2;166;226;46m--no-extended\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m-e\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m--exact\u001b[0m\n\u001b[38;2;248;248;242m              Enable exact-match\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m-i\u001b[0m\u001b[38;2;248;248;242m     \u001b[0m\u001b[3;38;2;253;151;31mCase-insensitive\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mmatch\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[3;38;2;253;151;31mdefault\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[3;38;2;253;151;31msmart-case\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mmatch\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m+i\u001b[0m\u001b[38;2;248;248;242m     \u001b[0m\u001b[3;38;2;253;151;31mCase-sensitive\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mmatch\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--literal\u001b[0m\n\u001b[38;2;248;248;242m              Do not normalize latin script letters for matching.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--scheme\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31mSCHEME\u001b[0m\n\u001b[38;2;248;248;242m              Choose scoring scheme tailored for different types of input.\u001b[0m\n\n\u001b[38;2;248;248;242m              default  Generic scoring scheme designed to work well with any type of input\u001b[0m\n\u001b[38;2;248;248;242m              path     Scoring scheme for paths (additional bonus point only after path separator)\u001b[0m\n\u001b[38;2;248;248;242m              history  Scoring scheme for command history (no additional bonus points).\u001b[0m\n\u001b[38;2;248;248;242m                       Sets \u001b[0m\u001b[38;2;166;226;46m--tiebreak\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31mindex\u001b[0m\u001b[38;2;248;248;242m as well.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--algo\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31mTYPE\u001b[0m\n\u001b[38;2;248;248;242m              Fuzzy matching algorithm (default: v2)\u001b[0m\n\n\u001b[38;2;248;248;242m              v2     Optimal scoring algorithm (quality)\u001b[0m\n\u001b[38;2;248;248;242m              v1     Faster but not guaranteed to find the optimal result (performance)\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m-n\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;166;226;46m--nth\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31mN[\u001b[0m\u001b[38;2;248;248;242m,..]\u001b[0m\n\u001b[38;2;248;248;242m              Comma-separated list of field index expressions for limiting search scope.  See FIELD INDEX EXPRESSION for the details.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--with-nth\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31mN\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m,..]\u001b[0m\n\u001b[38;2;248;248;242m              Transform the presentation of each line using field index expressions\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m-d\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m--delimiter\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31mSTR\u001b[0m\n\u001b[38;2;248;248;242m              Field delimiter regex for \u001b[0m\u001b[38;2;166;226;46m--nth\u001b[0m\u001b[38;2;248;248;242m and \u001b[0m\u001b[38;2;166;226;46m--with-nth\u001b[0m\u001b[38;2;248;248;242m (default: AWK-style)\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--disabled\u001b[0m\n\u001b[38;2;248;248;242m              Do  not  perform  search.  With this option, fzf becomes a simple selector interface rather than a \"fuzzy finder\". You can later enable the search using enable-search or toggle-\u001b[0m\n\u001b[38;2;248;248;242m              search action.\u001b[0m\n\n\u001b[38;2;248;248;242m   Search result\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m+s\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m--no-sort\u001b[0m\n\u001b[38;2;248;248;242m              Do not sort the result\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--tac\u001b[0m\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;253;151;31mReverse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mthe\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31morder\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mof\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mthe\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31minput\u001b[0m\n\n\u001b[38;2;248;248;242m              e.g.\u001b[0m\n\u001b[38;2;248;248;242m                   history | fzf \u001b[0m\u001b[38;2;166;226;46m--tac\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m--no-sort\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--tiebreak\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31mCRI\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m,..]\u001b[0m\n\u001b[38;2;248;248;242m              Comma-separated list of sort criteria to apply when the scores are tied.\u001b[0m\n\n\u001b[38;2;248;248;242m              length  Prefers line with shorter length\u001b[0m\n\u001b[38;2;248;248;242m              chunk   Prefers line with shorter matched chunk (delimited by whitespaces)\u001b[0m\n\u001b[38;2;248;248;242m              begin   Prefers line with matched substring closer to the beginning\u001b[0m\n\u001b[38;2;248;248;242m              end     Prefers line with matched substring closer to the end\u001b[0m\n\u001b[38;2;248;248;242m              index   Prefers line that appeared earlier in the input stream\u001b[0m\n\n\u001b[38;2;248;248;242m              - Each criterion should appear only once in the list\u001b[0m\n\u001b[38;2;248;248;242m              - index is only allowed at the end of the list\u001b[0m\n\u001b[38;2;248;248;242m              - index is implicitly appended to the list when not specified\u001b[0m\n\u001b[38;2;248;248;242m              - Default is length (or equivalently length,index)\u001b[0m\n\u001b[38;2;248;248;242m              - If end is found in the list, fzf will scan each line backwards\u001b[0m\n\n\u001b[38;2;248;248;242m   Interface\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m-m\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m--multi\u001b[0m\n\u001b[38;2;248;248;242m              Enable multi-select with tab/shift-tab. It optionally takes an integer argument which denotes the maximum number of items that can be selected.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m+m\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m--no-multi\u001b[0m\n\u001b[38;2;248;248;242m              Disable multi-select\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--no-mouse\u001b[0m\n\u001b[38;2;248;248;242m              Disable mouse\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--bind\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31mKEYBINDS\u001b[0m\n\u001b[38;2;248;248;242m              Comma-separated list of custom key bindings. See KEY/EVENT BINDINGS for the details.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--cycle\u001b[0m\n\u001b[38;2;248;248;242m              Enable cyclic scroll\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--keep-right\u001b[0m\n\u001b[38;2;248;248;242m              Keep the right end of the line visible when it's too long. Effective only when the query string is empty.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--scroll-off\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31mLINES\u001b[0m\n\u001b[38;2;248;248;242m              Number of screen lines to keep above or below when scrolling to the top or to the bottom (default: 0).\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--no-hscroll\u001b[0m\n\u001b[38;2;248;248;242m              Disable horizontal scroll\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--hscroll-off\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31mCOLS\u001b[0m\n\u001b[38;2;248;248;242m              Number of screen columns to keep to the right of the highlighted substring (default: 10). Setting it to a large value will cause the text to be positioned on the center  of  the\u001b[0m\n\u001b[38;2;248;248;242m              screen.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--filepath-word\u001b[0m\n\u001b[38;2;248;248;242m              Make word-wise movements and actions respect path separators. The following actions are affected:\u001b[0m\n\n\u001b[38;2;248;248;242m              backward-kill-word\u001b[0m\n\u001b[38;2;248;248;242m              backward-word\u001b[0m\n\u001b[38;2;248;248;242m              forward-word\u001b[0m\n\u001b[38;2;248;248;242m              kill-word\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--jump-labels\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31mCHARS\u001b[0m\n\u001b[38;2;248;248;242m              Label characters for jump and jump-accept\u001b[0m\n\n\u001b[38;2;248;248;242m   Layout\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--height\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31mHEIGHT\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m%\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m              Display fzf window below the cursor with the given height instead of using the full screen.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--min-height\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31mHEIGHT\u001b[0m\n\u001b[38;2;248;248;242m              Minimum height when \u001b[0m\u001b[38;2;166;226;46m--height\u001b[0m\u001b[38;2;248;248;242m is given in percent (default: 10).  Ignored when \u001b[0m\u001b[38;2;166;226;46m--height\u001b[0m\u001b[38;2;248;248;242m is not specified.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--layout\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31mLAYOUT\u001b[0m\n\u001b[38;2;248;248;242m              Choose the layout (default: default)\u001b[0m\n\n\u001b[38;2;248;248;242m              default       Display from the bottom of the screen\u001b[0m\n\u001b[38;2;248;248;242m              reverse       Display from the top of the screen\u001b[0m\n\u001b[38;2;248;248;242m              reverse-list  Display from the top of the screen, prompt at the bottom\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--reverse\u001b[0m\n\u001b[38;2;248;248;242m              A synonym for \u001b[0m\u001b[38;2;166;226;46m--layout\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31mreverse\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--border\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31mBORDER_OPT\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m              Draw border around the finder\u001b[0m\n\n\u001b[38;2;248;248;242m              rounded       Border with rounded corners (default)\u001b[0m\n\u001b[38;2;248;248;242m              sharp         Border with sharp corners\u001b[0m\n\u001b[38;2;248;248;242m              horizontal    Horizontal lines above and below the finder\u001b[0m\n\u001b[38;2;248;248;242m              vertical      Vertical lines on each side of the finder\u001b[0m\n\u001b[38;2;248;248;242m              top (up)\u001b[0m\n\u001b[38;2;248;248;242m              bottom (down)\u001b[0m\n\u001b[38;2;248;248;242m              left\u001b[0m\n\u001b[38;2;248;248;242m              right\u001b[0m\n\u001b[38;2;248;248;242m              none\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--no-unicode\u001b[0m\n\u001b[38;2;248;248;242m              Use ASCII characters instead of Unicode box drawing characters to draw border\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--margin\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31mMARGIN\u001b[0m\n\u001b[38;2;248;248;242m              Comma-separated expression for margins around the finder.\u001b[0m\n\n\u001b[38;2;248;248;242m              TRBL     Same margin for top, right, bottom, and left\u001b[0m\n\u001b[38;2;248;248;242m              TB,RL    Vertical, horizontal margin\u001b[0m\n\u001b[38;2;248;248;242m              T,RL,B   Top, horizontal, bottom margin\u001b[0m\n\u001b[38;2;248;248;242m              T,R,B,L  Top, right, bottom, left margin\u001b[0m\n\n\u001b[38;2;248;248;242m              Each part can be given in absolute number or in percentage relative to the terminal size with % suffix.\u001b[0m\n\n\u001b[38;2;248;248;242m              e.g.\u001b[0m\n\u001b[38;2;248;248;242m                   fzf \u001b[0m\u001b[38;2;166;226;46m--margin\u001b[0m\u001b[38;2;248;248;242m 10%\u001b[0m\n\u001b[38;2;248;248;242m                   fzf \u001b[0m\u001b[38;2;166;226;46m--margin\u001b[0m\u001b[38;2;248;248;242m 1,5%\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--padding\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31mPADDING\u001b[0m\n\u001b[38;2;248;248;242m              Comma-separated expression for padding inside the border. Padding is distinguishable from margin only when \u001b[0m\u001b[38;2;166;226;46m--border\u001b[0m\u001b[38;2;248;248;242m option is used.\u001b[0m\n\n\u001b[38;2;248;248;242m              e.g.\u001b[0m\n\u001b[38;2;248;248;242m                   fzf \u001b[0m\u001b[38;2;166;226;46m--margin\u001b[0m\u001b[38;2;248;248;242m 5% \u001b[0m\u001b[38;2;166;226;46m--padding\u001b[0m\u001b[38;2;248;248;242m 5% \u001b[0m\u001b[38;2;166;226;46m--border\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m--preview\u001b[0m\u001b[38;2;248;248;242m 'cat {}' \\\u001b[0m\n\u001b[38;2;248;248;242m                       \u001b[0m\u001b[38;2;166;226;46m--color\u001b[0m\u001b[38;2;248;248;242m bg:#222222,preview-bg:#333333\u001b[0m\n\n\u001b[38;2;248;248;242m              TRBL     Same padding for top, right, bottom, and left\u001b[0m\n\u001b[38;2;248;248;242m              TB,RL    Vertical, horizontal padding\u001b[0m\n\u001b[38;2;248;248;242m              T,RL,B   Top, horizontal, bottom padding\u001b[0m\n\u001b[38;2;248;248;242m              T,R,B,L  Top, right, bottom, left padding\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--info\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31mSTYLE\u001b[0m\n\u001b[38;2;248;248;242m              Determines the display style of finder info.\u001b[0m\n\n\u001b[38;2;248;248;242m              default       Display on the next line to the prompt\u001b[0m\n\u001b[38;2;248;248;242m              inline        Display on the same line\u001b[0m\n\u001b[38;2;248;248;242m              hidden        Do not display finder info\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--no-info\u001b[0m\n\u001b[38;2;248;248;242m              A synonym for \u001b[0m\u001b[38;2;166;226;46m--info\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31mhidden\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--prompt\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31mSTR\u001b[0m\n\u001b[38;2;248;248;242m              Input prompt (default: '> ')\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--pointer\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31mSTR\u001b[0m\n\u001b[38;2;248;248;242m              Pointer to the current line (default: '>')\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--marker\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31mSTR\u001b[0m\n\u001b[38;2;248;248;242m              Multi-select marker (default: '>')\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--header\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31mSTR\u001b[0m\n\u001b[38;2;248;248;242m              The  given  string  will  be  printed  as the sticky header. The lines are displayed in the given order from top to bottom regardless of \u001b[0m\u001b[38;2;166;226;46m--layout\u001b[0m\u001b[38;2;248;248;242m option, and are not affected by\u001b[0m\n\u001b[38;2;248;248;242m              \u001b[0m\u001b[38;2;166;226;46m--with-nth\u001b[0m\u001b[38;2;248;248;242m. ANSI color codes are processed even when \u001b[0m\u001b[38;2;166;226;46m--ansi\u001b[0m\u001b[38;2;248;248;242m is not set.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--header-lines\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31mN\u001b[0m\n\u001b[38;2;248;248;242m              The first N lines of the input are treated as the sticky header. When \u001b[0m\u001b[38;2;166;226;46m--with-nth\u001b[0m\u001b[38;2;248;248;242m is set, the lines are transformed just like the other lines that follow.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--header-first\u001b[0m\n\u001b[38;2;248;248;242m              Print header before the prompt line\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--ellipsis\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31mSTR\u001b[0m\n\u001b[38;2;248;248;242m              Ellipsis to show when line is truncated (default: '..')\u001b[0m\n\n\u001b[38;2;248;248;242m   Display\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--ansi\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mEnable\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mprocessing\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mof\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mANSI\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mcolor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mcodes\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--tabstop\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31mSPACES\u001b[0m\n\u001b[38;2;248;248;242m              Number of spaces for a tab character (default: 8)\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--color\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31mBASE_SCHEME\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m,COLOR_NAME[:ANSI_COLOR][:ANSI_ATTRIBUTES]]...\u001b[0m\n\u001b[38;2;248;248;242m              Color configuration. The name of the base color scheme is followed by custom color mappings.\u001b[0m\n\n\u001b[38;2;248;248;242m              BASE SCHEME:\u001b[0m\n\u001b[38;2;248;248;242m                  (default: dark on 256-color terminal, otherwise 16)\u001b[0m\n\n\u001b[38;2;248;248;242m                  dark    Color scheme for dark 256-color terminal\u001b[0m\n\u001b[38;2;248;248;242m                  light   Color scheme for light 256-color terminal\u001b[0m\n\u001b[38;2;248;248;242m                  16      Color scheme for 16-color terminal\u001b[0m\n\u001b[38;2;248;248;242m                  bw      No colors (equivalent to \u001b[0m\u001b[38;2;166;226;46m--no-color\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;248;248;242m              COLOR NAMES:\u001b[0m\n\u001b[38;2;248;248;242m                  fg         Text\u001b[0m\n\u001b[38;2;248;248;242m                  bg         Background\u001b[0m\n\u001b[38;2;248;248;242m                  preview-fg Preview window text\u001b[0m\n\u001b[38;2;248;248;242m                  preview-bg Preview window background\u001b[0m\n\u001b[38;2;248;248;242m                  hl         Highlighted substrings\u001b[0m\n\u001b[38;2;248;248;242m                  fg+        Text (current line)\u001b[0m\n\u001b[38;2;248;248;242m                  bg+        Background (current line)\u001b[0m\n\u001b[38;2;248;248;242m                  gutter     Gutter on the left (defaults to bg+)\u001b[0m\n\u001b[38;2;248;248;242m                  hl+        Highlighted substrings (current line)\u001b[0m\n\u001b[38;2;248;248;242m                  query      Query string\u001b[0m\n\u001b[38;2;248;248;242m                  disabled   Query string when search is disabled\u001b[0m\n\u001b[38;2;248;248;242m                  info       Info line (match counters)\u001b[0m\n\u001b[38;2;248;248;242m                  border     Border around the window (\u001b[0m\u001b[38;2;166;226;46m--border\u001b[0m\u001b[38;2;248;248;242m and \u001b[0m\u001b[38;2;166;226;46m--preview\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m                  prompt     Prompt\u001b[0m\n\u001b[38;2;248;248;242m                  pointer    Pointer to the current line\u001b[0m\n\u001b[38;2;248;248;242m                  marker     Multi-select marker\u001b[0m\n\u001b[38;2;248;248;242m                  spinner    Streaming input indicator\u001b[0m\n\u001b[38;2;248;248;242m                  header     Header\u001b[0m\n\n\u001b[38;2;248;248;242m              ANSI COLORS:\u001b[0m\n\u001b[38;2;248;248;242m                  \u001b[0m\u001b[38;2;166;226;46m-1\u001b[0m\u001b[38;2;248;248;242m         Default terminal foreground/background color\u001b[0m\n\u001b[38;2;248;248;242m                             (or the original color of the text)\u001b[0m\n\u001b[38;2;248;248;242m                  0 ~ 15     16 base colors\u001b[0m\n\u001b[38;2;248;248;242m                    black\u001b[0m\n\u001b[38;2;248;248;242m                    red\u001b[0m\n\u001b[38;2;248;248;242m                    green\u001b[0m\n\u001b[38;2;248;248;242m                    yellow\u001b[0m\n\u001b[38;2;248;248;242m                    blue\u001b[0m\n\u001b[38;2;248;248;242m                    magenta\u001b[0m\n\u001b[38;2;248;248;242m                    cyan\u001b[0m\n\u001b[38;2;248;248;242m                    white\u001b[0m\n\u001b[38;2;248;248;242m                    bright-black (gray | grey)\u001b[0m\n\u001b[38;2;248;248;242m                    bright-red\u001b[0m\n\u001b[38;2;248;248;242m                    bright-green\u001b[0m\n\u001b[38;2;248;248;242m                    bright-yellow\u001b[0m\n\u001b[38;2;248;248;242m                    bright-blue\u001b[0m\n\u001b[38;2;248;248;242m                    bright-magenta\u001b[0m\n\u001b[38;2;248;248;242m                    bright-cyan\u001b[0m\n\u001b[38;2;248;248;242m                    bright-white\u001b[0m\n\u001b[38;2;248;248;242m                  16 ~ 255   ANSI 256 colors\u001b[0m\n\u001b[38;2;248;248;242m                  #rrggbb    24-bit colors\u001b[0m\n\n\u001b[38;2;248;248;242m              ANSI ATTRIBUTES: (Only applies to foreground colors)\u001b[0m\n\u001b[38;2;248;248;242m                  regular    Clears previously set attributes; should precede the other ones\u001b[0m\n\u001b[38;2;248;248;242m                  bold\u001b[0m\n\u001b[38;2;248;248;242m                  underline\u001b[0m\n\u001b[38;2;248;248;242m                  reverse\u001b[0m\n\u001b[38;2;248;248;242m                  dim\u001b[0m\n\u001b[38;2;248;248;242m                  italic\u001b[0m\n\u001b[38;2;248;248;242m                  strikethrough\u001b[0m\n\n\u001b[38;2;248;248;242m              EXAMPLES:\u001b[0m\n\n\u001b[38;2;248;248;242m                   # Seoul256 theme with 8-bit colors\u001b[0m\n\u001b[38;2;248;248;242m                   # (https://github.com/junegunn/seoul256.vim)\u001b[0m\n\u001b[38;2;248;248;242m                   fzf \u001b[0m\u001b[38;2;166;226;46m--color\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31m'bg:237\u001b[0m\u001b[38;2;248;248;242m,bg+:236,info:143,border:240,spinner:108' \\\u001b[0m\n\u001b[38;2;248;248;242m                       \u001b[0m\u001b[38;2;166;226;46m--color\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31m'hl:65\u001b[0m\u001b[38;2;248;248;242m,fg:252,header:65,fg+:252' \\\u001b[0m\n\u001b[38;2;248;248;242m                       \u001b[0m\u001b[38;2;166;226;46m--color\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31m'pointer:161\u001b[0m\u001b[38;2;248;248;242m,marker:168,prompt:110,hl+:108'\u001b[0m\n\n\u001b[38;2;248;248;242m                   # Seoul256 theme with 24-bit colors\u001b[0m\n\u001b[38;2;248;248;242m                   fzf \u001b[0m\u001b[38;2;166;226;46m--color\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31m'bg:#4B4B4B\u001b[0m\u001b[38;2;248;248;242m,bg+:#3F3F3F,info:#BDBB72,border:#6B6B6B,spinner:#98BC99' \\\u001b[0m\n\u001b[38;2;248;248;242m                       \u001b[0m\u001b[38;2;166;226;46m--color\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31m'hl:#719872\u001b[0m\u001b[38;2;248;248;242m,fg:#D9D9D9,header:#719872,fg+:#D9D9D9' \\\u001b[0m\n\u001b[38;2;248;248;242m                       \u001b[0m\u001b[38;2;166;226;46m--color\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31m'pointer:#E12672\u001b[0m\u001b[38;2;248;248;242m,marker:#E17899,prompt:#98BEDE,hl+:#98BC99'\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--no-bold\u001b[0m\n\u001b[38;2;248;248;242m              Do not use bold text\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--black\u001b[0m\n\u001b[38;2;248;248;242m              Use black background\u001b[0m\n\n\u001b[38;2;248;248;242m   History\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--history\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31mHISTORY_FILE\u001b[0m\n\u001b[38;2;248;248;242m              Load search history from the specified file and update the file on completion.  When enabled, CTRL-N and CTRL-P are automatically remapped to next-history and previous-history.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--history-size\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31mN\u001b[0m\n\u001b[38;2;248;248;242m              Maximum number of entries in the history file (default: 1000). The file is automatically truncated when the number of the lines exceeds the value.\u001b[0m\n\n\u001b[38;2;248;248;242m   Preview\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--preview\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31mCOMMAND\u001b[0m\n\u001b[38;2;248;248;242m              Execute the given command for the current line and display the result on the preview window. {} in the command is the placeholder that is replaced to the single-quoted string of\u001b[0m\n\u001b[38;2;248;248;242m              the current line. To transform the replacement string, specify field index expressions between the braces (See FIELD INDEX EXPRESSION for the details).\u001b[0m\n\n\u001b[38;2;248;248;242m              e.g.\u001b[0m\n\u001b[38;2;248;248;242m                   fzf \u001b[0m\u001b[38;2;166;226;46m--preview\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31m'head\u001b[0m\u001b[38;2;248;248;242m -\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;190;132;255mLINES\u001b[0m\u001b[38;2;248;248;242m {}'\u001b[0m\n\u001b[38;2;248;248;242m                   ls \u001b[0m\u001b[38;2;166;226;46m-l\u001b[0m\u001b[38;2;248;248;242m | fzf \u001b[0m\u001b[38;2;166;226;46m--preview\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31m\"echo\u001b[0m\u001b[38;2;248;248;242m user={3} when={\u001b[0m\u001b[38;2;166;226;46m-4\u001b[0m\u001b[38;2;248;248;242m..\u001b[0m\u001b[38;2;166;226;46m-2\u001b[0m\u001b[38;2;248;248;242m}; cat {\u001b[0m\u001b[38;2;166;226;46m-1\u001b[0m\u001b[38;2;248;248;242m}\" \u001b[0m\u001b[38;2;166;226;46m--header-lines\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31m1\u001b[0m\n\n\u001b[38;2;248;248;242m              fzf  exports \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;190;132;255mFZF_PREVIEW_LINES\u001b[0m\u001b[38;2;248;248;242m and \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;190;132;255mFZF_PREVIEW_COLUMNS\u001b[0m\u001b[38;2;248;248;242m so that they represent the exact size of the preview window. (It also overrides \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;190;132;255mLINES\u001b[0m\u001b[38;2;248;248;242m and \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;190;132;255mCOLUMNS\u001b[0m\u001b[38;2;248;248;242m with the same values\u001b[0m\n\u001b[38;2;248;248;242m              but they can be reset by the default shell, so prefer to refer to the ones with FZF_PREVIEW_ prefix.)\u001b[0m\n\n\u001b[38;2;248;248;242m              A placeholder expression starting with + flag will be replaced to the space-separated list of the selected lines (or the current line if  no  selection  was  made)  individually\u001b[0m\n\u001b[38;2;248;248;242m              quoted.\u001b[0m\n\n\u001b[38;2;248;248;242m              e.g.\u001b[0m\n\u001b[38;2;248;248;242m                   fzf \u001b[0m\u001b[38;2;166;226;46m--multi\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m--preview\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31m'head\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m-10\u001b[0m\u001b[38;2;248;248;242m {+}'\u001b[0m\n\u001b[38;2;248;248;242m                   git log \u001b[0m\u001b[38;2;166;226;46m--oneline\u001b[0m\u001b[38;2;248;248;242m | fzf \u001b[0m\u001b[38;2;166;226;46m--multi\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m--preview\u001b[0m\u001b[38;2;248;248;242m 'git show {+1}'\u001b[0m\n\n\u001b[38;2;248;248;242m              When using a field index expression, leading and trailing whitespace is stripped from the replacement string. To preserve the whitespace, use the s flag.\u001b[0m\n\n\u001b[38;2;248;248;242m              Also,  {q}  is  replaced to the current query string, and {n} is replaced to zero-based ordinal index of the line. Use {+n} if you want all index numbers when multiple lines are\u001b[0m\n\u001b[38;2;248;248;242m              selected.\u001b[0m\n\n\u001b[38;2;248;248;242m              A placeholder expression with f flag is replaced to the path of a temporary file that holds the evaluated list. This is useful when you multi-select a large number of items  and\u001b[0m\n\u001b[38;2;248;248;242m              the length of the evaluated string may exceed ARG_MAX.\u001b[0m\n\n\u001b[38;2;248;248;242m              e.g.\u001b[0m\n\u001b[38;2;248;248;242m                   # Press CTRL-A to select 100K items and see the sum of all the numbers.\u001b[0m\n\u001b[38;2;248;248;242m                   # This won't work properly without 'f' flag due to ARG_MAX limit.\u001b[0m\n\u001b[38;2;248;248;242m                   seq 100000 | fzf \u001b[0m\u001b[38;2;166;226;46m--multi\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m--bind\u001b[0m\u001b[38;2;248;248;242m ctrl-a:select-all \\\u001b[0m\n\u001b[38;2;248;248;242m                                    \u001b[0m\u001b[38;2;166;226;46m--preview\u001b[0m\u001b[38;2;248;248;242m \"awk '{sum+=\\$1} END {print sum}' {+f}\"\u001b[0m\n\n\u001b[38;2;248;248;242m              Note that you can escape a placeholder pattern by prepending a backslash.\u001b[0m\n\n\u001b[38;2;248;248;242m              Preview window will be updated even when there is no match for the current query if any of the placeholder expressions evaluates to a non-empty string.\u001b[0m\n\n\u001b[38;2;248;248;242m              Since  0.24.0,  fzf can render partial preview content before the preview command completes. ANSI escape sequence for clearing the display (CSI 2 J) is supported, so you can use\u001b[0m\n\u001b[38;2;248;248;242m              it to implement preview window that is constantly updating.\u001b[0m\n\n\u001b[38;2;248;248;242m              e.g.\u001b[0m\n\u001b[38;2;248;248;242m                    fzf \u001b[0m\u001b[38;2;166;226;46m--preview\u001b[0m\u001b[38;2;248;248;242m 'for i in $(seq 100000); do\u001b[0m\n\u001b[38;2;248;248;242m                      (( i % 200 == 0 )) && printf \"\\033[2J\"\u001b[0m\n\u001b[38;2;248;248;242m                      echo \"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;190;132;255mi\u001b[0m\u001b[38;2;248;248;242m\"\u001b[0m\n\u001b[38;2;248;248;242m                      sleep 0.01\u001b[0m\n\u001b[38;2;248;248;242m                    done'\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--preview-window\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31mPOSITION\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;166;226;46mSIZE\u001b[0m\u001b[38;2;166;226;46m[%]\u001b[0m\u001b[38;2;248;248;242m][,border-BORDER_OPT][,[no]wrap][,[no]follow][,[no]cycle][,[no]hidden][,+SCROLL[OFFSETS][/DENOM]][,~HEADER_LINES][,default][,<SIZE_THRESHOLD(ALTER‐\u001b[0m\n\u001b[38;2;248;248;242m       NATIVE_LAYOUT)]\u001b[0m\n\n\u001b[38;2;248;248;242m              POSITION: (default: right)\u001b[0m\n\u001b[38;2;248;248;242m                  up\u001b[0m\n\u001b[38;2;248;248;242m                  down\u001b[0m\n\u001b[38;2;248;248;242m                  left\u001b[0m\n\u001b[38;2;248;248;242m                  right\u001b[0m\n\n\u001b[38;2;248;248;242m              Determines the layout of the preview window.\u001b[0m\n\n\u001b[38;2;248;248;242m              * If the argument contains :hidden, the preview window will be hidden by default until toggle-preview action is triggered.\u001b[0m\n\n\u001b[38;2;248;248;242m              * If size is given as 0, preview window will not be visible, but fzf will still execute the command in the background.\u001b[0m\n\n\u001b[38;2;248;248;242m              * Long lines are truncated by default. Line wrap can be enabled with wrap flag.\u001b[0m\n\n\u001b[38;2;248;248;242m              * Preview window will automatically scroll to the bottom when follow flag is set, similarly to how tail \u001b[0m\u001b[38;2;166;226;46m-f\u001b[0m\u001b[38;2;248;248;242m works.\u001b[0m\n\n\u001b[38;2;248;248;242m                     e.g.\u001b[0m\n\u001b[38;2;248;248;242m                           fzf \u001b[0m\u001b[38;2;166;226;46m--preview-window\u001b[0m\u001b[38;2;248;248;242m follow \u001b[0m\u001b[38;2;166;226;46m--preview\u001b[0m\u001b[38;2;248;248;242m 'for i in $(seq 100000); do\u001b[0m\n\u001b[38;2;248;248;242m                             echo \"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;190;132;255mi\u001b[0m\u001b[38;2;248;248;242m\"\u001b[0m\n\u001b[38;2;248;248;242m                             sleep 0.01\u001b[0m\n\u001b[38;2;248;248;242m                             (( i % 300 == 0 )) && printf \"\\033[2J\"\u001b[0m\n\u001b[38;2;248;248;242m                           done'\u001b[0m\n\n\u001b[38;2;248;248;242m              * Cyclic scrolling is enabled with cycle flag.\u001b[0m\n\n\u001b[38;2;248;248;242m              *  To  change  the  style  of the border of the preview window, specify one of the options for \u001b[0m\u001b[38;2;166;226;46m--border\u001b[0m\u001b[38;2;248;248;242m with border- prefix.  e.g. border-rounded (border with rounded edges, de‐\u001b[0m\n\u001b[38;2;248;248;242m              fault), border-sharp (border with sharp edges), border-left, border-none, etc.\u001b[0m\n\n\u001b[38;2;248;248;242m              * [:+SCROLL[OFFSETS][/DENOM]] determines the initial scroll offset of the preview window.\u001b[0m\n\n\u001b[38;2;248;248;242m                - SCROLL can be either a numeric integer or a single-field index expression that refers to a numeric integer.\u001b[0m\n\n\u001b[38;2;248;248;242m                - The optional OFFSETS part is for adjusting the base offset. It should be given as a series of signed integers (\u001b[0m\u001b[38;2;166;226;46m-INTEGER\u001b[0m\u001b[38;2;248;248;242m or +INTEGER).\u001b[0m\n\n\u001b[38;2;248;248;242m                - The final /DENOM part is for specifying a fraction of the preview window height.\u001b[0m\n\n\u001b[38;2;248;248;242m              * ~HEADER_LINES keeps the top N lines as the fixed header so that they are always visible.\u001b[0m\n\n\u001b[38;2;248;248;242m              * default resets all options previously set to the default.\u001b[0m\n\n\u001b[38;2;248;248;242m                     e.g.\u001b[0m\n\u001b[38;2;248;248;242m                          # Non-default scroll window positions and sizes\u001b[0m\n\u001b[38;2;248;248;242m                          fzf \u001b[0m\u001b[38;2;166;226;46m--preview\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31m\"head\u001b[0m\u001b[38;2;248;248;242m {}\" \u001b[0m\u001b[38;2;166;226;46m--preview-window\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31mup\u001b[0m\u001b[38;2;248;248;242m,30%\u001b[0m\n\u001b[38;2;248;248;242m                          fzf \u001b[0m\u001b[38;2;166;226;46m--preview\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31m\"file\u001b[0m\u001b[38;2;248;248;242m {}\" \u001b[0m\u001b[38;2;166;226;46m--preview-window\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31mdown\u001b[0m\u001b[38;2;248;248;242m,1\u001b[0m\n\n\u001b[38;2;248;248;242m                          # Initial scroll offset is set to the line number of each line of\u001b[0m\n\u001b[38;2;248;248;242m                          # git grep output *minus* 5 lines (\u001b[0m\u001b[38;2;166;226;46m-5\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m                          git grep \u001b[0m\u001b[38;2;166;226;46m--line-number\u001b[0m\u001b[38;2;248;248;242m '' |\u001b[0m\n\u001b[38;2;248;248;242m                            fzf \u001b[0m\u001b[38;2;166;226;46m--delimiter\u001b[0m\u001b[38;2;248;248;242m : \u001b[0m\u001b[38;2;166;226;46m--preview\u001b[0m\u001b[38;2;248;248;242m 'nl {1}' \u001b[0m\u001b[38;2;166;226;46m--preview-window\u001b[0m\u001b[38;2;248;248;242m '+{2}\u001b[0m\u001b[38;2;166;226;46m-5\u001b[0m\u001b[38;2;248;248;242m'\u001b[0m\n\n\u001b[38;2;248;248;242m                          # Preview with bat, matching line in the middle of the window below\u001b[0m\n\u001b[38;2;248;248;242m                          # the fixed header of the top 3 lines\u001b[0m\n\u001b[38;2;248;248;242m                          #\u001b[0m\n\u001b[38;2;248;248;242m                          #   ~3    Top 3 lines as the fixed header\u001b[0m\n\u001b[38;2;248;248;242m                          #   +{2}  Base scroll offset extracted from the second field\u001b[0m\n\u001b[38;2;248;248;242m                          #   +3    Extra offset to compensate for the 3-line header\u001b[0m\n\u001b[38;2;248;248;242m                          #   /2    Put in the middle of the preview area\u001b[0m\n\u001b[38;2;248;248;242m                          #\u001b[0m\n\u001b[38;2;248;248;242m                          git grep \u001b[0m\u001b[38;2;166;226;46m--line-number\u001b[0m\u001b[38;2;248;248;242m '' |\u001b[0m\n\u001b[38;2;248;248;242m                            fzf \u001b[0m\u001b[38;2;166;226;46m--delimiter\u001b[0m\u001b[38;2;248;248;242m : \\\u001b[0m\n\u001b[38;2;248;248;242m                                \u001b[0m\u001b[38;2;166;226;46m--preview\u001b[0m\u001b[38;2;248;248;242m 'bat \u001b[0m\u001b[38;2;166;226;46m--style\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31mfull\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m--color\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31malways\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m--highlight-line\u001b[0m\u001b[38;2;248;248;242m {2} {1}' \\\u001b[0m\n\u001b[38;2;248;248;242m                                \u001b[0m\u001b[38;2;166;226;46m--preview-window\u001b[0m\u001b[38;2;248;248;242m '~3,+{2}+3/2'\u001b[0m\n\n\u001b[38;2;248;248;242m                          # Display top 3 lines as the fixed header\u001b[0m\n\u001b[38;2;248;248;242m                          fzf \u001b[0m\u001b[38;2;166;226;46m--preview\u001b[0m\u001b[38;2;248;248;242m 'bat \u001b[0m\u001b[38;2;166;226;46m--style\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31mfull\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m--color\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31malways\u001b[0m\u001b[38;2;248;248;242m {}' \u001b[0m\u001b[38;2;166;226;46m--preview-window\u001b[0m\u001b[38;2;248;248;242m '~3'\u001b[0m\n\n\u001b[38;2;248;248;242m              * You can specify an alternative set of options that are used only when the size\u001b[0m\n\u001b[38;2;248;248;242m                of the preview window is below a certain threshold. Note that only one\u001b[0m\n\u001b[38;2;248;248;242m                alternative layout is allowed.\u001b[0m\n\n\u001b[38;2;248;248;242m                     e.g.\u001b[0m\n\u001b[38;2;248;248;242m                           fzf \u001b[0m\u001b[38;2;166;226;46m--preview\u001b[0m\u001b[38;2;248;248;242m 'cat {}' \u001b[0m\u001b[38;2;166;226;46m--preview-window\u001b[0m\u001b[38;2;248;248;242m 'right,border-left,<\u001b[0m\u001b[38;2;166;226;46m30\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255mup,30%,border-bottom\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m'\u001b[0m\n\n\u001b[38;2;248;248;242m   Scripting\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m-q\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m--query\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31mSTR\u001b[0m\n\u001b[38;2;248;248;242m              Start the finder with the given query\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m-1\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m--select-1\u001b[0m\n\u001b[38;2;248;248;242m              If there is only one match for the initial query (\u001b[0m\u001b[38;2;166;226;46m--query\u001b[0m\u001b[38;2;248;248;242m), do not start interactive finder and automatically select the only match\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m-0\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m--exit-0\u001b[0m\n\u001b[38;2;248;248;242m              If there is no match for the initial query (\u001b[0m\u001b[38;2;166;226;46m--query\u001b[0m\u001b[38;2;248;248;242m), do not start interactive finder and exit immediately\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m-f\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m--filter\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31mSTR\u001b[0m\n\u001b[38;2;248;248;242m              Filter mode. Do not start interactive finder. When used with \u001b[0m\u001b[38;2;166;226;46m--no-sort\u001b[0m\u001b[38;2;248;248;242m, fzf becomes a fuzzy-version of grep.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--print-query\u001b[0m\n\u001b[38;2;248;248;242m              Print query as the first line\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--expect\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31mKEY\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m,..]\u001b[0m\n\u001b[38;2;248;248;242m              Comma-separated list of keys that can be used to complete fzf in addition to the default enter key. When this option is set, fzf will print the name of the key  pressed  as  the\u001b[0m\n\u001b[38;2;248;248;242m              first  line  of  its  output  (or as the second line if \u001b[0m\u001b[38;2;166;226;46m--print-query\u001b[0m\u001b[38;2;248;248;242m is also used). The line will be empty if fzf is completed with the default enter key. If \u001b[0m\u001b[38;2;166;226;46m--expect\u001b[0m\u001b[38;2;248;248;242m option is\u001b[0m\n\u001b[38;2;248;248;242m              specified multiple times, fzf will expect the union of the keys. \u001b[0m\u001b[38;2;166;226;46m--no-expect\u001b[0m\u001b[38;2;248;248;242m will clear the list.\u001b[0m\n\n\u001b[38;2;248;248;242m              e.g.\u001b[0m\n\u001b[38;2;248;248;242m                   fzf \u001b[0m\u001b[38;2;166;226;46m--expect\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31mctrl-v\u001b[0m\u001b[38;2;248;248;242m,ctrl-t,alt-s \u001b[0m\u001b[38;2;166;226;46m--expect\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31mf1\u001b[0m\u001b[38;2;248;248;242m,f2,~,@\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--read0\u001b[0m\n\u001b[38;2;248;248;242m              Read input delimited by ASCII NUL characters instead of newline characters\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--print0\u001b[0m\n\u001b[38;2;248;248;242m              Print output delimited by ASCII NUL characters instead of newline characters\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--no-clear\u001b[0m\n\u001b[38;2;248;248;242m              Do not clear finder interface on exit. If fzf was started in full screen mode, it will not switch back to the original screen, so you'll have to manually run tput rmcup  to  re‐\u001b[0m\n\u001b[38;2;248;248;242m              turn. This option can be used to avoid flickering of the screen when your application needs to start fzf multiple times in order.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--sync\u001b[0m\u001b[38;2;248;248;242m Synchronous search for multi-staged filtering. If specified, fzf will launch ncurses finder only after the input stream is complete.\u001b[0m\n\n\u001b[38;2;248;248;242m              e.g. fzf \u001b[0m\u001b[38;2;166;226;46m--multi\u001b[0m\u001b[38;2;248;248;242m | fzf \u001b[0m\u001b[38;2;166;226;46m--sync\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--version\u001b[0m\n\u001b[38;2;248;248;242m              Display version information and exit\u001b[0m\n\n\u001b[38;2;248;248;242m       Note that most options have the opposite versions with \u001b[0m\u001b[38;2;166;226;46m--no-\u001b[0m\u001b[38;2;248;248;242m prefix.\u001b[0m\n\n\u001b[38;2;253;151;31mENVIRONMENT VARIABLES\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;102;217;239mFZF_DEFAULT_COMMAND\u001b[0m\n\u001b[38;2;248;248;242m              Default  command to use when input is tty. On *nix systems, fzf runs the command with $SHELL -c if SHELL is set, otherwise with sh -c, so in this case make sure that the command\u001b[0m\n\u001b[38;2;248;248;242m              is POSIX-compliant.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;102;217;239mFZF_DEFAULT_OPTS\u001b[0m\n\u001b[38;2;248;248;242m              Default options. e.g. export FZF_DEFAULT_OPTS=\"--extended --cycle\"\u001b[0m\n\n\u001b[38;2;253;151;31mEXIT STATUS\u001b[0m\n\u001b[38;2;248;248;242m       0      Normal exit\u001b[0m\n\u001b[38;2;248;248;242m       1      No match\u001b[0m\n\u001b[38;2;248;248;242m       2      Error\u001b[0m\n\u001b[38;2;248;248;242m       130    Interrupted with CTRL-C or ESC\u001b[0m\n\n\u001b[38;2;253;151;31mFIELD INDEX EXPRESSION\u001b[0m\n\u001b[38;2;248;248;242m       A field index expression can be a non-zero integer or a range expression ([BEGIN]..[END]). \u001b[0m\u001b[38;2;166;226;46m--nth\u001b[0m\u001b[38;2;248;248;242m and \u001b[0m\u001b[38;2;166;226;46m--with-nth\u001b[0m\u001b[38;2;248;248;242m take a comma-separated list of field index expressions.\u001b[0m\n\n\u001b[38;2;248;248;242m   Examples\u001b[0m\n\u001b[38;2;248;248;242m       1      The 1st field\u001b[0m\n\u001b[38;2;248;248;242m       2      The 2nd field\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m-1\u001b[0m\u001b[38;2;248;248;242m     \u001b[0m\u001b[3;38;2;253;151;31mThe\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mlast\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mfield\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m-2\u001b[0m\u001b[38;2;248;248;242m     \u001b[0m\u001b[3;38;2;253;151;31mThe\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31m2nd\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mto\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mlast\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mfield\u001b[0m\n\u001b[38;2;248;248;242m       3..5   From the 3rd field to the 5th field\u001b[0m\n\u001b[38;2;248;248;242m       2..    From the 2nd field to the last field\u001b[0m\n\u001b[38;2;248;248;242m       ..\u001b[0m\u001b[38;2;166;226;46m-3\u001b[0m\u001b[38;2;248;248;242m   From the 1st field to the 3rd to the last field\u001b[0m\n\u001b[38;2;248;248;242m       ..     All the fields\u001b[0m\n\n\u001b[38;2;253;151;31mEXTENDED SEARCH MODE\u001b[0m\n\u001b[38;2;248;248;242m       Unless specified otherwise, fzf will start in \"extended-search mode\". In this mode, you can specify multiple patterns delimited by spaces, such as: 'wild ^music .mp3$ sbtrkt !rmx\u001b[0m\n\n\u001b[38;2;248;248;242m       You can prepend a backslash to a space (\\ ) to match a literal space character.\u001b[0m\n\n\u001b[38;2;248;248;242m   Exact-match (quoted)\u001b[0m\n\u001b[38;2;248;248;242m       A term that is prefixed by a single-quote character (') is interpreted as an \"exact-match\" (or \"non-fuzzy\") term. fzf will search for the exact occurrences of the string.\u001b[0m\n\n\u001b[38;2;248;248;242m   Anchored-match\u001b[0m\n\u001b[38;2;248;248;242m       A term can be prefixed by ^, or suffixed by $ to become an anchored-match term. Then fzf will search for the lines that start with or end with the given string. An anchored-match  term\u001b[0m\n\u001b[38;2;248;248;242m       is also an exact-match term.\u001b[0m\n\n\u001b[38;2;248;248;242m   Negation\u001b[0m\n\u001b[38;2;248;248;242m       If a term is prefixed by !, fzf will exclude the lines that satisfy the term from the result. In this case, fzf performs exact match by default.\u001b[0m\n\n\u001b[38;2;248;248;242m   Exact-match by default\u001b[0m\n\u001b[38;2;248;248;242m       If you don't prefer fuzzy matching and do not wish to \"quote\" (prefixing with ') every word, start fzf with \u001b[0m\u001b[38;2;166;226;46m-e\u001b[0m\u001b[38;2;248;248;242m or \u001b[0m\u001b[38;2;166;226;46m--exact\u001b[0m\u001b[38;2;248;248;242m option. Note that when \u001b[0m\u001b[38;2;166;226;46m--exact\u001b[0m\u001b[38;2;248;248;242m is set, '\u001b[0m\u001b[38;2;166;226;46m-prefix\u001b[0m\u001b[38;2;248;248;242m \"unquotes\" the\u001b[0m\n\u001b[38;2;248;248;242m       term.\u001b[0m\n\n\u001b[38;2;248;248;242m   OR operator\u001b[0m\n\u001b[38;2;248;248;242m       A single bar character term acts as an OR operator. For example, the following query matches entries that start with core and end with either go, rb, or py.\u001b[0m\n\n\u001b[38;2;248;248;242m       e.g. ^core go$ | rb$ | py$\u001b[0m\n\n\u001b[38;2;253;151;31mKEY/EVENT BINDINGS\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--bind\u001b[0m\u001b[38;2;248;248;242m option allows you to bind a key or an event to one or more actions. You can use it to customize key bindings or implement dynamic behaviors.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46m--bind\u001b[0m\u001b[38;2;248;248;242m takes a comma-separated list of binding expressions. Each binding expression is KEY:ACTION or EVENT:ACTION.\u001b[0m\n\n\u001b[38;2;248;248;242m       e.g.\u001b[0m\n\u001b[38;2;248;248;242m            fzf \u001b[0m\u001b[38;2;166;226;46m--bind\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31mctrl-j:accept\u001b[0m\u001b[38;2;248;248;242m,ctrl-k:kill-line\u001b[0m\n\n\u001b[38;2;248;248;242m   AVAILABLE KEYS: (SYNONYMS)\u001b[0m\n\u001b[38;2;248;248;242m       ctrl-[a-z]\u001b[0m\n\u001b[38;2;248;248;242m       ctrl-space\u001b[0m\n\u001b[38;2;248;248;242m       ctrl-\\\u001b[0m\n\u001b[38;2;248;248;242m       ctrl-]\u001b[0m\n\u001b[38;2;248;248;242m       ctrl-^      (ctrl-6)\u001b[0m\n\u001b[38;2;248;248;242m       ctrl-/      (ctrl-_)\u001b[0m\n\u001b[38;2;248;248;242m       ctrl-alt-[a-z]\u001b[0m\n\u001b[38;2;248;248;242m       alt-[*]     (Any case-sensitive single character is allowed)\u001b[0m\n\u001b[38;2;248;248;242m       f[1-12]\u001b[0m\n\u001b[38;2;248;248;242m       enter       (return ctrl-m)\u001b[0m\n\u001b[38;2;248;248;242m       space\u001b[0m\n\u001b[38;2;248;248;242m       bspace      (bs)\u001b[0m\n\u001b[38;2;248;248;242m       alt-up\u001b[0m\n\u001b[38;2;248;248;242m       alt-down\u001b[0m\n\u001b[38;2;248;248;242m       alt-left\u001b[0m\n\u001b[38;2;248;248;242m       alt-right\u001b[0m\n\u001b[38;2;248;248;242m       alt-enter\u001b[0m\n\u001b[38;2;248;248;242m       alt-space\u001b[0m\n\u001b[38;2;248;248;242m       alt-bspace  (alt-bs)\u001b[0m\n\u001b[38;2;248;248;242m       tab\u001b[0m\n\u001b[38;2;248;248;242m       btab        (shift-tab)\u001b[0m\n\u001b[38;2;248;248;242m       esc\u001b[0m\n\u001b[38;2;248;248;242m       del\u001b[0m\n\u001b[38;2;248;248;242m       up\u001b[0m\n\u001b[38;2;248;248;242m       down\u001b[0m\n\u001b[38;2;248;248;242m       left\u001b[0m\n\u001b[38;2;248;248;242m       right\u001b[0m\n\u001b[38;2;248;248;242m       home\u001b[0m\n\u001b[38;2;248;248;242m       end\u001b[0m\n\u001b[38;2;248;248;242m       insert\u001b[0m\n\u001b[38;2;248;248;242m       pgup        (page-up)\u001b[0m\n\u001b[38;2;248;248;242m       pgdn        (page-down)\u001b[0m\n\u001b[38;2;248;248;242m       shift-up\u001b[0m\n\u001b[38;2;248;248;242m       shift-down\u001b[0m\n\u001b[38;2;248;248;242m       shift-left\u001b[0m\n\u001b[38;2;248;248;242m       shift-right\u001b[0m\n\u001b[38;2;248;248;242m       alt-shift-up\u001b[0m\n\u001b[38;2;248;248;242m       alt-shift-down\u001b[0m\n\u001b[38;2;248;248;242m       alt-shift-left\u001b[0m\n\u001b[38;2;248;248;242m       alt-shift-right\u001b[0m\n\u001b[38;2;248;248;242m       left-click\u001b[0m\n\u001b[38;2;248;248;242m       right-click\u001b[0m\n\u001b[38;2;248;248;242m       double-click\u001b[0m\n\u001b[38;2;248;248;242m       or any single character\u001b[0m\n\n\u001b[38;2;248;248;242m   AVAILABLE EVENTS:\u001b[0m\n\u001b[38;2;248;248;242m       change\u001b[0m\n\u001b[38;2;248;248;242m              Triggered whenever the query string is changed\u001b[0m\n\n\u001b[38;2;248;248;242m              e.g.\u001b[0m\n\u001b[38;2;248;248;242m                   # Move cursor to the first entry whenever the query is changed\u001b[0m\n\u001b[38;2;248;248;242m                   fzf \u001b[0m\u001b[38;2;166;226;46m--bind\u001b[0m\u001b[38;2;248;248;242m change:first\u001b[0m\n\n\u001b[38;2;248;248;242m       backward-eof\u001b[0m\n\u001b[38;2;248;248;242m              Triggered when the query string is already empty and you try to delete it backward.\u001b[0m\n\n\u001b[38;2;248;248;242m              e.g.\u001b[0m\n\u001b[38;2;248;248;242m                   fzf \u001b[0m\u001b[38;2;166;226;46m--bind\u001b[0m\u001b[38;2;248;248;242m backward-eof:abort\u001b[0m\n\n\u001b[38;2;248;248;242m   AVAILABLE ACTIONS:\u001b[0m\n\u001b[38;2;248;248;242m       A key or an event can be bound to one or more of the following actions.\u001b[0m\n\n\u001b[38;2;248;248;242m         ACTION:                   DEFAULT BINDINGS (NOTES):\u001b[0m\n\u001b[38;2;248;248;242m           abort                      ctrl-c  ctrl-g  ctrl-q  esc\u001b[0m\n\u001b[38;2;248;248;242m           accept                     enter   double-click\u001b[0m\n\u001b[38;2;248;248;242m           accept-non-empty           (same as accept except that it prevents fzf from exiting without selection)\u001b[0m\n\u001b[38;2;248;248;242m           backward-char              ctrl-b  left\u001b[0m\n\u001b[38;2;248;248;242m           backward-delete-char       ctrl-h  bspace\u001b[0m\n\u001b[38;2;248;248;242m           backward-delete-char/eof   (same as backward-delete-char except aborts fzf if query is empty)\u001b[0m\n\u001b[38;2;248;248;242m           backward-kill-word         alt-bs\u001b[0m\n\u001b[38;2;248;248;242m           backward-word              alt-b   shift-left\u001b[0m\n\u001b[38;2;248;248;242m           beginning-of-line          ctrl-a  home\u001b[0m\n\u001b[38;2;248;248;242m           cancel                     (clear query string if not empty, abort fzf otherwise)\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;166;226;46mchange-preview\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m...\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m        (change \u001b[0m\u001b[38;2;166;226;46m--preview\u001b[0m\u001b[38;2;248;248;242m option)\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;166;226;46mchange-preview-window\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m...\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m (change \u001b[0m\u001b[38;2;166;226;46m--preview-window\u001b[0m\u001b[38;2;248;248;242m option; rotate through the multiple option sets separated by '|')\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;166;226;46mchange-prompt\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m...\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m         (change prompt to the given string)\u001b[0m\n\u001b[38;2;248;248;242m           clear-screen               ctrl-l\u001b[0m\n\u001b[38;2;248;248;242m           clear-selection            (clear multi-selection)\u001b[0m\n\u001b[38;2;248;248;242m           close                      (close preview window if open, abort fzf otherwise)\u001b[0m\n\u001b[38;2;248;248;242m           clear-query                (clear query string)\u001b[0m\n\u001b[38;2;248;248;242m           delete-char                del\u001b[0m\n\u001b[38;2;248;248;242m           delete-char/eof            ctrl-d (same as delete-char except aborts fzf if query is empty)\u001b[0m\n\u001b[38;2;248;248;242m           deselect\u001b[0m\n\u001b[38;2;248;248;242m           deselect-all               (deselect all matches)\u001b[0m\n\u001b[38;2;248;248;242m           disable-search             (disable search functionality)\u001b[0m\n\u001b[38;2;248;248;242m           down                       ctrl-j  ctrl-n  down\u001b[0m\n\u001b[38;2;248;248;242m           enable-search              (enable search functionality)\u001b[0m\n\u001b[38;2;248;248;242m           end-of-line                ctrl-e  end\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;166;226;46mexecute\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m...\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m               (see below for the details)\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;166;226;46mexecute-silent\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m...\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m        (see below for the details)\u001b[0m\n\u001b[38;2;248;248;242m           first                      (move to the first match)\u001b[0m\n\u001b[38;2;248;248;242m           forward-char               ctrl-f  right\u001b[0m\n\u001b[38;2;248;248;242m           forward-word               alt-f   shift-right\u001b[0m\n\u001b[38;2;248;248;242m           ignore\u001b[0m\n\u001b[38;2;248;248;242m           jump                       (EasyMotion-like 2-keystroke movement)\u001b[0m\n\u001b[38;2;248;248;242m           jump-accept                (jump and accept)\u001b[0m\n\u001b[38;2;248;248;242m           kill-line\u001b[0m\n\u001b[38;2;248;248;242m           kill-word                  alt-d\u001b[0m\n\u001b[38;2;248;248;242m           last                       (move to the last match)\u001b[0m\n\u001b[38;2;248;248;242m           next-history               (ctrl-n on \u001b[0m\u001b[38;2;166;226;46m--history\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m           page-down                  pgdn\u001b[0m\n\u001b[38;2;248;248;242m           page-up                    pgup\u001b[0m\n\u001b[38;2;248;248;242m           half-page-down\u001b[0m\n\u001b[38;2;248;248;242m           half-page-up\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;166;226;46mpreview\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m...\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m               (see below for the details)\u001b[0m\n\u001b[38;2;248;248;242m           preview-down               shift-down\u001b[0m\n\u001b[38;2;248;248;242m           preview-up                 shift-up\u001b[0m\n\u001b[38;2;248;248;242m           preview-page-down\u001b[0m\n\u001b[38;2;248;248;242m           preview-page-up\u001b[0m\n\u001b[38;2;248;248;242m           preview-half-page-down\u001b[0m\n\u001b[38;2;248;248;242m           preview-half-page-up\u001b[0m\n\u001b[38;2;248;248;242m           preview-bottom\u001b[0m\n\u001b[38;2;248;248;242m           preview-top\u001b[0m\n\u001b[38;2;248;248;242m           previous-history           (ctrl-p on \u001b[0m\u001b[38;2;166;226;46m--history\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m           print-query                (print query and exit)\u001b[0m\n\u001b[38;2;248;248;242m           put                        (put the character to the prompt)\u001b[0m\n\u001b[38;2;248;248;242m           refresh-preview\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;166;226;46mrebind\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m...\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m                (rebind bindings after unbind)\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;166;226;46mreload\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m...\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m                (see below for the details)\u001b[0m\n\u001b[38;2;248;248;242m           replace-query              (replace query string with the current selection)\u001b[0m\n\u001b[38;2;248;248;242m           select\u001b[0m\n\u001b[38;2;248;248;242m           select-all                 (select all matches)\u001b[0m\n\u001b[38;2;248;248;242m           toggle                     (right-click)\u001b[0m\n\u001b[38;2;248;248;242m           toggle-all                 (toggle all matches)\u001b[0m\n\u001b[38;2;248;248;242m           toggle+down                ctrl-i  (tab)\u001b[0m\n\u001b[38;2;248;248;242m           toggle-in                  (\u001b[0m\u001b[38;2;166;226;46m--layout\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31mreverse*\u001b[0m\u001b[38;2;248;248;242m ? toggle+up : toggle+down)\u001b[0m\n\u001b[38;2;248;248;242m           toggle-out                 (\u001b[0m\u001b[38;2;166;226;46m--layout\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31mreverse*\u001b[0m\u001b[38;2;248;248;242m ? toggle+down : toggle+up)\u001b[0m\n\u001b[38;2;248;248;242m           toggle-preview\u001b[0m\n\u001b[38;2;248;248;242m           toggle-preview-wrap\u001b[0m\n\u001b[38;2;248;248;242m           toggle-search              (toggle search functionality)\u001b[0m\n\u001b[38;2;248;248;242m           toggle-sort\u001b[0m\n\u001b[38;2;248;248;242m           toggle+up                  btab    (shift-tab)\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;166;226;46munbind\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m...\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m                (unbind bindings)\u001b[0m\n\u001b[38;2;248;248;242m           unix-line-discard          ctrl-u\u001b[0m\n\u001b[38;2;248;248;242m           unix-word-rubout           ctrl-w\u001b[0m\n\u001b[38;2;248;248;242m           up                         ctrl-k  ctrl-p  up\u001b[0m\n\u001b[38;2;248;248;242m           yank                       ctrl-y\u001b[0m\n\n\u001b[38;2;248;248;242m   ACTION COMPOSITION\u001b[0m\n\u001b[38;2;248;248;242m       Multiple actions can be chained using + separator.\u001b[0m\n\n\u001b[38;2;248;248;242m       e.g.\u001b[0m\n\u001b[38;2;248;248;242m            fzf \u001b[0m\u001b[38;2;166;226;46m--multi\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m--bind\u001b[0m\u001b[38;2;248;248;242m 'ctrl-a:select-all+accept'\u001b[0m\n\u001b[38;2;248;248;242m            fzf \u001b[0m\u001b[38;2;166;226;46m--multi\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m--bind\u001b[0m\u001b[38;2;248;248;242m 'ctrl-a:select-all' \u001b[0m\u001b[38;2;166;226;46m--bind\u001b[0m\u001b[38;2;248;248;242m 'ctrl-a:+accept'\u001b[0m\n\n\u001b[38;2;248;248;242m   ACTION ARGUMENT\u001b[0m\n\u001b[38;2;248;248;242m       An action denoted with (...) suffix takes an argument.\u001b[0m\n\n\u001b[38;2;248;248;242m       e.g.\u001b[0m\n\u001b[38;2;248;248;242m            fzf \u001b[0m\u001b[38;2;166;226;46m--bind\u001b[0m\u001b[38;2;248;248;242m 'ctrl-a:\u001b[0m\u001b[38;2;166;226;46mchange-prompt\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255mNewPrompt> \u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m'\u001b[0m\n\u001b[38;2;248;248;242m            fzf \u001b[0m\u001b[38;2;166;226;46m--bind\u001b[0m\u001b[38;2;248;248;242m 'ctrl-v:\u001b[0m\u001b[38;2;166;226;46mpreview\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255mcat {}\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m' \u001b[0m\u001b[38;2;166;226;46m--preview-window\u001b[0m\u001b[38;2;248;248;242m hidden\u001b[0m\n\n\u001b[38;2;248;248;242m       If the argument contains parentheses, fzf may fail to parse the expression. In that case, you can use any of the following alternative notations to avoid parse errors.\u001b[0m\n\n\u001b[38;2;248;248;242m           action-name[...]\u001b[0m\n\u001b[38;2;248;248;242m           action-name~...~\u001b[0m\n\u001b[38;2;248;248;242m           action-name!...!\u001b[0m\n\u001b[38;2;248;248;242m           action-name@...@\u001b[0m\n\u001b[38;2;248;248;242m           action-name#...#\u001b[0m\n\u001b[38;2;248;248;242m           action-name$...$\u001b[0m\n\u001b[38;2;248;248;242m           action-name%...%\u001b[0m\n\u001b[38;2;248;248;242m           action-name^...^\u001b[0m\n\u001b[38;2;248;248;242m           action-name&...&\u001b[0m\n\u001b[38;2;248;248;242m           action-name*...*\u001b[0m\n\u001b[38;2;248;248;242m           action-name;...;\u001b[0m\n\u001b[38;2;248;248;242m           action-name/.../\u001b[0m\n\u001b[38;2;248;248;242m           action-name|...|\u001b[0m\n\u001b[38;2;248;248;242m           action-name:...\u001b[0m\n\u001b[38;2;248;248;242m              The last one is the special form that frees you from parse errors as it does not expect the closing character. The catch is that it should be the last one in the comma-separated\u001b[0m\n\u001b[38;2;248;248;242m              list of key-action pairs.\u001b[0m\n\n\u001b[38;2;248;248;242m   COMMAND EXECUTION\u001b[0m\n\u001b[38;2;248;248;242m       With  \u001b[0m\u001b[38;2;166;226;46mexecute\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m...\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m  action,  you  can execute arbitrary commands without leaving fzf. For example, you can turn fzf into a simple file browser by binding enter key to less command like\u001b[0m\n\u001b[38;2;248;248;242m       follows.\u001b[0m\n\n\u001b[38;2;248;248;242m           fzf \u001b[0m\u001b[38;2;166;226;46m--bind\u001b[0m\u001b[38;2;248;248;242m \"enter:\u001b[0m\u001b[38;2;166;226;46mexecute\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255mless {}\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m\"\u001b[0m\n\n\u001b[38;2;248;248;242m       You can use the same placeholder expressions as in \u001b[0m\u001b[38;2;166;226;46m--preview\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\n\u001b[38;2;248;248;242m       fzf switches to the alternate screen when executing a command. However, if the command is expected to complete quickly, and you are not interested in its output, you might want to  use\u001b[0m\n\u001b[38;2;248;248;242m       execute-silent instead, which silently executes the command without the switching. Note that fzf will not be responsive until the command is complete. For asynchronous execution, start\u001b[0m\n\u001b[38;2;248;248;242m       your command as a background process (i.e. appending &).\u001b[0m\n\n\u001b[38;2;248;248;242m       On *nix systems, fzf runs the command with \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;190;132;255mSHELL\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m-c\u001b[0m\u001b[38;2;248;248;242m if SHELL is set, otherwise with sh \u001b[0m\u001b[38;2;166;226;46m-c\u001b[0m\u001b[38;2;248;248;242m, so in this case make sure that the command is POSIX-compliant.\u001b[0m\n\n\u001b[38;2;248;248;242m   RELOAD INPUT\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mreload\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m...\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m action is used to dynamically update the input list without restarting fzf. It takes the same command template with placeholder expressions as \u001b[0m\u001b[38;2;166;226;46mexecute\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m...\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\n\u001b[38;2;248;248;242m       See https://github.com/junegunn/fzf/issues/1750 for more info.\u001b[0m\n\n\u001b[38;2;248;248;242m       e.g.\u001b[0m\n\u001b[38;2;248;248;242m            # Update the list of processes by pressing CTRL-R\u001b[0m\n\u001b[38;2;248;248;242m            ps \u001b[0m\u001b[38;2;166;226;46m-ef\u001b[0m\u001b[38;2;248;248;242m | fzf \u001b[0m\u001b[38;2;166;226;46m--bind\u001b[0m\u001b[38;2;248;248;242m 'ctrl-r:\u001b[0m\u001b[38;2;166;226;46mreload\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255mps -ef\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m' \u001b[0m\u001b[38;2;166;226;46m--header\u001b[0m\u001b[38;2;248;248;242m 'Press CTRL-R to reload' \\\u001b[0m\n\u001b[38;2;248;248;242m                         \u001b[0m\u001b[38;2;166;226;46m--header-lines\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31m1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m--layout\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31mreverse\u001b[0m\n\n\u001b[38;2;248;248;242m            # Integration with ripgrep\u001b[0m\n\u001b[38;2;248;248;242m            RG_PREFIX=\"rg \u001b[0m\u001b[38;2;166;226;46m--column\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m--line-number\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m--no-heading\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m--color\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[3;38;2;253;151;31malways\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m--smart-case\u001b[0m\u001b[38;2;248;248;242m \"\u001b[0m\n\u001b[38;2;248;248;242m            INITIAL_QUERY=\"foobar\"\u001b[0m\n\u001b[38;2;248;248;242m            FZF_DEFAULT_COMMAND=\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;190;132;255mRG_PREFIX\u001b[0m\u001b[38;2;248;248;242m '\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;190;132;255mINITIAL_QUERY\u001b[0m\u001b[38;2;248;248;242m'\" \\\u001b[0m\n\u001b[38;2;248;248;242m              fzf \u001b[0m\u001b[38;2;166;226;46m--bind\u001b[0m\u001b[38;2;248;248;242m \"change:reload:\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;190;132;255mRG_PREFIX\u001b[0m\u001b[38;2;248;248;242m {q} || true\" \\\u001b[0m\n\u001b[38;2;248;248;242m                  \u001b[0m\u001b[38;2;166;226;46m--ansi\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m--disabled\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m--query\u001b[0m\u001b[38;2;248;248;242m \"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;190;132;255mINITIAL_QUERY\u001b[0m\u001b[38;2;248;248;242m\"\u001b[0m\n\n\u001b[38;2;248;248;242m   PREVIEW BINDING\u001b[0m\n\u001b[38;2;248;248;242m       With \u001b[0m\u001b[38;2;166;226;46mpreview\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m...\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m action, you can specify multiple different preview commands in addition to the default preview command given by \u001b[0m\u001b[38;2;166;226;46m--preview\u001b[0m\u001b[38;2;248;248;242m option.\u001b[0m\n\n\u001b[38;2;248;248;242m       e.g.\u001b[0m\n\u001b[38;2;248;248;242m            # Default preview command with an extra preview binding\u001b[0m\n\u001b[38;2;248;248;242m            fzf \u001b[0m\u001b[38;2;166;226;46m--preview\u001b[0m\u001b[38;2;248;248;242m 'file {}' \u001b[0m\u001b[38;2;166;226;46m--bind\u001b[0m\u001b[38;2;248;248;242m '?:preview:cat {}'\u001b[0m\n\n\u001b[38;2;248;248;242m            # A preview binding with no default preview command\u001b[0m\n\u001b[38;2;248;248;242m            # (Preview window is initially empty)\u001b[0m\n\u001b[38;2;248;248;242m            fzf \u001b[0m\u001b[38;2;166;226;46m--bind\u001b[0m\u001b[38;2;248;248;242m '?:preview:cat {}'\u001b[0m\n\n\u001b[38;2;248;248;242m            # Preview window hidden by default, it appears when you first hit '?'\u001b[0m\n\u001b[38;2;248;248;242m            fzf \u001b[0m\u001b[38;2;166;226;46m--bind\u001b[0m\u001b[38;2;248;248;242m '?:preview:cat {}' \u001b[0m\u001b[38;2;166;226;46m--preview-window\u001b[0m\u001b[38;2;248;248;242m hidden\u001b[0m\n\n\u001b[38;2;248;248;242m   CHANGE PREVIEW WINDOW ATTRIBUTES\u001b[0m\n\u001b[38;2;248;248;242m       change-preview-window action can be used to change the properties of the preview window. Unlike the \u001b[0m\u001b[38;2;166;226;46m--preview-window\u001b[0m\u001b[38;2;248;248;242m option, you can specify multiple sets of options separated  by  '|'\u001b[0m\n\u001b[38;2;248;248;242m       characters.\u001b[0m\n\n\u001b[38;2;248;248;242m       e.g.\u001b[0m\n\u001b[38;2;248;248;242m            # Rotate through the options using CTRL-/\u001b[0m\n\u001b[38;2;248;248;242m            fzf \u001b[0m\u001b[38;2;166;226;46m--preview\u001b[0m\u001b[38;2;248;248;242m 'cat {}' \u001b[0m\u001b[38;2;166;226;46m--bind\u001b[0m\u001b[38;2;248;248;242m 'ctrl-/:\u001b[0m\u001b[38;2;166;226;46mchange-preview-window\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255mright,70%|down,40%,border-horizontal|hidden|right\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m'\u001b[0m\n\n\u001b[38;2;248;248;242m            # The default properties given by `\u001b[0m\u001b[38;2;166;226;46m--preview-window\u001b[0m\u001b[38;2;248;248;242m` are inherited, so an empty string in the list is interpreted as the default\u001b[0m\n\u001b[38;2;248;248;242m            fzf \u001b[0m\u001b[38;2;166;226;46m--preview\u001b[0m\u001b[38;2;248;248;242m 'cat {}' \u001b[0m\u001b[38;2;166;226;46m--preview-window\u001b[0m\u001b[38;2;248;248;242m 'right,40%,border-left' \u001b[0m\u001b[38;2;166;226;46m--bind\u001b[0m\u001b[38;2;248;248;242m 'ctrl-/:\u001b[0m\u001b[38;2;166;226;46mchange-preview-window\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m70%|down,border-top|hidden|\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m'\u001b[0m\n\n\u001b[38;2;248;248;242m            # This is equivalent to toggle-preview action\u001b[0m\n\u001b[38;2;248;248;242m            fzf \u001b[0m\u001b[38;2;166;226;46m--preview\u001b[0m\u001b[38;2;248;248;242m 'cat {}' \u001b[0m\u001b[38;2;166;226;46m--bind\u001b[0m\u001b[38;2;248;248;242m 'ctrl-/:\u001b[0m\u001b[38;2;166;226;46mchange-preview-window\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255mhidden|\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m'\u001b[0m\n\n\u001b[38;2;253;151;31mAUTHOR\u001b[0m\n\u001b[38;2;248;248;242m       Junegunn Choi (junegunn.c@gmail.com)\u001b[0m\n\n\u001b[38;2;253;151;31mSEE ALSO\u001b[0m\n\u001b[38;2;248;248;242m       Project homepage:\u001b[0m\n\u001b[38;2;248;248;242m              https://github.com/junegunn/fzf\u001b[0m\n\n\u001b[38;2;248;248;242m       Extra Vim plugin:\u001b[0m\n\u001b[38;2;248;248;242m              https://github.com/junegunn/fzf.vim\u001b[0m\n\n\u001b[38;2;253;151;31mLICENSE\u001b[0m\n\u001b[38;2;248;248;242m       MIT\u001b[0m\n\n\u001b[38;2;253;151;31mfzf 0.33.0                                                                                  Aug 2022                                                                                     fzf(1)\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Manpage/select-2.man",
    "content": "\u001b[38;2;190;132;255mSELECT\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;230;219;116m2\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m                                             \u001b[0m\u001b[38;2;253;151;31mLinux\u001b[0m\u001b[38;2;253;151;31m \u001b[0m\u001b[38;2;253;151;31mProgrammer's\u001b[0m\u001b[38;2;253;151;31m \u001b[0m\u001b[38;2;253;151;31mManual\u001b[0m\u001b[38;2;248;248;242m                                             \u001b[0m\u001b[38;2;190;132;255mSELECT\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;230;219;116m2\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\n\u001b[38;2;253;151;31mNAME\u001b[0m\n\u001b[38;2;248;248;242m       select, pselect, FD_CLR, FD_ISSET, FD_SET, FD_ZERO - synchronous I/O multiplexing\u001b[0m\n\n\u001b[38;2;253;151;31mSYNOPSIS\u001b[0m\n\u001b[38;2;190;132;255m       \u001b[0m\u001b[38;2;249;38;114m#include\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;230;219;116m<\u001b[0m\u001b[38;2;230;219;116msys/select.h\u001b[0m\u001b[38;2;230;219;116m>\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mselect\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mnfds\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m fd_set \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[3;38;2;253;151;31mreadfds\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m fd_set \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[3;38;2;253;151;31mwritefds\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m                  fd_set \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[3;38;2;253;151;31mexceptfds\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mstruct\u001b[0m\u001b[38;2;248;248;242m timeval \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[3;38;2;253;151;31mtimeout\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[3;38;2;102;217;239mvoid\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mFD_CLR\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mfd\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m fd_set \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[3;38;2;253;151;31mset\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mFD_ISSET\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mfd\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m fd_set \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[3;38;2;253;151;31mset\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[3;38;2;102;217;239mvoid\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mFD_SET\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mfd\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m fd_set \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[3;38;2;253;151;31mset\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[3;38;2;102;217;239mvoid\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mFD_ZERO\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mfd_set \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[3;38;2;253;151;31mset\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mpselect\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mnfds\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m fd_set \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[3;38;2;253;151;31mreadfds\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m fd_set \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[3;38;2;253;151;31mwritefds\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m                   fd_set \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[3;38;2;253;151;31mexceptfds\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mstruct\u001b[0m\u001b[38;2;248;248;242m timespec \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[3;38;2;253;151;31mtimeout\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m                   \u001b[0m\u001b[38;2;249;38;114mconst\u001b[0m\u001b[38;2;248;248;242m sigset_t \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[3;38;2;253;151;31msigmask\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m   Feature Test Macro Requirements for glibc (see \u001b[0m\u001b[38;2;166;226;46mfeature_test_macros\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m):\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mpselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m: _POSIX_C_SOURCE >= 200112L\u001b[0m\n\n\u001b[38;2;253;151;31mDESCRIPTION\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m  allows  a  program  to  monitor  multiple file descriptors, waiting until one or more of the file descriptors become\u001b[0m\n\u001b[38;2;248;248;242m       \"ready\" for some class of I/O operation (e.g., input possible).  A file descriptor is considered ready if it  is  possible  to\u001b[0m\n\u001b[38;2;248;248;242m       perform a corresponding I/O operation (e.g., \u001b[0m\u001b[38;2;166;226;46mread\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m, or a sufficiently small \u001b[0m\u001b[38;2;166;226;46mwrite\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m) without blocking.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m  can monitor only file descriptors numbers that are less than FD_SETSIZE; \u001b[0m\u001b[38;2;166;226;46mpoll\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m and \u001b[0m\u001b[38;2;166;226;46mepoll\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m do not have this limi‐\u001b[0m\n\u001b[38;2;248;248;242m       tation.  See BUGS.\u001b[0m\n\n\u001b[38;2;248;248;242m   File descriptor sets\u001b[0m\n\u001b[38;2;248;248;242m       The principal arguments of \u001b[0m\u001b[38;2;166;226;46mselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m are three \"sets\" of file descriptors (declared with the  type  fd_set),  which  allow  the\u001b[0m\n\u001b[38;2;248;248;242m       caller  to  wait  for  three  classes of events on the specified set of file descriptors.  Each of the fd_set arguments may be\u001b[0m\n\u001b[38;2;248;248;242m       specified as NULL if no file descriptors are to be watched for the corresponding class of events.\u001b[0m\n\n\u001b[38;2;248;248;242m       Note well: Upon return, each of the file descriptor sets is modified in place to indicate which file descriptors are currently\u001b[0m\n\u001b[38;2;248;248;242m       \"ready\".   Thus,  if using \u001b[0m\u001b[38;2;166;226;46mselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m within a loop, the sets must be reinitialized before each call.  The implementation of the\u001b[0m\n\u001b[38;2;248;248;242m       fd_set arguments as value-result arguments is a design error that is avoided in \u001b[0m\u001b[38;2;166;226;46mpoll\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m and \u001b[0m\u001b[38;2;166;226;46mepoll\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\n\u001b[38;2;248;248;242m       The contents of a file descriptor set can be manipulated using the following macros:\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mFD_ZERO\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;248;248;242m              This macro clears (removes all file descriptors from) set.  It should be employed as the first step in  initializing  a\u001b[0m\n\u001b[38;2;248;248;242m              file descriptor set.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mFD_SET\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;248;248;242m              This macro adds the file descriptor fd to set.  Adding a file descriptor that is already present in the set is a no-op,\u001b[0m\n\u001b[38;2;248;248;242m              and does not produce an error.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mFD_CLR\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;248;248;242m              This macro removes the file descriptor fd from set.  Removing a file descriptor that is not present in the set is a no-\u001b[0m\n\u001b[38;2;248;248;242m              op, and does not produce an error.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mFD_ISSET\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;248;248;242m              \u001b[0m\u001b[38;2;166;226;46mselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m  modifies the contents of the sets according to the rules described below.  After calling \u001b[0m\u001b[38;2;166;226;46mselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m, the FD_IS‐\u001b[0m\n\u001b[38;2;248;248;242m              \u001b[0m\u001b[38;2;166;226;46mSET\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m macro can be used to test if a file descriptor is still present in a set.  \u001b[0m\u001b[38;2;166;226;46mFD_ISSET\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m returns nonzero if the file\u001b[0m\n\u001b[38;2;248;248;242m              descriptor fd is present in set, and zero if it is not.\u001b[0m\n\n\u001b[38;2;248;248;242m   Arguments\u001b[0m\n\u001b[38;2;248;248;242m       The arguments of \u001b[0m\u001b[38;2;166;226;46mselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m are as follows:\u001b[0m\n\n\u001b[38;2;248;248;242m       readfds\u001b[0m\n\u001b[38;2;248;248;242m              The  file  descriptors  in  this  set are watched to see if they are ready for reading.  A file descriptor is ready for\u001b[0m\n\u001b[38;2;248;248;242m              reading if a read operation will not block; in particular, a file descriptor is also ready on end-of-file.\u001b[0m\n\n\u001b[38;2;248;248;242m              After \u001b[0m\u001b[38;2;166;226;46mselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m has returned, readfds will be cleared of all file descriptors except for those that are ready for  read‐\u001b[0m\n\u001b[38;2;248;248;242m              ing.\u001b[0m\n\n\u001b[38;2;248;248;242m       writefds\u001b[0m\n\u001b[38;2;248;248;242m              The  file  descriptors  in  this  set are watched to see if they are ready for writing.  A file descriptor is ready for\u001b[0m\n\u001b[38;2;248;248;242m              writing if a write operation will not block.  However, even if a file descriptor indicates as writable, a  large  write\u001b[0m\n\u001b[38;2;248;248;242m              may still block.\u001b[0m\n\n\u001b[38;2;248;248;242m              After \u001b[0m\u001b[38;2;166;226;46mselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m has returned, writefds will be cleared of all file descriptors except for those that are ready for writ‐\u001b[0m\n\u001b[38;2;248;248;242m              ing.\u001b[0m\n\n\u001b[38;2;248;248;242m       exceptfds\u001b[0m\n\u001b[38;2;248;248;242m              The file descriptors in this set are watched for \"exceptional conditions\".  For examples  of  some  exceptional  condi‐\u001b[0m\n\u001b[38;2;248;248;242m              tions, see the discussion of POLLPRI in \u001b[0m\u001b[38;2;166;226;46mpoll\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\n\u001b[38;2;248;248;242m              After  \u001b[0m\u001b[38;2;166;226;46mselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m  has  returned,  exceptfds will be cleared of all file descriptors except for those for which an excep‐\u001b[0m\n\u001b[38;2;248;248;242m              tional condition has occurred.\u001b[0m\n\n\u001b[38;2;248;248;242m       nfds   This argument should be set to the highest-numbered file descriptor in any of the three sets, plus  1.   The  indicated\u001b[0m\n\u001b[38;2;248;248;242m              file descriptors in each set are checked, up to this limit (but see BUGS).\u001b[0m\n\n\u001b[38;2;248;248;242m       timeout\u001b[0m\n\u001b[38;2;248;248;242m              The  timeout argument is a timeval structure (shown below) that specifies the interval that \u001b[0m\u001b[38;2;166;226;46mselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m should block wait‐\u001b[0m\n\u001b[38;2;248;248;242m              ing for a file descriptor to become ready.  The call will block until either:\u001b[0m\n\n\u001b[38;2;248;248;242m              • a file descriptor becomes ready;\u001b[0m\n\n\u001b[38;2;248;248;242m              • the call is interrupted by a signal handler; or\u001b[0m\n\n\u001b[38;2;248;248;242m              • the timeout expires.\u001b[0m\n\n\u001b[38;2;248;248;242m              Note that the timeout interval will be rounded up to the system clock granularity, and kernel  scheduling  delays  mean\u001b[0m\n\u001b[38;2;248;248;242m              that the blocking interval may overrun by a small amount.\u001b[0m\n\n\u001b[38;2;248;248;242m              If both fields of the timeval structure are zero, then \u001b[0m\u001b[38;2;166;226;46mselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m returns immediately.  (This is useful for polling.)\u001b[0m\n\n\u001b[38;2;248;248;242m              If timeout is specified as NULL, \u001b[0m\u001b[38;2;166;226;46mselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m blocks indefinitely waiting for a file descriptor to become ready.\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;166;226;46mpselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;248;248;242m       The  \u001b[0m\u001b[38;2;166;226;46mpselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m system call allows an application to safely wait until either a file descriptor becomes ready or until a signal\u001b[0m\n\u001b[38;2;248;248;242m       is caught.\u001b[0m\n\n\u001b[38;2;248;248;242m       The operation of \u001b[0m\u001b[38;2;166;226;46mselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m and \u001b[0m\u001b[38;2;166;226;46mpselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m is identical, other than these three differences:\u001b[0m\n\n\u001b[38;2;248;248;242m       • \u001b[0m\u001b[38;2;166;226;46mselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m uses a timeout that is a struct timeval (with seconds and microseconds), while \u001b[0m\u001b[38;2;166;226;46mpselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m  uses  a  struct  timespec\u001b[0m\n\u001b[38;2;248;248;242m         (with seconds and nanoseconds).\u001b[0m\n\n\u001b[38;2;248;248;242m       • \u001b[0m\u001b[38;2;166;226;46mselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m may update the timeout argument to indicate how much time was left.  \u001b[0m\u001b[38;2;166;226;46mpselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m does not change this argument.\u001b[0m\n\n\u001b[38;2;248;248;242m       • \u001b[0m\u001b[38;2;166;226;46mselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m has no sigmask argument, and behaves as \u001b[0m\u001b[38;2;166;226;46mpselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m called with NULL sigmask.\u001b[0m\n\n\u001b[38;2;248;248;242m       sigmask  is a pointer to a signal mask (see \u001b[0m\u001b[38;2;166;226;46msigprocmask\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m); if it is not NULL, then \u001b[0m\u001b[38;2;166;226;46mpselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m first replaces the current sig‐\u001b[0m\n\u001b[38;2;248;248;242m       nal mask by the one pointed to by sigmask, then does the \"select\" function, and then restores the original signal  mask.   (If\u001b[0m\n\u001b[38;2;248;248;242m       sigmask is NULL, the signal mask is not modified during the \u001b[0m\u001b[38;2;166;226;46mpselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m call.)\u001b[0m\n\n\u001b[38;2;248;248;242m       Other than the difference in the precision of the timeout argument, the following \u001b[0m\u001b[38;2;166;226;46mpselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m call:\u001b[0m\n\n\u001b[38;2;248;248;242m           ready = pselect(nfds, &readfds, &writefds, &exceptfds,\u001b[0m\n\u001b[38;2;248;248;242m                           timeout, &sigmask);\u001b[0m\n\n\u001b[38;2;248;248;242m       is equivalent to atomically executing the following calls:\u001b[0m\n\n\u001b[38;2;248;248;242m           sigset_t origmask;\u001b[0m\n\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;166;226;46mpthread_sigmask\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255mSIG_SETMASK, &sigmask, &origmask\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m           ready = \u001b[0m\u001b[38;2;166;226;46mselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255mnfds, &readfds, &writefds, &exceptfds, timeout\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;166;226;46mpthread_sigmask\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255mSIG_SETMASK, &origmask, NULL\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m       The reason that \u001b[0m\u001b[38;2;166;226;46mpselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m is needed is that if one wants to wait for either a signal or for a file descriptor to become ready,\u001b[0m\n\u001b[38;2;248;248;242m       then an atomic test is needed to prevent race conditions.  (Suppose the signal handler sets a global flag and returns.  Then a\u001b[0m\n\u001b[38;2;248;248;242m       test  of this global flag followed by a call of \u001b[0m\u001b[38;2;166;226;46mselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m could hang indefinitely if the signal arrived just after the test but\u001b[0m\n\u001b[38;2;248;248;242m       just before the call.  By contrast, \u001b[0m\u001b[38;2;166;226;46mpselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m allows one to first block signals, handle the signals that have  come  in,  then\u001b[0m\n\u001b[38;2;248;248;242m       call \u001b[0m\u001b[38;2;166;226;46mpselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m with the desired sigmask, avoiding the race.)\u001b[0m\n\n\u001b[38;2;248;248;242m   The timeout\u001b[0m\n\u001b[38;2;248;248;242m       The timeout argument for \u001b[0m\u001b[38;2;166;226;46mselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m is a structure of the following type:\u001b[0m\n\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[3;38;2;102;217;239mstruct\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtimeval\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[3;38;2;166;226;46mtime_t\u001b[0m\u001b[38;2;248;248;242m      tv_sec\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;117;113;94m/*\u001b[0m\u001b[38;2;117;113;94m seconds \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[3;38;2;166;226;46msuseconds_t\u001b[0m\u001b[38;2;248;248;242m tv_usec\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;117;113;94m/*\u001b[0m\u001b[38;2;117;113;94m microseconds \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m       The corresponding argument for \u001b[0m\u001b[38;2;166;226;46mpselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m has the following type:\u001b[0m\n\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[3;38;2;102;217;239mstruct\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtimespec\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[3;38;2;166;226;46mtime_t\u001b[0m\u001b[38;2;248;248;242m      tv_sec\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m         \u001b[0m\u001b[38;2;117;113;94m/*\u001b[0m\u001b[38;2;117;113;94m seconds \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[3;38;2;102;217;239mlong\u001b[0m\u001b[38;2;248;248;242m        tv_nsec\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;117;113;94m/*\u001b[0m\u001b[38;2;117;113;94m nanoseconds \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m       On  Linux,  \u001b[0m\u001b[38;2;166;226;46mselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m  modifies  timeout  to  reflect  the amount of time not slept; most other implementations do not do this.\u001b[0m\n\u001b[38;2;248;248;242m       (POSIX.1 permits either behavior.)  This causes problems both when Linux code which reads timeout is ported to other operating\u001b[0m\n\u001b[38;2;248;248;242m       systems, and when code is ported to Linux that reuses a struct timeval for multiple \u001b[0m\u001b[38;2;166;226;46mselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242ms in a loop without reinitializing\u001b[0m\n\u001b[38;2;248;248;242m       it.  Consider timeout to be undefined after \u001b[0m\u001b[38;2;166;226;46mselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m returns.\u001b[0m\n\n\u001b[38;2;253;151;31mRETURN VALUE\u001b[0m\n\u001b[38;2;248;248;242m       On success, \u001b[0m\u001b[38;2;166;226;46mselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m and \u001b[0m\u001b[38;2;166;226;46mpselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m return the number of file descriptors contained in the three returned descriptor sets (that\u001b[0m\n\u001b[38;2;248;248;242m       is,  the  total number of bits that are set in readfds, writefds, exceptfds).  The return value may be zero if the timeout ex‐\u001b[0m\n\u001b[38;2;248;248;242m       pired before any file descriptors became ready.\u001b[0m\n\n\u001b[38;2;248;248;242m       On error, \u001b[0m\u001b[38;2;166;226;46m-1\u001b[0m\u001b[38;2;248;248;242m is returned, and errno is set to indicate the error; the file descriptor sets are unmodified, and timeout becomes\u001b[0m\n\u001b[38;2;248;248;242m       undefined.\u001b[0m\n\n\u001b[38;2;253;151;31mERRORS\u001b[0m\n\u001b[38;2;248;248;242m       EBADF  An invalid file descriptor was given in one of the sets.  (Perhaps a file descriptor that was already closed, or one on\u001b[0m\n\u001b[38;2;248;248;242m              which an error has occurred.)  However, see BUGS.\u001b[0m\n\n\u001b[38;2;248;248;242m       EINTR  A signal was caught; see \u001b[0m\u001b[38;2;166;226;46msignal\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\n\u001b[38;2;248;248;242m       EINVAL nfds is negative or exceeds the RLIMIT_NOFILE resource limit (see \u001b[0m\u001b[38;2;166;226;46mgetrlimit\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m).\u001b[0m\n\n\u001b[38;2;248;248;242m       EINVAL The value contained within timeout is invalid.\u001b[0m\n\n\u001b[38;2;248;248;242m       ENOMEM Unable to allocate memory for internal tables.\u001b[0m\n\n\u001b[38;2;253;151;31mVERSIONS\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mpselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m was added to Linux in kernel 2.6.16.  Prior to this, \u001b[0m\u001b[38;2;166;226;46mpselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m was emulated in glibc (but see BUGS).\u001b[0m\n\n\u001b[38;2;253;151;31mCONFORMING TO\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m conforms to POSIX.1-2001, POSIX.1-2008, and 4.4BSD (\u001b[0m\u001b[38;2;166;226;46mselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m first appeared in 4.2BSD).  Generally  portable  to/from\u001b[0m\n\u001b[38;2;248;248;242m       non-BSD  systems  supporting  clones  of  the BSD socket layer (including System V variants).  However, note that the System V\u001b[0m\n\u001b[38;2;248;248;242m       variant typically sets the timeout variable before returning, but the BSD variant does not.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mpselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m is defined in POSIX.1g, and in POSIX.1-2001 and POSIX.1-2008.\u001b[0m\n\n\u001b[38;2;253;151;31mNOTES\u001b[0m\n\u001b[38;2;248;248;242m       An fd_set is a fixed size buffer.  Executing \u001b[0m\u001b[38;2;166;226;46mFD_CLR\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m or \u001b[0m\u001b[38;2;166;226;46mFD_SET\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m with a value of fd that is negative or is equal to or larger\u001b[0m\n\u001b[38;2;248;248;242m       than FD_SETSIZE will result in undefined behavior.  Moreover, POSIX requires fd to be a valid file descriptor.\u001b[0m\n\n\u001b[38;2;248;248;242m       The operation of \u001b[0m\u001b[38;2;166;226;46mselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m and \u001b[0m\u001b[38;2;166;226;46mpselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m is not affected by the O_NONBLOCK flag.\u001b[0m\n\n\u001b[38;2;248;248;242m       On some other UNIX systems, \u001b[0m\u001b[38;2;166;226;46mselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m can fail with the error EAGAIN if the system fails to allocate kernel-internal resources,\u001b[0m\n\u001b[38;2;248;248;242m       rather than ENOMEM as Linux does.  POSIX specifies this error for \u001b[0m\u001b[38;2;166;226;46mpoll\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m, but not for \u001b[0m\u001b[38;2;166;226;46mselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m.  Portable programs  may  wish\u001b[0m\n\u001b[38;2;248;248;242m       to check for EAGAIN and loop, just as with EINTR.\u001b[0m\n\n\u001b[38;2;248;248;242m   The self-pipe trick\u001b[0m\n\u001b[38;2;248;248;242m       On  systems  that  lack \u001b[0m\u001b[38;2;166;226;46mpselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m, reliable (and more portable) signal trapping can be achieved using the self-pipe trick.  In\u001b[0m\n\u001b[38;2;248;248;242m       this technique, a signal handler writes a byte to a pipe whose other end is monitored by \u001b[0m\u001b[38;2;166;226;46mselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m in the  main  program.   (To\u001b[0m\n\u001b[38;2;248;248;242m       avoid  possibly  blocking when writing to a pipe that may be full or reading from a pipe that may be empty, nonblocking I/O is\u001b[0m\n\u001b[38;2;248;248;242m       used when reading from and writing to the pipe.)\u001b[0m\n\n\u001b[38;2;248;248;242m   Emulating \u001b[0m\u001b[38;2;166;226;46musleep\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;248;248;242m       Before the advent of \u001b[0m\u001b[38;2;166;226;46musleep\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m, some code employed a call to \u001b[0m\u001b[38;2;166;226;46mselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m with all three sets empty, nfds  zero,  and  a  non-NULL\u001b[0m\n\u001b[38;2;248;248;242m       timeout as a fairly portable way to sleep with subsecond precision.\u001b[0m\n\n\u001b[38;2;248;248;242m   Correspondence between \u001b[0m\u001b[38;2;166;226;46mselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m and \u001b[0m\u001b[38;2;166;226;46mpoll\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m notifications\u001b[0m\n\u001b[38;2;248;248;242m       Within  the  Linux  kernel  source,  we  find  the  following  definitions which show the correspondence between the readable,\u001b[0m\n\u001b[38;2;248;248;242m       writable, and exceptional condition notifications of \u001b[0m\u001b[38;2;166;226;46mselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m and the event notifications provided by \u001b[0m\u001b[38;2;166;226;46mpoll\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m and \u001b[0m\u001b[38;2;166;226;46mepoll\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;249;38;114m#define\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;166;226;46mPOLLIN_SET\u001b[0m\u001b[38;2;190;132;255m  \u001b[0m\u001b[38;2;190;132;255m(\u001b[0m\u001b[38;2;190;132;255mEPOLLRDNORM \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;190;132;255m EPOLLRDBAND \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;190;132;255m EPOLLIN \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\n\u001b[38;2;190;132;255m                                EPOLLHUP \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;190;132;255m EPOLLERR\u001b[0m\u001b[38;2;190;132;255m)\u001b[0m\n\u001b[38;2;248;248;242m                              \u001b[0m\u001b[38;2;117;113;94m/*\u001b[0m\u001b[38;2;117;113;94m Ready for reading \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;249;38;114m#define\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;166;226;46mPOLLOUT_SET\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;190;132;255m(\u001b[0m\u001b[38;2;190;132;255mEPOLLWRBAND \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;190;132;255m EPOLLWRNORM \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;190;132;255m EPOLLOUT \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\n\u001b[38;2;190;132;255m                                EPOLLERR\u001b[0m\u001b[38;2;190;132;255m)\u001b[0m\n\u001b[38;2;248;248;242m                              \u001b[0m\u001b[38;2;117;113;94m/*\u001b[0m\u001b[38;2;117;113;94m Ready for writing \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;249;38;114m#define\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;166;226;46mPOLLEX_SET\u001b[0m\u001b[38;2;190;132;255m  \u001b[0m\u001b[38;2;190;132;255m(\u001b[0m\u001b[38;2;190;132;255mEPOLLPRI\u001b[0m\u001b[38;2;190;132;255m)\u001b[0m\n\u001b[38;2;248;248;242m                              \u001b[0m\u001b[38;2;117;113;94m/*\u001b[0m\u001b[38;2;117;113;94m Exceptional condition \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\n\u001b[38;2;248;248;242m   Multithreaded applications\u001b[0m\n\u001b[38;2;248;248;242m       If a file descriptor being monitored by \u001b[0m\u001b[38;2;166;226;46mselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m is closed in another thread, the result is unspecified.  On  some  UNIX  sys‐\u001b[0m\n\u001b[38;2;248;248;242m       tems,  \u001b[0m\u001b[38;2;166;226;46mselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m  unblocks  and  returns, with an indication that the file descriptor is ready (a subsequent I/O operation will\u001b[0m\n\u001b[38;2;248;248;242m       likely fail with an error, unless another process reopens file descriptor between the time \u001b[0m\u001b[38;2;166;226;46mselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m returned and the I/O oper‐\u001b[0m\n\u001b[38;2;248;248;242m       ation  is  performed).   On Linux (and some other systems), closing the file descriptor in another thread has no effect on se‐\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mlect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m.  In summary, any application that relies on a particular behavior in this scenario must be considered buggy.\u001b[0m\n\n\u001b[38;2;248;248;242m   C library/kernel differences\u001b[0m\n\u001b[38;2;248;248;242m       The Linux kernel allows file descriptor sets of arbitrary size, determining the length of the sets  to  be  checked  from  the\u001b[0m\n\u001b[38;2;248;248;242m       value of nfds.  However, in the glibc implementation, the fd_set type is fixed in size.  See also BUGS.\u001b[0m\n\n\u001b[38;2;248;248;242m       The \u001b[0m\u001b[38;2;166;226;46mpselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m interface described in this page is implemented by glibc.  The underlying Linux system call is named \u001b[0m\u001b[38;2;166;226;46mpselect6\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m       This system call has somewhat different behavior from the glibc wrapper function.\u001b[0m\n\n\u001b[38;2;248;248;242m       The Linux \u001b[0m\u001b[38;2;166;226;46mpselect6\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m system call modifies its timeout argument.  However, the glibc wrapper function hides  this  behavior  by\u001b[0m\n\u001b[38;2;248;248;242m       using  a  local  variable for the timeout argument that is passed to the system call.  Thus, the glibc \u001b[0m\u001b[38;2;166;226;46mpselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m function does\u001b[0m\n\u001b[38;2;248;248;242m       not modify its timeout argument; this is the behavior required by POSIX.1-2001.\u001b[0m\n\n\u001b[38;2;248;248;242m       The final argument of the \u001b[0m\u001b[38;2;166;226;46mpselect6\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m system call is not a sigset_t * pointer, but is instead a structure of the form:\u001b[0m\n\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[3;38;2;102;217;239mstruct\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;249;38;114mconst\u001b[0m\u001b[38;2;248;248;242m kernel_sigset_t \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242mss\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;117;113;94m/*\u001b[0m\u001b[38;2;117;113;94m Pointer to signal set \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[3;38;2;166;226;46msize_t\u001b[0m\u001b[38;2;248;248;242m ss_len\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;117;113;94m/*\u001b[0m\u001b[38;2;117;113;94m Size (in bytes) of object\u001b[0m\n\u001b[38;2;117;113;94m                                               pointed to by 'ss' \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m       This allows the system call to obtain both a pointer to the signal set and its size, while allowing for the fact that most ar‐\u001b[0m\n\u001b[38;2;248;248;242m       chitectures  support a maximum of 6 arguments to a system call.  See \u001b[0m\u001b[38;2;166;226;46msigprocmask\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m for a discussion of the difference between\u001b[0m\n\u001b[38;2;248;248;242m       the kernel and libc notion of the signal set.\u001b[0m\n\n\u001b[38;2;248;248;242m   Historical glibc details\u001b[0m\n\u001b[38;2;248;248;242m       Glibc 2.0 provided an incorrect version of \u001b[0m\u001b[38;2;166;226;46mpselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m that did not take a sigmask argument.\u001b[0m\n\n\u001b[38;2;248;248;242m       In glibc versions 2.1 to 2.2.1, one must define _GNU_SOURCE in order to obtain the  declaration  of  \u001b[0m\u001b[38;2;166;226;46mpselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m  from  <sys/se‐\u001b[0m\n\u001b[38;2;248;248;242m       lect.h>.\u001b[0m\n\n\u001b[38;2;253;151;31mBUGS\u001b[0m\n\u001b[38;2;248;248;242m       POSIX allows an implementation to define an upper limit, advertised via the constant FD_SETSIZE, on the range of file descrip‐\u001b[0m\n\u001b[38;2;248;248;242m       tors that can be specified in a file descriptor set.  The Linux kernel imposes no fixed limit, but  the  glibc  implementation\u001b[0m\n\u001b[38;2;248;248;242m       makes  fd_set a fixed-size type, with FD_SETSIZE defined as 1024, and the FD_*() macros operating according to that limit.  To\u001b[0m\n\u001b[38;2;248;248;242m       monitor file descriptors greater than 1023, use \u001b[0m\u001b[38;2;166;226;46mpoll\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m or \u001b[0m\u001b[38;2;166;226;46mepoll\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m instead.\u001b[0m\n\n\u001b[38;2;248;248;242m       According to POSIX, \u001b[0m\u001b[38;2;166;226;46mselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m should check all specified file descriptors in the three file descriptor sets, up  to  the  limit\u001b[0m\n\u001b[38;2;248;248;242m       nfds-1.   However,  the current implementation ignores any file descriptor in these sets that is greater than the maximum file\u001b[0m\n\u001b[38;2;248;248;242m       descriptor number that the process currently has open.  According to POSIX, any such file descriptor that is specified in  one\u001b[0m\n\u001b[38;2;248;248;242m       of the sets should result in the error EBADF.\u001b[0m\n\n\u001b[38;2;248;248;242m       Starting  with  version  2.1, glibc provided an emulation of \u001b[0m\u001b[38;2;166;226;46mpselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m that was implemented using \u001b[0m\u001b[38;2;166;226;46msigprocmask\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m and \u001b[0m\u001b[38;2;166;226;46mselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m       This implementation remained vulnerable to the very race condition that \u001b[0m\u001b[38;2;166;226;46mpselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m was designed to prevent.  Modern versions of\u001b[0m\n\u001b[38;2;248;248;242m       glibc use the (race-free) \u001b[0m\u001b[38;2;166;226;46mpselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m system call on kernels where it is provided.\u001b[0m\n\n\u001b[38;2;248;248;242m       On  Linux,  \u001b[0m\u001b[38;2;166;226;46mselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m  may report a socket file descriptor as \"ready for reading\", while nevertheless a subsequent read blocks.\u001b[0m\n\u001b[38;2;248;248;242m       This could for example happen when data has arrived but upon examination has the wrong checksum and is discarded.   There  may\u001b[0m\n\u001b[38;2;248;248;242m       be  other circumstances in which a file descriptor is spuriously reported as ready.  Thus it may be safer to use O_NONBLOCK on\u001b[0m\n\u001b[38;2;248;248;242m       sockets that should not block.\u001b[0m\n\n\u001b[38;2;248;248;242m       On Linux, \u001b[0m\u001b[38;2;166;226;46mselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m also modifies timeout if the call is interrupted by a signal handler (i.e., the EINTR error return).   This\u001b[0m\n\u001b[38;2;248;248;242m       is not permitted by POSIX.1.  The Linux \u001b[0m\u001b[38;2;166;226;46mpselect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m system call has the same behavior, but the glibc wrapper hides this behavior\u001b[0m\n\u001b[38;2;248;248;242m       by internally copying the timeout to a local variable and passing that variable to the system call.\u001b[0m\n\n\u001b[38;2;253;151;31mEXAMPLES\u001b[0m\n\u001b[38;2;190;132;255m       \u001b[0m\u001b[38;2;249;38;114m#include\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;230;219;116m<\u001b[0m\u001b[38;2;230;219;116mstdio.h\u001b[0m\u001b[38;2;230;219;116m>\u001b[0m\n\u001b[38;2;190;132;255m       \u001b[0m\u001b[38;2;249;38;114m#include\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;230;219;116m<\u001b[0m\u001b[38;2;230;219;116mstdlib.h\u001b[0m\u001b[38;2;230;219;116m>\u001b[0m\n\u001b[38;2;190;132;255m       \u001b[0m\u001b[38;2;249;38;114m#include\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;230;219;116m<\u001b[0m\u001b[38;2;230;219;116msys/select.h\u001b[0m\u001b[38;2;230;219;116m>\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mmain\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mvoid\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m           fd_set rfds\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[3;38;2;102;217;239mstruct\u001b[0m\u001b[38;2;248;248;242m timeval tv\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m retval\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;117;113;94m/*\u001b[0m\u001b[38;2;117;113;94m Watch stdin (fd 0) to see when it has input. \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;248;248;242mFD_ZERO\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114m&\u001b[0m\u001b[38;2;248;248;242mrfds\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;248;248;242mFD_SET\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m&\u001b[0m\u001b[38;2;248;248;242mrfds\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;117;113;94m/*\u001b[0m\u001b[38;2;117;113;94m Wait up to five seconds. \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\n\u001b[38;2;248;248;242m           tv\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;255;255;255mtv_sec\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m           tv\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;255;255;255mtv_usec\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m           retval \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mselect\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m&\u001b[0m\u001b[38;2;248;248;242mrfds\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mNULL\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mNULL\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m&\u001b[0m\u001b[38;2;248;248;242mtv\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;117;113;94m/*\u001b[0m\u001b[38;2;117;113;94m Don't rely on the value of tv now! \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mretval \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;102;217;239mperror\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mselect()\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mretval\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;102;217;239mprintf\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mData is available now.\u001b[0m\u001b[38;2;190;132;255m\\n\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;117;113;94m/*\u001b[0m\u001b[38;2;117;113;94m FD_ISSET(0, &rfds) will be true. \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;102;217;239mprintf\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mNo data within five seconds.\u001b[0m\u001b[38;2;190;132;255m\\n\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;102;217;239mexit\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mEXIT_SUCCESS\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;253;151;31mSEE ALSO\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46maccept\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;166;226;46mconnect\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;166;226;46mpoll\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;166;226;46mread\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;166;226;46mrecv\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;166;226;46mrestart_syscall\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;166;226;46msend\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;166;226;46msigprocmask\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;166;226;46mwrite\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;166;226;46mepoll\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;166;226;46mtime\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\n\u001b[38;2;248;248;242m       For a tutorial with discussion and examples, see \u001b[0m\u001b[38;2;166;226;46mselect_tut\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\n\u001b[38;2;253;151;31mCOLOPHON\u001b[0m\n\u001b[38;2;248;248;242m       This page is part of release 5.08 of the Linux man-pages project.  A description of the project, information  about  reporting\u001b[0m\n\u001b[38;2;248;248;242m       bugs, and the latest version of this page, can be found at https://www.kernel.org/doc/man-pages/.\u001b[0m\n\n\u001b[38;2;253;151;31mLinux                                                         2020-04-11                                                    SELECT(2)\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Manpage/sway.5.man",
    "content": "\u001b[38;2;248;248;242msway(5)                       File Formats Manual                      sway(5)\u001b[0m\n\n\u001b[38;2;253;151;31mNAME\u001b[0m\n\u001b[38;2;248;248;242m       sway - configuration file and commands\u001b[0m\n\n\u001b[38;2;253;151;31mDESCRIPTION\u001b[0m\n\u001b[38;2;248;248;242m       A sway configuration file is a list of sway commands that are executed\u001b[0m\n\u001b[38;2;248;248;242m       by sway on startup.  These commands usually consist of setting your\u001b[0m\n\u001b[38;2;248;248;242m       preferences and setting key bindings. An example config is likely\u001b[0m\n\u001b[38;2;248;248;242m       present in /etc/sway/config for you to check out.\u001b[0m\n\n\u001b[38;2;248;248;242m       Lines in the configuration file might be extended through multiple\u001b[0m\n\u001b[38;2;248;248;242m       lines by adding a '\\' character at the end of line. e.g.:\u001b[0m\n\n\u001b[38;2;248;248;242m           bindsym Shift+XF86AudioRaiseVolume exec \\\u001b[0m\n\u001b[38;2;248;248;242m                pactl set-sink-volume @DEFAULT_SINK@ \u001b[0m\u001b[38;2;166;226;46m-1\u001b[0m\u001b[38;2;248;248;242m%\u001b[0m\n\n\u001b[38;2;248;248;242m       Commands can also be given as a block in the form command { <subcom‐\u001b[0m\n\u001b[38;2;248;248;242m       mands...> }. Anything before the opening { will be prepended to the\u001b[0m\n\u001b[38;2;248;248;242m       lines inside the block. For example:\u001b[0m\n\n\u001b[38;2;248;248;242m           output eDP-1 {\u001b[0m\n\u001b[38;2;248;248;242m                background ~/wallpaper.png fill\u001b[0m\n\u001b[38;2;248;248;242m                resolution 1920x1080\u001b[0m\n\u001b[38;2;248;248;242m           }\u001b[0m\n\n\u001b[38;2;248;248;242m       is identical to\u001b[0m\n\n\u001b[38;2;248;248;242m           output eDP-1 background ~/wallpaper.png fill\u001b[0m\n\u001b[38;2;248;248;242m           output eDP-1 resolution 1920x1080\u001b[0m\n\n\u001b[38;2;248;248;242m       These commands can be executed in your config file, via \u001b[0m\u001b[38;2;166;226;46mswaymsg\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m, or\u001b[0m\n\u001b[38;2;248;248;242m       via the bindsym command.\u001b[0m\n\n\u001b[38;2;253;151;31mCOMMAND CONVENTIONS\u001b[0m\n\u001b[38;2;248;248;242m       Commands are split into several arguments using spaces. You can enclose\u001b[0m\n\u001b[38;2;248;248;242m       arguments with quotation marks (\"...\" or '...') to add spaces to a sin‐\u001b[0m\n\u001b[38;2;248;248;242m       gle argument. You may also run several commands in order by separating\u001b[0m\n\u001b[38;2;248;248;242m       each with , or ;. Criteria is retained across commands separated by ,,\u001b[0m\n\u001b[38;2;248;248;242m       but will be reset (and allow for new criteria, if desired) for commands\u001b[0m\n\u001b[38;2;248;248;242m       separated by a ;.\u001b[0m\n\n\u001b[38;2;248;248;242m       Throughout the documentation, | is used to distinguish between argu‐\u001b[0m\n\u001b[38;2;248;248;242m       ments for which you may only select one. [...] is used for optional ar‐\u001b[0m\n\u001b[38;2;248;248;242m       guments, and <...> for arguments where you are expected to supply some\u001b[0m\n\u001b[38;2;248;248;242m       value.\u001b[0m\n\n\u001b[38;2;253;151;31mCOMMANDS\u001b[0m\n\u001b[38;2;248;248;242m       This section only lists general commands. For input and output com‐\u001b[0m\n\u001b[38;2;248;248;242m       mands, refer to sway-input(5) and sway-output(5).\u001b[0m\n\n\u001b[38;2;248;248;242m       The following commands may only be used in the configuration file.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mbar\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mbar-id\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mbar-subcommands\u001b[0m\u001b[38;2;248;248;242m...\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\u001b[38;2;248;248;242m           For details on bar subcommands, see sway-bar(5).\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mdefault_orientation\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mhorizontal\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mvertical\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mauto\u001b[0m\n\u001b[38;2;248;248;242m           Sets the default container layout for tiled containers.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46minclude\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mpath\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\u001b[38;2;248;248;242m           Includes another file from path. path can be either a full path or\u001b[0m\n\u001b[38;2;248;248;242m           a path relative to the parent config, and expands shell syntax (see\u001b[0m\n\u001b[38;2;248;248;242m           wordexp(3) for details). The same include file can only be included\u001b[0m\n\u001b[38;2;248;248;242m           once; subsequent attempts will be ignored.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mswaybg_command\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mcommand\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\u001b[38;2;248;248;242m           Executes custom background command. Default is swaybg. Refer to\u001b[0m\n\u001b[38;2;248;248;242m           sway-output(5) for more information.\u001b[0m\n\n\u001b[38;2;248;248;242m           It can be disabled by setting the command to a single dash:\u001b[0m\n\u001b[38;2;248;248;242m           swaybg_command -\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mswaynag_command\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mcommand\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\u001b[38;2;248;248;242m           Executes custom command for swaynag. Default is swaynag. Additional\u001b[0m\n\u001b[38;2;248;248;242m           arguments may be appended to the end. This should only be used to\u001b[0m\n\u001b[38;2;248;248;242m           either direct sway to call swaynag from a custom path or to provide\u001b[0m\n\u001b[38;2;248;248;242m           additional arguments. This should be placed at the top of the con‐\u001b[0m\n\u001b[38;2;248;248;242m           fig for the best results.\u001b[0m\n\n\u001b[38;2;248;248;242m           It can be disabled by setting the command to a single dash: sway‐\u001b[0m\n\u001b[38;2;248;248;242m           nag_command -\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mworkspace_layout\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mdefault\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mstacking\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mtabbed\u001b[0m\n\u001b[38;2;248;248;242m           Specifies the initial layout for new containers in an empty\u001b[0m\n\u001b[38;2;248;248;242m           workspace.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mxwayland\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31menable\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mdisable\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mforce\u001b[0m\n\u001b[38;2;248;248;242m           Enables or disables Xwayland support, which allows X11 applications\u001b[0m\n\u001b[38;2;248;248;242m           to be used. enable will lazily load Xwayland so Xwayland will not\u001b[0m\n\u001b[38;2;248;248;242m           be launched until the first client attempts to connect. In some\u001b[0m\n\u001b[38;2;248;248;242m           cases, such as slower machines, it may be desirable to have Xway‐\u001b[0m\n\u001b[38;2;248;248;242m           land started immediately by using force instead of enable.\u001b[0m\n\n\u001b[38;2;248;248;242m       The following commands cannot be used directly in the configuration\u001b[0m\n\u001b[38;2;248;248;242m       file. They are expected to be used with bindsym or at runtime through\u001b[0m\n\u001b[38;2;248;248;242m       swaymsg(1).\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mborder\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mnone\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mnormal\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mcsd\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mpixel\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mn\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m           Set border style for focused window. normal includes a border of\u001b[0m\n\u001b[38;2;248;248;242m           thickness n and a title bar. pixel is a border without title bar n\u001b[0m\n\u001b[38;2;248;248;242m           pixels thick. Default is normal with border thickness 2. csd is\u001b[0m\n\u001b[38;2;248;248;242m           short for client-side-decorations, which allows the client to draw\u001b[0m\n\u001b[38;2;248;248;242m           its own decorations.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mborder\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mtoggle\u001b[0m\n\u001b[38;2;248;248;242m           Cycles through the available border styles.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mexit\u001b[0m\n\u001b[38;2;248;248;242m           Exit sway and end your Wayland session.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mfloating\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31menable\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mdisable\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mtoggle\u001b[0m\n\u001b[38;2;248;248;242m           Make focused view floating, non-floating, or the opposite of what\u001b[0m\n\u001b[38;2;248;248;242m           it is now.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mcriteria\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mfocus\u001b[0m\n\u001b[38;2;248;248;242m           Moves focus to the container that matches the specified criteria.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mfocus\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mup\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mright\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mdown\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mleft\u001b[0m\n\u001b[38;2;248;248;242m           Moves focus to the next container in the specified direction.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mfocus\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mprev\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mnext\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31msibling\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m           Moves focus to the previous or next container in the current lay‐\u001b[0m\n\u001b[38;2;248;248;242m           out. By default, the last active child of the newly focused con‐\u001b[0m\n\u001b[38;2;248;248;242m           tainer will be focused. The sibling option indicates not to immedi‐\u001b[0m\n\u001b[38;2;248;248;242m           ately focus a child of the container.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mfocus\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mchild\u001b[0m\n\u001b[38;2;248;248;242m           Moves focus to the last-focused child of the focused container.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mfocus\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mparent\u001b[0m\n\u001b[38;2;248;248;242m           Moves focus to the parent of the focused container.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mfocus\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31moutput\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mup\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mright\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mdown\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mleft\u001b[0m\n\u001b[38;2;248;248;242m           Moves focus to the next output in the specified direction.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mfocus\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31moutput\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mname\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\u001b[38;2;248;248;242m           Moves focus to the named output.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mfocus\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mtiling\u001b[0m\n\u001b[38;2;248;248;242m           Sets focus to the last focused tiling container.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mfocus\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mfloating\u001b[0m\n\u001b[38;2;248;248;242m           Sets focus to the last focused floating container.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mfocus\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mmode_toggle\u001b[0m\n\u001b[38;2;248;248;242m           Moves focus between the floating and tiled layers.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mfullscreen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31menable\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mdisable\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mtoggle\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31mglobal\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m           Makes focused view fullscreen, non-fullscreen, or the opposite of\u001b[0m\n\u001b[38;2;248;248;242m           what it is now. If no argument is given, it does the same as tog‐\u001b[0m\n\u001b[38;2;248;248;242m           gle. If global is specified, the view will be fullscreen across all\u001b[0m\n\u001b[38;2;248;248;242m           outputs.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mgaps\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31minner\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mouter\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mhorizontal\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mvertical\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mtop\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mright\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mbottom\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mleft\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mall\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mcurrent\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[3;38;2;253;151;31mset\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mplus\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mminus\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mtoggle\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mamount\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\u001b[38;2;248;248;242m           Changes the inner or outer gaps for either all workspaces or the\u001b[0m\n\u001b[38;2;248;248;242m           current workspace. outer gaps can be altered per side with top,\u001b[0m\n\u001b[38;2;248;248;242m           right, bottom, and left or per direction with horizontal and verti‐\u001b[0m\n\u001b[38;2;248;248;242m           cal.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46minhibit_idle\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mfocus\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mfullscreen\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mopen\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mnone\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mvisible\u001b[0m\n\u001b[38;2;248;248;242m           Set/unset an idle inhibitor for the view. focus will inhibit idle\u001b[0m\n\u001b[38;2;248;248;242m           when the view is focused by any seat. fullscreen will inhibit idle\u001b[0m\n\u001b[38;2;248;248;242m           when the view is fullscreen (or a descendant of a fullscreen con‐\u001b[0m\n\u001b[38;2;248;248;242m           tainer) and is visible. open will inhibit idle until the view is\u001b[0m\n\u001b[38;2;248;248;242m           closed (or the inhibitor is unset/changed). visible will inhibit\u001b[0m\n\u001b[38;2;248;248;242m           idle when the view is visible on any output. none will remove any\u001b[0m\n\u001b[38;2;248;248;242m           existing idle inhibitor for the view.\u001b[0m\n\n\u001b[38;2;248;248;242m           This can also be used with criteria to set an idle inhibitor for\u001b[0m\n\u001b[38;2;248;248;242m           any existing view or with for_window to set idle inhibitors for fu‐\u001b[0m\n\u001b[38;2;248;248;242m           ture views.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mlayout\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mdefault\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31msplith\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31msplitv\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mstacking\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mtabbed\u001b[0m\n\u001b[38;2;248;248;242m           Sets the layout mode of the focused container.\u001b[0m\n\n\u001b[38;2;248;248;242m           When using the stacking layout, only the focused window in the con‐\u001b[0m\n\u001b[38;2;248;248;242m           tainer is displayed, with the opened windows' list on the top of\u001b[0m\n\u001b[38;2;248;248;242m           the container.\u001b[0m\n\n\u001b[38;2;248;248;242m           The tabbed layout is similar to stacking, but the windows’ list is\u001b[0m\n\u001b[38;2;248;248;242m           vertically split.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mlayout\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mtoggle\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31msplit\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mall\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m           Cycles the layout mode of the focused container though a preset\u001b[0m\n\u001b[38;2;248;248;242m           list of layouts. If no argument is given, then it cycles through\u001b[0m\n\u001b[38;2;248;248;242m           stacking, tabbed and the last split layout. If split is given, then\u001b[0m\n\u001b[38;2;248;248;242m           it cycles through splith and splitv. If all is given, then it cy‐\u001b[0m\n\u001b[38;2;248;248;242m           cles through every layout.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mlayout\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mtoggle\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31msplit\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mtabbed\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mstacking\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31msplitv\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31msplith\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31msplit\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mtabbed\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mstacking\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31msplitv\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31msplith\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m...\u001b[0m\n\u001b[38;2;248;248;242m           Cycles the layout mode of the focused container through a list of\u001b[0m\n\u001b[38;2;248;248;242m           layouts.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mmax_render_time\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31moff\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mmsec\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\u001b[38;2;248;248;242m           Controls when the relevant application is told to render this win‐\u001b[0m\n\u001b[38;2;248;248;242m           dow, as a positive number of milliseconds before the next time sway\u001b[0m\n\u001b[38;2;248;248;242m           composites the output. A smaller number leads to fresher rendered\u001b[0m\n\u001b[38;2;248;248;242m           frames being composited by sway and lower perceived input latency,\u001b[0m\n\u001b[38;2;248;248;242m           but if set too low, the application may not finish rendering before\u001b[0m\n\u001b[38;2;248;248;242m           sway composites the output, leading to delayed frames.\u001b[0m\n\n\u001b[38;2;248;248;242m           When set to off, the relevant application is told to render this\u001b[0m\n\u001b[38;2;248;248;242m           window immediately after display refresh. How much time is left for\u001b[0m\n\u001b[38;2;248;248;242m           rendering before sway composites the output at that point depends\u001b[0m\n\u001b[38;2;248;248;242m           on the output max_render_time setting.\u001b[0m\n\n\u001b[38;2;248;248;242m           To set this up for optimal latency:\u001b[0m\n\u001b[38;2;248;248;242m           1.   Set up output max_render_time (see sway-output(5)).\u001b[0m\n\u001b[38;2;248;248;242m           2.   Put the target application in full-screen and have it continu‐\u001b[0m\n\u001b[38;2;248;248;242m               ously render something.\u001b[0m\n\u001b[38;2;248;248;242m           3.   Start by setting max_render_time 1. If the application drops\u001b[0m\n\u001b[38;2;248;248;242m               frames, increment by 1.\u001b[0m\n\n\u001b[38;2;248;248;242m           This setting only has an effect if a per-output max_render_time is\u001b[0m\n\u001b[38;2;248;248;242m           in effect on the output the window is currently on. See sway-out‐\u001b[0m\n\u001b[38;2;248;248;242m           put(5) for further details.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mmove\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mleft\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mright\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mup\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mdown\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mpx\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mpx\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m           Moves the focused container in the direction specified. The op‐\u001b[0m\n\u001b[38;2;248;248;242m           tional px argument specifies how many pixels to move the container.\u001b[0m\n\u001b[38;2;248;248;242m           If unspecified, the default is 10 pixels. Pixels are ignored when\u001b[0m\n\u001b[38;2;248;248;242m           moving tiled containers.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mmove\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31mabsolute\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mposition\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mpos_x\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31mpx\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mppt\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mpos_y\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31mpx\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mppt\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m           Moves the focused container to the specified position in the\u001b[0m\n\u001b[38;2;248;248;242m           workspace. The position can be specified in pixels or percentage\u001b[0m\n\u001b[38;2;248;248;242m           points, omitting the unit defaults to pixels. If absolute is used,\u001b[0m\n\u001b[38;2;248;248;242m           the position is relative to all outputs. absolute can not be used\u001b[0m\n\u001b[38;2;248;248;242m           with percentage points.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mmove\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31mabsolute\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mposition\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mcenter\u001b[0m\n\u001b[38;2;248;248;242m           Moves the focused container to be centered on the workspace. If ab‐\u001b[0m\n\u001b[38;2;248;248;242m           solute is used, it is moved to the center of all outputs.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mmove\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mposition\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mcursor\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mmouse\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mpointer\u001b[0m\n\u001b[38;2;248;248;242m           Moves the focused container to be centered on the cursor.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mmove\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31mcontainer\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mwindow\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31mto\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mmark\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mmark\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\u001b[38;2;248;248;242m           Moves the focused container to the specified mark.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mmove\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31m--no-auto-back-and-forth\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31mcontainer\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mwindow\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31mto\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mworkspace\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31mnum\u001b[0m\u001b[38;2;248;248;242m‐\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[3;38;2;253;151;31mber\u001b[0m\u001b[38;2;248;248;242m] <name>\u001b[0m\n\u001b[38;2;248;248;242m           Moves the focused container to the specified workspace. The string\u001b[0m\n\u001b[38;2;248;248;242m           number is optional and is used to match a workspace with the same\u001b[0m\n\u001b[38;2;248;248;242m           number, even if it has a different name.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mmove\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31mcontainer\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mwindow\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31mto\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mworkspace\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mprev\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mnext\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mcurrent\u001b[0m\n\u001b[38;2;248;248;242m           Moves the focused container to the previous, next or current\u001b[0m\n\u001b[38;2;248;248;242m           workspace on this output, or if no workspaces remain, the previous\u001b[0m\n\u001b[38;2;248;248;242m           or next output.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mmove\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31mcontainer\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mwindow\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31mto\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mworkspace\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mprev_on_output\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mnext_on_output\u001b[0m\n\u001b[38;2;248;248;242m           Moves the focused container to the previous or next workspace on\u001b[0m\n\u001b[38;2;248;248;242m           this output, wrapping around if already at the first or last\u001b[0m\n\u001b[38;2;248;248;242m           workspace.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mmove\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31mcontainer\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mwindow\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31mto\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mworkspace\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mback_and_forth\u001b[0m\n\u001b[38;2;248;248;242m           Moves the focused container to previously focused workspace.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mmove\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31mcontainer\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mwindow\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31mto\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31moutput\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mname-or-id\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mcurrent\u001b[0m\n\u001b[38;2;248;248;242m           Moves the focused container to the specified output.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mmove\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31mcontainer\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mwindow\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31mto\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31moutput\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mup\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mright\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mdown\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mleft\u001b[0m\n\u001b[38;2;248;248;242m           Moves the focused container to next output in the specified direc‐\u001b[0m\n\u001b[38;2;248;248;242m           tion.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mmove\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31mcontainer\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mwindow\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31mto\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mscratchpad\u001b[0m\n\u001b[38;2;248;248;242m           Moves the focused container to the scratchpad.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mmove\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mworkspace\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31mto\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31moutput\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mname-or-id\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mcurrent\u001b[0m\n\u001b[38;2;248;248;242m           Moves the focused workspace to the specified output.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mmove\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mworkspace\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mto\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31moutput\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mname-or-id\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mcurrent\u001b[0m\n\u001b[38;2;248;248;242m           Moves the focused workspace to the specified output.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mmove\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mworkspace\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31mto\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31moutput\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mup\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mright\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mdown\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mleft\u001b[0m\n\u001b[38;2;248;248;242m           Moves the focused workspace to next output in the specified direc‐\u001b[0m\n\u001b[38;2;248;248;242m           tion.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mmove\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mworkspace\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mto\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31moutput\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mup\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mright\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mdown\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mleft\u001b[0m\n\u001b[38;2;248;248;242m           Moves the focused workspace to next output in the specified direc‐\u001b[0m\n\u001b[38;2;248;248;242m           tion.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mnop\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mcomment\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\u001b[38;2;248;248;242m           A no operation command that can be used to override default behav‐\u001b[0m\n\u001b[38;2;248;248;242m           iour. The optional comment argument is ignored, but logged for de‐\u001b[0m\n\u001b[38;2;248;248;242m           bugging purposes.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mreload\u001b[0m\n\u001b[38;2;248;248;242m           Reloads the sway config file and applies any changes. The config\u001b[0m\n\u001b[38;2;248;248;242m           file is located at path specified by the command line arguments\u001b[0m\n\u001b[38;2;248;248;242m           when started, otherwise according to the priority stated in\u001b[0m\n\u001b[38;2;248;248;242m           sway(1).\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mrename\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mworkspace\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mold_name\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mto\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mnew_name\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\u001b[38;2;248;248;242m           Rename either <old_name> or the focused workspace to the <new_name>\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mresize\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mshrink\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mgrow\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mwidth\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mheight\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mamount\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31mpx\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mppt\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m           Resizes the currently focused container by amount, specified in\u001b[0m\n\u001b[38;2;248;248;242m           pixels or percentage points. If the units are omitted, floating\u001b[0m\n\u001b[38;2;248;248;242m           containers are resized in px and tiled containers by ppt. amount\u001b[0m\n\u001b[38;2;248;248;242m           will default to 10 if omitted.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mresize\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mset\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mheight\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mheight\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31mpx\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mppt\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m           Sets the height of the container to height, specified in pixels or\u001b[0m\n\u001b[38;2;248;248;242m           percentage points. If the units are omitted, floating containers\u001b[0m\n\u001b[38;2;248;248;242m           are resized in px and tiled containers by ppt. If height is 0, the\u001b[0m\n\u001b[38;2;248;248;242m           container will not be resized.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mresize\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mset\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31mwidth\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mwidth\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31mpx\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mppt\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m           Sets the width of the container to width, specified in pixels or\u001b[0m\n\u001b[38;2;248;248;242m           percentage points. If the units are omitted, floating containers\u001b[0m\n\u001b[38;2;248;248;242m           are resized in px and tiled containers by ppt. If width is 0, the\u001b[0m\n\u001b[38;2;248;248;242m           container will not be resized.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mresize\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mset\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31mwidth\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mwidth\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31mpx\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mppt\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31mheight\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mheight\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31mpx\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mppt\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m           Sets the width and height of the container to width and height,\u001b[0m\n\u001b[38;2;248;248;242m           specified in pixels or percentage points. If the units are omitted,\u001b[0m\n\u001b[38;2;248;248;242m           floating containers are resized in px and tiled containers by ppt.\u001b[0m\n\u001b[38;2;248;248;242m           If width or height is 0, the container will not be resized on that\u001b[0m\n\u001b[38;2;248;248;242m           axis.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mscratchpad\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mshow\u001b[0m\n\u001b[38;2;248;248;242m           Shows a window from the scratchpad. Repeatedly using this command\u001b[0m\n\u001b[38;2;248;248;242m           will cycle through the windows in the scratchpad.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mshortcuts_inhibitor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31menable\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mdisable\u001b[0m\n\u001b[38;2;248;248;242m           Enables or disables the ability of clients to inhibit keyboard\u001b[0m\n\u001b[38;2;248;248;242m           shortcuts for a view. This is primarily useful for virtualization\u001b[0m\n\u001b[38;2;248;248;242m           and remote desktop software. It affects either the currently fo‐\u001b[0m\n\u001b[38;2;248;248;242m           cused view or a set of views selected by criteria. Subcommand dis‐\u001b[0m\n\u001b[38;2;248;248;242m           able additionally deactivates any active inhibitors for the given\u001b[0m\n\u001b[38;2;248;248;242m           view(s). Criteria are particularly useful with the for_window com‐\u001b[0m\n\u001b[38;2;248;248;242m           mand to configure a class of views differently from the per-seat\u001b[0m\n\u001b[38;2;248;248;242m           defaults established by the seat subcommand of the same name. See\u001b[0m\n\u001b[38;2;248;248;242m           sway-input(5) for more ways to affect inhibitors.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46msplit\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mvertical\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mv\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mhorizontal\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mh\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mnone\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mn\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mtoggle\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mt\u001b[0m\n\u001b[38;2;248;248;242m           Splits the current container, vertically or horizontally. When none\u001b[0m\n\u001b[38;2;248;248;242m           is specified, the effect of a previous split is undone if the cur‐\u001b[0m\n\u001b[38;2;248;248;242m           rent container is the only child of a split parent. When toggle is\u001b[0m\n\u001b[38;2;248;248;242m           specified, the current container is split opposite to the parent\u001b[0m\n\u001b[38;2;248;248;242m           container's layout.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46msplith\u001b[0m\n\u001b[38;2;248;248;242m           Equivalent to split horizontal\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46msplitv\u001b[0m\n\u001b[38;2;248;248;242m           Equivalent to split vertical\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46msplitt\u001b[0m\n\u001b[38;2;248;248;242m           Equivalent to split toggle\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46msticky\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31menable\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mdisable\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mtoggle\u001b[0m\n\u001b[38;2;248;248;242m           \"Sticks\" a floating window to the current output so that it shows\u001b[0m\n\u001b[38;2;248;248;242m           up on all workspaces.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mswap\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mcontainer\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mwith\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mid\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mcon_id\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mmark\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31marg\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\u001b[38;2;248;248;242m           Swaps the position, geometry, and fullscreen status of two contain‐\u001b[0m\n\u001b[38;2;248;248;242m           ers. The first container can be selected either by criteria or fo‐\u001b[0m\n\u001b[38;2;248;248;242m           cus. The second container can be selected by id, con_id, or mark.\u001b[0m\n\u001b[38;2;248;248;242m           id can only be used with xwayland views. If the first container has\u001b[0m\n\u001b[38;2;248;248;242m           focus, it will retain focus unless it is moved to a different\u001b[0m\n\u001b[38;2;248;248;242m           workspace or the second container becomes fullscreen on the same\u001b[0m\n\u001b[38;2;248;248;242m           workspace as the first container. In either of those cases, the\u001b[0m\n\u001b[38;2;248;248;242m           second container will gain focus.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mtitle_format\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mformat\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\u001b[38;2;248;248;242m           Sets the format of window titles. The following placeholders may be\u001b[0m\n\u001b[38;2;248;248;242m           used:\u001b[0m\n\n\u001b[38;2;248;248;242m               %title - The title supplied by the window\u001b[0m\n\u001b[38;2;248;248;242m                         %app_id - The wayland app ID (applicable to wayland\u001b[0m\n\u001b[38;2;248;248;242m               windows only)\u001b[0m\n\u001b[38;2;248;248;242m                         %class - The X11 classname (applicable to xwayland\u001b[0m\n\u001b[38;2;248;248;242m               windows only)\u001b[0m\n\u001b[38;2;248;248;242m                         %instance - The X11 instance (applicable to xwayland\u001b[0m\n\u001b[38;2;248;248;242m               windows only)\u001b[0m\n\u001b[38;2;248;248;242m                         %shell - The protocol the window is using (typically\u001b[0m\n\u001b[38;2;248;248;242m               xwayland or\u001b[0m\n\u001b[38;2;248;248;242m                   xdg_shell)\u001b[0m\n\n\u001b[38;2;248;248;242m           This command is typically used with for_window criteria. For exam‐\u001b[0m\n\u001b[38;2;248;248;242m           ple:\u001b[0m\n\n\u001b[38;2;248;248;242m               for_window [title=\".\"] title_format \"<b>%title</b> (%app_id)\"\u001b[0m\n\n\u001b[38;2;248;248;242m           Note that markup requires pango to be enabled via the font command.\u001b[0m\n\n\u001b[38;2;248;248;242m           The default format is \"%title\".\u001b[0m\n\n\u001b[38;2;248;248;242m       The following commands may be used either in the configuration file or\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mruntime\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46massign\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mcriteria\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m→\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31mworkspace\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31mnumber\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mworkspace\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\u001b[38;2;248;248;242m           Assigns views matching criteria (see CRITERIA for details) to\u001b[0m\n\u001b[38;2;248;248;242m           workspace. The → (U+2192) is optional and cosmetic. This command is\u001b[0m\n\u001b[38;2;248;248;242m           equivalent to:\u001b[0m\n\n\u001b[38;2;248;248;242m               for_window <criteria> move container to workspace <workspace>\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46massign\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mcriteria\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m→\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31moutput\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mleft\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mright\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mup\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mdown\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mname\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\u001b[38;2;248;248;242m           Assigns views matching criteria (see CRITERIA for details) to the\u001b[0m\n\u001b[38;2;248;248;242m           specified output. The → (U+2192) is optional and cosmetic. This\u001b[0m\n\u001b[38;2;248;248;242m           command is equivalent to:\u001b[0m\n\n\u001b[38;2;248;248;242m               for_window <criteria> move container to output <output>\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mbindsym\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31m--whole-window\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31m--border\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31m--exclude-titlebar\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31m--release\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31m--locked\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31m--to-code\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31m--input-device\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mdevice\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31m--no-warn\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31m--no-re\u001b[0m\u001b[38;2;248;248;242m‐\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[3;38;2;253;151;31mpeat\u001b[0m\u001b[38;2;248;248;242m] [Group<1-4>+]<key combo> <command>\u001b[0m\n\u001b[38;2;248;248;242m           Binds key combo to execute the sway command command when pressed.\u001b[0m\n\u001b[38;2;248;248;242m           You may use XKB key names here (wev(1) is a good tool for discover‐\u001b[0m\n\u001b[38;2;248;248;242m           ing these). With the flag --release, the command is executed when\u001b[0m\n\u001b[38;2;248;248;242m           the key combo is released. If input-device is given, the binding\u001b[0m\n\u001b[38;2;248;248;242m           will only be executed for that input device and will be executed\u001b[0m\n\u001b[38;2;248;248;242m           instead of any binding that is generic to all devices. If a group\u001b[0m\n\u001b[38;2;248;248;242m           number is given, then the binding will only be available for that\u001b[0m\n\u001b[38;2;248;248;242m           group. By default, if you overwrite a binding, swaynag will give\u001b[0m\n\u001b[38;2;248;248;242m           you a warning. To silence this, use the --no-warn flag.\u001b[0m\n\n\u001b[38;2;248;248;242m           Unless the flag --locked is set, the command will not be run when a\u001b[0m\n\u001b[38;2;248;248;242m           screen locking program is active. If there is a matching binding\u001b[0m\n\u001b[38;2;248;248;242m           with and without --locked, the one with will be preferred when\u001b[0m\n\u001b[38;2;248;248;242m           locked and the one without will be preferred when unlocked. If\u001b[0m\n\u001b[38;2;248;248;242m           there are matching bindings and one has both --input-device and\u001b[0m\n\u001b[38;2;248;248;242m           --locked and the other has neither, the former will be preferred\u001b[0m\n\u001b[38;2;248;248;242m           even when unlocked.\u001b[0m\n\n\u001b[38;2;248;248;242m           Unless the flag --inhibited is set, the command will not be run\u001b[0m\n\u001b[38;2;248;248;242m           when a keyboard shortcuts inhibitor is active for the currently fo‐\u001b[0m\n\u001b[38;2;248;248;242m           cused window. Such inhibitors are usually requested by remote desk‐\u001b[0m\n\u001b[38;2;248;248;242m           top and virtualization software to enable the user to send keyboard\u001b[0m\n\u001b[38;2;248;248;242m           shortcuts to the remote or virtual session. The --inhibited flag\u001b[0m\n\u001b[38;2;248;248;242m           allows one to define bindings which will be exempt from pass-\u001b[0m\n\u001b[38;2;248;248;242m           through to such software. The same preference logic as for --locked\u001b[0m\n\u001b[38;2;248;248;242m           applies.\u001b[0m\n\n\u001b[38;2;248;248;242m           Unless the flag --no-repeat is set, the command will be run repeat‐\u001b[0m\n\u001b[38;2;248;248;242m           edly when the key is held, according to the repeat settings speci‐\u001b[0m\n\u001b[38;2;248;248;242m           fied in the input configuration.\u001b[0m\n\n\u001b[38;2;248;248;242m           Bindings to keysyms are layout-dependent. This can be changed with\u001b[0m\n\u001b[38;2;248;248;242m           the --to-code flag. In this case, the keysyms will be translated\u001b[0m\n\u001b[38;2;248;248;242m           into the corresponding keycodes in the first configured layout.\u001b[0m\n\n\u001b[38;2;248;248;242m           Mouse bindings operate on the container under the cursor instead of\u001b[0m\n\u001b[38;2;248;248;242m           the container that has focus. Mouse buttons can either be specified\u001b[0m\n\u001b[38;2;248;248;242m           in the form button[1-9] or by using the name of the event code (ex\u001b[0m\n\u001b[38;2;248;248;242m           BTN_LEFT or BTN_RIGHT). For the former option, the buttons will be\u001b[0m\n\u001b[38;2;248;248;242m           mapped to their values in X11 (1=left, 2=middle, 3=right, 4=scroll\u001b[0m\n\u001b[38;2;248;248;242m           up, 5=scroll down, 6=scroll left, 7=scroll right, 8=back, 9=for‐\u001b[0m\n\u001b[38;2;248;248;242m           ward). For the latter option, you can find the event names using\u001b[0m\n\u001b[38;2;248;248;242m           libinput debug-events.\u001b[0m\n\n\u001b[38;2;248;248;242m           The priority for matching bindings is as follows: input device,\u001b[0m\n\u001b[38;2;248;248;242m           group, and locked state.\u001b[0m\n\n\u001b[38;2;248;248;242m           --whole-window, --border, and --exclude-titlebar are mouse-only op‐\u001b[0m\n\u001b[38;2;248;248;242m           tions which affect the region in which the mouse bindings can be\u001b[0m\n\u001b[38;2;248;248;242m           triggered.  By default, mouse bindings are only triggered when over\u001b[0m\n\u001b[38;2;248;248;242m           the title bar. With the --border option, the border of the window\u001b[0m\n\u001b[38;2;248;248;242m           will be included in this region. With the --whole-window option,\u001b[0m\n\u001b[38;2;248;248;242m           the cursor can be anywhere over a window including the title, bor‐\u001b[0m\n\u001b[38;2;248;248;242m           der, and content. --exclude-titlebar can be used in conjunction\u001b[0m\n\u001b[38;2;248;248;242m           with any other option to specify that the titlebar should be ex‐\u001b[0m\n\u001b[38;2;248;248;242m           cluded from the region of consideration.\u001b[0m\n\n\u001b[38;2;248;248;242m           If --whole-window is given, the command can be triggered when the\u001b[0m\n\u001b[38;2;248;248;242m           cursor is over an empty workspace. Using a mouse binding over a\u001b[0m\n\u001b[38;2;248;248;242m           layer surface's exclusive region is not currently possible.\u001b[0m\n\n\u001b[38;2;248;248;242m           Example:\u001b[0m\n\u001b[38;2;248;248;242m                     # Execute firefox when alt, shift, and f are pressed together\u001b[0m\n\u001b[38;2;248;248;242m                     bindsym Mod1+Shift+f exec firefox\u001b[0m\n\n\u001b[38;2;248;248;242m           bindcode [--whole-window] [--border] [--exclude-titlebar] [--re‐\u001b[0m\n\u001b[38;2;248;248;242m           lease] [--locked] [--input-device=<device>] [--no-warn]\u001b[0m\n\u001b[38;2;248;248;242m           [Group<1-4>+]<code> <command> is also available for binding with\u001b[0m\n\u001b[38;2;248;248;242m           key/button codes instead of key/button names.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mbindswitch\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31m--locked\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31m--no-warn\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31m--reload\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mswitch\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mstate\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mcommand\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\u001b[38;2;248;248;242m           Binds <switch> to execute the sway command command on state\u001b[0m\n\u001b[38;2;248;248;242m           changes. Supported switches are lid (laptop lid) and tablet (tablet\u001b[0m\n\u001b[38;2;248;248;242m           mode) switches. Valid values for state are on, off and toggle.\u001b[0m\n\u001b[38;2;248;248;242m           These switches are on when the device lid is shut and when tablet\u001b[0m\n\u001b[38;2;248;248;242m           mode is active respectively. toggle is also supported to run a com‐\u001b[0m\n\u001b[38;2;248;248;242m           mand both when the switch is toggled on or off.\u001b[0m\n\n\u001b[38;2;248;248;242m           Unless the flag --locked is set, the command will not be run when a\u001b[0m\n\u001b[38;2;248;248;242m           screen locking program is active. If there is a matching binding\u001b[0m\n\u001b[38;2;248;248;242m           with and without --locked, the one with will be preferred when\u001b[0m\n\u001b[38;2;248;248;242m           locked and the one without will be preferred when unlocked.\u001b[0m\n\n\u001b[38;2;248;248;242m           If the --reload flag is given, the binding will also be executed\u001b[0m\n\u001b[38;2;248;248;242m           when the config is reloaded. toggle bindings will not be executed\u001b[0m\n\u001b[38;2;248;248;242m           on reload. The --locked flag will operate as normal so if the con‐\u001b[0m\n\u001b[38;2;248;248;242m           fig is reloaded while locked and --locked is not given, the binding\u001b[0m\n\u001b[38;2;248;248;242m           will not be executed.\u001b[0m\n\n\u001b[38;2;248;248;242m           By default, if you overwrite a binding, swaynag will give you a\u001b[0m\n\u001b[38;2;248;248;242m           warning. To silence this, use the --no-warn flag.\u001b[0m\n\n\u001b[38;2;248;248;242m           Example:\u001b[0m\n\u001b[38;2;248;248;242m                     # Show the virtual keyboard when tablet mode is entered.\u001b[0m\n\u001b[38;2;248;248;242m                     bindswitch tablet:on busctl call --user sm.puri.OSK0 /sm/puri/OSK0 sm.puri.OSK0 SetVisible b true\u001b[0m\n\n\u001b[38;2;248;248;242m                     # Log a message when the laptop lid is opened or closed.\u001b[0m\n\u001b[38;2;248;248;242m                     bindswitch lid:toggle exec echo \"Lid moved\"\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mbindgesture\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31m--exact\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31m--input-device\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mdevice\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31m--no-warn\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mges\u001b[0m\u001b[38;2;248;248;242m‐\u001b[0m\n\u001b[38;2;248;248;242m       ture>[:<fingers>][:directions] <command>\u001b[0m\n\u001b[38;2;248;248;242m           Binds gesture to execute the sway command command when detected.\u001b[0m\n\u001b[38;2;248;248;242m           Currently supports the hold, pinch or swipe gesture. Optionally can\u001b[0m\n\u001b[38;2;248;248;242m           be limited to bind to a certain number of fingers or, for a pinch\u001b[0m\n\u001b[38;2;248;248;242m           or swipe gesture, to certain directions.\u001b[0m\n\n\u001b[38;2;248;248;242m       ┌──────┬─────────┬─────────────────────────────────────────────────────┐\u001b[0m\n\u001b[38;2;248;248;242m       │type  │ fingers │ direction                                           │\u001b[0m\n\u001b[38;2;248;248;242m       ├──────┼─────────┼─────────────────────────────────────────────────────┤\u001b[0m\n\u001b[38;2;248;248;242m       │hold  │  1 - 5  │ none                                                │\u001b[0m\n\u001b[38;2;248;248;242m       ├──────┼─────────┼─────────────────────────────────────────────────────┤\u001b[0m\n\u001b[38;2;248;248;242m       │swipe │  3 - 5  │ up, down, left, right                               │\u001b[0m\n\u001b[38;2;248;248;242m       ├──────┼─────────┼─────────────────────────────────────────────────────┤\u001b[0m\n\u001b[38;2;248;248;242m       │pinch │  2 - 5  │ all above + inward, outward, clockwise, counter‐    │\u001b[0m\n\u001b[38;2;248;248;242m       │      │         │ clockwise                                           │\u001b[0m\n\u001b[38;2;248;248;242m       └──────┴─────────┴─────────────────────────────────────────────────────┘\u001b[0m\n\u001b[38;2;248;248;242m           The fingers can be limited to any sensible number or left empty to\u001b[0m\n\u001b[38;2;248;248;242m           accept any finger counts. Valid directions are up, down, left and\u001b[0m\n\u001b[38;2;248;248;242m           right, as well as inward, outward, clockwise, counterclockwise for\u001b[0m\n\u001b[38;2;248;248;242m           the pinch gesture. Multiple directions can be combined by a plus.\u001b[0m\n\n\u001b[38;2;248;248;242m           If a input-device is given, the binding will only be executed for\u001b[0m\n\u001b[38;2;248;248;242m           that input device and will be executed instead of any binding that\u001b[0m\n\u001b[38;2;248;248;242m           is generic to all devices. By default, if you overwrite a binding,\u001b[0m\n\u001b[38;2;248;248;242m           swaynag will give you a warning. To silence this, use the --no-warn\u001b[0m\n\u001b[38;2;248;248;242m           flag.\u001b[0m\n\n\u001b[38;2;248;248;242m           The --exact flag can be used to ensure a binding only matches when\u001b[0m\n\u001b[38;2;248;248;242m           exactly all specified directions are matched and nothing more. If\u001b[0m\n\u001b[38;2;248;248;242m           there is matching binding with --exact, it will be preferred.\u001b[0m\n\n\u001b[38;2;248;248;242m           The priority for matching bindings is as follows: input device,\u001b[0m\n\u001b[38;2;248;248;242m           then exact matches followed by matches with the highest number of\u001b[0m\n\u001b[38;2;248;248;242m           matching directions.\u001b[0m\n\n\u001b[38;2;248;248;242m           Gestures executed while the pointer is above a bar are not handled\u001b[0m\n\u001b[38;2;248;248;242m           by sway. See the respective documentation, e.g. bindgesture in\u001b[0m\n\u001b[38;2;248;248;242m           sway-bar(5).\u001b[0m\n\n\u001b[38;2;248;248;242m           Example:\u001b[0m\n\u001b[38;2;248;248;242m                     # Allow switching between workspaces with left and right swipes\u001b[0m\n\u001b[38;2;248;248;242m                     bindgesture swipe:right workspace prev\u001b[0m\n\u001b[38;2;248;248;242m                     bindgesture swipe:left workspace next\u001b[0m\n\n\u001b[38;2;248;248;242m                     # Allow container movements by pinching them\u001b[0m\n\u001b[38;2;248;248;242m                     bindgesture pinch:inward+up move up\u001b[0m\n\u001b[38;2;248;248;242m                     bindgesture pinch:inward+down move down\u001b[0m\n\u001b[38;2;248;248;242m                     bindgesture pinch:inward+left move left\u001b[0m\n\u001b[38;2;248;248;242m                     bindgesture pinch:inward+right move right\u001b[0m\n\n\u001b[38;2;248;248;242m       client.background <color>\u001b[0m\n\u001b[38;2;248;248;242m           This command is ignored and is only present for i3 compatibility.\u001b[0m\n\n\u001b[38;2;248;248;242m       client.<class> <border> <background> <text> [<indicator> [<child_bor‐\u001b[0m\n\u001b[38;2;248;248;242m       der>]]\u001b[0m\n\u001b[38;2;248;248;242m           Configures the color of window borders and title bars. The first\u001b[0m\n\u001b[38;2;248;248;242m           three colors are required. When omitted indicator will use a sane\u001b[0m\n\u001b[38;2;248;248;242m           default and child_border will use the color set for background.\u001b[0m\n\u001b[38;2;248;248;242m           Colors may be specified in hex, either as #RRGGBB or #RRGGBBAA.\u001b[0m\n\n\u001b[38;2;248;248;242m           The available classes are:\u001b[0m\n\n\u001b[38;2;248;248;242m           client.focused\u001b[0m\n\u001b[38;2;248;248;242m               The window that has focus.\u001b[0m\n\n\u001b[38;2;248;248;242m           client.focused_inactive\u001b[0m\n\u001b[38;2;248;248;242m               The most recently focused view within a container which is not\u001b[0m\n\u001b[38;2;248;248;242m               focused.\u001b[0m\n\n\u001b[38;2;248;248;242m           client.focused_tab_title\u001b[0m\n\u001b[38;2;248;248;242m               A view that has focused descendant container. Tab or stack con‐\u001b[0m\n\u001b[38;2;248;248;242m               tainer title that is the parent of the focused container but is\u001b[0m\n\u001b[38;2;248;248;242m               not directly focused. Defaults to focused_inactive if not spec‐\u001b[0m\n\u001b[38;2;248;248;242m               ified and does not use the indicator and child_border colors.\u001b[0m\n\n\u001b[38;2;248;248;242m           client.placeholder\u001b[0m\n\u001b[38;2;248;248;242m               Ignored (present for i3 compatibility).\u001b[0m\n\n\u001b[38;2;248;248;242m           client.unfocused\u001b[0m\n\u001b[38;2;248;248;242m               A view that does not have focus.\u001b[0m\n\n\u001b[38;2;248;248;242m           client.urgent\u001b[0m\n\u001b[38;2;248;248;242m               A view with an urgency hint. Note: Native Wayland windows do\u001b[0m\n\u001b[38;2;248;248;242m               not support urgency. Urgency only works for Xwayland windows.\u001b[0m\n\n\u001b[38;2;248;248;242m           The meaning of each color is:\u001b[0m\n\n\u001b[38;2;248;248;242m           border\u001b[0m\n\u001b[38;2;248;248;242m               The border around the title bar.\u001b[0m\n\n\u001b[38;2;248;248;242m           background\u001b[0m\n\u001b[38;2;248;248;242m               The background of the title bar.\u001b[0m\n\n\u001b[38;2;248;248;242m           text\u001b[0m\n\u001b[38;2;248;248;242m               The text color of the title bar.\u001b[0m\n\n\u001b[38;2;248;248;242m           indicator\u001b[0m\n\u001b[38;2;248;248;242m               The color used to indicate where a new view will open. In a\u001b[0m\n\u001b[38;2;248;248;242m               tiled container, this would paint the right border of the cur‐\u001b[0m\n\u001b[38;2;248;248;242m               rent view if a new view would be opened to the right.\u001b[0m\n\n\u001b[38;2;248;248;242m           child_border\u001b[0m\n\u001b[38;2;248;248;242m               The border around the view itself.\u001b[0m\n\n\u001b[38;2;248;248;242m       The default colors are:\u001b[0m\n\n\u001b[38;2;248;248;242m       ┌──────────────┬─────────┬────────────┬─────────┬───────────┬────────────┐\u001b[0m\n\u001b[38;2;248;248;242m       │    class     │ border  │ background │ text    │ indicator │ child_bor‐ │\u001b[0m\n\u001b[38;2;248;248;242m       │              │         │            │         │           │ der        │\u001b[0m\n\u001b[38;2;248;248;242m       ├──────────────┼─────────┼────────────┼─────────┼───────────┼────────────┤\u001b[0m\n\u001b[38;2;248;248;242m       │background    │ n/a     │ #ffffff    │ n/a     │ n/a       │ n/a        │\u001b[0m\n\u001b[38;2;248;248;242m       ├──────────────┼─────────┼────────────┼─────────┼───────────┼────────────┤\u001b[0m\n\u001b[38;2;248;248;242m       │focused       │ #4c7899 │ #285577    │ #ffffff │ #2e9ef4   │ #285577    │\u001b[0m\n\u001b[38;2;248;248;242m       ├──────────────┼─────────┼────────────┼─────────┼───────────┼────────────┤\u001b[0m\n\u001b[38;2;248;248;242m       │focused_in‐   │ #333333 │ #5f676a    │ #ffffff │ #484e50   │ #5f676a    │\u001b[0m\n\u001b[38;2;248;248;242m       │active        │         │            │         │           │            │\u001b[0m\n\u001b[38;2;248;248;242m       ├──────────────┼─────────┼────────────┼─────────┼───────────┼────────────┤\u001b[0m\n\u001b[38;2;248;248;242m       │fo‐           │ #333333 │ #5f676a    │ #ffffff │ n/a       │ n/a        │\u001b[0m\n\u001b[38;2;248;248;242m       │cused_tab_ti‐ │         │            │         │           │            │\u001b[0m\n\u001b[38;2;248;248;242m       │tle           │         │            │         │           │            │\u001b[0m\n\u001b[38;2;248;248;242m       ├──────────────┼─────────┼────────────┼─────────┼───────────┼────────────┤\u001b[0m\n\u001b[38;2;248;248;242m       │unfocused     │ #333333 │ #222222    │ #888888 │ #292d2e   │ #222222    │\u001b[0m\n\u001b[38;2;248;248;242m       ├──────────────┼─────────┼────────────┼─────────┼───────────┼────────────┤\u001b[0m\n\u001b[38;2;248;248;242m       │urgent        │ #2f343a │ #900000    │ #ffffff │ #900000   │ #900000    │\u001b[0m\n\u001b[38;2;248;248;242m       ├──────────────┼─────────┼────────────┼─────────┼───────────┼────────────┤\u001b[0m\n\u001b[38;2;248;248;242m       │placeholder   │ #000000 │ #0c0c0c    │ #ffffff │ #000000   │ #0c0c0c    │\u001b[0m\n\u001b[38;2;248;248;242m       └──────────────┴─────────┴────────────┴─────────┴───────────┴────────────┘\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mdefault_border\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mnormal\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mnone\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mpixel\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mn\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m           Set default border style for new tiled windows.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mdefault_floating_border\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mnormal\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mnone\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mpixel\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mn\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m           Set default border style for new floating windows. This only ap‐\u001b[0m\n\u001b[38;2;248;248;242m           plies to windows that are spawned in floating mode, not windows\u001b[0m\n\u001b[38;2;248;248;242m           that become floating afterwards.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mexec\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mshell\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mcommand\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\u001b[38;2;248;248;242m           Executes shell command with sh.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mexec_always\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mshell\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mcommand\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\u001b[38;2;248;248;242m           Like exec, but the shell command will be executed again after\u001b[0m\n\u001b[38;2;248;248;242m           reload.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mfloating_maximum_size\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mwidth\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mx\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mheight\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\u001b[38;2;248;248;242m           Specifies the maximum size of floating windows. -1 x -1 removes the\u001b[0m\n\u001b[38;2;248;248;242m           upper limit. The default is 0 x 0, which will use the width and\u001b[0m\n\u001b[38;2;248;248;242m           height of the entire output layout as the maximums\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mfloating_minimum_size\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mwidth\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mx\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mheight\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\u001b[38;2;248;248;242m           Specifies the minimum size of floating windows. The default is 75 x\u001b[0m\n\u001b[38;2;248;248;242m           50.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mfloating_modifier\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mmodifier\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31mnormal\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31minverse\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m           When the modifier key is held down, you may hold left click to move\u001b[0m\n\u001b[38;2;248;248;242m           windows, and right click to resize them. Setting modifier to none\u001b[0m\n\u001b[38;2;248;248;242m           disables this feature. If inverse is specified, left click is used\u001b[0m\n\u001b[38;2;248;248;242m           for resizing and right click for moving.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mfocus_follows_mouse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31myes\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mno\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31malways\u001b[0m\n\u001b[38;2;248;248;242m           If set to yes, moving your mouse over a window will focus that win‐\u001b[0m\n\u001b[38;2;248;248;242m           dow. If set to always, the window under the cursor will always be\u001b[0m\n\u001b[38;2;248;248;242m           focused, even after switching between workspaces.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mfocus_on_window_activation\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31msmart\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31murgent\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mfocus\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mnone\u001b[0m\n\u001b[38;2;248;248;242m           This option determines what to do when a client requests window ac‐\u001b[0m\n\u001b[38;2;248;248;242m           tivation. If set to urgent, the urgent state will be set for that\u001b[0m\n\u001b[38;2;248;248;242m           window. If set to focus, the window will become focused. If set to\u001b[0m\n\u001b[38;2;248;248;242m           smart, the window will become focused only if it is already visi‐\u001b[0m\n\u001b[38;2;248;248;242m           ble, otherwise the urgent state will be set. Default is urgent.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mfocus_wrapping\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31myes\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mno\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mforce\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mworkspace\u001b[0m\n\u001b[38;2;248;248;242m           This option determines what to do when attempting to focus over the\u001b[0m\n\u001b[38;2;248;248;242m           edge of a container. If set to no, the focused container will re‐\u001b[0m\n\u001b[38;2;248;248;242m           tain focus, if there are no other containers in the direction. If\u001b[0m\n\u001b[38;2;248;248;242m           set to yes, focus will be wrapped to the opposite edge of the con‐\u001b[0m\n\u001b[38;2;248;248;242m           tainer, if there are no other containers in the direction. If set\u001b[0m\n\u001b[38;2;248;248;242m           to force, focus will be wrapped to the opposite edge of the con‐\u001b[0m\n\u001b[38;2;248;248;242m           tainer, even if there are other containers in the direction. If set\u001b[0m\n\u001b[38;2;248;248;242m           to workspace, focus will wrap like in the yes case and additionally\u001b[0m\n\u001b[38;2;248;248;242m           wrap when moving outside of workspaces boundaries. Default is yes.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mfont\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31mpango\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mfont\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\u001b[38;2;248;248;242m           Sets font to use for the title bars. To enable support for pango\u001b[0m\n\u001b[38;2;248;248;242m           markup, preface the font name with pango:. For example, monospace\u001b[0m\n\u001b[38;2;248;248;242m           10 is the default font. To enable support for pango markup,\u001b[0m\n\u001b[38;2;248;248;242m           pango:monospace 10 should be used instead. Regardless of whether\u001b[0m\n\u001b[38;2;248;248;242m           pango markup is enabled, font should be specified as a pango font\u001b[0m\n\u001b[38;2;248;248;242m           description. For more information on pango font descriptions, see\u001b[0m\n\u001b[38;2;248;248;242m           https://docs.gtk.org/Pango/type_func.FontDescrip‐\u001b[0m\n\u001b[38;2;248;248;242m           tion.from_string.html#description\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mforce_display_urgency_hint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mtimeout\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31mms\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m           If an application on another workspace sets an urgency hint,\u001b[0m\n\u001b[38;2;248;248;242m           switching to this workspace may lead to immediate focus of the ap‐\u001b[0m\n\u001b[38;2;248;248;242m           plication, which also means the window decoration color would be\u001b[0m\n\u001b[38;2;248;248;242m           immediately reset to client.focused. This may make it unnecessarily\u001b[0m\n\u001b[38;2;248;248;242m           hard to tell which window originally raised the event. This option\u001b[0m\n\u001b[38;2;248;248;242m           allows one to set a timeout in ms to delay the urgency hint reset.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mtitlebar_border_thickness\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mthickness\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\u001b[38;2;248;248;242m           Thickness of the titlebar border in pixels\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mtitlebar_padding\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mhorizontal\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mvertical\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m           Padding of the text in the titlebar. horizontal value affects hori‐\u001b[0m\n\u001b[38;2;248;248;242m           zontal padding of the text while vertical value affects vertical\u001b[0m\n\u001b[38;2;248;248;242m           padding (space above and below text). Padding includes titlebar\u001b[0m\n\u001b[38;2;248;248;242m           borders so their value should be greater than titlebar_bor‐\u001b[0m\n\u001b[38;2;248;248;242m           der_thickness. If vertical value is not specified it is set to the\u001b[0m\n\u001b[38;2;248;248;242m           horizontal value.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mfor_window\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mcriteria\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mcommand\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\u001b[38;2;248;248;242m           Whenever a window that matches criteria appears, run list of com‐\u001b[0m\n\u001b[38;2;248;248;242m           mands. See CRITERIA for more details.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mgaps\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31minner\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mouter\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mhorizontal\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mvertical\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mtop\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mright\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mbottom\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mleft\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mamount\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\u001b[38;2;248;248;242m           Sets default amount pixels of inner or outer gap, where the inner\u001b[0m\n\u001b[38;2;248;248;242m           affects spacing around each view and outer affects the spacing\u001b[0m\n\u001b[38;2;248;248;242m           around each workspace. Outer gaps are in addition to inner gaps. To\u001b[0m\n\u001b[38;2;248;248;242m           reduce or remove outer gaps, outer gaps can be set to a negative\u001b[0m\n\u001b[38;2;248;248;242m           value. outer gaps can also be specified per side with top, right,\u001b[0m\n\u001b[38;2;248;248;242m           bottom, and left or per direction with horizontal and vertical.\u001b[0m\n\n\u001b[38;2;248;248;242m           This affects new workspaces only, and is used when the workspace\u001b[0m\n\u001b[38;2;248;248;242m           doesn't have its own gaps settings (see: workspace <ws> gaps ...).\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mhide_edge_borders\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31m--i3\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mnone\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mvertical\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mhorizon\u001b[0m\u001b[38;2;248;248;242m‐\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[3;38;2;253;151;31mtal\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mboth\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31msmart\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31msmart_no_gaps\u001b[0m\n\u001b[38;2;248;248;242m           Hides window borders adjacent to the screen edges. Default is none.\u001b[0m\n\u001b[38;2;248;248;242m           The --i3 option enables i3-compatible behavior to hide the title\u001b[0m\n\u001b[38;2;248;248;242m           bar on tabbed and stacked containers with one child. The\u001b[0m\n\u001b[38;2;248;248;242m           smart|smart_no_gaps options are equivalent to setting smart_borders\u001b[0m\n\u001b[38;2;248;248;242m           smart|no_gaps and hide_edge_borders none.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46minput\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31minput_device\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31minput-subcommands\u001b[0m\u001b[38;2;248;248;242m...\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\u001b[38;2;248;248;242m           For details on input subcommands, see sway-input(5).\u001b[0m\n\n\u001b[38;2;248;248;242m           * may be used in lieu of a specific device name to configure all\u001b[0m\n\u001b[38;2;248;248;242m           input devices. A list of input device names may be obtained via\u001b[0m\n\u001b[38;2;248;248;242m           swaymsg -t get_inputs.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mseat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mseat\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mseat-subcommands\u001b[0m\u001b[38;2;248;248;242m...\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\u001b[38;2;248;248;242m           For details on seat subcommands, see sway-input(5).\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mkill\u001b[0m\n\u001b[38;2;248;248;242m           Kills (closes) the currently focused container and all of its chil‐\u001b[0m\n\u001b[38;2;248;248;242m           dren.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46msmart_borders\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mon\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mno_gaps\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31moff\u001b[0m\n\u001b[38;2;248;248;242m           If smart_borders are on, borders will only be enabled if the\u001b[0m\n\u001b[38;2;248;248;242m           workspace has more than one visible child. If smart_borders is set\u001b[0m\n\u001b[38;2;248;248;242m           to no_gaps, borders will only be enabled if the workspace has more\u001b[0m\n\u001b[38;2;248;248;242m           than one visible child and gaps equal to zero.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46msmart_gaps\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mon\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31moff\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mtoggle\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31minverse_outer\u001b[0m\n\u001b[38;2;248;248;242m           If smart_gaps are on gaps will only be enabled if a workspace has\u001b[0m\n\u001b[38;2;248;248;242m           more than one child. If smart_gaps are inverse_outer outer gaps\u001b[0m\n\u001b[38;2;248;248;242m           will only be enabled if a workspace has exactly one child.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mmark\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31m--add\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31m--replace\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31m--toggle\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31midentifier\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\u001b[38;2;248;248;242m           Marks are arbitrary labels that can be used to identify certain\u001b[0m\n\u001b[38;2;248;248;242m           windows and then jump to them at a later time. Each identifier can\u001b[0m\n\u001b[38;2;248;248;242m           only be set on a single window at a time since they act as a unique\u001b[0m\n\u001b[38;2;248;248;242m           identifier. By default, mark sets identifier as the only mark on a\u001b[0m\n\u001b[38;2;248;248;242m           window. --add will instead add identifier to the list of current\u001b[0m\n\u001b[38;2;248;248;242m           marks for that window. If --toggle is specified mark will remove\u001b[0m\n\u001b[38;2;248;248;242m           identifier if it is already marked.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mmode\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mmode\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\u001b[38;2;248;248;242m           Switches to the specified mode. The default mode is default.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mmode\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31m--pango_markup\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mmode\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mmode-subcommands\u001b[0m\u001b[38;2;248;248;242m...\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\u001b[38;2;248;248;242m           The only valid mode-subcommands... are bindsym, bindcode,\u001b[0m\n\u001b[38;2;248;248;242m           bindswitch, and set. If --pango_markup is given, then mode will be\u001b[0m\n\u001b[38;2;248;248;242m           interpreted as pango markup.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mmouse_warping\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31moutput\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mcontainer\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mnone\u001b[0m\n\u001b[38;2;248;248;242m           If output is specified, the mouse will be moved to new outputs as\u001b[0m\n\u001b[38;2;248;248;242m           you move focus between them. If container is specified, the mouse\u001b[0m\n\u001b[38;2;248;248;242m           will be moved to the middle of the container on switch. Default is\u001b[0m\n\u001b[38;2;248;248;242m           output.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mno_focus\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mcriteria\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\u001b[38;2;248;248;242m           Prevents windows matching <criteria> from being focused automati‐\u001b[0m\n\u001b[38;2;248;248;242m           cally when they're created. This has no effect on the first window\u001b[0m\n\u001b[38;2;248;248;242m           in a workspace.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46moutput\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31moutput_name\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31moutput-subcommands\u001b[0m\u001b[38;2;248;248;242m...\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\u001b[38;2;248;248;242m           For details on output subcommands, see sway-output(5).\u001b[0m\n\n\u001b[38;2;248;248;242m           * may be used in lieu of a specific output name to configure all\u001b[0m\n\u001b[38;2;248;248;242m           outputs. A list of output names may be obtained via swaymsg -t\u001b[0m\n\u001b[38;2;248;248;242m           get_outputs.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mpopup_during_fullscreen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31msmart\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mignore\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mleave_fullscreen\u001b[0m\n\u001b[38;2;248;248;242m           Determines what to do when a fullscreen view opens a dialog. If\u001b[0m\n\u001b[38;2;248;248;242m           smart (the default), the dialog will be displayed. If ignore, the\u001b[0m\n\u001b[38;2;248;248;242m           dialog will not be rendered. If leave_fullscreen, the view will\u001b[0m\n\u001b[38;2;248;248;242m           exit fullscreen mode and the dialog will be rendered.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mset\u001b[0m\u001b[38;2;248;248;242m $\u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mname\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mvalue\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\u001b[38;2;248;248;242m           Sets variable $name to value. You can use the new variable in the\u001b[0m\n\u001b[38;2;248;248;242m           arguments of future commands. When the variable is used, it can be\u001b[0m\n\u001b[38;2;248;248;242m           escaped with an additional $ (ie $$name) to have the replacement\u001b[0m\n\u001b[38;2;248;248;242m           happen at run time instead of when reading the config. However, it\u001b[0m\n\u001b[38;2;248;248;242m           does not always make sense for the variable to be replaced at run\u001b[0m\n\u001b[38;2;248;248;242m           time since some arguments do need to be known at config time.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mshow_marks\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31myes\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mno\u001b[0m\n\u001b[38;2;248;248;242m           If show_marks is yes, marks will be displayed in the window bor‐\u001b[0m\n\u001b[38;2;248;248;242m           ders. Any mark that starts with an underscore will not be drawn\u001b[0m\n\u001b[38;2;248;248;242m           even if show_marks is yes. The default is yes.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mopacity\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31mset\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mplus\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mminus\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mvalue\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\u001b[38;2;248;248;242m           Adjusts the opacity of the window between 0 (completely transpar‐\u001b[0m\n\u001b[38;2;248;248;242m           ent) and 1 (completely opaque). If the operation is omitted, set\u001b[0m\n\u001b[38;2;248;248;242m           will be used.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mtiling_drag\u001b[0m\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;253;151;31menable\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mdisable\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mtoggle\u001b[0m\n\u001b[38;2;248;248;242m           Sets whether or not tiling containers can be dragged with the\u001b[0m\n\u001b[38;2;248;248;242m           mouse. If enabled (default), the floating_mod can be used to drag\u001b[0m\n\u001b[38;2;248;248;242m           tiling, as well as floating, containers. Using the left mouse but‐\u001b[0m\n\u001b[38;2;248;248;242m           ton on title bars without the floating_mod will also allow the con‐\u001b[0m\n\u001b[38;2;248;248;242m           tainer to be dragged. toggle should not be used in the config file.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mtiling_drag_threshold\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mthreshold\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\u001b[38;2;248;248;242m           Sets the threshold that must be exceeded for a container to be\u001b[0m\n\u001b[38;2;248;248;242m           dragged by its titlebar. This has no effect if floating_mod is used\u001b[0m\n\u001b[38;2;248;248;242m           or if tiling_drag is set to disable.  Once the threshold has been\u001b[0m\n\u001b[38;2;248;248;242m           exceeded once, the drag starts and the cursor can come back inside\u001b[0m\n\u001b[38;2;248;248;242m           the threshold without stopping the drag.  threshold is multiplied\u001b[0m\n\u001b[38;2;248;248;242m           by the scale of the output that the cursor on.  The default is 9.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mtitle_align\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mleft\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mcenter\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mright\u001b[0m\n\u001b[38;2;248;248;242m           Sets the title alignment. If right is selected and show_marks is\u001b[0m\n\u001b[38;2;248;248;242m           set to yes, the marks will be shown on the left side instead of the\u001b[0m\n\u001b[38;2;248;248;242m           right side.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46munbindswitch\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mswitch\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mstate\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\u001b[38;2;248;248;242m           Removes a binding for when <switch> changes to <state>.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46munbindgesture\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31m--exact\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31m--input-device\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mdevice\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mgesture\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mfin\u001b[0m\u001b[38;2;248;248;242m‐\u001b[0m\n\u001b[38;2;248;248;242m       gers>][:directions]\u001b[0m\n\u001b[38;2;248;248;242m           Removes a binding for the specified gesture, fingers and directions\u001b[0m\n\u001b[38;2;248;248;242m           combination.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46munbindsym\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31m--whole-window\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31m--border\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31m--exclude-titlebar\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31m--release\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31m--locked\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31m--to-code\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31m--input-device\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mdevice\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mkey\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mcombo\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\u001b[38;2;248;248;242m           Removes the binding for key combo that was previously bound with\u001b[0m\n\u001b[38;2;248;248;242m           the given flags.  If input-device is given, only the binding for\u001b[0m\n\u001b[38;2;248;248;242m           that input device will be unbound.\u001b[0m\n\n\u001b[38;2;248;248;242m           unbindcode [--whole-window] [--border] [--exclude-titlebar] [--re‐\u001b[0m\n\u001b[38;2;248;248;242m           lease] [--locked] [--input-device=<device>] <code> is also avail‐\u001b[0m\n\u001b[38;2;248;248;242m           able for unbinding with key/button codes instead of key/button\u001b[0m\n\u001b[38;2;248;248;242m           names.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46munmark\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31midentifier\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m           unmark will remove identifier from the list of current marks on a\u001b[0m\n\u001b[38;2;248;248;242m           window. If identifier is omitted, all marks are removed.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46murgent\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31menable\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mdisable\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mallow\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mdeny\u001b[0m\n\u001b[38;2;248;248;242m           Using enable or disable manually sets or unsets the window's urgent\u001b[0m\n\u001b[38;2;248;248;242m           state. Using allow or deny controls the window's ability to set it‐\u001b[0m\n\u001b[38;2;248;248;242m           self as urgent. By default, windows are allowed to set their own\u001b[0m\n\u001b[38;2;248;248;242m           urgency.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mworkspace\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31m--no-auto-back-and-forth\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31mnumber\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31mnum\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[3;38;2;253;151;31mname\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\u001b[38;2;248;248;242m           Switches to the specified workspace. The num: portion of the name\u001b[0m\n\u001b[38;2;248;248;242m           is optional and will be used for ordering. If num: is not given and\u001b[0m\n\u001b[38;2;248;248;242m           name is a number, then it will be also be used for ordering.\u001b[0m\n\n\u001b[38;2;248;248;242m           If the no-auto-back-and-forth option is given, then this command\u001b[0m\n\u001b[38;2;248;248;242m           will not perform a back-and-forth operation when the workspace is\u001b[0m\n\u001b[38;2;248;248;242m           already focused and workspace_auto_back_and_forth is enabled.\u001b[0m\n\n\u001b[38;2;248;248;242m           If the number keyword is specified and a workspace with the number\u001b[0m\n\u001b[38;2;248;248;242m           already exists, then the workspace with the number will be used. If\u001b[0m\n\u001b[38;2;248;248;242m           a workspace with the number does not exist, a new workspace will be\u001b[0m\n\u001b[38;2;248;248;242m           created with the name name.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mworkspace\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mprev\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mnext\u001b[0m\n\u001b[38;2;248;248;242m           Switches to the next workspace on the current output or on the next\u001b[0m\n\u001b[38;2;248;248;242m           output if currently on the last workspace.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mworkspace\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mprev_on_output\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mnext_on_output\u001b[0m\n\u001b[38;2;248;248;242m           Switches to the next workspace on the current output.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mworkspace\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mback_and_forth\u001b[0m\n\u001b[38;2;248;248;242m           Switches to the previously focused workspace.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mworkspace\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mname\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mgaps\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31minner\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mouter\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mhorizontal\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mvertical\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mtop\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mright\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mbot\u001b[0m\u001b[38;2;248;248;242m‐\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[3;38;2;253;151;31mtom\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mleft\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mamount\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\u001b[38;2;248;248;242m           Specifies that workspace name should have the given gaps settings\u001b[0m\n\u001b[38;2;248;248;242m           when it is created.\u001b[0m\n\n\u001b[38;2;248;248;242m           This command does not affect existing workspaces. To alter the gaps\u001b[0m\n\u001b[38;2;248;248;242m           of an existing workspace, use the gaps command.\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mworkspace\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31mname\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31moutput\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;253;151;31moutputs\u001b[0m\u001b[38;2;248;248;242m...\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\n\u001b[38;2;248;248;242m           Specifies that workspace name should be shown on the specified out‐\u001b[0m\n\u001b[38;2;248;248;242m           puts. Multiple outputs can be listed and the first available will\u001b[0m\n\u001b[38;2;248;248;242m           be used. If the workspace gets placed on an output further down the\u001b[0m\n\u001b[38;2;248;248;242m           list and an output that is higher on the list becomes available,\u001b[0m\n\u001b[38;2;248;248;242m           the workspace will be moved to the higher priority output.\u001b[0m\n\n\u001b[38;2;248;248;242m           This command does not affect existing workspaces. To move an exist‐\u001b[0m\n\u001b[38;2;248;248;242m           ing workspace, use the move command in combination with the\u001b[0m\n\u001b[38;2;248;248;242m           workspace criteria (non-empty workspaces only) or workspace command\u001b[0m\n\u001b[38;2;248;248;242m           (to switch to the workspace before moving).\u001b[0m\n\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mworkspace_auto_back_and_forth\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31myes\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[3;38;2;253;151;31mno\u001b[0m\n\u001b[38;2;248;248;242m           When yes, repeating a workspace switch command will switch back to\u001b[0m\n\u001b[38;2;248;248;242m           the prior workspace. For example, if you are currently on workspace\u001b[0m\n\u001b[38;2;248;248;242m           1, switch to workspace 2, then invoke the workspace 2 command\u001b[0m\n\u001b[38;2;248;248;242m           again, you will be returned to workspace 1. Default is no.\u001b[0m\n\n\u001b[38;2;253;151;31mCRITERIA\u001b[0m\n\u001b[38;2;248;248;242m       A criteria is a string in the form of, for example:\u001b[0m\n\n\u001b[38;2;248;248;242m           [class=\"[Rr]egex.*\" title=\"some title\"]\u001b[0m\n\n\u001b[38;2;248;248;242m       The string contains one or more (space separated) attribute/value\u001b[0m\n\u001b[38;2;248;248;242m       pairs. They are used by some commands to choose which views to execute\u001b[0m\n\u001b[38;2;248;248;242m       actions on. All attributes must match for the criteria to match. Crite‐\u001b[0m\n\u001b[38;2;248;248;242m       ria is retained across commands separated by a ,, but will be reset\u001b[0m\n\u001b[38;2;248;248;242m       (and allow for new criteria, if desired) for commands separated by a ;.\u001b[0m\n\n\u001b[38;2;248;248;242m       Criteria may be used with either the for_window or assign commands to\u001b[0m\n\u001b[38;2;248;248;242m       specify operations to perform on new views. A criteria may also be used\u001b[0m\n\u001b[38;2;248;248;242m       to perform specific commands (ones that normally act upon one window)\u001b[0m\n\u001b[38;2;248;248;242m       on all views that match that criteria. For example:\u001b[0m\n\n\u001b[38;2;248;248;242m       Focus on a window with the mark \"IRC\":\u001b[0m\n\n\u001b[38;2;248;248;242m           [con_mark=\"IRC\"] focus\u001b[0m\n\n\u001b[38;2;248;248;242m       Kill all windows with the title \"Emacs\":\u001b[0m\n\n\u001b[38;2;248;248;242m           [class=\"Emacs\"] kill\u001b[0m\n\n\u001b[38;2;248;248;242m       You may like to use swaymsg \u001b[0m\u001b[38;2;166;226;46m-t\u001b[0m\u001b[38;2;248;248;242m get_tree for finding the values of these\u001b[0m\n\u001b[38;2;248;248;242m       properties in practice for your applications.\u001b[0m\n\n\u001b[38;2;248;248;242m       The following attributes may be matched with:\u001b[0m\n\n\u001b[38;2;248;248;242m       app_id\u001b[0m\n\u001b[38;2;248;248;242m           Compare value against the app id. Can be a regular expression. If\u001b[0m\n\u001b[38;2;248;248;242m           value is __focused__, then the app id must be the same as that of\u001b[0m\n\u001b[38;2;248;248;242m           the currently focused window. app_id are specific to Wayland appli‐\u001b[0m\n\u001b[38;2;248;248;242m           cations.\u001b[0m\n\n\u001b[38;2;248;248;242m       class\u001b[0m\n\u001b[38;2;248;248;242m           Compare value against the window class. Can be a regular expres‐\u001b[0m\n\u001b[38;2;248;248;242m           sion. If value is __focused__, then the window class must be the\u001b[0m\n\u001b[38;2;248;248;242m           same as that of the currently focused window. class are specific to\u001b[0m\n\u001b[38;2;248;248;242m           X11 applications and require XWayland.\u001b[0m\n\n\u001b[38;2;248;248;242m       con_id\u001b[0m\n\u001b[38;2;248;248;242m           Compare against the internal container ID, which you can find via\u001b[0m\n\u001b[38;2;248;248;242m           IPC. If value is __focused__, then the id must be the same as that\u001b[0m\n\u001b[38;2;248;248;242m           of the currently focused window.\u001b[0m\n\n\u001b[38;2;248;248;242m       con_mark\u001b[0m\n\u001b[38;2;248;248;242m           Compare against the window marks. Can be a regular expression.\u001b[0m\n\n\u001b[38;2;248;248;242m       floating\u001b[0m\n\u001b[38;2;248;248;242m           Matches floating windows.\u001b[0m\n\n\u001b[38;2;248;248;242m       id\u001b[0m\n\u001b[38;2;248;248;242m           Compare value against the X11 window ID. Must be numeric. id is\u001b[0m\n\u001b[38;2;248;248;242m           specific to X11 applications and requires XWayland.\u001b[0m\n\n\u001b[38;2;248;248;242m       instance\u001b[0m\n\u001b[38;2;248;248;242m           Compare value against the window instance. Can be a regular expres‐\u001b[0m\n\u001b[38;2;248;248;242m           sion. If value is __focused__, then the window instance must be the\u001b[0m\n\u001b[38;2;248;248;242m           same as that of the currently focused window. instance is specific\u001b[0m\n\u001b[38;2;248;248;242m           to X11 applications and requires XWayland.\u001b[0m\n\n\u001b[38;2;248;248;242m       pid\u001b[0m\n\u001b[38;2;248;248;242m           Compare value against the window's process ID. Must be numeric.\u001b[0m\n\n\u001b[38;2;248;248;242m       shell\u001b[0m\n\u001b[38;2;248;248;242m           Compare value against the window shell, such as \"xdg_shell\" or\u001b[0m\n\u001b[38;2;248;248;242m           \"xwayland\". Can be a regular expression. If value is __focused__,\u001b[0m\n\u001b[38;2;248;248;242m           then the shell must be the same as that of the currently focused\u001b[0m\n\u001b[38;2;248;248;242m           window.\u001b[0m\n\n\u001b[38;2;248;248;242m       tiling\u001b[0m\n\u001b[38;2;248;248;242m           Matches tiling windows.\u001b[0m\n\n\u001b[38;2;248;248;242m       title\u001b[0m\n\u001b[38;2;248;248;242m           Compare against the window title. Can be a regular expression. If\u001b[0m\n\u001b[38;2;248;248;242m           value is __focused__, then the window title must be the same as\u001b[0m\n\u001b[38;2;248;248;242m           that of the currently focused window.\u001b[0m\n\n\u001b[38;2;248;248;242m       urgent\u001b[0m\n\u001b[38;2;248;248;242m           Compares the urgent state of the window. Can be first, last, lat‐\u001b[0m\n\u001b[38;2;248;248;242m           est, newest, oldest or recent.\u001b[0m\n\n\u001b[38;2;248;248;242m       window_role\u001b[0m\n\u001b[38;2;248;248;242m           Compare against the window role (WM_WINDOW_ROLE). Can be a regular\u001b[0m\n\u001b[38;2;248;248;242m           expression. If value is __focused__, then the window role must be\u001b[0m\n\u001b[38;2;248;248;242m           the same as that of the currently focused window. window_role is\u001b[0m\n\u001b[38;2;248;248;242m           specific to X11 applications and requires XWayland.\u001b[0m\n\n\u001b[38;2;248;248;242m       window_type\u001b[0m\n\u001b[38;2;248;248;242m           Compare against the window type (_NET_WM_WINDOW_TYPE). Possible\u001b[0m\n\u001b[38;2;248;248;242m           values are normal, dialog, utility, toolbar, splash, menu, drop‐\u001b[0m\n\u001b[38;2;248;248;242m           down_menu, popup_menu, tooltip and notification. window_type is\u001b[0m\n\u001b[38;2;248;248;242m           specific to X11 applications and requires XWayland.\u001b[0m\n\n\u001b[38;2;248;248;242m       workspace\u001b[0m\n\u001b[38;2;248;248;242m           Compare against the workspace name for this view. Can be a regular\u001b[0m\n\u001b[38;2;248;248;242m           expression. If the value is __focused__, then all the views on the\u001b[0m\n\u001b[38;2;248;248;242m           currently focused workspace matches.\u001b[0m\n\n\u001b[38;2;253;151;31mSEE ALSO\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46msway\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46msway-input\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46msway-output\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46msway-bar\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46msway-ipc\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\n\u001b[38;2;248;248;242m                                  2022-12-25                           \u001b[0m\u001b[38;2;166;226;46msway\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Manpage/uwsm-0.26.3.man",
    "content": "\u001b[38;2;190;132;255mUWSM\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m                                 \u001b[0m\u001b[38;2;253;151;31mGeneral\u001b[0m\u001b[38;2;253;151;31m \u001b[0m\u001b[38;2;253;151;31mCommands\u001b[0m\u001b[38;2;253;151;31m \u001b[0m\u001b[38;2;253;151;31mManual\u001b[0m\u001b[38;2;248;248;242m                                \u001b[0m\u001b[38;2;190;132;255mUWSM\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\n\u001b[38;2;253;151;31mNAME\u001b[0m\n\u001b[38;2;248;248;242m       UWSM - Universal Wayland Session Manager.\u001b[0m\n\n\u001b[38;2;253;151;31mSYNOPSIS\u001b[0m\n\u001b[38;2;248;248;242m       uwsm \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46m-h\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;166;226;46m-v\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m {subcommand} \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242moptions ...\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\n\u001b[38;2;253;151;31mDESCRIPTION\u001b[0m\n\u001b[38;2;248;248;242m       Launches arbitrary wayland compositor via a set of systemd user units to provide graphical user\u001b[0m\n\u001b[38;2;248;248;242m       session  with  environment  management, XDG autostart support, clean shutdown. Provides helpers\u001b[0m\n\u001b[38;2;248;248;242m       for launching applications as scopes or services.\u001b[0m\n\n\u001b[38;2;253;151;31mSUBCOMMANDS\u001b[0m\n\u001b[38;2;248;248;242m       select     Select default compositor Entry.\u001b[0m\n\u001b[38;2;248;248;242m       start      Start compositor and graphical session.\u001b[0m\n\u001b[38;2;248;248;242m       finalize   Send compositor-set variables and unit startup notification to systemd user manager.\u001b[0m\n\u001b[38;2;248;248;242m       stop       Stop graphical session and compositor.\u001b[0m\n\u001b[38;2;248;248;242m       app        Application unit launcher (with Desktop Entry support).\u001b[0m\n\u001b[38;2;248;248;242m       check      Perform state checks (for scripting and info).\u001b[0m\n\u001b[38;2;248;248;242m       aux        Technical functions for use inside units.\u001b[0m\n\n\u001b[38;2;248;248;242m       See corresponding SUBCOMMANDS subsections below for further info.\u001b[0m\n\n\u001b[38;2;248;248;242m       Help for each subcommand is accessible by running \"uwsm {subcommand} \u001b[0m\u001b[38;2;166;226;46m-h\u001b[0m\u001b[38;2;248;248;242m\".\u001b[0m\n\n\u001b[38;2;253;151;31mCONFIGURATION\u001b[0m\n\u001b[38;2;248;248;242m   Files\u001b[0m\n\u001b[38;2;248;248;242m       In XDG config hierarchy:\u001b[0m\n\u001b[38;2;248;248;242m       uwsm/env\u001b[0m\n\u001b[38;2;248;248;242m       uwsm/env.d/*\u001b[0m\n\u001b[38;2;248;248;242m       uwsm/env-${compositor}\u001b[0m\n\u001b[38;2;248;248;242m       uwsm/env-${compositor}.d/*   Environment (shell) to  be  sourced  for  the  graphical  session.\u001b[0m\n\u001b[38;2;248;248;242m                                    Sourced from directories of increasing priority, in each directory\u001b[0m\n\u001b[38;2;248;248;242m                                    common  file is sourced first, then suffixed files in the order of\u001b[0m\n\u001b[38;2;248;248;242m                                    items listed in XDG_CURRENT_SESSION var (lowercased).\u001b[0m\n\u001b[38;2;248;248;242m       uwsm/default-id              Stores Desktop Entry ID of default compositor.\u001b[0m\n\n\u001b[38;2;248;248;242m       Fallback is also extended into the system part of XDG data hierarchy, this can be used for dis‐\u001b[0m\n\u001b[38;2;248;248;242m       tro level defaults.\u001b[0m\n\n\u001b[38;2;248;248;242m   Environment vars\u001b[0m\n\u001b[38;2;248;248;242m       UWSM_UNIT_RUNG                  (run|home)\u001b[0m\n\u001b[38;2;248;248;242m                                       Which rung of systemd/user/ hierarchy to manage generated  unit\u001b[0m\n\u001b[38;2;248;248;242m                                       and drop-in files in: \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;190;132;255mXDG_RUNTIME_DIR\u001b[0m\u001b[38;2;248;248;242m or \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;190;132;255mXDG_CONFIG_HOME\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m       UWSM_TWEAKS                     (boolean value)\u001b[0m\n\u001b[38;2;248;248;242m                                       Set  to  False  to  remove  and not generate tweak drop-ins for\u001b[0m\n\u001b[38;2;248;248;242m                                       other software.\u001b[0m\n\u001b[38;2;248;248;242m       UWSM_FINALIZE_VARNAMES          (whitespace-separated names of env vars)\u001b[0m\n\u001b[38;2;248;248;242m                                       Additional variables for \"uwsm finalize\".\u001b[0m\n\u001b[38;2;248;248;242m       UWSM_WAIT_VARNAMES              (whitespace-separated names of env vars)\u001b[0m\n\u001b[38;2;248;248;242m                                       Variables to wait for in activation environment before proceed‐\u001b[0m\n\u001b[38;2;248;248;242m                                       ing to graphical session (in addition to WAYLAND_DISPLAY).\u001b[0m\n\u001b[38;2;248;248;242m       UWSM_WAIT_VARNAMES_TIMEOUT      (int value)\u001b[0m\n\u001b[38;2;248;248;242m                                       Seconds to wait for variables to appear in activation  environ‐\u001b[0m\n\u001b[38;2;248;248;242m                                       ment. Essentially, startup timeout (default: 10).\u001b[0m\n\u001b[38;2;248;248;242m       UWSM_WAIT_VARNAMES_SETTLETIME   (float value)\u001b[0m\n\u001b[38;2;248;248;242m                                       Seconds  to  pause  after all expected vars found in activation\u001b[0m\n\u001b[38;2;248;248;242m                                       environment (default: 0.2).\u001b[0m\n\u001b[38;2;248;248;242m       UWSM_APP_UNIT_TYPE              (scope|service)\u001b[0m\n\u001b[38;2;248;248;242m                                       Default unit type for launching apps (default: scope).\u001b[0m\n\u001b[38;2;248;248;242m       UWSM_SILENT_START               (int or boolean value)\u001b[0m\n\u001b[38;2;248;248;242m                                       True or 1 to inhibit stdout messages from \"uwsm  start\".  2  to\u001b[0m\n\u001b[38;2;248;248;242m                                       also inhibit warnings.\u001b[0m\n\u001b[38;2;248;248;242m       DEBUG                           (int or boolean value)\u001b[0m\n\u001b[38;2;248;248;242m                                       True or positive number to dump debug info to stderr.\u001b[0m\n\n\u001b[38;2;253;151;31mOPERATION OVERVIEW\u001b[0m\n\u001b[38;2;248;248;242m   Login Sequence Integration\u001b[0m\n\u001b[38;2;248;248;242m       uwsm  can  be  launched  by using conditional exec in shell profile to replace login shell (see\u001b[0m\n\u001b[38;2;248;248;242m       Shell Profile Integration section).\u001b[0m\n\n\u001b[38;2;248;248;242m       Alternatively \"uwsm start ...\" command can be put into wayland session's Desktop  Entry  to  be\u001b[0m\n\u001b[38;2;248;248;242m       launched by a display manager (see Use Inside Desktop Entry section).\u001b[0m\n\n\u001b[38;2;248;248;242m   Compositor Selection\u001b[0m\n\u001b[38;2;248;248;242m       uwsm  can  run arbitrary compositor command line or a Desktop Entry by ID (specifying Action ID\u001b[0m\n\u001b[38;2;248;248;242m       is also supported).\u001b[0m\n\n\u001b[38;2;248;248;242m       Desktop Entry can also be selected via a whiptail menu (see select subcommand section).\u001b[0m\n\n\u001b[38;2;248;248;242m   Startup\u001b[0m\n\u001b[38;2;248;248;242m       See start subcommand section for command syntax.\u001b[0m\n\n\u001b[38;2;248;248;242m       UWSM uses a set of units bound to standard user session targets:\u001b[0m\n\n\u001b[38;2;248;248;242m       •   wayland-session-pre@.target (bound to graphical-session-pre.target)\u001b[0m\n\u001b[38;2;248;248;242m           •   wayland-wm-env@.service (environment preloader service)\u001b[0m\n\u001b[38;2;248;248;242m       •   wayland-session@.target (bound to graphical-session.target)\u001b[0m\n\u001b[38;2;248;248;242m           •   wayland-wm@.service (service for the selected compositor)\u001b[0m\n\u001b[38;2;248;248;242m       •   wayland-session-xdg-autostart@.target (bound to xdg-desktop-autostart.target)\u001b[0m\n\u001b[38;2;248;248;242m       •   wayland-session-envelope@.target (lives through entire lifecycle)\u001b[0m\n\u001b[38;2;248;248;242m       •   wayland-session-shutdown.target (conflicts with targets above for shutdown)\u001b[0m\n\u001b[38;2;248;248;242m       •   wayland-session-bindpid@.service (PID-tracking session killswitch)\u001b[0m\n\u001b[38;2;248;248;242m       •   wayland-session-waitenv.service (delays graphical session until vars appear)\u001b[0m\n\n\u001b[38;2;248;248;242m       Compositor ID (Desktop Entry ID or executable name) becomes the  specifier  for  all  templated\u001b[0m\n\u001b[38;2;248;248;242m       units.\u001b[0m\n\n\u001b[38;2;248;248;242m       At  the  stage of graphical-session-pre.target, the environment saved from \"uwsm start\" context\u001b[0m\n\u001b[38;2;248;248;242m       is loaded (or POSIX shell profile is sourced), uwsm environment files are sourced. The delta is\u001b[0m\n\u001b[38;2;248;248;242m       exported to the systemd and D-Bus activation environments by the environment preloader  service\u001b[0m\n\u001b[38;2;248;248;242m       and  is  marked  for  cleanup  at  shutdown  stage. Preloader shell context for convenience has\u001b[0m\n\u001b[38;2;248;248;242m       IN_UWSM_ENV_PRELOADER var set to true.\u001b[0m\n\n\u001b[38;2;248;248;242m       At the stage  of  graphical-session.target  (before  it)  the  main  compositor  unit  wayland-\u001b[0m\n\u001b[38;2;248;248;242m       wm@${ID}.service and wayland-session-waitenv.service are started.\u001b[0m\n\n\u001b[38;2;248;248;242m       Compositor should at least put WAYLAND_DISPLAY variable to systemd activation environment. This\u001b[0m\n\u001b[38;2;248;248;242m       will  trigger  uwsm's automatic finalization logic. Without WAYLAND_DISPLAY in activation envi‐\u001b[0m\n\u001b[38;2;248;248;242m       ronment startup will timeout in 10 seconds.\u001b[0m\n\n\u001b[38;2;248;248;242m       Manual finalization is possible by running \"uwsm finalize\" (see finalize  subcommand  section),\u001b[0m\n\u001b[38;2;248;248;242m       also  in  combination  with  tweaking UWSM_WAIT_VARNAMES and UWSM_WAIT_VARNAMES_SETTLETIME vars\u001b[0m\n\u001b[38;2;248;248;242m       (see Environment vars section).\u001b[0m\n\n\u001b[38;2;248;248;242m       Successful activation of compositor unit and existence of WAYLAND_DISPLAY in  activation  envi‐\u001b[0m\n\u001b[38;2;248;248;242m       ronment will allow graphical-session.target to be declared reached.\u001b[0m\n\n\u001b[38;2;248;248;242m       Finally, xdg-desktop-autostart.target is activated.\u001b[0m\n\n\u001b[38;2;248;248;242m   Inside session\u001b[0m\n\u001b[38;2;248;248;242m       It  is  highly recommended to configure the compositor or app launcher to launch apps as scopes\u001b[0m\n\u001b[38;2;248;248;242m       or services in special user session slices (app.slice, background.slice,  session.slice).  uwsm\u001b[0m\n\u001b[38;2;248;248;242m       provides custom nested slices for apps to live in and be terminated on session end:\u001b[0m\n\u001b[38;2;248;248;242m       •   app-graphical.slice\u001b[0m\n\u001b[38;2;248;248;242m       •   background-graphical.slice\u001b[0m\n\u001b[38;2;248;248;242m       •   session-graphical.slice\u001b[0m\n\n\u001b[38;2;248;248;242m       A  helper app subcommand is provided to handle all the systemd-run invocations for you (see app\u001b[0m\n\u001b[38;2;248;248;242m       subcommand section).\u001b[0m\n\n\u001b[38;2;248;248;242m       The compositor is launched in session.slice by default (as recommended by \u001b[0m\u001b[38;2;166;226;46msystemd.\u001b[0m\u001b[38;2;166;226;46mspecial\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m).\u001b[0m\n\n\u001b[38;2;248;248;242m   Shutdown\u001b[0m\n\u001b[38;2;248;248;242m       Can be initiated by either:\u001b[0m\n\u001b[38;2;248;248;242m       •   running uwsm stop\u001b[0m\n\u001b[38;2;248;248;242m       •   stopping wayland-wm@*.service or wayland-session-envelope@*.target\u001b[0m\n\u001b[38;2;248;248;242m       •   starting wayland-session-shutdown.target\u001b[0m\n\n\u001b[38;2;248;248;242m       Systemd stops all user units in reverse, as it usually does. During deactivation of  graphical-\u001b[0m\n\u001b[38;2;248;248;242m       session-pre.target,  the environment preloader service cleans activation environments by unset‐\u001b[0m\n\u001b[38;2;248;248;242m       ting all variables that were marked for removal during startup and finalization stages.\u001b[0m\n\n\u001b[38;2;248;248;242m       Do not use compositor's native exit mechanism or kill its process directly.\u001b[0m\n\n\u001b[38;2;253;151;31mSUBCOMMANDS\u001b[0m\n\u001b[38;2;248;248;242m   select\u001b[0m\n\u001b[38;2;248;248;242m       Selects default wayland session compositor Desktop Entry.\u001b[0m\n\n\u001b[38;2;248;248;242m           uwsm select\u001b[0m\n\n\u001b[38;2;248;248;242m       Invokes a whiptail menu to select default session among Desktop Entries in wayland-sessions XDG\u001b[0m\n\u001b[38;2;248;248;242m       data hierarchy. Writes to ${XDG_CONFIG_HOME}/uwsm/default-id. Nothing else is done.  Returns  1\u001b[0m\n\u001b[38;2;248;248;242m       if selection is cancelled. Can be used for scripting launch condition in shell profile.\u001b[0m\n\n\u001b[38;2;248;248;242m   check\u001b[0m\n\u001b[38;2;248;248;242m       Performs tests, returns 0 on success, 1 on failure.\u001b[0m\n\n\u001b[38;2;248;248;242m       is-active:\u001b[0m\n\n\u001b[38;2;248;248;242m           uwsm check is-active [\u001b[0m\u001b[38;2;166;226;46m-h\u001b[0m\u001b[38;2;248;248;242m] [\u001b[0m\u001b[38;2;166;226;46m-v\u001b[0m\u001b[38;2;248;248;242m] [compositor]\u001b[0m\n\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;166;226;46m-v\u001b[0m\u001b[38;2;248;248;242m           show additional info\u001b[0m\n\u001b[38;2;248;248;242m           compositor   check for specific compositor\u001b[0m\n\n\u001b[38;2;248;248;242m       Checks  if  unit of specific compositor or graphical-session*.target in general is in active or\u001b[0m\n\u001b[38;2;248;248;242m       activating state.\u001b[0m\n\n\u001b[38;2;248;248;242m       may-start:\u001b[0m\n\n\u001b[38;2;248;248;242m           uwsm check may-start [\u001b[0m\u001b[38;2;166;226;46m-h\u001b[0m\u001b[38;2;248;248;242m] [\u001b[0m\u001b[38;2;166;226;46m-g\u001b[0m\u001b[38;2;248;248;242m [S]] [\u001b[0m\u001b[38;2;166;226;46m-v\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[38;2;166;226;46m-q\u001b[0m\u001b[38;2;248;248;242m] [N ...]\u001b[0m\n\n\u001b[38;2;248;248;242m           N ...   allowed VT numbers (default: 1)\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;166;226;46m-g\u001b[0m\u001b[38;2;248;248;242m S    wait S seconds for graphical.target in queue  (default:  60;  0  or  less  disables\u001b[0m\n\u001b[38;2;248;248;242m                   check).\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;166;226;46m-i\u001b[0m\u001b[38;2;248;248;242m      do not check for login shell\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;166;226;46m-r\u001b[0m\u001b[38;2;248;248;242m      do not check for local session (allow remote session)\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;166;226;46m-v\u001b[0m\u001b[38;2;248;248;242m      show all failed tests\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;166;226;46m-q\u001b[0m\u001b[38;2;248;248;242m      be quiet\u001b[0m\n\n\u001b[38;2;248;248;242m       Checks whether it is OK to launch a wayland session via the following conditions:\u001b[0m\n\u001b[38;2;248;248;242m       •   DBUS_SESSION_BUS_ADDRESS is set\u001b[0m\n\u001b[38;2;248;248;242m       •   Running from login shell\u001b[0m\n\u001b[38;2;248;248;242m       •   System is at graphical.target\u001b[0m\n\u001b[38;2;248;248;242m       •   User graphical-session*.target units are not yet active\u001b[0m\n\u001b[38;2;248;248;242m       •   Foreground VT is among allowed (default: 1)\u001b[0m\n\u001b[38;2;248;248;242m       •   Login session's VT is matching\u001b[0m\n\n\u001b[38;2;248;248;242m   start\u001b[0m\n\u001b[38;2;248;248;242m       Generates units for given compositor command line or Desktop Entry and starts them.\u001b[0m\n\n\u001b[38;2;248;248;242m           uwsm  start  [\u001b[0m\u001b[38;2;166;226;46m-h\u001b[0m\u001b[38;2;248;248;242m]  [\u001b[0m\u001b[38;2;166;226;46m-D\u001b[0m\u001b[38;2;248;248;242m  name[:name...]] [\u001b[0m\u001b[38;2;166;226;46m-a\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[38;2;166;226;46m-e\u001b[0m\u001b[38;2;248;248;242m] [\u001b[0m\u001b[38;2;166;226;46m-N\u001b[0m\u001b[38;2;248;248;242m Name] [\u001b[0m\u001b[38;2;166;226;46m-C\u001b[0m\u001b[38;2;248;248;242m Comment] [\u001b[0m\u001b[38;2;166;226;46m-U\u001b[0m\u001b[38;2;248;248;242m {run|home}] [\u001b[0m\u001b[38;2;166;226;46m-t\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m           [\u001b[0m\u001b[38;2;166;226;46m-o\u001b[0m\u001b[38;2;248;248;242m] [\u001b[0m\u001b[38;2;166;226;46m-n\u001b[0m\u001b[38;2;248;248;242m] -- compositor [args ...]\u001b[0m\n\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;166;226;46m-F\u001b[0m\u001b[38;2;248;248;242m                  Hardcode mode, always write command line to unit drop-ins and use  full\u001b[0m\n\u001b[38;2;248;248;242m                               paths.\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;166;226;46m-D\u001b[0m\u001b[38;2;248;248;242m name[:name...]   Names to fill XDG_CURRENT_DESKTOP with (:\u001b[0m\u001b[38;2;166;226;46m-separated\u001b[0m\u001b[38;2;248;248;242m). Existing var con‐\u001b[0m\n\u001b[38;2;248;248;242m                               tent is a starting point if no active session is running.\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;166;226;46m-a\u001b[0m\u001b[38;2;248;248;242m                  Append desktop names set by \u001b[0m\u001b[38;2;166;226;46m-D\u001b[0m\u001b[38;2;248;248;242m to other sources (default).\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;166;226;46m-e\u001b[0m\u001b[38;2;248;248;242m                  Use desktop names set by \u001b[0m\u001b[38;2;166;226;46m-D\u001b[0m\u001b[38;2;248;248;242m exclusively, discard other sources.\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;166;226;46m-N\u001b[0m\u001b[38;2;248;248;242m Name             Fancy name for compositor (filled from Desktop Entry by default).\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;166;226;46m-C\u001b[0m\u001b[38;2;248;248;242m Comment          Fancy  description  for  compositor  (filled  from Desktop Entry by de‐\u001b[0m\n\u001b[38;2;248;248;242m                               fault).\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;166;226;46m-U\u001b[0m\u001b[38;2;248;248;242m {run|home}       Select  rung  for  generated  unit  files:  run:  \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;190;132;255mXDG_RUNTIME_DIR\u001b[0m\u001b[38;2;248;248;242m/sys‐\u001b[0m\n\u001b[38;2;248;248;242m                               temd/user  (default), or home: \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;190;132;255mXDG_CONFIG_HOME\u001b[0m\u001b[38;2;248;248;242m/systemd/user. Permanent\u001b[0m\n\u001b[38;2;248;248;242m                               destination will save some time by removing need for reloading systemd.\u001b[0m\n\u001b[38;2;248;248;242m                               Managed files from other rung will  be  removed.  Can  be  preset  with\u001b[0m\n\u001b[38;2;248;248;242m                               UWSM_UNIT_RUNG environment var.\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;166;226;46m-t\u001b[0m\u001b[38;2;248;248;242m                  Do  not  generate  (and  remove)  tweak  unit files. Can be preset with\u001b[0m\n\u001b[38;2;248;248;242m                               UWSM_TWEAKS=false environment var.\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;166;226;46m-T\u001b[0m\u001b[38;2;248;248;242m                  Generate tweak unit files for other software. This is default behavior.\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;166;226;46m-g\u001b[0m\u001b[38;2;248;248;242m S                Wait for S seconds for system graphical.target in  queue  and  warn  if\u001b[0m\n\u001b[38;2;248;248;242m                               timed out or not in queue (default: 60, negative to disable).\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;166;226;46m-G\u001b[0m\u001b[38;2;248;248;242m S                Wait  for  S  seconds for system graphical.target in queue and abort if\u001b[0m\n\u001b[38;2;248;248;242m                               timed out or not in queue (overrides \u001b[0m\u001b[38;2;166;226;46m-g\u001b[0m\u001b[38;2;248;248;242m, default: \u001b[0m\u001b[38;2;166;226;46m-1\u001b[0m\u001b[38;2;248;248;242m, (disabled)).\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;166;226;46m-o\u001b[0m\u001b[38;2;248;248;242m                  Only generate units, but do not start.\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;166;226;46m-n\u001b[0m\u001b[38;2;248;248;242m                  Dry run, do not write or start anything.\u001b[0m\n\n\u001b[38;2;248;248;242m       The first argument of the compositor command line acts as an ID and should be either one of:\u001b[0m\n\u001b[38;2;248;248;242m       •   Executable name\u001b[0m\n\u001b[38;2;248;248;242m       •   Desktop Entry ID (optionally with \":\"\u001b[0m\u001b[38;2;166;226;46m-delimited\u001b[0m\u001b[38;2;248;248;242m action ID)\u001b[0m\n\u001b[38;2;248;248;242m       •   Special value:\u001b[0m\n\u001b[38;2;248;248;242m           •   select - invoke menu to select compositor.\u001b[0m\n\u001b[38;2;248;248;242m           •   default - run previously selected compositor (or select if no selection was saved).\u001b[0m\n\n\u001b[38;2;248;248;242m       If given as path, hardcode mode will be used implicitly.\u001b[0m\n\n\u001b[38;2;248;248;242m       Always use \"--\" to disambiguate dashed arguments intended for compositor itself.\u001b[0m\n\n\u001b[38;2;248;248;242m       After units are (re)generated, wayland-session-bindpid@${PID}.service is started, to track  the\u001b[0m\n\u001b[38;2;248;248;242m       PID  of  invoking  uwsm, then uwsm process replaces itself with systemctl execution that starts\u001b[0m\n\u001b[38;2;248;248;242m       wayland-wm@${ID}.service and waits for it to finish.\u001b[0m\n\n\u001b[38;2;248;248;242m       In order to complete the startup sequence, the compositor has to put WAYLAND_DISPLAY  into  the\u001b[0m\n\u001b[38;2;248;248;242m       systemd  activation environment. This can be done explicitly by making compositor run \"uwsm fi‐\u001b[0m\n\u001b[38;2;248;248;242m       nalize\" command (see the next subsection).\u001b[0m\n\n\u001b[38;2;248;248;242m   finalize\u001b[0m\n\u001b[38;2;248;248;242m       For running by a compositor on startup.\u001b[0m\n\n\u001b[38;2;248;248;242m           uwsm finalize [\u001b[0m\u001b[38;2;166;226;46m-h\u001b[0m\u001b[38;2;248;248;242m] [VAR_NAME ...]\u001b[0m\n\n\u001b[38;2;248;248;242m       Exports WAYLAND_DISPLAY, DISPLAY and any defined vars mentioned by names  in  arguments  or  in\u001b[0m\n\u001b[38;2;248;248;242m       UWSM_FINALIZE_VARNAMES variable (whitespace-separated). Then sends startup notification for the\u001b[0m\n\u001b[38;2;248;248;242m       unit to systemd user manager.\u001b[0m\n\n\u001b[38;2;248;248;242m       This  is required if compositor itself does not put WAYLAND_DISPLAY to systemd activation envi‐\u001b[0m\n\u001b[38;2;248;248;242m       ronment, otherwise wayland-session@.service unit or a dedicated wayland-session-waitenv.service\u001b[0m\n\u001b[38;2;248;248;242m       unit will terminate due to startup timeout.\u001b[0m\n\n\u001b[38;2;248;248;242m       UWSM_FINALIZE_VARNAMES variable can be prefilled by plugins.\u001b[0m\n\n\u001b[38;2;248;248;242m       Direct assignment as VAR_NAME=value is also possible, but recommended only for  creating  flags\u001b[0m\n\u001b[38;2;248;248;242m       for UWSM_WAIT_VARNAMES mechanism.\u001b[0m\n\n\u001b[38;2;248;248;242m   stop\u001b[0m\n\u001b[38;2;248;248;242m       Stops compositor and optionally removes generated units.\u001b[0m\n\n\u001b[38;2;248;248;242m           uwsm stop [\u001b[0m\u001b[38;2;166;226;46m-h\u001b[0m\u001b[38;2;248;248;242m] [\u001b[0m\u001b[38;2;166;226;46m-r\u001b[0m\u001b[38;2;248;248;242m [compositor] [\u001b[0m\u001b[38;2;166;226;46m-U\u001b[0m\u001b[38;2;248;248;242m {run|home}] [\u001b[0m\u001b[38;2;166;226;46m-n\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;166;226;46m-r\u001b[0m\u001b[38;2;248;248;242m [compositor]   Also remove units (all or only compositor-specific).\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;166;226;46m-U\u001b[0m\u001b[38;2;248;248;242m {run|home}     Select  rung for generated unit files: run: \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;190;132;255mXDG_RUNTIME_DIR\u001b[0m\u001b[38;2;248;248;242m/systemd/user\u001b[0m\n\u001b[38;2;248;248;242m                             (default), or home: \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;190;132;255mXDG_CONFIG_HOME\u001b[0m\u001b[38;2;248;248;242m/systemd/user. Permanent  destination\u001b[0m\n\u001b[38;2;248;248;242m                             will save some time by removing need for reloading systemd. Managed files\u001b[0m\n\u001b[38;2;248;248;242m                             from  other rung will be removed. Can be preset with UWSM_UNIT_RUNG envi‐\u001b[0m\n\u001b[38;2;248;248;242m                             ronment var.\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;166;226;46m-n\u001b[0m\u001b[38;2;248;248;242m                Dry run, do not stop or remove anything.\u001b[0m\n\n\u001b[38;2;248;248;242m   app\u001b[0m\n\u001b[38;2;248;248;242m       Application-to-unit launcher with Desktop Entry support.\u001b[0m\n\n\u001b[38;2;248;248;242m           uwsm app [\u001b[0m\u001b[38;2;166;226;46m-h\u001b[0m\u001b[38;2;248;248;242m] [\u001b[0m\u001b[38;2;166;226;46m-s\u001b[0m\u001b[38;2;248;248;242m {a,b,s,custom.slice}] [\u001b[0m\u001b[38;2;166;226;46m-t\u001b[0m\u001b[38;2;248;248;242m {scope,service}] [\u001b[0m\u001b[38;2;166;226;46m-a\u001b[0m\u001b[38;2;248;248;242m app_name]  [\u001b[0m\u001b[38;2;166;226;46m-u\u001b[0m\u001b[38;2;248;248;242m  unit_name]\u001b[0m\n\u001b[38;2;248;248;242m           [\u001b[0m\u001b[38;2;166;226;46m-d\u001b[0m\u001b[38;2;248;248;242m unit_description] [\u001b[0m\u001b[38;2;166;226;46m-S\u001b[0m\u001b[38;2;248;248;242m ] [\u001b[0m\u001b[38;2;166;226;46m-T\u001b[0m\u001b[38;2;248;248;242m] -- application [args ...]\u001b[0m\n\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;166;226;46m-s\u001b[0m\u001b[38;2;248;248;242m {a,b,s,custom.slice}   Slice selector (default: a):\u001b[0m\n\u001b[38;2;248;248;242m                                        a - app-graphical.slice\u001b[0m\n\u001b[38;2;248;248;242m                                        b - background-graphical.slice\u001b[0m\n\u001b[38;2;248;248;242m                                        s - session-graphical.slice\u001b[0m\n\u001b[38;2;248;248;242m                                        any slice by full name\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;166;226;46m-t\u001b[0m\u001b[38;2;248;248;242m {scope,service}        Type  of  unit  to  launch  (default:  scope,  can  be  preset by\u001b[0m\n\u001b[38;2;248;248;242m                                     UWSM_APP_UNIT_TYPE env var).\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;166;226;46m-a\u001b[0m\u001b[38;2;248;248;242m app_name               Override app name (a substring in unit name).\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;166;226;46m-u\u001b[0m\u001b[38;2;248;248;242m unit_name              Override the whole autogenerated unit name.\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;166;226;46m-d\u001b[0m\u001b[38;2;248;248;242m unit_description       Unit Description.\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;166;226;46m-p\u001b[0m\u001b[38;2;248;248;242m Property=value         Set additional unit property (option is repeatable).\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;166;226;46m-S\u001b[0m\u001b[38;2;248;248;242m {out,err,both}         Silence stdout, stderr, or both.\u001b[0m\n\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;166;226;46m-T\u001b[0m\u001b[38;2;248;248;242m                        Launch app in a terminal. Allows command  to  be  empty  to  just\u001b[0m\n\u001b[38;2;248;248;242m                                     launch a terminal.\u001b[0m\n\n\u001b[38;2;248;248;242m       Application  can  be  provided as a command with optional arguments, or a Desktop Entry ID, op‐\u001b[0m\n\u001b[38;2;248;248;242m       tionally suffixed with \":\"\u001b[0m\u001b[38;2;166;226;46m-delimited\u001b[0m\u001b[38;2;248;248;242m Action ID. If Desktop Entry is being  launched,  arguments\u001b[0m\n\u001b[38;2;248;248;242m       should be compatible with it.\u001b[0m\n\n\u001b[38;2;248;248;242m       Always use \"--\" to disambiguate dashed arguments intended for application itself.\u001b[0m\n\n\u001b[38;2;248;248;242m   aux\u001b[0m\n\u001b[38;2;248;248;242m       For use in systemd user services. Can only be called by systemd user manager.\u001b[0m\n\n\u001b[38;2;248;248;242m       prepare-env   Prepares  environment  (for  use in ExecStart in wayland-wm-env@.service bound to\u001b[0m\n\u001b[38;2;248;248;242m                     wayland-session-pre@.target).\u001b[0m\n\u001b[38;2;248;248;242m       cleanup-env   Cleans up environment (for use ExecStop in in  wayland-wm-env@.service  bound  to\u001b[0m\n\u001b[38;2;248;248;242m                     wayland-session-pre@.target).\u001b[0m\n\u001b[38;2;248;248;242m       exec          Executes a command with arguments or a desktop entry (for use in Exec in wayland-\u001b[0m\n\u001b[38;2;248;248;242m                     wm@.service bound to wayland-session@.target).\u001b[0m\n\u001b[38;2;248;248;242m       app-daemon    Daemon for faster app argument generation, used by uwsm-app client.\u001b[0m\n\n\u001b[38;2;253;151;31mAPP DAEMON\u001b[0m\n\u001b[38;2;248;248;242m       Provided as wayland-wm-app-daemon.service to be started on-demand.\u001b[0m\n\n\u001b[38;2;248;248;242m       Daemon  receives app arguments from ${XDG_RUNTIME_DIR}/uwsm-app-daemon-in pipe. Resulting argu‐\u001b[0m\n\u001b[38;2;248;248;242m       ments are formatted as shell code and written to ${XDG_RUNTIME_DIR}/uwsm-app-daemon-out pipe.\u001b[0m\n\n\u001b[38;2;248;248;242m       Arguments are expected to be \\0-delimited, leading \\0 are stripped. One command is received per\u001b[0m\n\u001b[38;2;248;248;242m       write+close.\u001b[0m\n\n\u001b[38;2;248;248;242m       The first argument determines the behavior:\u001b[0m\n\n\u001b[38;2;248;248;242m       •   app  the rest is processed the same as in \"uwsm app\"\u001b[0m\n\u001b[38;2;248;248;242m       •   ping just \"pong\" is returnedn\u001b[0m\n\u001b[38;2;248;248;242m       •   stop daemon is stoppedn\u001b[0m\n\n\u001b[38;2;248;248;242m       Single commands are prepended with exec, iterated commands are assembled with trailing &  each,\u001b[0m\n\u001b[38;2;248;248;242m       followed by wait.\u001b[0m\n\n\u001b[38;2;248;248;242m       The  purpose  of  all this is to skip all the expensive Python startup and import routines that\u001b[0m\n\u001b[38;2;248;248;242m       slow things down every time \"uwsm app\" is called. Instead the daemon does it once and then lis‐\u001b[0m\n\u001b[38;2;248;248;242m       tens for requests, while a simple shell script may dump arguments to one pipe and run the  code\u001b[0m\n\u001b[38;2;248;248;242m       received from another via eval, which is much faster.\u001b[0m\n\n\u001b[38;2;248;248;242m       The simplest script is:\u001b[0m\n\n\u001b[38;2;248;248;242m                #!/bin/sh\u001b[0m\n\u001b[38;2;248;248;242m                printf '0%s' app \"$@\" > \"${XDG_RUNTIME_DIR}/uwsm-app-daemon-in\"\u001b[0m\n\u001b[38;2;248;248;242m                IFS='' read \u001b[0m\u001b[38;2;166;226;46m-r\u001b[0m\u001b[38;2;248;248;242m cmd < \"${XDG_RUNTIME_DIR}/uwsm-app-daemon-out\"\u001b[0m\n\u001b[38;2;248;248;242m                eval \"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;190;132;255mcmd\u001b[0m\u001b[38;2;248;248;242m\"\u001b[0m\n\n\u001b[38;2;248;248;242m       Provided  uwsm-app  client  script is a bit smarter: it can start the daemon, applies timeouts,\u001b[0m\n\u001b[38;2;248;248;242m       and supports newlines in returned args.\u001b[0m\n\n\u001b[38;2;253;151;31mSHELL PROFILE INTEGRATION\u001b[0m\n\u001b[38;2;248;248;242m       To launch uwsm automatically on login, add one of constructs below (or similar) to  shell  pro‐\u001b[0m\n\u001b[38;2;248;248;242m       file.\u001b[0m\n\n\u001b[38;2;248;248;242m       This asks to select a compositor (or refuse and continue with login shell) when logged in on VT\u001b[0m\n\u001b[38;2;248;248;242m       1:\u001b[0m\n\n\u001b[38;2;248;248;242m                if uwsm check may-start && uwsm select; then\u001b[0m\n\u001b[38;2;248;248;242m                     exec systemd-cat \u001b[0m\u001b[38;2;166;226;46m-t\u001b[0m\u001b[38;2;248;248;242m uwsm_start uwsm start default\u001b[0m\n\u001b[38;2;248;248;242m                fi\u001b[0m\n\n\u001b[38;2;248;248;242m       This just starts a specific compositor depending on foreground VT:\u001b[0m\n\n\u001b[38;2;248;248;242m                if uwsm check may-start 1; then\u001b[0m\n\u001b[38;2;248;248;242m                     exec systemd-cat \u001b[0m\u001b[38;2;166;226;46m-t\u001b[0m\u001b[38;2;248;248;242m uwsm_start uwsm start sway.desktop\u001b[0m\n\u001b[38;2;248;248;242m                elif uwsm check may-start 2; then\u001b[0m\n\u001b[38;2;248;248;242m                     exec systemd-cat \u001b[0m\u001b[38;2;166;226;46m-t\u001b[0m\u001b[38;2;248;248;242m uwsm_start uwsm start labwc.desktop\u001b[0m\n\u001b[38;2;248;248;242m                fi\u001b[0m\n\n\u001b[38;2;248;248;242m       Using  \"uwsm  check  may-start\"  as  a  condition  is essential, not only to prevent accidental\u001b[0m\n\u001b[38;2;248;248;242m       startup attempts where they are not expected, but also since startup may involve sourcing shell\u001b[0m\n\u001b[38;2;248;248;242m       profile, which might lead to nasty loops.\u001b[0m\n\n\u001b[38;2;248;248;242m       See check subcommand section for info on may-start checker.\u001b[0m\n\n\u001b[38;2;248;248;242m       exec allows uwsm to replace login shell in order to properly bind to user  session  and  handle\u001b[0m\n\u001b[38;2;248;248;242m       session termination.\u001b[0m\n\n\u001b[38;2;248;248;242m       \"systemd-cat  \u001b[0m\u001b[38;2;166;226;46m-t\u001b[0m\u001b[38;2;248;248;242m uwsm_start\" (optional) executes the command given to it (uwsm) with its stdout\u001b[0m\n\u001b[38;2;248;248;242m       and stderr connected to the systemd journal, tagged with identifier \"uwsm_start\". See  systemd-\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46mcat\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m for more options.\u001b[0m\n\n\u001b[38;2;253;151;31mUSE INSIDE DESKTOP ENTRY\u001b[0m\n\u001b[38;2;248;248;242m       To  launch  uwsm from a display/login manager, \"uwsm start\" can be used inside Desktop Entries.\u001b[0m\n\u001b[38;2;248;248;242m       Example /usr/local/share/wayland-sessions/my-compositor.desktop:\u001b[0m\n\n\u001b[38;2;248;248;242m                [Desktop Entry]\u001b[0m\n\u001b[38;2;248;248;242m                Name=My compositor (with UWSM)\u001b[0m\n\u001b[38;2;248;248;242m                Comment=My cool compositor\u001b[0m\n\u001b[38;2;248;248;242m                Exec=uwsm start \u001b[0m\u001b[38;2;166;226;46m-N\u001b[0m\u001b[38;2;248;248;242m \"My compositor\" \u001b[0m\u001b[38;2;166;226;46m-D\u001b[0m\u001b[38;2;248;248;242m mycompositor \u001b[0m\u001b[38;2;166;226;46m-C\u001b[0m\u001b[38;2;248;248;242m \"My cool compositor\" mywm\u001b[0m\n\u001b[38;2;248;248;242m                DesktopNames=mycompositor\u001b[0m\n\u001b[38;2;248;248;242m                Type=Application\u001b[0m\n\n\u001b[38;2;248;248;242m       Things to keep in mind:\u001b[0m\n\n\u001b[38;2;248;248;242m       •   For consistency, command line arguments should mirror the keys of the entry\u001b[0m\n\u001b[38;2;248;248;242m       •   Command in Exec= should start with \"uwsm start\"\u001b[0m\n\u001b[38;2;248;248;242m       •   It should not point to itself (as a combination of Desktop Entry ID and Action ID)\u001b[0m\n\u001b[38;2;248;248;242m       •   It should not point to a Desktop Entry ID and Action ID that also uses ‘uwsm‘\u001b[0m\n\n\u001b[38;2;248;248;242m       Potentially such entries may be found and used by uwsm itself, i.e. in shell  profile  integra‐\u001b[0m\n\u001b[38;2;248;248;242m       tion  situation,  or  when  launched manually. Following the principles above ensures uwsm will\u001b[0m\n\u001b[38;2;248;248;242m       properly recognize itself and parse requested arguments inside the entry without any  side  ef‐\u001b[0m\n\u001b[38;2;248;248;242m       fects.\u001b[0m\n\n\u001b[38;2;253;151;31mSEE ALSO\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;166;226;46muwsm-plugins\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;166;226;46msystemd-run\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;166;226;46msystemd-cat\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;166;226;46msystemd.\u001b[0m\u001b[38;2;166;226;46mspecial\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\n\u001b[38;2;248;248;242m                                              2026-02-14                                       \u001b[0m\u001b[38;2;166;226;46mUWSM\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Markdown/example.md",
    "content": "\u001b[38;2;253;151;31m#\u001b[0m\u001b[38;2;253;151;31m \u001b[0m\u001b[38;2;253;151;31mH1\u001b[0m\n\u001b[38;2;253;151;31m##\u001b[0m\u001b[38;2;253;151;31m \u001b[0m\u001b[38;2;253;151;31mH2\u001b[0m\n\u001b[38;2;253;151;31m###\u001b[0m\u001b[38;2;253;151;31m \u001b[0m\u001b[38;2;253;151;31mH3\u001b[0m\n\u001b[38;2;253;151;31m####\u001b[0m\u001b[38;2;253;151;31m \u001b[0m\u001b[38;2;253;151;31mH4\u001b[0m\n\u001b[38;2;253;151;31m#####\u001b[0m\u001b[38;2;253;151;31m \u001b[0m\u001b[38;2;253;151;31mH5\u001b[0m\n\u001b[38;2;253;151;31m######\u001b[0m\u001b[38;2;253;151;31m \u001b[0m\u001b[38;2;253;151;31mH6\u001b[0m\n\n\u001b[1;38;2;249;38;114m**\u001b[0m\u001b[1;38;2;249;38;114mbold\u001b[0m\u001b[1;38;2;249;38;114m**\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;228;46;112m*\u001b[0m\u001b[3;38;2;228;46;112mitalic\u001b[0m\u001b[3;38;2;228;46;112m*\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m~~\u001b[0m\u001b[38;2;255;255;255mstrike\u001b[0m\u001b[38;2;255;255;255m~~\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m[\u001b[0m\u001b[38;2;255;255;255m~~\u001b[0m\u001b[1;38;2;249;38;114m**\u001b[0m\u001b[3;38;2;228;46;112m*\u001b[0m\u001b[3;38;2;228;46;112mlink\u001b[0m\u001b[3;38;2;228;46;112m*\u001b[0m\u001b[1;38;2;249;38;114m**\u001b[0m\u001b[38;2;255;255;255m~~\u001b[0m\u001b[38;2;255;255;255m]\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[4;38;2;166;226;46mhttps://guides.github.com/features/mastering-markdown/\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[1;38;2;249;38;114m__\u001b[0m\u001b[1;38;2;249;38;114mbold\u001b[0m\u001b[1;38;2;249;38;114m__\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;228;46;112m_\u001b[0m\u001b[3;38;2;228;46;112mitalic\u001b[0m\u001b[3;38;2;228;46;112m_\u001b[0m\n\n\u001b[38;2;119;119;119m*\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mUnordered\u001b[0m\n\u001b[38;2;119;119;119m*\u001b[0m\u001b[38;2;255;255;255m List\u001b[0m\n\u001b[38;2;255;255;255m  \u001b[0m\u001b[38;2;119;119;119m*\u001b[0m\u001b[38;2;255;255;255m With Indents\u001b[0m\n\u001b[38;2;255;255;255m  \u001b[0m\n\u001b[38;2;255;255;255m1\u001b[0m\u001b[38;2;119;119;119m.\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mOrdered\u001b[0m\n\u001b[38;2;255;255;255m2\u001b[0m\u001b[38;2;119;119;119m.\u001b[0m\u001b[38;2;255;255;255m List\u001b[0m\n\u001b[38;2;255;255;255m  \u001b[0m\u001b[38;2;255;255;255m3\u001b[0m\u001b[38;2;119;119;119m.\u001b[0m\u001b[38;2;255;255;255m With Indents\u001b[0m\n\u001b[38;2;255;255;255m  \u001b[0m\n\u001b[38;2;255;255;255m![\u001b[0m\u001b[38;2;255;255;255mMarkdown Logo\u001b[0m\u001b[38;2;255;255;255m]\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[4;38;2;166;226;46mhttps://upload.wikimedia.org/wikipedia/commons/4/48/Markdown-mark.svg\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\n\u001b[3;38;2;102;217;239m>\u001b[0m\u001b[3;38;2;102;217;239m quotes\u001b[0m\n\u001b[3;38;2;102;217;239m>\u001b[0m\u001b[3;38;2;102;217;239m and more\u001b[0m\n\n\u001b[38;2;236;53;51m`\u001b[0m\u001b[38;2;236;53;51mfn inline_code() -> String { \"inline code\".to_string() }\u001b[0m\u001b[38;2;236;53;51m`\u001b[0m\n\n\u001b[38;2;255;255;255m```\u001b[0m\u001b[38;2;190;132;255mrust\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[3;38;2;102;217;239mfn\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;166;226;46msyntax_highlighted\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;255;255;255mT\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;166;226;46mAsRef\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114m&\u001b[0m\u001b[3;38;2;102;217;239mstr\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[3;38;2;253;151;31mthing\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;255;255;255m T\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255mprintln!\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mThe best code has syntax highlighting: \u001b[0m\u001b[38;2;190;132;255m{}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m,\u001b[0m\u001b[38;2;255;255;255m thing\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\n\u001b[38;2;255;255;255m```\u001b[0m\n\n\u001b[38;2;119;119;119m-\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m[x] Task\u001b[0m\n\u001b[38;2;119;119;119m-\u001b[0m\u001b[38;2;255;255;255m [] Unfinished Task\u001b[0m\n\u001b[38;2;119;119;119m-\u001b[0m\u001b[38;2;255;255;255m [] Another unfinished task\u001b[0m\n\n\u001b[38;2;255;255;255mFirst Header \u001b[0m\u001b[38;2;255;255;255m|\u001b[0m\u001b[38;2;255;255;255m Second Header\u001b[0m\n\u001b[38;2;255;255;255m------------\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m|\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m-------------\u001b[0m\n\u001b[38;2;255;255;255mContent from cell 1 \u001b[0m\u001b[38;2;255;255;255m|\u001b[0m\u001b[38;2;255;255;255m Content from cell 2\u001b[0m\n\u001b[38;2;255;255;255mContent in the first column \u001b[0m\u001b[38;2;255;255;255m|\u001b[0m\u001b[38;2;255;255;255m Content in the second column\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Markdown/typescript.md",
    "content": "\u001b[38;2;253;151;31m#\u001b[0m\u001b[38;2;253;151;31m \u001b[0m\u001b[38;2;253;151;31mTypescript test\u001b[0m\n\n\u001b[38;2;255;255;255m```\u001b[0m\u001b[38;2;190;132;255mtypescript\u001b[0m\n\u001b[3;38;2;102;217;239menum\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;166;226;46mStatus\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mPending\u001b[0m\u001b[38;2;255;255;255m,\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mInProgress\u001b[0m\u001b[38;2;255;255;255m,\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mCompleted\u001b[0m\u001b[38;2;255;255;255m,\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[3;38;2;102;217;239minterface\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;166;226;46mTask\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mid\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;166;226;46mnumber\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mtitle\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;166;226;46mstring\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mstatus\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;166;226;46mStatus\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255massignee\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;166;226;46mstring\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[3;38;2;102;217;239mclass\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;166;226;46mTaskManager\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;166;226;46mT\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114mextends\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;166;226;46mTask\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;249;38;114mprivate\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mtasks\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;166;226;46mT\u001b[0m\u001b[38;2;255;255;255m[\u001b[0m\u001b[38;2;255;255;255m]\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m[\u001b[0m\u001b[38;2;255;255;255m]\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;166;226;46maddTask\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[3;38;2;253;151;31mtask\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;166;226;46mT\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;166;226;46mvoid\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255mthis\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mtasks\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;102;217;239mpush\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255mtask\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;166;226;46mgetTasksByStatus\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[3;38;2;253;151;31mstatus\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;166;226;46mStatus\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;166;226;46mT\u001b[0m\u001b[38;2;255;255;255m[\u001b[0m\u001b[38;2;255;255;255m]\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mthis\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mtasks\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;166;226;46mfilter\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[3;38;2;253;151;31mtask\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;102;217;239m=>\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mtask\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mstatus\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m===\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mstatus\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;249;38;114masync\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;166;226;46mfetchTasks\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;166;226;46mPromise\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;166;226;46mT\u001b[0m\u001b[38;2;255;255;255m[\u001b[0m\u001b[38;2;255;255;255m]\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Simulate async fetch\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114mnew\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;166;226;46mPromise\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[3;38;2;253;151;31mresolve\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;102;217;239m=>\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239msetTimeout\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;102;217;239m=>\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;166;226;46mresolve\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255mthis\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mtasks\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m,\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;190;132;255m500\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Type guard\u001b[0m\n\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;166;226;46misTask\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[3;38;2;253;151;31mobj\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;166;226;46many\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31mobj\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;166;226;46mTask\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114mtypeof\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mobj\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mid\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m===\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mnumber\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114mtypeof\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mobj\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mtitle\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m===\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mstring\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Usage\u001b[0m\n\u001b[3;38;2;102;217;239mconst\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mmanager\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114mnew\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;166;226;46mTaskManager\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;166;226;46mTask\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255mmanager\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;166;226;46maddTask\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mid\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;255;255;255m,\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mtitle\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mWrite docs\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m,\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mstatus\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mStatus\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mPending\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255mmanager\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;166;226;46maddTask\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mid\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;255;255;255m,\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mtitle\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mReview PR\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m,\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mstatus\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mStatus\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mInProgress\u001b[0m\u001b[38;2;255;255;255m,\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255massignee\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mAlice\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\n\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;249;38;114masync\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;102;217;239m=>\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[3;38;2;102;217;239mconst\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mallTasks\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114mawait\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mmanager\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;166;226;46mfetchTasks\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mallTasks\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;102;217;239mforEach\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[3;38;2;253;151;31mtask\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;102;217;239m=>\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;166;226;46misTask\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255mtask\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[3;38;2;166;226;46mconsole\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;102;217;239mlog\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m`\u001b[0m\u001b[38;2;230;219;116mTask #\u001b[0m\u001b[38;2;230;219;116m${\u001b[0m\u001b[38;2;255;255;255mtask\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116mid\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;230;219;116m: \u001b[0m\u001b[38;2;230;219;116m${\u001b[0m\u001b[38;2;255;255;255mtask\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116mtitle\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;230;219;116m [\u001b[0m\u001b[38;2;230;219;116m${\u001b[0m\u001b[38;2;255;255;255mStatus\u001b[0m\u001b[38;2;230;219;116m[\u001b[0m\u001b[38;2;255;255;255mtask\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116mstatus\u001b[0m\u001b[38;2;230;219;116m]\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;230;219;116m]\u001b[0m\u001b[38;2;230;219;116m`\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Type assertion\u001b[0m\n\u001b[3;38;2;102;217;239mconst\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255munknownValue\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;166;226;46munknown\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mid\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;255;255;255m,\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mtitle\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mTest\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m,\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mstatus\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mStatus\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mCompleted\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[3;38;2;102;217;239mconst\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255massertedTask\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255munknownValue\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114mas\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;166;226;46mTask\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[3;38;2;166;226;46mconsole\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;102;217;239mlog\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255massertedTask\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mtitle\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m```\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/MediaWiki/test.mediawiki",
    "content": "\u001b[38;2;253;151;31m=\u001b[0m\u001b[38;2;253;151;31m Heading 1 \u001b[0m\u001b[38;2;253;151;31m=\u001b[0m\n\u001b[38;2;253;151;31m==\u001b[0m\u001b[38;2;253;151;31m Heading 2 \u001b[0m\u001b[38;2;253;151;31m==\u001b[0m\n\u001b[38;2;253;151;31m===\u001b[0m\u001b[38;2;253;151;31m Heading 3 \u001b[0m\u001b[38;2;253;151;31m===\u001b[0m\n\u001b[38;2;253;151;31m====\u001b[0m\u001b[38;2;253;151;31m Heading 4 \u001b[0m\u001b[38;2;253;151;31m====\u001b[0m\n\u001b[38;2;253;151;31m=====\u001b[0m\u001b[38;2;253;151;31m Heading 5 \u001b[0m\u001b[38;2;253;151;31m=====\u001b[0m\n\u001b[38;2;248;248;242m====== Heading 6 ======\u001b[0m\n\n\u001b[38;2;253;151;31m==\u001b[0m\u001b[38;2;253;151;31m Lists \u001b[0m\u001b[38;2;253;151;31m==\u001b[0m\n\u001b[38;2;248;248;242m*\u001b[0m\u001b[38;2;248;248;242m Unordered\u001b[0m\n\u001b[38;2;248;248;242m*\u001b[0m\u001b[38;2;248;248;242m lists\u001b[0m\n\u001b[38;2;248;248;242m**\u001b[0m\u001b[38;2;248;248;242m with nested\u001b[0m\n\u001b[38;2;248;248;242m***\u001b[0m\u001b[38;2;248;248;242m elements\u001b[0m\n\n\u001b[38;2;248;248;242m#\u001b[0m\u001b[38;2;248;248;242m Ordered\u001b[0m\n\u001b[38;2;248;248;242m#\u001b[0m\u001b[38;2;248;248;242m lists\u001b[0m\n\u001b[38;2;248;248;242m##\u001b[0m\u001b[38;2;248;248;242m with nested\u001b[0m\n\u001b[38;2;248;248;242m###\u001b[0m\u001b[38;2;248;248;242m elements\u001b[0m\n\n\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m Description \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m lists with single definition\u001b[0m\n\n\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m Description\u001b[0m\n\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m lists\u001b[0m\n\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m with more\u001b[0m\n\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m definitions\u001b[0m\n\n\u001b[38;2;253;151;31m==\u001b[0m\u001b[38;2;253;151;31m Text formatting \u001b[0m\u001b[38;2;253;151;31m==\u001b[0m\n\u001b[38;2;248;248;242m''\u001b[0m\u001b[3;38;2;228;46;112mitalic text\u001b[0m\u001b[38;2;248;248;242m''\u001b[0m\n\n\u001b[38;2;248;248;242m'''\u001b[0m\u001b[1;38;2;249;38;114mbold text\u001b[0m\u001b[38;2;248;248;242m'''\u001b[0m\n\n\u001b[38;2;248;248;242m'''\u001b[0m\u001b[1;38;2;249;38;114m''\u001b[0m\u001b[3;38;2;228;46;112mbold italic text\u001b[0m\u001b[1;38;2;249;38;114m''\u001b[0m\u001b[38;2;248;248;242m'''\u001b[0m\n\n\u001b[38;2;253;151;31m==\u001b[0m\u001b[38;2;253;151;31m Links \u001b[0m\u001b[38;2;253;151;31m==\u001b[0m\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[4;38;2;166;226;46mhttps://www.wikipedia.org/\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mWikipedia\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\n\u001b[38;2;253;151;31m==\u001b[0m\u001b[38;2;253;151;31m Images \u001b[0m\u001b[38;2;253;151;31m==\u001b[0m\n\u001b[38;2;248;248;242m[[\u001b[0m\u001b[38;2;190;132;255mFile\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;190;132;255mMediaWiki-2020-logo.svg\u001b[0m\u001b[38;2;255;255;255m|\u001b[0m\u001b[38;2;249;38;114mthumb\u001b[0m\u001b[38;2;255;255;255m|\u001b[0m\u001b[38;2;230;219;116mMediaWiki logo\u001b[0m\u001b[38;2;248;248;242m]]\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/MemInfo/test.meminfo",
    "content": "\u001b[38;2;249;38;114mMemTotal\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m        1004892 kB\u001b[0m\n\u001b[38;2;249;38;114mMemFree\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m          109424 kB\u001b[0m\n\u001b[38;2;249;38;114mMemAvailable\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m     498032 kB\u001b[0m\n\u001b[38;2;249;38;114mBuffers\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m           66360 kB\u001b[0m\n\u001b[38;2;249;38;114mCached\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m           448344 kB\u001b[0m\n\u001b[38;2;249;38;114mSwapCached\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m            0 kB\u001b[0m\n\u001b[38;2;249;38;114mActive\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m           547076 kB\u001b[0m\n\u001b[38;2;249;38;114mInactive\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m         196864 kB\u001b[0m\n\u001b[38;2;249;38;114mActive(anon)\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m     249956 kB\u001b[0m\n\u001b[38;2;249;38;114mInactive(anon)\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m     7328 kB\u001b[0m\n\u001b[38;2;249;38;114mActive(file)\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m     297120 kB\u001b[0m\n\u001b[38;2;249;38;114mInactive(file)\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m   189536 kB\u001b[0m\n\u001b[38;2;249;38;114mUnevictable\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m       18516 kB\u001b[0m\n\u001b[38;2;249;38;114mMlocked\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m           18516 kB\u001b[0m\n\u001b[38;2;249;38;114mSwapTotal\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m             0 kB\u001b[0m\n\u001b[38;2;249;38;114mSwapFree\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m              0 kB\u001b[0m\n\u001b[38;2;249;38;114mDirty\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m               276 kB\u001b[0m\n\u001b[38;2;249;38;114mWriteback\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m             0 kB\u001b[0m\n\u001b[38;2;249;38;114mAnonPages\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m        247780 kB\u001b[0m\n\u001b[38;2;249;38;114mMapped\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m           168472 kB\u001b[0m\n\u001b[38;2;249;38;114mShmem\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m             19860 kB\u001b[0m\n\u001b[38;2;249;38;114mKReclaimable\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m      59128 kB\u001b[0m\n\u001b[38;2;249;38;114mSlab\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m             108616 kB\u001b[0m\n\u001b[38;2;249;38;114mSReclaimable\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m      59128 kB\u001b[0m\n\u001b[38;2;249;38;114mSUnreclaim\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m        49488 kB\u001b[0m\n\u001b[38;2;249;38;114mKernelStack\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m        2060 kB\u001b[0m\n\u001b[38;2;249;38;114mPageTables\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m         4232 kB\u001b[0m\n\u001b[38;2;249;38;114mNFS_Unstable\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m          0 kB\u001b[0m\n\u001b[38;2;249;38;114mBounce\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m                0 kB\u001b[0m\n\u001b[38;2;249;38;114mWritebackTmp\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m          0 kB\u001b[0m\n\u001b[38;2;249;38;114mCommitLimit\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m      502444 kB\u001b[0m\n\u001b[38;2;249;38;114mCommitted_AS\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m     678300 kB\u001b[0m\n\u001b[38;2;249;38;114mVmallocTotal\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m   34359738367 kB\u001b[0m\n\u001b[38;2;249;38;114mVmallocUsed\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m       10756 kB\u001b[0m\n\u001b[38;2;249;38;114mVmallocChunk\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m          0 kB\u001b[0m\n\u001b[38;2;249;38;114mPercpu\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m              784 kB\u001b[0m\n\u001b[38;2;249;38;114mHardwareCorrupted\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m     0 kB\u001b[0m\n\u001b[38;2;249;38;114mAnonHugePages\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m         0 kB\u001b[0m\n\u001b[38;2;249;38;114mShmemHugePages\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m        0 kB\u001b[0m\n\u001b[38;2;249;38;114mShmemPmdMapped\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m        0 kB\u001b[0m\n\u001b[38;2;249;38;114mFileHugePages\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m         0 kB\u001b[0m\n\u001b[38;2;249;38;114mFilePmdMapped\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m         0 kB\u001b[0m\n\u001b[38;2;249;38;114mCmaTotal\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m              0 kB\u001b[0m\n\u001b[38;2;249;38;114mCmaFree\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m               0 kB\u001b[0m\n\u001b[38;2;249;38;114mHugePages_Total\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m       0\u001b[0m\n\u001b[38;2;249;38;114mHugePages_Free\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m        0\u001b[0m\n\u001b[38;2;249;38;114mHugePages_Rsvd\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m        0\u001b[0m\n\u001b[38;2;249;38;114mHugePages_Surp\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m        0\u001b[0m\n\u001b[38;2;249;38;114mHugepagesize\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m       2048 kB\u001b[0m\n\u001b[38;2;249;38;114mHugetlb\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m               0 kB\u001b[0m\n\u001b[38;2;249;38;114mDirectMap4k\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m      118764 kB\u001b[0m\n\u001b[38;2;249;38;114mDirectMap2M\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m      929792 kB\u001b[0m\n\u001b[38;2;249;38;114mDirectMap1G\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m           0 kB\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/NAnt Build File/Default.build",
    "content": "\u001b[38;2;248;248;242m<?xml version=\"1.0\" encoding=\"UTF-8\"?>\u001b[0m\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mproject\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mParaesthesia.Tools.NAntTasks\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m default\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mall\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m verbose\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mfalse\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;117;113;94m<!--\u001b[0m\u001b[38;2;117;113;94m === ENVIRONMENT SETUP === \u001b[0m\u001b[38;2;117;113;94m-->\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mproperty\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mnant.settings.currentframework\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m value\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mnet-2.0\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtstamp\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114msysinfo\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mproperty\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mbuild.config\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m value\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mRelease\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mproperty\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mbuild.version\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m value\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m2.0.0.0\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mproperty\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mbuild.name\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m value\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mParaesthesia.Tools.NAntTasks\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mproperty\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mbuild.dir\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m value\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m${project::get-base-directory()}\\build\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mproperty\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mbuild.bin.dir\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m value\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m${build.dir}\\bin\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mproperty\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mbuild.doc.dir\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m value\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m${build.dir}\\doc\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mproperty\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mbuild.install.dir\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m value\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m${build.dir}\\install\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mproperty\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mbuild.log.dir\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m value\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m${build.dir}\\log\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;117;113;94m<!--\u001b[0m\u001b[38;2;117;113;94m === STANDARD TARGETS === \u001b[0m\u001b[38;2;117;113;94m-->\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtarget\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mall\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m depends\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mbuild-tasks test\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m description\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mBuilds all custom NAnt task projects.\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtarget\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mclean\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m description\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mRemove all compiled output folders.\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mecho\u001b[0m\u001b[38;2;166;226;46m message\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mRemoving build output folder...\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mdelete\u001b[0m\u001b[38;2;166;226;46m dir\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m${build.dir}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m failonerror\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mfalse\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m verbose\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mfalse\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mecho\u001b[0m\u001b[38;2;166;226;46m message\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mRemoving compilation artifact folders...\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mdelete\u001b[0m\u001b[38;2;166;226;46m failonerror\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mfalse\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m verbose\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mfalse\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mfileset\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mexclude\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mlib\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mexclude\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mlib\\**\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114minclude\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m**\\obj\\**\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114minclude\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m**\\bin\\**\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mfileset\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mdelete\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mecho\u001b[0m\u001b[38;2;166;226;46m message\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mClean complete.\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtarget\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtarget\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mtest\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m description\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mRun unit tests on this project.\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m depends\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mbuild-tests\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;117;113;94m<!--\u001b[0m\u001b[38;2;117;113;94m TODO: Run the unit tests \u001b[0m\u001b[38;2;117;113;94m-->\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtarget\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtarget\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mdoc\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m description\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mGenerates NDoc documentation.\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m depends\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mbuild-tasks\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mndoc\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114massemblies\u001b[0m\u001b[38;2;166;226;46m basedir\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m${build.bin.dir}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114minclude\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mParaesthesia.Tools.*.dll\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114massemblies\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114msummaries\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114minclude\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mNamespaceSummary.xml\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114msummaries\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mdocumenters\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mdocumenter\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mMSDN\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mproperty\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mAutoDocumentConstructors\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m value\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mTrue\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mproperty\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mAutoPropertyBackerSummaries\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m value\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mTrue\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mproperty\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mCollectionNamespace\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m value\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m${build.name} v${build.version}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mproperty\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mCopyrightHref\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m value\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mhttp://www.paraesthesia.com\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mproperty\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mCopyrightText\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m value\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mCopyright 2007 Travis Illig\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mproperty\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mDefaultTOC\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m value\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mEmpty\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mproperty\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mDeleteCHM\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m value\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mFalse\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mproperty\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mDocumentEmptyNamespaces\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m value\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mFalse\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mproperty\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mDocumentInternals\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m value\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mFalse\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mproperty\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mDocumentPrivates\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m value\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mFalse\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mproperty\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mDocumentProtected\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m value\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mTrue\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mproperty\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mGenerateCollectionFiles\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m value\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mTrue\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mproperty\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mHtmlHelpCompilerFilename\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m value\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mhhc.exe\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mproperty\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mHtmlHelpName\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m value\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m${build.name} v${build.version}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mproperty\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mIncludeAssemblyVersion\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m value\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mTrue\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mproperty\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mIncludeFavorites\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m value\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mTrue\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mproperty\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mIncludeHeirarchy\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m value\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mTrue\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mproperty\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mLinkToSdkDocVersion\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m value\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mSDK_v1_1\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mproperty\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mOmitObjectTags\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m value\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mFalse\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mproperty\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mOutputDirectory\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m value\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m${build.doc.dir}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mproperty\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mPlugInNamespace\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m value\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mms.vscc\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mproperty\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mRootPageContainsNamespaces\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m value\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mTrue\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mproperty\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mShowMissingParams\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m value\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mTrue\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mproperty\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mShowMissingRemarks\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m value\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mFalse\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mproperty\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mShowMissingReturns\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m value\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mTrue\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mproperty\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mShowMissingSummaries\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m value\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mTrue\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mproperty\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mShowMissingValues\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m value\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mTrue\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mproperty\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mShowVisualBasic\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m value\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mFalse\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mproperty\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mSortTOCByNamespace\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m value\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mTrue\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mproperty\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mSplitTOCs\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m value\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mFalse\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mproperty\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mTitle\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m value\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m${build.name} v${build.version}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mdocumenter\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mdocumenters\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mndoc\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mdelete\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mfileset\u001b[0m\u001b[38;2;166;226;46m basedir\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m${build.doc.dir}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114minclude\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m**/**\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mexclude\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m*.chm\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mfileset\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mdelete\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtarget\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtarget\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116minstall\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m description\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mCreates distribution packages.\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m depends\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mall\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mmkdir\u001b[0m\u001b[38;2;166;226;46m dir\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m${build.install.dir}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mzip\u001b[0m\u001b[38;2;166;226;46m verbose\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mtrue\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tzipfile=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m${build.install.dir}/${build.name}_${build.version}.zip\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tziplevel=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m9\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mfileset\u001b[0m\u001b[38;2;166;226;46m basedir\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m${build.dir}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114minclude\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m**\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mexclude\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m${build.install.dir}/**\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mexclude\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m${build.log.dir}/**\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mfileset\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mfileset\u001b[0m\u001b[38;2;166;226;46m basedir\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114minclude\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mreadme.txt\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mfileset\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mzip\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mzip\u001b[0m\u001b[38;2;166;226;46m verbose\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mtrue\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tzipfile=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m${build.install.dir}/${build.name}_${build.version}_src.zip\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tziplevel=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m9\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mfileset\u001b[0m\u001b[38;2;166;226;46m basedir\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114minclude\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m**\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mexclude\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m**/*.suo\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mexclude\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m**/*.user\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mexclude\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m**/*.cache\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mexclude\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m**/bin/**\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mexclude\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m**/build/**\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mexclude\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m**/lib/*.dll\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mexclude\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m**/obj/**\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mfileset\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mzip\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtarget\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtarget\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mproduction\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m description\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mExecutes the production build.\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m depends\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mclean set-version all test doc cleanup-build-output install\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mecho\u001b[0m\u001b[38;2;166;226;46m message\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mCompleted production build.\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtarget\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\n\n\u001b[38;2;248;248;242m\t\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;117;113;94m<!--\u001b[0m\u001b[38;2;117;113;94m === PREREQUISITE TASKS === \u001b[0m\u001b[38;2;117;113;94m-->\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtarget\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mbuild-tasks\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m description\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mBuilds the custom NAnt task solution.\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;117;113;94m<!--\u001b[0m\u001b[38;2;117;113;94m solution configuration=\"${build.config}\" outputdir=\"${build.bin.dir}\" solutionfile=\"Paraesthesia.Tools.NAntTasks.sln\" / \u001b[0m\u001b[38;2;117;113;94m-->\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mexec\u001b[0m\u001b[38;2;166;226;46m program\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mMSBuild.exe\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114marg\u001b[0m\u001b[38;2;166;226;46m value\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mParaesthesia.Tools.NAntTasks.sln\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114marg\u001b[0m\u001b[38;2;166;226;46m line\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m/p:Configuration=${build.config}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114marg\u001b[0m\u001b[38;2;166;226;46m line\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m/p:OutDir=&quot;${build.bin.dir}\\\\&quot;\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mexec\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtarget\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtarget\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mbuild-tests\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m description\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mBuilds the unit tests for the project.\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;117;113;94m<!--\u001b[0m\u001b[38;2;117;113;94m TODO: When there are unit tests, build them. \u001b[0m\u001b[38;2;117;113;94m-->\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtarget\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtarget\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mcleanup-build-output\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m description\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mCleans up the build output for archival.\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mecho\u001b[0m\u001b[38;2;166;226;46m message\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mCleaning up build output...\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mdelete\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mfileset\u001b[0m\u001b[38;2;166;226;46m basedir\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m${build.bin.dir}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114minclude\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m*\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mexclude\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mParaesthesia.Tools.*\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mfileset\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mdelete\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mecho\u001b[0m\u001b[38;2;166;226;46m message\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mBuild output cleaned up.  Only project output files remain.\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtarget\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtarget\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mset-version\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m description\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mUpdates the build assembly version.\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114masminfo\u001b[0m\u001b[38;2;166;226;46m output\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mAssemblyVersion.cs\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m language\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mCSharp\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mimports\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;166;226;46m namespace\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mSystem.Reflection\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mimports\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mattributes\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mattribute\u001b[0m\u001b[38;2;166;226;46m type\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mAssemblyVersionAttribute\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m value\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m${build.version}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mattribute\u001b[0m\u001b[38;2;166;226;46m type\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mAssemblyCompanyAttribute\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m value\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mParaesthesia\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mattribute\u001b[0m\u001b[38;2;166;226;46m type\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mAssemblyCopyrightAttribute\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;166;226;46m value\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m(c) 2007 - ${datetime::get-year(datetime::now())} Travis Illig\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mattributes\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mreferences\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114minclude\u001b[0m\u001b[38;2;166;226;46m name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mSystem.dll\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mreferences\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114masminfo\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtarget\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\n\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mproject\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/NSE/test.nse",
    "content": "\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m- Finds factorial of a number.\u001b[0m\n\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m @param value Number to find factorial.\u001b[0m\n\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m @return Factorial of number.\u001b[0m\n\u001b[38;2;249;38;114mlocal\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mfactorial\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mvalue\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mvalue\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mvalue\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mfactorial\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mvalue\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\u001b[38;2;249;38;114mend\u001b[0m\n\n\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m- Joins a table of strings into a new string.\u001b[0m\n\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m @param table Table of strings.\u001b[0m\n\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m @param separator Separator character.\u001b[0m\n\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m @return Joined string.\u001b[0m\n\u001b[38;2;249;38;114mlocal\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mjoin\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mtable\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mseparator\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mlocal\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdata\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mindex\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mvalue\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mipairs\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mtable\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mdo\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255mdata\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdata\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m..\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mvalue\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m..\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mseparator\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255mdata\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdata\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242msub\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdata\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242mlen\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdata\u001b[0m\n\u001b[38;2;249;38;114mend\u001b[0m\n\n\u001b[38;2;249;38;114mlocal\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255ma\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mfactorial\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255ma\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;249;38;114mlocal\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mb\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mjoin\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mu\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m,\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mb\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/NSIS/test.nsi",
    "content": "\u001b[38;2;117;113;94m/*\u001b[0m\n\u001b[38;2;117;113;94m * Multi-line\u001b[0m\n\u001b[38;2;117;113;94m * Comment\u001b[0m\n\u001b[38;2;117;113;94m \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Single-line comment\u001b[0m\n\u001b[38;2;117;113;94m;\u001b[0m\u001b[38;2;117;113;94m Another-single line comment\u001b[0m\n\n\u001b[38;2;117;113;94m;\u001b[0m\u001b[38;2;117;113;94m Includes\u001b[0m\n\u001b[38;2;249;38;114m!include\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mLogicLib.nsh\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\n\u001b[38;2;117;113;94m;\u001b[0m\u001b[38;2;117;113;94m Defines\u001b[0m\n\u001b[38;2;249;38;114m!define\u001b[0m\u001b[38;2;248;248;242m ARCHITECTURE \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mx64\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\n\u001b[38;2;117;113;94m;\u001b[0m\u001b[38;2;117;113;94m Compile time command\u001b[0m\n\u001b[38;2;249;38;114m!echo\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mBuilding \u001b[0m\u001b[38;2;190;132;255m${ARCHITECTURE}\u001b[0m\u001b[38;2;230;219;116m script\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\n\u001b[38;2;117;113;94m;\u001b[0m\u001b[38;2;117;113;94m Macro definition\u001b[0m\n\u001b[38;2;249;38;114m!macro\u001b[0m\u001b[38;2;248;248;242m SayHello name\u001b[0m\n\u001b[38;2;249;38;114m    !ifdef\u001b[0m\u001b[38;2;248;248;242m name\u001b[0m\n\u001b[38;2;249;38;114m        !echo\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mHello, \u001b[0m\u001b[38;2;190;132;255m${name}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;249;38;114m    !else\u001b[0m\n\u001b[38;2;249;38;114m        !echo\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mHello, world\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;249;38;114m    !endif\u001b[0m\n\u001b[38;2;249;38;114m!macroend\u001b[0m\n\n\u001b[38;2;117;113;94m;\u001b[0m\u001b[38;2;117;113;94m Macro usage\u001b[0m\n\u001b[38;2;249;38;114m!insertmacro\u001b[0m\u001b[38;2;248;248;242m SayHello \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mJohn Doe\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\n\u001b[38;2;117;113;94m;\u001b[0m\u001b[38;2;117;113;94m Settings\u001b[0m\n\u001b[38;2;249;38;114mName\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116minstaller_name\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;249;38;114mOutFile\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116minstaller_name.exe\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;249;38;114mRequestExecutionLevel\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46muser\u001b[0m\n\u001b[38;2;249;38;114mCRCCheck\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mon\u001b[0m\n\u001b[38;2;249;38;114mUnicode\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\n\n\u001b[38;2;249;38;114m!ifdef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m${ARCHITECTURE}\u001b[0m\n\u001b[38;2;249;38;114m  InstallDir\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m$PROGRAMFILES64\u001b[0m\u001b[38;2;230;219;116m\\installer_name\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;249;38;114m!else\u001b[0m\n\u001b[38;2;249;38;114m  InstallDir\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m$PROGRAMFILES\u001b[0m\u001b[38;2;230;219;116m\\installer_name\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;249;38;114m!endif\u001b[0m\n\n\u001b[38;2;117;113;94m;\u001b[0m\u001b[38;2;117;113;94m Pages\u001b[0m\n\u001b[38;2;249;38;114mPage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mcomponents\u001b[0m\n\u001b[38;2;249;38;114mPage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46minstfiles\u001b[0m\n\n\u001b[38;2;117;113;94m;\u001b[0m\u001b[38;2;117;113;94m Functions\u001b[0m\n\u001b[38;2;166;226;46mFunction\u001b[0m\u001b[38;2;248;248;242m PrintTestStrings\u001b[0m\n\u001b[38;2;249;38;114m  DetailPrint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mThe install button reads \u001b[0m\u001b[38;2;255;255;255m$(^InstallBtn)\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;249;38;114m  DetailPrint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mHere comes a\u001b[0m\u001b[38;2;190;132;255m$\\n\u001b[0m\u001b[38;2;190;132;255m$\\r\u001b[0m\u001b[38;2;230;219;116mline-break!\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\n\u001b[38;2;249;38;114m  DetailPrint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m`\u001b[0m\u001b[38;2;230;219;116mEscape the dollar-sign: \u001b[0m\u001b[38;2;190;132;255m$$\u001b[0m\u001b[38;2;230;219;116m`\u001b[0m\n\u001b[38;2;166;226;46mFunctionEnd\u001b[0m\n\n\u001b[38;2;117;113;94m;\u001b[0m\u001b[38;2;117;113;94m Sections\u001b[0m\n\u001b[38;2;166;226;46mSection\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116msection_name\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m section_index\u001b[0m\n\u001b[38;2;249;38;114m    Call\u001b[0m\u001b[38;2;248;248;242m PrintTestStrings    \u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m;\u001b[0m\u001b[38;2;117;113;94m NSIS plugin call\u001b[0m\n\u001b[3;38;2;166;226;46m    nsExec::ExecToLog\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mcalc.exe\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;166;226;46mSectionEnd\u001b[0m\n\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Ninja/test.ninja",
    "content": "\u001b[38;2;248;248;242mcflags \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m -Wall\u001b[0m\n\n\u001b[38;2;249;38;114mrule\u001b[0m\u001b[38;2;248;248;242m cc\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mcommand\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m gcc \u001b[0m\u001b[38;2;255;255;255m$cflags\u001b[0m\u001b[38;2;248;248;242m -c \u001b[0m\u001b[38;2;255;255;255m$in\u001b[0m\u001b[38;2;248;248;242m -o \u001b[0m\u001b[38;2;255;255;255m$out\u001b[0m\n\n\u001b[38;2;249;38;114mbuild\u001b[0m\u001b[38;2;248;248;242m foo.o\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m cc foo.c\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/OCaml/syntax-test.ml",
    "content": "\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255ms\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mhello world\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\n\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mint \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m87\u001b[0m\n\n\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mid\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mx\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m x\u001b[0m\n\n\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46madd\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mx\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31my\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m x \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m y\u001b[0m\n\n\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46madd'\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mx\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31my\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mleft\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m x \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mright\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m y \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\n\u001b[38;2;248;248;242m  x \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m y\u001b[0m\n\n\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46madd''\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mint -> int -> int \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mfun\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mx\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mfun\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31my\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;248;248;242m x \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m y\u001b[0m\n\n\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46munwrap_option\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mdefault\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mopt\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mmatch\u001b[0m\u001b[38;2;248;248;242m opt \u001b[0m\u001b[38;2;249;38;114mwith\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mNone\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;248;248;242m default\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mSome\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mv\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;248;248;242m v\u001b[0m\n\n\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mstring_of_bool\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mtrue\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mfalse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mfalse\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\n\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mis_a\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m c \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m'a'\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mfalse\u001b[0m\n\n\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m _ \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mPrintf.\u001b[0m\u001b[38;2;248;248;242mprintf \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m%s\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mhello\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m(\u001b[0m\u001b[38;2;190;132;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mPrintf.\u001b[0m\u001b[38;2;248;248;242mprintf \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m%s\u001b[0m\u001b[38;2;190;132;255m\\n\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mworld\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\n\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mx\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mref\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m _ \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m x \u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\n\u001b[38;2;249;38;114mtype\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mmy_bool \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTrue\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mFalse\u001b[0m\n\n\u001b[38;2;249;38;114mtype\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mshape \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mCircle\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mof\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mfloat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mSquare\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mof\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mfloat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mRectangle\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mof\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mfloat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mfloat\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;249;38;114mtype\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239muser \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242mlogin\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mstring\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242mpassword\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mstring\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;249;38;114mtype\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m'a my_ref \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mmutable \u001b[0m\u001b[38;2;248;248;242mref_value\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m'a\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m(:=)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mv\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m r.ref_value \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m v\u001b[0m\n\n\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m(+)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\n\n\u001b[38;2;249;38;114mexception\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mBad_value\u001b[0m\u001b[38;2;248;248;242m of \u001b[0m\u001b[3;38;2;102;217;239mstring\u001b[0m\n\n\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mbad_value_error\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31m()\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m raise \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;166;226;46mBad_value\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116myour value is bad and you should feel bad\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m(\u001b[0m\u001b[38;2;190;132;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mtry\u001b[0m\u001b[38;2;248;248;242m bad_value_error \u001b[0m\u001b[38;2;190;132;255m(\u001b[0m\u001b[38;2;190;132;255m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mwith\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mBad_value\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m_\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m(\u001b[0m\u001b[38;2;190;132;255m)\u001b[0m\n\n\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m(\u001b[0m\u001b[38;2;190;132;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mtry\u001b[0m\u001b[38;2;248;248;242m bad_value_error \u001b[0m\u001b[38;2;190;132;255m(\u001b[0m\u001b[38;2;190;132;255m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mwith\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mBad_value\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m_\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m(\u001b[0m\u001b[38;2;190;132;255m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mNot_found\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m(\u001b[0m\u001b[38;2;190;132;255m)\u001b[0m\n\n\u001b[38;2;249;38;114mmodule type \u001b[0m\u001b[38;2;166;226;46mFOO\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114msig\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mval\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mfoo\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m'a\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m'a\u001b[0m\n\u001b[38;2;249;38;114mend\u001b[0m\n\n\u001b[38;2;249;38;114mmodule\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mFoo\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mFOO\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mstruct\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mfoo\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mx\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m x\u001b[0m\n\u001b[38;2;249;38;114mend\u001b[0m\n\n\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mgreeter\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mobject\u001b[0m\n\u001b[38;2;248;248;242m  val greeting \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mHello\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mmethod\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mgreet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mname\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mPrintf.\u001b[0m\u001b[38;2;248;248;242msprintf \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m%s, %s!\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m greeting name \u001b[0m\n\u001b[38;2;249;38;114mend\u001b[0m\n\n\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mgreeting\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m greeter\u001b[0m\u001b[38;2;248;248;242m#\u001b[0m\u001b[38;2;248;248;242mgreet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mworld\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\n\u001b[38;2;249;38;114mclass\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mgreeter_factory\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mgreeting_text\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mobject\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;166;226;46mself\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  val greeting \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m greeting_text\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mmethod\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mgreet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mname\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mPrintf.\u001b[0m\u001b[38;2;248;248;242msprintf \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m%s, %s!\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m greeting name\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114minitializer\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mPrintf.\u001b[0m\u001b[38;2;248;248;242mprintf \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mObjects will greet the user with \u001b[0m\u001b[38;2;190;132;255m\\\"\u001b[0m\u001b[38;2;230;219;116m%s\u001b[0m\u001b[38;2;190;132;255m\\\"\u001b[0m\u001b[38;2;190;132;255m\\n\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m greeting\u001b[0m\n\u001b[38;2;249;38;114mend\u001b[0m\n\n\u001b[38;2;249;38;114mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mg\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mnew\u001b[0m\u001b[38;2;248;248;242m greeter_factory \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mHi\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Objective-C/test.m",
    "content": "\u001b[38;2;249;38;114m#import\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;230;219;116m<\u001b[0m\u001b[38;2;230;219;116mmyClass.h\u001b[0m\u001b[38;2;230;219;116m>\u001b[0m\n\u001b[38;2;248;248;242m@import Foundation\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Single line comments\u001b[0m\n\n\u001b[38;2;117;113;94m/*\u001b[0m\n\u001b[38;2;117;113;94m \u001b[0m\u001b[38;2;117;113;94m*\u001b[0m\u001b[38;2;117;113;94m Multi line comment\u001b[0m\n\u001b[38;2;117;113;94m \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\n\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mmain\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31margc\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mchar\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31margv\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[3;38;2;166;226;46mNSAutoreleasePool\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m pool \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;166;226;46mNSAutoreleasePool\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239malloc\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m init\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;102;217;239mNSLog\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m@\"\u001b[0m\u001b[38;2;230;219;116mStorage size for int : \u001b[0m\u001b[38;2;190;132;255m%d\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;190;132;255m\\n\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114msizeof\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;102;217;239mNSLog\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m@\"\u001b[0m\u001b[38;2;230;219;116mhello world\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255mNO\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;102;217;239mNSLog\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m@\"\u001b[0m\u001b[38;2;230;219;116mI am never run\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;102;217;239mNSLog\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m@\"\u001b[0m\u001b[38;2;230;219;116mI am also never run\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;102;217;239mNSLog\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m@\"\u001b[0m\u001b[38;2;230;219;116mI print\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mpool \u001b[0m\u001b[38;2;102;217;239mdrain\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[3;38;2;102;217;239m@\u001b[0m\u001b[3;38;2;102;217;239mimplementation\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mMyClass\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mlong\u001b[0m\u001b[38;2;248;248;242m distance\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;166;226;46mNSNumber\u001b[0m\u001b[38;2;248;248;242m height\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Objective-C++/test.mm",
    "content": "\u001b[38;2;249;38;114m#import\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;230;219;116m<\u001b[0m\u001b[38;2;230;219;116mFoundation/Foundation.h\u001b[0m\u001b[38;2;230;219;116m>\u001b[0m\n\n\u001b[3;38;2;102;217;239mclass\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;102;217;239mHello\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mprivate\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[3;38;2;102;217;239mid \u001b[0m\u001b[38;2;248;248;242mgreeting_text\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mpublic\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;166;226;46mHello\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m            greeting_text \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m@\"\u001b[0m\u001b[38;2;230;219;116mHello, world!\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;166;226;46mHello\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mchar\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31minitial_greeting_text\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m            greeting_text \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;166;226;46mNSString\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239malloc\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m initWithUTF8String\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242minitial_greeting_text\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[3;38;2;102;217;239mvoid\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46msay_hello\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;102;217;239mprintf\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;190;132;255m%s\u001b[0m\u001b[38;2;190;132;255m\\n\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mgreeting_text \u001b[0m\u001b[38;2;102;217;239mUTF8String\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[3;38;2;102;217;239m@\u001b[0m\u001b[3;38;2;102;217;239minterface\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mGreeting\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;4;38;2;166;226;46mNSObject\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114mprivate\u001b[0m\n\u001b[38;2;248;248;242m        Hello \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242mhello\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m- \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mid\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;166;226;46minit\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m- \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mvoid\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;166;226;46mdealloc\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m- \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mvoid\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;166;226;46msayGreeting\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m- \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mvoid\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;166;226;46msayGreeting\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mHello\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[3;38;2;253;151;31mgreeting\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[3;38;2;102;217;239m@\u001b[0m\u001b[3;38;2;102;217;239mend\u001b[0m\n\n\u001b[3;38;2;102;217;239m@\u001b[0m\u001b[3;38;2;102;217;239mimplementation\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mGreeting\u001b[0m\n\u001b[38;2;248;248;242m- \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mid\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;166;226;46minit\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255mself\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;255;255;255msuper\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239minit\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mself\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        hello \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mnew\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mHello\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mself\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m- \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mvoid\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;166;226;46mdealloc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mdelete\u001b[0m\u001b[38;2;248;248;242m hello\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;255;255;255msuper\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mdealloc\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m- \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mvoid\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;166;226;46msayGreeting\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    hello\u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;248;248;242msay_hello\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m- \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mvoid\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;166;226;46msayGreeting\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mHello\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[3;38;2;253;151;31mgreeting\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    greeting\u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;248;248;242msay_hello\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[3;38;2;102;217;239m@\u001b[0m\u001b[3;38;2;102;217;239mend\u001b[0m\n\n\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mmain\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;166;226;46mNSAutoreleasePool\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242mpool \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;166;226;46mNSAutoreleasePool\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239malloc\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m init\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    Greeting \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242mgreeting \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mGreeting \u001b[0m\u001b[38;2;102;217;239malloc\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m init\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mgreeting \u001b[0m\u001b[38;2;102;217;239msayGreeting\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m    Hello \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242mhello \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mnew\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mHello\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mBonjour, monde!\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mgreeting\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239msayGreeting\u001b[0m\u001b[38;2;102;217;239m:\u001b[0m\u001b[38;2;248;248;242mhello\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mdelete\u001b[0m\u001b[38;2;248;248;242m hello\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mgreeting \u001b[0m\u001b[38;2;102;217;239mrelease\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mpool \u001b[0m\u001b[38;2;102;217;239mrelease\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Odin/test.odin",
    "content": "\u001b[38;2;249;38;114mpackage\u001b[0m\u001b[38;2;248;248;242m main\u001b[0m\n\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mcore:fmt\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mcore:math\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\n\u001b[38;2;166;226;46mVector\u001b[0m\u001b[38;2;248;248;242m :: \u001b[0m\u001b[3;38;2;102;217;239mstruct\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m\tcomponents: \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[3;38;2;102;217;239mf64\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;166;226;46meuclidean_distance\u001b[0m\u001b[38;2;248;248;242m :: \u001b[0m\u001b[3;38;2;102;217;239mproc\u001b[0m\u001b[38;2;248;248;242m(v1: Vector, v2: Vector) -> \u001b[0m\u001b[3;38;2;102;217;239mf64\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mlen\u001b[0m\u001b[38;2;248;248;242m(v1.components) != \u001b[0m\u001b[38;2;102;217;239mlen\u001b[0m\u001b[38;2;248;248;242m(v2.components) {\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;102;217;239mpanic\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mVectors must be same dimension\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m\t}\u001b[0m\n\u001b[38;2;248;248;242m\tsum: \u001b[0m\u001b[3;38;2;102;217;239mf64\u001b[0m\u001b[38;2;248;248;242m = \u001b[0m\u001b[38;2;190;132;255m0.0\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m i, comp \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m v1.components {\u001b[0m\n\u001b[38;2;248;248;242m\t\tdiff := comp - v2.components[i];\u001b[0m\n\u001b[38;2;248;248;242m\t\tsum += diff * diff;\u001b[0m\n\u001b[38;2;248;248;242m\t}\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m math.\u001b[0m\u001b[38;2;102;217;239msqrt\u001b[0m\u001b[38;2;248;248;242m(sum);\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;166;226;46mmain\u001b[0m\u001b[38;2;248;248;242m :: \u001b[0m\u001b[3;38;2;102;217;239mproc\u001b[0m\u001b[38;2;248;248;242m() {\u001b[0m\n\u001b[38;2;248;248;242m\tv1: Vector = Vector{components = \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[3;38;2;102;217;239mf64\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;190;132;255m1.0\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m2.0\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3.0\u001b[0m\u001b[38;2;248;248;242m}};\u001b[0m\n\u001b[38;2;248;248;242m\tv2: Vector = Vector{components = \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[3;38;2;102;217;239mf64\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;190;132;255m4.0\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m6.0\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m8.0\u001b[0m\u001b[38;2;248;248;242m}};\u001b[0m\n\u001b[38;2;248;248;242m\tdist: \u001b[0m\u001b[3;38;2;102;217;239mf64\u001b[0m\u001b[38;2;248;248;242m = \u001b[0m\u001b[38;2;102;217;239meuclidean_distance\u001b[0m\u001b[38;2;248;248;242m(v1, v2);\u001b[0m\n\u001b[38;2;248;248;242m\tfmt.\u001b[0m\u001b[38;2;102;217;239mprintln\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mDistance:\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m, dist);\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/PHP/test.php",
    "content": "\u001b[38;2;248;248;242m<?php\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94mif this was md, i'll be a title\u001b[0m\n\n\u001b[38;2;102;217;239mdefine\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mCONSTANT\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m,\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;190;132;255m3.14\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;228;46;112mecho\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mCONSTANT\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94mam i a comment\u001b[0m\n\u001b[38;2;117;113;94m/*\u001b[0m\n\u001b[38;2;117;113;94m\tyes, and so am I too\u001b[0m\n\u001b[38;2;117;113;94m*/\u001b[0m\n\n\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94mvariable declaration\u001b[0m\n\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mvariable\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mwelcome\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mnumber\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mfloat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1.23\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mnothing\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mnull\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mtruth\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mlies\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mfalse\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mnumberone\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mnumbertwo\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94moperators\u001b[0m\n\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mthird\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mnumberone\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mnumbertwo\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mthird\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mnumberone\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mnumbertwo\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mthird\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mnumberone\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mnumbertwo\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mthird\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mnumberone\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m/\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mnumbertwo\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mthird\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mnumberone\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m%\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mnumbertwo\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mthird\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mnumberone\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mnumbertwo\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mnumberone\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mnumbertwo\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;228;46;112mecho\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mvariable\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;228;46;112mecho\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mYou are \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mvariable\u001b[0m\u001b[38;2;230;219;116m!\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;228;46;112mecho\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mWe are \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mvariable\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116ms!\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mnumberone\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m||\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mnumberone\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mnumberone\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m!=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2.5\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;228;46;112mecho\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mwhat a number!!!\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mnumberone\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mand\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mnumberone\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mand\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mnumberone\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m!=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2.5\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;228;46;112mecho\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116msomething is wrong, this is supposed to be impossible\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mnumber\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mlanguages\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;228;46;112marray\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mHTML\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mCSS\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mJS\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;102;217;239mprint_r\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mlanguages\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;228;46;112mecho\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mlanguages\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;228;46;112mprint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mlanguages\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mnumber\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;249;38;114melseif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mnumber\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[3;38;2;249;38;114mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mfavMovie\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;228;46;112mecho\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mJUMAJI\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255mfavMovie\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;249;38;114mswitch\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mnumber\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;228;46;112mecho\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mfours\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;249;38;114mbreak\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;249;38;114mdefault\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;228;46;112mecho\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mI dont know you\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;249;38;114mwhile\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mnumber\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m6\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;228;46;112mecho\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mnumber\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mnumber\u001b[0m\u001b[38;2;249;38;114m++\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mnumber\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;249;38;114mdo\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mnumber\u001b[0m\u001b[38;2;249;38;114m++\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mwhile\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mnumber\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m10\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mhouses\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mhouses\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mhousees\u001b[0m\u001b[38;2;249;38;114m++\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;249;38;114mbreak\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;228;46;112mecho\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mgetting more houses\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\n\u001b[3;38;2;166;226;46mclass\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;102;217;239mPerson\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;249;38;114mpublic\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mname\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;249;38;114mpublic\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mage\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[3;38;2;249;38;114mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239m__construct\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;255;255;255m$\u001b[0m\u001b[3;38;2;253;151;31mname\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mthis\u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;255;255;255mname\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mname\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[3;38;2;249;38;114mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239m__destruct\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;228;46;112mecho\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mOn my way out\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[3;38;2;249;38;114mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239msetName\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;255;255;255m$\u001b[0m\u001b[3;38;2;253;151;31mname\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mthis\u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;255;255;255mname\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mname\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mdoe\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;246;170;17mnew\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mPerson\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mJohn Do\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mdoe\u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;248;248;242msetName\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mJohn Doe\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\n\n\n\n\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mending\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m ? \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116myep\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m : \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mnah\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m?>\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Pascal/test.pas",
    "content": "\u001b[38;2;249;38;114mprogram\u001b[0m\u001b[38;2;248;248;242m Hello;\u001b[0m\n\u001b[38;2;249;38;114muses\u001b[0m\u001b[38;2;248;248;242m crt;\u001b[0m\n\n\u001b[38;2;249;38;114mtype\u001b[0m\u001b[38;2;248;248;242m str = string[\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m];\u001b[0m\n\u001b[38;2;248;248;242m     arr = \u001b[0m\u001b[38;2;249;38;114marray\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m..\u001b[0m\u001b[38;2;190;132;255m20\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m..\u001b[0m\u001b[38;2;190;132;255m60\u001b[0m\u001b[38;2;248;248;242m] \u001b[0m\u001b[38;2;249;38;114mof\u001b[0m\u001b[38;2;248;248;242m char;\u001b[0m\n\n\u001b[38;2;249;38;114mvar\u001b[0m\u001b[38;2;248;248;242m x, y:integer;\u001b[0m\n\u001b[38;2;248;248;242m    carr:arr;\u001b[0m\n\u001b[38;2;248;248;242m    c:char;\u001b[0m\n\n\u001b[3;38;2;102;217;239mProcedure\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mstart\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;117;113;94m{\u001b[0m\u001b[38;2;117;113;94mcomment here\u001b[0m\u001b[38;2;117;113;94m}\u001b[0m\n\u001b[38;2;249;38;114mbegin\u001b[0m\u001b[38;2;248;248;242m write (\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m Press enter to begin. \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\u001b[38;2;248;248;242mreadln;\u001b[0m\n\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[3;38;2;102;217;239mFunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mValid\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;249;38;114mvar\u001b[0m\u001b[38;2;248;248;242m choice:char): boolean;\u001b[0m\n\u001b[38;2;249;38;114mbegin\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242m    valid:= false;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;248;248;242m choice \u001b[0m\u001b[38;2;249;38;114mof\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m:valid:= true;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m2\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m: valid:= true;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m3\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m: valid:= true;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m4\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m: valid:= true;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m5\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m: valid:= true;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m6\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m: valid:= true;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;249;38;114mbegin\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m y:=\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mto\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mdo\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\n\u001b[38;2;248;248;242m        writeln (y);\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mrepeat\u001b[0m\n\u001b[38;2;248;248;242m        writeln(y);\u001b[0m\n\u001b[38;2;248;248;242m        y := y + \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114muntil\u001b[0m\u001b[38;2;248;248;242m y > \u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    writeln (\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mHello World\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Passwd/passwd",
    "content": "\u001b[38;2;249;38;114mroot\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;166;226;46mroot\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m/root\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[3;38;2;253;151;31m/bin/bash\u001b[0m\n\u001b[38;2;249;38;114mdaemon\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;166;226;46mdaemon\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m/usr/sbin\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[3;38;2;253;151;31m/usr/sbin/nologin\u001b[0m\n\u001b[38;2;249;38;114mnobody\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m65534\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m65534\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;166;226;46mnobody\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m/nonexistent\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[3;38;2;253;151;31m/usr/sbin/nologin\u001b[0m\n\u001b[38;2;249;38;114msyslog\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m104\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m106\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;230;219;116m/nonexistent\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[3;38;2;253;151;31m/usr/sbin/nologin\u001b[0m\n\u001b[38;2;249;38;114msshd\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m109\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m65534\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;230;219;116m/run/sshd\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[3;38;2;253;151;31m/usr/sbin/nologin\u001b[0m\n\u001b[38;2;249;38;114mreima\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;240mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m1000\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m1000\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;166;226;46m,,,\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;230;219;116m/home/reima\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[3;38;2;253;151;31m/bin/bash\u001b[0m\n\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Perl/test.pl",
    "content": "\u001b[3;38;2;117;113;94m#\u001b[0m\u001b[3;38;2;117;113;94m Perl Test\u001b[0m\n\u001b[3;38;2;117;113;94m#\u001b[0m\u001b[3;38;2;117;113;94m By saul-bt\u001b[0m\n\u001b[3;38;2;117;113;94m#\u001b[0m\u001b[3;38;2;117;113;94m PUBLIC DOMAIN\u001b[0m\n\n\u001b[38;2;249;38;114muse\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;166;226;46mstrict\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;249;38;114muse\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;166;226;46mwarnings\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[3;38;2;117;113;94m##\u001b[0m\u001b[3;38;2;117;113;94m REFERENCES ##\u001b[0m\n\u001b[3;38;2;102;217;239mmy\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;228;46;112m@\u001b[0m\u001b[38;2;255;255;255mcolors\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mred\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mgreen\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mblue\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[3;38;2;117;113;94m#\u001b[0m\u001b[3;38;2;117;113;94m '\\' can be used to get a reference\u001b[0m\n\u001b[3;38;2;102;217;239mmy\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mcolorsRef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m\\\u001b[0m\u001b[38;2;228;46;112m@\u001b[0m\u001b[38;2;255;255;255mcolors\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[3;38;2;102;217;239mmy\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;228;46;112m%\u001b[0m\u001b[38;2;255;255;255msuperHash\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mcolors\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mcolorsRef\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;117;113;94m#\u001b[0m\u001b[3;38;2;117;113;94m Also you can create an anonymous\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;117;113;94m#\u001b[0m\u001b[3;38;2;117;113;94m array with '[]' ({} for hashes)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;117;113;94m#\u001b[0m\u001b[3;38;2;117;113;94m that returns the reference\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mnumbers\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[3;38;2;117;113;94m#\u001b[0m\u001b[3;38;2;117;113;94m Now the hash stores something like\u001b[0m\n\u001b[3;38;2;117;113;94m#\u001b[0m\u001b[3;38;2;117;113;94m this: (\"colors\", ARRAY(0x...),\u001b[0m\n\u001b[3;38;2;117;113;94m#\u001b[0m\u001b[3;38;2;117;113;94m        \"numbers\", ARRAY(0x...))\u001b[0m\n\n\u001b[3;38;2;117;113;94m#\u001b[0m\u001b[3;38;2;117;113;94m And you can access these arrays with:\u001b[0m\n\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mqq\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255msuperHash\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mcolors\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\u001b[38;2;220;50;47m\\n\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[3;38;2;117;113;94m#\u001b[0m\u001b[3;38;2;117;113;94m To print an element:\u001b[0m\n\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mqq\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114m$\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255msuperHash\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mnumbers\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;220;50;47m\\n\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255msuperHash\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mcolors\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;220;50;47m\\n\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[3;38;2;117;113;94m#\u001b[0m\u001b[3;38;2;117;113;94m Size of array:\u001b[0m\n\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mscalar\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255msuperHash\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mcolors\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\n\u001b[3;38;2;117;113;94m##\u001b[0m\u001b[3;38;2;117;113;94m ARRAYS ##\u001b[0m\n\u001b[38;2;228;46;112m%\u001b[0m\u001b[38;2;255;255;255mmeh1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255mnum\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mval\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;228;46;112m%\u001b[0m\u001b[38;2;255;255;255mmeh2\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;190;132;255mnum\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;190;132;255mval\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\n\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;228;46;112m@\u001b[0m\u001b[38;2;255;255;255mmehs\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114m\\\u001b[0m\u001b[38;2;228;46;112m%\u001b[0m\u001b[38;2;255;255;255mmeh1\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m\\\u001b[0m\u001b[38;2;228;46;112m%\u001b[0m\u001b[38;2;255;255;255mmeh2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mmehs\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;190;132;255mval\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\n\u001b[3;38;2;117;113;94m##\u001b[0m\u001b[3;38;2;117;113;94m HANDLERS & HEREDOC ##\u001b[0m\n\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mWhat's your name? \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mname\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;230;219;116mSTDIN\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;102;217;239mchomp\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mname\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<<\u001b[0m\u001b[38;2;249;38;114mWELCOME\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;230;219;116mHi \u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mname\u001b[0m\u001b[38;2;230;219;116m, Where are you from?\u001b[0m\n\u001b[38;2;249;38;114mWELCOME\u001b[0m\n\n\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mplace\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;230;219;116mSTDIN\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;102;217;239mchomp\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mplace\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<<\u001b[0m\u001b[38;2;249;38;114mGOODBYE\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;230;219;116mOh, you are \u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mname\u001b[0m\u001b[38;2;230;219;116m from \u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mplace\u001b[0m\u001b[38;2;230;219;116m...\u001b[0m\n\u001b[38;2;230;219;116mI hear that \u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mplace\u001b[0m\u001b[38;2;230;219;116m is a beautiful place.\u001b[0m\n\u001b[38;2;230;219;116mIt's nice meet people like you \u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mname\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\n\u001b[38;2;230;219;116mI hope to see you soon :)\u001b[0m\n\n\u001b[38;2;230;219;116mBye \u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mname\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\n\u001b[38;2;249;38;114mGOODBYE\u001b[0m\n\n\u001b[38;2;102;217;239mopen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255mcontent\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m<\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mfile.txt\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mline\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;230;219;116mcontent\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mline\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mWhat are you looking for? \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mnumResults\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mword\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;230;219;116mSTDIN\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;102;217;239mchomp\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mword\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mline\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mline\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=~\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mm\u001b[0m\u001b[38;2;248;248;242m/\u001b[0m\u001b[38;2;249;38;114m\\b\u001b[0m\u001b[38;2;249;38;114m$\u001b[0m\u001b[38;2;246;170;17mw\u001b[0m\u001b[38;2;246;170;17mo\u001b[0m\u001b[38;2;246;170;17mr\u001b[0m\u001b[38;2;246;170;17md\u001b[0m\u001b[38;2;249;38;114m\\b\u001b[0m\u001b[38;2;248;248;242m/\u001b[0m\u001b[38;2;190;132;255mi\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mnumResults\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m[\u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mword\u001b[0m\u001b[38;2;230;219;116m FOUND]> \u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mline\u001b[0m\u001b[38;2;220;50;47m\\n\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mnext\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mline\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;220;50;47m\\n\u001b[0m\u001b[38;2;220;50;47m\\n\u001b[0m\u001b[38;2;230;219;116m=== There are \u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mnumResults\u001b[0m\u001b[38;2;230;219;116m coincidences ===\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\n\u001b[3;38;2;117;113;94m##\u001b[0m\u001b[3;38;2;117;113;94m SCRIPT ARGUMENTS ##\u001b[0m\n\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mnargs\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;228;46;112m$#\u001b[0m\u001b[38;2;255;255;255mARGV\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mThere are \u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mnargs\u001b[0m\u001b[38;2;230;219;116m arguments:\u001b[0m\u001b[38;2;220;50;47m\\n\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255marg\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;228;46;112m@\u001b[0m\u001b[38;2;255;255;255mARGV\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m- \u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255marg\u001b[0m\u001b[38;2;220;50;47m\\n\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[3;38;2;117;113;94m##\u001b[0m\u001b[3;38;2;117;113;94m REGEX STUFF ##\u001b[0m\n\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mPerl is cool\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=~\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mm\u001b[0m\u001b[38;2;248;248;242m/\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;246;170;17mPp\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;246;170;17me\u001b[0m\u001b[38;2;246;170;17mr\u001b[0m\u001b[38;2;246;170;17ml\u001b[0m\u001b[38;2;248;248;242m/\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mYeah\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;249;38;114melsif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=~\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mm\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;246;170;17mp\u001b[0m\u001b[38;2;246;170;17me\u001b[0m\u001b[38;2;246;170;17mr\u001b[0m\u001b[38;2;246;170;17ml\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;190;132;255mi\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mSad\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mMEH\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[3;38;2;117;113;94m#\u001b[0m\u001b[3;38;2;117;113;94m From my dummy recreation of printf\u001b[0m\n\u001b[3;38;2;249;38;114msub\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mcheckTypes\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mmy\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;228;46;112m@\u001b[0m\u001b[38;2;255;255;255mpercents\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[38;2;102;217;239mscalar\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mshift\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mmy\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;228;46;112m@\u001b[0m\u001b[38;2;255;255;255margs\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[38;2;102;217;239mscalar\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mshift\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mmy\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255msize\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mscalar\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;228;46;112m@\u001b[0m\u001b[38;2;255;255;255mpercents\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mforeach\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mmy\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m..\u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255msize\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[3;38;2;102;217;239mmy\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mcurrArg\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255margs\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mn\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[3;38;2;102;217;239mmy\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mcurrFormat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239msubstr\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mpercents\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mn\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mcurrFormat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114meq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mcurrArg\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=~\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mm\u001b[0m\u001b[38;2;248;248;242m/\u001b[0m\u001b[38;2;249;38;114m^\u001b[0m\u001b[38;2;249;38;114m\\D\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;249;38;114m$\u001b[0m\u001b[38;2;248;248;242m/\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m||\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mcurrFormat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=~\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mm\u001b[0m\u001b[38;2;248;248;242m/\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;246;170;17mdx\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m/\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mcurrArg\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=~\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mm\u001b[0m\u001b[38;2;248;248;242m/\u001b[0m\u001b[38;2;249;38;114m^\u001b[0m\u001b[38;2;249;38;114m\\d\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;249;38;114m$\u001b[0m\u001b[38;2;248;248;242m/\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m||\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mcurrFormat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114meq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116mf\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mcurrArg\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=~\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mm\u001b[0m\u001b[38;2;248;248;242m/\u001b[0m\u001b[38;2;249;38;114m^\u001b[0m\u001b[38;2;249;38;114m\\d\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m?:\u001b[0m\u001b[38;2;190;132;255m\\.\u001b[0m\u001b[38;2;249;38;114m\\d\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;249;38;114m$\u001b[0m\u001b[38;2;248;248;242m/\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mor\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mdie\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mcurrArg\u001b[0m\u001b[38;2;230;219;116m' can't be formatted as '\u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mcurrFormat\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[3;38;2;117;113;94m##\u001b[0m\u001b[3;38;2;117;113;94m WEIRD STUFF (JAPH) ##\u001b[0m\n\u001b[3;38;2;117;113;94m#\u001b[0m\u001b[3;38;2;117;113;94m VMS <3\u001b[0m\n\u001b[38;2;249;38;114mnot\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mexp\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mlog\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239msrand\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mxor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239ms\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mqq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mqx\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mxor\u001b[0m\n\u001b[38;2;102;217;239ms\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mx\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mx\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mlength\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239muc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mord\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mand\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mchr\u001b[0m\n\u001b[38;2;102;217;239mord\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mqw\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mjoin\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114muse\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;166;226;46msub\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mtied\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mqx\u001b[0m\n\u001b[38;2;249;38;114mxor\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239meval\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;249;38;114mxor\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mqq\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mq\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mq\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;249;38;114mxor\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mint\u001b[0m\n\u001b[38;2;102;217;239meval\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mlc\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mq\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mm\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mcos\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;249;38;114mand\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mchr\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mord\u001b[0m\n\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mqw\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239my\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mabs\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;249;38;114mne\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mopen\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mtied\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mhex\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mexp\u001b[0m\n\u001b[38;2;102;217;239mref\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239my\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mm\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;249;38;114mxor\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mscalar\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239msrand\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mqq\u001b[0m\n\u001b[38;2;102;217;239mq\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mq\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;249;38;114mxor\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mint\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239meval\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mlc\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mqq\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239my\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239msqrt\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mcos\u001b[0m\n\u001b[38;2;249;38;114mand\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mchr\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mord\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mqw\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;249;38;114mx\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mprintf\u001b[0m\n\u001b[38;2;102;217;239meach\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[3;38;2;102;217;239mlocal\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;249;38;114mx\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239my\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;249;38;114mor\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mqq\u001b[0m\n\u001b[38;2;102;217;239ms\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239ms\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;249;38;114mand\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239meval\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mq\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239ms\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mundef\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;249;38;114mor\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239moct\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;249;38;114mxor\u001b[0m\n\u001b[38;2;102;217;239mtime\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;249;38;114mxor\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mref\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mchr\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mint\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mord\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mlc\u001b[0m\n\u001b[38;2;249;38;114mforeach\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mqw\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239my\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mhex\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239malarm\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mchdir\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239mkill\u001b[0m\n\u001b[38;2;102;217;239mexec\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239my\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239ms\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;249;38;114mgt\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239msin\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239msort\u001b[0m\u001b[38;2;190;132;255m \u001b[0m\u001b[38;2;102;217;239msplit\u001b[0m\n\n\u001b[38;2;228;46;112m@\u001b[0m\u001b[38;2;255;255;255mP\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;102;217;239msplit\u001b[0m\u001b[38;2;190;132;255m/\u001b[0m\u001b[38;2;190;132;255m/\u001b[0m\u001b[38;2;190;132;255m,\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m.URRUU\u001b[0m\u001b[38;2;220;50;47m\\c\u001b[0m\u001b[38;2;230;219;116m8R\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;228;46;112m@\u001b[0m\u001b[38;2;255;255;255md\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;102;217;239msplit\u001b[0m\u001b[38;2;248;248;242m/\u001b[0m\u001b[38;2;248;248;242m/\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;220;50;47m\\n\u001b[0m\u001b[38;2;230;219;116mrekcah xinU / lreP rehtona tsuJ\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[3;38;2;249;38;114msub\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mp\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;228;46;112m@\u001b[0m\u001b[38;2;255;255;255mp\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mp\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mu\u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mp\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255mP\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255mP\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;102;217;239mpipe\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mp\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mu\u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mp\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;249;38;114m++\u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mp\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mq\u001b[0m\u001b[38;2;249;38;114m*=\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mf\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;249;38;114m!\u001b[0m\u001b[38;2;102;217;239mfork\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;102;217;239mmap\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mP\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mP\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mf\u001b[0m\u001b[38;2;249;38;114m^\u001b[0m\u001b[38;2;102;217;239mord\u001b[0m\n\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mp\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255m_\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114m&\u001b[0m\u001b[38;2;190;132;255m6\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mp\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255m_\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m/\u001b[0m\u001b[38;2;246;170;17m \u001b[0m\u001b[38;2;249;38;114m^\u001b[0m\u001b[38;2;249;38;114m$\u001b[0m\u001b[38;2;246;170;17mP\u001b[0m\u001b[38;2;248;248;242m/\u001b[0m\u001b[38;2;190;132;255mix\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mP\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;102;217;239mclose\u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255m_\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;102;217;239mkeys\u001b[0m\u001b[38;2;228;46;112m%\u001b[0m\u001b[38;2;255;255;255mp\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242mp\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242mp\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242mp\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242mp\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242mp\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;102;217;239mmap\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mp\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255m_\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;249;38;114m=~\u001b[0m\u001b[38;2;248;248;242m/\u001b[0m\u001b[38;2;249;38;114m^\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;246;170;17mP.\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m/\u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\n\u001b[38;2;102;217;239mclose\u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255m_\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;228;46;112m%\u001b[0m\u001b[38;2;255;255;255mp\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;249;38;114mwait\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114muntil\u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255m?\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;102;217;239mmap\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m/\u001b[0m\u001b[38;2;249;38;114m^\u001b[0m\u001b[38;2;246;170;17mr\u001b[0m\u001b[38;2;248;248;242m/\u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255m_\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;228;46;112m%\u001b[0m\u001b[38;2;255;255;255mp\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255m_\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255md\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;228;46;112m$\u001b[0m\u001b[38;2;255;255;255mq\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;102;217;239msleep\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mrand\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m/\u001b[0m\u001b[38;2;249;38;114m\\S\u001b[0m\u001b[38;2;248;248;242m/\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;102;217;239mprint\u001b[0m\n\n\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;249;38;114m=~\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116m(?{\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116m-)@.)@_*([]@!@/)(@)@-@),@(@@+@)\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\n\u001b[38;2;249;38;114m^\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116m][)@]`}`]()`@.@]@%[`}%[@`@!#@%[\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116m,\"})\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Plaintext/plaintext.txt",
    "content": "\u001b[38;2;166;226;46m␀\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m␁\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m␂\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m␃\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m␄\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m␅\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m␆\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;166;226;46m␇\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;166;226;46m␈\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;190;132;255m├──┤\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m␋\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m␌\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m␎\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m␏\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m␐\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m␑\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m␒\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m␓\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m␔\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m␕\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m␖\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m␗\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m␘\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m␙\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m␚\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;166;226;46m␛\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m␜\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m␝\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m␞\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m␟\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;102;217;239m·\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m!\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m\"\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m#\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m$\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m%\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m&\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m'\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m*\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m+\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m-\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m/\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m0\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m1\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m2\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m3\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m4\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m5\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m6\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m7\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m8\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m9\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m<\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m?\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m@\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242mA\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242mB\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242mC\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242mD\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242mE\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242mF\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242mG\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242mH\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242mI\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242mJ\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242mK\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242mL\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242mM\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242mN\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242mO\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242mP\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242mQ\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242mR\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242mS\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242mT\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242mU\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242mV\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242mW\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242mX\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242mY\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242mZ\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m\\\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m^\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m_\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m`\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242ma\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242mb\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242mc\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242md\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242me\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242mf\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242mg\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242mh\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242mj\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242mk\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242ml\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242mm\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242mn\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242mo\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242mp\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242mq\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242mr\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242ms\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242mt\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242mu\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242mv\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242mw\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242mx\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242my\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242mz\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m|\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m~\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242m␡\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;117;113;94m\\u{80}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;117;113;94m\\u{81}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;117;113;94m\\u{82}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;117;113;94m\\u{83}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;117;113;94m\\u{84}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;117;113;94m\\u{85}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;117;113;94m\\u{86}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;117;113;94m\\u{87}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;117;113;94m\\u{88}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;117;113;94m\\u{89}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;117;113;94m\\u{8a}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;117;113;94m\\u{8b}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;117;113;94m\\u{8c}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;117;113;94m\\u{8d}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;117;113;94m\\u{8e}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;117;113;94m\\u{8f}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;117;113;94m\\u{90}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;117;113;94m\\u{91}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;117;113;94m\\u{92}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;117;113;94m\\u{93}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;117;113;94m\\u{94}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;117;113;94m\\u{95}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;117;113;94m\\u{96}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;117;113;94m\\u{97}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;117;113;94m\\u{98}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;117;113;94m\\u{99}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;117;113;94m\\u{9a}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;117;113;94m\\u{9b}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;117;113;94m\\u{9c}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;117;113;94m\\u{9d}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;117;113;94m\\u{9e}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;117;113;94m\\u{9f}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;117;113;94m\\u{a0}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;117;113;94m\\u{a1}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;117;113;94m\\u{a2}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;117;113;94m\\u{a3}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;117;113;94m\\u{a4}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;117;113;94m\\u{a5}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;117;113;94m\\u{a6}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;117;113;94m\\u{a7}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;117;113;94m\\u{a8}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;117;113;94m\\u{a9}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;117;113;94m\\u{aa}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;117;113;94m\\u{ab}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;117;113;94m\\u{ac}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;117;113;94m\\u{ad}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;117;113;94m\\u{ae}\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;249;38;114m␊\u001b[0m\n\u001b[38;2;248;248;242mHere's\u001b[0m\u001b[38;2;102;217;239m·\u001b[0m\u001b[38;2;248;248;242ma\u001b[0m\u001b[38;2;102;217;239m·\u001b[0m\u001b[38;2;248;248;242mline\u001b[0m\u001b[38;2;102;217;239m·\u001b[0m\u001b[38;2;248;248;242mwith\u001b[0m\u001b[38;2;102;217;239m·\u001b[0m\u001b[38;2;248;248;242mmultiple\u001b[0m\u001b[38;2;102;217;239m·\u001b[0m\u001b[38;2;248;248;242mcharacters.\u001b[0m\u001b[38;2;249;38;114m␊\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/PowerShell/test.ps1",
    "content": "\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m PowerShell script for testing syntax highlighting\u001b[0m\n\n\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mGet-FutureTime\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mparam\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;102;217;239mInt32\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mMinutes\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mtime\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mGet-Date\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m%\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;248;248;242m_\u001b[0m\u001b[38;2;255;255;255m.AddMinutes\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mMinutes\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m{0:d2}:{1:d2}:{2:d2}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-f\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mtime\u001b[0m\u001b[38;2;255;255;255m.hour\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mtime\u001b[0m\u001b[38;2;255;255;255m.minute\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mtime\u001b[0m\u001b[38;2;255;255;255m.second\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255menv:\u001b[0m\u001b[38;2;255;255;255mPATH\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-match\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m.*rust.*\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mPath contains Rust\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mtry\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114m&\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mcargo\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m--version\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mcatch\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;102;217;239mWrite-Error\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mFailed to run cargo\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mPath does not contain Rust\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;249;38;114m..\u001b[0m\u001b[38;2;190;132;255m30\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;248;248;242m_\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m%\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-eq\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m%\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mIn {0} minutes, the time will be {1}.\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-f\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;248;248;242m_\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m$\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mGet-FutureTime\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;248;248;242m_\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mlater\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239mGet-FutureTime\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242mMinutes \u001b[0m\u001b[38;2;249;38;114m$\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mGet-Random\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242mMinimum \u001b[0m\u001b[38;2;190;132;255m60\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242mMaximum \u001b[0m\u001b[38;2;190;132;255m120\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mThe time will be \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mlater\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m later.\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Protocol Buffer/vyconf.proto",
    "content": "\u001b[3;38;2;102;217;239mmessage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;102;217;239mRequest\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239menum\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mConfigFormat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;190;132;255mCURLY\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;190;132;255mJSON\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239menum\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mOutputFormat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;190;132;255mOutPlain\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;190;132;255mOutJSON\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mmessage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;102;217;239mStatus\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mmessage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;102;217;239mSetupSession\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114moptional\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mClientApplication\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114moptional\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mint32\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mOnBehalfOf\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mmessage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;102;217;239mSet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mrepeated\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mPath\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114moptional\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mbool\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mEphemeral\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mmessage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;102;217;239mDelete\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mrepeated\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mPath\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mmessage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;102;217;239mRename\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mrepeated\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mEditLevel\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mrequired\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mFrom\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mrequired\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mTo\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mmessage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;102;217;239mCopy\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mrepeated\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mEditLevel\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mrequired\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mFrom\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mrequired\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mTo\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mmessage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;102;217;239mComment\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mrepeated\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mPath\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mrequired\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mComment\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mmessage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;102;217;239mCommit\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114moptional\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mbool\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mConfirm\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114moptional\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mint32\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mConfirmTimeout\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114moptional\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mComment\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mmessage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;102;217;239mRollback\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mrequired\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mint32\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mRevision\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mmessage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;102;217;239mLoad\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mrequired\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mLocation\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114moptional\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mConfigFormat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mformat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mmessage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;102;217;239mMerge\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mrequired\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mLocation\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114moptional\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mConfigFormat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mformat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mmessage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;102;217;239mSave\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mrequired\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mLocation\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114moptional\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mConfigFormat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mformat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mmessage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;102;217;239mShowConfig\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mrepeated\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mPath\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114moptional\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mConfigFormat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mformat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mmessage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;102;217;239mExists\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mrepeated\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mPath\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mmessage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;102;217;239mGetValue\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mrepeated\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mPath\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114moptional\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mOutputFormat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255moutput_format\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mmessage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;102;217;239mGetValues\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mrepeated\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mPath\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114moptional\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mOutputFormat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255moutput_format\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mmessage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;102;217;239mListChildren\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mrepeated\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mPath\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114moptional\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mOutputFormat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255moutput_format\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mmessage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;102;217;239mRunOpMode\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mrepeated\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mPath\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114moptional\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mOutputFormat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255moutput_format\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mmessage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;102;217;239mConfirm\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mmessage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;102;217;239mEnterConfigurationMode\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mrequired\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mbool\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mExclusive\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mrequired\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mbool\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mOverrideExclusive\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mmessage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;102;217;239mExitConfigurationMode\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114moneof\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mmsg\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mStatus\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mstatus\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mSetupSession\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255msetup_session\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mSet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mset\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mDelete\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdelete\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mRename\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mrename\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mCopy\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mcopy\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m6\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mComment\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mcomment\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mCommit\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mcommit\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m8\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mRollback\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mrollback\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m9\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mMerge\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mmerge\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m10\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mSave\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255msave\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m11\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mShowConfig\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mshow_config\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m12\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mExists\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mexists\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m13\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mGetValue\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mget_value\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m14\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mGetValues\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mget_values\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m15\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mListChildren\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mlist_children\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m16\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mRunOpMode\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mrun_op_mode\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m17\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mConfirm\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mconfirm\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m18\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mEnterConfigurationMode\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mconfigure\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m19\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mExitConfigurationMode\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mexit_configure\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m20\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;166;226;46mstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mteardown\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m21\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m  \u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[3;38;2;102;217;239mmessage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;102;217;239mRequestEnvelope\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114moptional\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mtoken\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mrequired\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mRequest\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mrequest\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[3;38;2;102;217;239menum\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mStatus\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;190;132;255mSUCCESS\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;190;132;255mFAIL\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;190;132;255mINVALID_PATH\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;190;132;255mINVALID_VALUE\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;190;132;255mCOMMIT_IN_PROGRESS\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;190;132;255mCONFIGURATION_LOCKED\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;190;132;255mINTERNAL_ERROR\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m6\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;190;132;255mPERMISSION_DENIED\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;190;132;255mPATH_ALREADY_EXISTS\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m8\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[3;38;2;102;217;239mmessage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;102;217;239mResponse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mrequired\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mStatus\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mstatus\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114moptional\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255moutput\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114moptional\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255merror\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114moptional\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mwarning\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Puppet/manifest_large_exported_classes_node.pp",
    "content": "\u001b[3;38;2;102;217;239mclass\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mfoo\u001b[0m\u001b[38;2;248;248;242m ($bar) \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239m@@notify\u001b[0m\u001b[38;2;248;248;242m { \u001b[0m\u001b[38;2;166;226;46m'foo'\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m }\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[3;38;2;102;217;239m@@file\u001b[0m\u001b[38;2;248;248;242m { \u001b[0m\u001b[38;2;166;226;46m\"somedir/${name}_${munin_port_real}\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;190;132;255mensure \u001b[0m\u001b[38;2;248;248;242m=> \u001b[0m\u001b[38;2;190;132;255mpresent\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;190;132;255mcontent \u001b[0m\u001b[38;2;248;248;242m=> \u001b[0m\u001b[38;2;102;217;239mtemplate\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mmunin/defaultclient.erb\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m),\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Collect all exported files\u001b[0m\n\u001b[38;2;190;132;255mFile\u001b[0m\u001b[38;2;248;248;242m <<||>>\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Compile the munin.conf with a local header\u001b[0m\n\u001b[3;38;2;102;217;239mconcatenated_file\u001b[0m\u001b[38;2;248;248;242m { \u001b[0m\u001b[38;2;166;226;46m\"/etc/munin/munin.conf\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;190;132;255mdir \u001b[0m\u001b[38;2;248;248;242m=> somedir,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;190;132;255mheader \u001b[0m\u001b[38;2;248;248;242m=> \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m/etc/munin/munin.conf.header\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242mhosting_vserver_configuration {\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46m\"erics\":\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;190;132;255mdomain \u001b[0m\u001b[38;2;248;248;242m=> \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116morange.co\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;190;132;255mtype \u001b[0m\u001b[38;2;248;248;242m=> \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mfriend\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;190;132;255mcontext \u001b[0m\u001b[38;2;248;248;242m=> 13,\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;190;132;255mip \u001b[0m\u001b[38;2;248;248;242m=> \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m255.255.255.254\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255mprefix \u001b[0m\u001b[38;2;248;248;242m=> 27,\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;190;132;255madmin_user \u001b[0m\u001b[38;2;248;248;242m=> \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116merict\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255madmin_user_name \u001b[0m\u001b[38;2;248;248;242m=> \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mhello, its me\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;190;132;255madmin_user_email \u001b[0m\u001b[38;2;248;248;242m=> \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116merict@orange.co\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;190;132;255mcustomer \u001b[0m\u001b[38;2;248;248;242m=> \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mhello? is it me?\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;190;132;255madmin_password \u001b[0m\u001b[38;2;248;248;242m=> \u001b[0m\u001b[38;2;190;132;255mfile\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m/etc/puppet/secrets/hosting/erict_passwd\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m),\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[3;38;2;102;217;239mclass\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mdavids_black_co_at\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m# Create users for my parents and my grandmother\u001b[0m\n\u001b[38;2;248;248;242m    hosting::user {\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;166;226;46mrztt:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mrealname \u001b[0m\u001b[38;2;248;248;242m=> \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116msome other rztt\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;190;132;255muid \u001b[0m\u001b[38;2;248;248;242m=> 2001, \u001b[0m\u001b[38;2;190;132;255madmin \u001b[0m\u001b[38;2;248;248;242m=> \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;166;226;46msame:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mrealname \u001b[0m\u001b[38;2;248;248;242m=> \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mcould be same\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;190;132;255muid \u001b[0m\u001b[38;2;248;248;242m=> 2002;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;166;226;46mimapersontoodamnit:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mrealname \u001b[0m\u001b[38;2;248;248;242m=> \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116msome one else\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;190;132;255muid \u001b[0m\u001b[38;2;248;248;242m=> 2003;\u001b[0m\n\u001b[38;2;248;248;242m    }\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Install git.black.co.at\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114minclude\u001b[0m\u001b[38;2;248;248;242m git::daemon\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114minclude\u001b[0m\u001b[38;2;248;248;242m git::web\u001b[0m\n\u001b[38;2;248;248;242m    git::web::export { [manifests, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mpuppet-trunk\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m]: }\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Provision an additional mysql database on the database server\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mhosting::database\u001b[0m\u001b[38;2;248;248;242m { \u001b[0m\u001b[38;2;166;226;46m\"fogbugz\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtype \u001b[0m\u001b[38;2;248;248;242m=> mysql }\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Create another VirtualHost\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mapache2::site\u001b[0m\u001b[38;2;248;248;242m { \u001b[0m\u001b[38;2;166;226;46m\"local-fogbugz\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;190;132;255msource \u001b[0m\u001b[38;2;248;248;242m=> \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mpuppet://\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mservername\u001b[0m\u001b[38;2;230;219;116m/files/hosting/erict/sites/local-fogbugz\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m    }\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[3;38;2;102;217;239mnode\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mbackuppc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m only use the smarthost\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mmta\u001b[0m\u001b[38;2;248;248;242m = ssmtp\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m this is a vserver on this host, so register correctly in nagios\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mnagios_parent\u001b[0m\u001b[38;2;248;248;242m = \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116morange.co\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m I'm sharing an IP here, so those things have to have their own ports\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mapache2_port\u001b[0m\u001b[38;2;248;248;242m = 8080\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mmunin_port\u001b[0m\u001b[38;2;248;248;242m = 5008\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mmunin_stats_port\u001b[0m\u001b[38;2;248;248;242m = 8667\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m default configuration\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114minclude\u001b[0m\u001b[38;2;248;248;242m dbp\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m configure the backuppc server\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114minclude\u001b[0m\u001b[38;2;248;248;242m backuppc::server\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/PureScript/test.purs",
    "content": "\u001b[38;2;117;113;94m-- | This module defines a datatype `Pair` together with a few useful instances\u001b[0m\n\u001b[38;2;117;113;94m-- | and helper functions. Note that this is not just `Tuple a a` but rather a\u001b[0m\n\u001b[38;2;117;113;94m-- | list with exactly two elements. Specifically, the `Functor` instance maps\u001b[0m\n\u001b[38;2;117;113;94m-- | over both values (in contrast to the `Functor` instance for `Tuple a`).\u001b[0m\n\u001b[38;2;249;38;114mmodule\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mData.Pair\u001b[0m\n\u001b[38;2;248;248;242m  ( \u001b[0m\u001b[38;2;248;248;242mPair\u001b[0m\u001b[38;2;248;248;242m(..)\u001b[0m\n\u001b[38;2;248;248;242m  , (~)\u001b[0m\n\u001b[38;2;248;248;242m  , \u001b[0m\u001b[38;2;248;248;242mfst\u001b[0m\n\u001b[38;2;248;248;242m  , \u001b[0m\u001b[38;2;248;248;242msnd\u001b[0m\n\u001b[38;2;248;248;242m  , \u001b[0m\u001b[38;2;248;248;242mcurry\u001b[0m\n\u001b[38;2;248;248;242m  , \u001b[0m\u001b[38;2;248;248;242muncurry\u001b[0m\n\u001b[38;2;248;248;242m  , \u001b[0m\u001b[38;2;248;248;242mswap\u001b[0m\n\u001b[38;2;248;248;242m  ) \u001b[0m\u001b[38;2;249;38;114mwhere\u001b[0m\n\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mPrelude\u001b[0m\n\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mData.Foldable\u001b[0m\u001b[38;2;248;248;242m (class \u001b[0m\u001b[38;2;166;226;46mFoldable\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mData.Traversable\u001b[0m\u001b[38;2;248;248;242m (class \u001b[0m\u001b[38;2;166;226;46mTraversable\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mData.Distributive\u001b[0m\u001b[38;2;248;248;242m (class \u001b[0m\u001b[38;2;166;226;46mDistributive\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mTest.QuickCheck.Arbitrary\u001b[0m\u001b[38;2;248;248;242m (class \u001b[0m\u001b[38;2;166;226;46mArbitrary\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;166;226;46marbitrary\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;117;113;94m-- | A pair simply consists of two values of the same type.\u001b[0m\n\u001b[38;2;249;38;114mdata\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mPair\u001b[0m\u001b[38;2;248;248;242m a \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mPair\u001b[0m\u001b[38;2;248;248;242m a a\u001b[0m\n\n\u001b[38;2;249;38;114minfixl\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m6\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mPair\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mas\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m~\u001b[0m\n\n\u001b[38;2;117;113;94m-- | Returns the first component of a pair.\u001b[0m\n\u001b[38;2;248;248;242mfst ∷ ∀ a\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mPair\u001b[0m\u001b[38;2;248;248;242m a → a\u001b[0m\n\u001b[38;2;248;248;242mfst (x \u001b[0m\u001b[38;2;249;38;114m~\u001b[0m\u001b[38;2;248;248;242m _) \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m x\u001b[0m\n\n\u001b[38;2;117;113;94m-- | Returns the second component of a pair.\u001b[0m\n\u001b[38;2;248;248;242msnd ∷ ∀ a\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mPair\u001b[0m\u001b[38;2;248;248;242m a → a\u001b[0m\n\u001b[38;2;248;248;242msnd (_ \u001b[0m\u001b[38;2;249;38;114m~\u001b[0m\u001b[38;2;248;248;242m y) \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m y\u001b[0m\n\n\u001b[38;2;117;113;94m-- | Turn a function that expects a pair into a function of two arguments.\u001b[0m\n\u001b[38;2;102;217;239mcurry\u001b[0m\u001b[38;2;248;248;242m ∷ ∀ a b\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;190;132;255mPair\u001b[0m\u001b[38;2;248;248;242m a → b) → a → a → b\u001b[0m\n\u001b[38;2;102;217;239mcurry\u001b[0m\u001b[38;2;248;248;242m f x y \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m f (x \u001b[0m\u001b[38;2;249;38;114m~\u001b[0m\u001b[38;2;248;248;242m y)\u001b[0m\n\n\u001b[38;2;117;113;94m-- | Turn a function of two arguments into a function that expects a pair.\u001b[0m\n\u001b[38;2;102;217;239muncurry\u001b[0m\u001b[38;2;248;248;242m ∷ ∀ a b\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242m (a → a → b) → \u001b[0m\u001b[38;2;190;132;255mPair\u001b[0m\u001b[38;2;248;248;242m a → b\u001b[0m\n\u001b[38;2;102;217;239muncurry\u001b[0m\u001b[38;2;248;248;242m f (x \u001b[0m\u001b[38;2;249;38;114m~\u001b[0m\u001b[38;2;248;248;242m y) \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m f x y\u001b[0m\n\n\u001b[38;2;117;113;94m-- | Exchange the two components of the pair\u001b[0m\n\u001b[38;2;248;248;242mswap ∷ ∀ a\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mPair\u001b[0m\u001b[38;2;248;248;242m a → \u001b[0m\u001b[38;2;190;132;255mPair\u001b[0m\u001b[38;2;248;248;242m a\u001b[0m\n\u001b[38;2;248;248;242mswap (x \u001b[0m\u001b[38;2;249;38;114m~\u001b[0m\u001b[38;2;248;248;242m y) \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m y \u001b[0m\u001b[38;2;249;38;114m~\u001b[0m\u001b[38;2;248;248;242m x\u001b[0m\n\n\u001b[38;2;248;248;242mderive \u001b[0m\u001b[38;2;249;38;114minstance\u001b[0m\u001b[38;2;248;248;242m eqPair ∷ \u001b[0m\u001b[38;2;190;132;255mEq\u001b[0m\u001b[38;2;248;248;242m a ⇒ \u001b[0m\u001b[38;2;190;132;255mEq\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;190;132;255mPair\u001b[0m\u001b[38;2;248;248;242m a)\u001b[0m\n\n\u001b[38;2;248;248;242mderive \u001b[0m\u001b[38;2;249;38;114minstance\u001b[0m\u001b[38;2;248;248;242m ordPair ∷ \u001b[0m\u001b[38;2;190;132;255mOrd\u001b[0m\u001b[38;2;248;248;242m a ⇒ \u001b[0m\u001b[38;2;190;132;255mOrd\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;190;132;255mPair\u001b[0m\u001b[38;2;248;248;242m a)\u001b[0m\n\n\u001b[38;2;249;38;114minstance\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mshowPair\u001b[0m\u001b[38;2;248;248;242m ∷ \u001b[0m\u001b[3;38;2;102;217;239mShow\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255ma\u001b[0m\u001b[38;2;248;248;242m ⇒ \u001b[0m\u001b[3;38;2;102;217;239mShow\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[3;38;2;102;217;239mPair\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255ma\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mwhere\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239mshow\u001b[0m\u001b[38;2;248;248;242m (x \u001b[0m\u001b[38;2;249;38;114m~\u001b[0m\u001b[38;2;248;248;242m y) \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mshow\u001b[0m\u001b[38;2;248;248;242m x \u001b[0m\u001b[38;2;249;38;114m<>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m ~ \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mshow\u001b[0m\u001b[38;2;248;248;242m y \u001b[0m\u001b[38;2;249;38;114m<>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m)\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\n\u001b[38;2;249;38;114minstance\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mfunctorPair\u001b[0m\u001b[38;2;248;248;242m ∷ \u001b[0m\u001b[3;38;2;102;217;239mFunctor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mPair\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mwhere\u001b[0m\n\u001b[38;2;248;248;242m  map f (x \u001b[0m\u001b[38;2;249;38;114m~\u001b[0m\u001b[38;2;248;248;242m y) \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m f x \u001b[0m\u001b[38;2;249;38;114m~\u001b[0m\u001b[38;2;248;248;242m f y\u001b[0m\n\n\u001b[38;2;249;38;114minstance\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mapplyPair\u001b[0m\u001b[38;2;248;248;242m ∷ \u001b[0m\u001b[3;38;2;102;217;239mApply\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mPair\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mwhere\u001b[0m\n\u001b[38;2;248;248;242m  apply (f \u001b[0m\u001b[38;2;249;38;114m~\u001b[0m\u001b[38;2;248;248;242m g) (x \u001b[0m\u001b[38;2;249;38;114m~\u001b[0m\u001b[38;2;248;248;242m y) \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m f x \u001b[0m\u001b[38;2;249;38;114m~\u001b[0m\u001b[38;2;248;248;242m g y\u001b[0m\n\n\u001b[38;2;249;38;114minstance\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mapplicativePair\u001b[0m\u001b[38;2;248;248;242m ∷ \u001b[0m\u001b[3;38;2;102;217;239mApplicative\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mPair\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mwhere\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239mpure\u001b[0m\u001b[38;2;248;248;242m x \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m x \u001b[0m\u001b[38;2;249;38;114m~\u001b[0m\u001b[38;2;248;248;242m x\u001b[0m\n\n\u001b[38;2;249;38;114minstance\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mbindPair\u001b[0m\u001b[38;2;248;248;242m ∷ \u001b[0m\u001b[3;38;2;102;217;239mBind\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mPair\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mwhere\u001b[0m\n\u001b[38;2;248;248;242m  bind (x \u001b[0m\u001b[38;2;249;38;114m~\u001b[0m\u001b[38;2;248;248;242m y) f \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m fst (f x) \u001b[0m\u001b[38;2;249;38;114m~\u001b[0m\u001b[38;2;248;248;242m snd (f y)\u001b[0m\n\n\u001b[38;2;249;38;114minstance\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mmonadPair\u001b[0m\u001b[38;2;248;248;242m ∷ \u001b[0m\u001b[3;38;2;102;217;239mMonad\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mPair\u001b[0m\n\n\u001b[38;2;249;38;114minstance\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255msemigroupPair\u001b[0m\u001b[38;2;248;248;242m ∷ \u001b[0m\u001b[3;38;2;102;217;239mSemigroup\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255ma\u001b[0m\u001b[38;2;248;248;242m ⇒ \u001b[0m\u001b[3;38;2;102;217;239mSemigroup\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[3;38;2;102;217;239mPair\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255ma\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mwhere\u001b[0m\n\u001b[38;2;248;248;242m  append (x1 \u001b[0m\u001b[38;2;249;38;114m~\u001b[0m\u001b[38;2;248;248;242m y1) (x2 \u001b[0m\u001b[38;2;249;38;114m~\u001b[0m\u001b[38;2;248;248;242m y2) \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m (x1 \u001b[0m\u001b[38;2;249;38;114m<>\u001b[0m\u001b[38;2;248;248;242m x2) \u001b[0m\u001b[38;2;249;38;114m~\u001b[0m\u001b[38;2;248;248;242m (y1 \u001b[0m\u001b[38;2;249;38;114m<>\u001b[0m\u001b[38;2;248;248;242m y2)\u001b[0m\n\n\u001b[38;2;249;38;114minstance\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mmonoidPair\u001b[0m\u001b[38;2;248;248;242m ∷ \u001b[0m\u001b[3;38;2;102;217;239mMonoid\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255ma\u001b[0m\u001b[38;2;248;248;242m ⇒ \u001b[0m\u001b[3;38;2;102;217;239mMonoid\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[3;38;2;102;217;239mPair\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255ma\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mwhere\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239mmempty\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mmempty\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m~\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mmempty\u001b[0m\n\n\u001b[38;2;249;38;114minstance\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mfoldablePair\u001b[0m\u001b[38;2;248;248;242m ∷ \u001b[0m\u001b[3;38;2;102;217;239mFoldable\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mPair\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mwhere\u001b[0m\n\u001b[38;2;248;248;242m  foldr f z (\u001b[0m\u001b[38;2;190;132;255mPair\u001b[0m\u001b[38;2;248;248;242m x y) \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m x `f` (y `f` z)\u001b[0m\n\u001b[38;2;248;248;242m  foldl f z (\u001b[0m\u001b[38;2;190;132;255mPair\u001b[0m\u001b[38;2;248;248;242m x y) \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m (z `f` x) `f` y\u001b[0m\n\u001b[38;2;248;248;242m  foldMap f (\u001b[0m\u001b[38;2;190;132;255mPair\u001b[0m\u001b[38;2;248;248;242m x y) \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m f x \u001b[0m\u001b[38;2;249;38;114m<>\u001b[0m\u001b[38;2;248;248;242m f y\u001b[0m\n\n\u001b[38;2;249;38;114minstance\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mtraversablePair\u001b[0m\u001b[38;2;248;248;242m ∷ \u001b[0m\u001b[3;38;2;102;217;239mTraversable\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mPair\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mwhere\u001b[0m\n\u001b[38;2;248;248;242m  traverse f (\u001b[0m\u001b[38;2;190;132;255mPair\u001b[0m\u001b[38;2;248;248;242m x y) \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mPair\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<$>\u001b[0m\u001b[38;2;248;248;242m f x \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m*\u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;248;248;242m f y\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239msequence\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;190;132;255mPair\u001b[0m\u001b[38;2;248;248;242m mx my) \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mPair\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<$>\u001b[0m\u001b[38;2;248;248;242m mx \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m*\u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;248;248;242m my\u001b[0m\n\n\u001b[38;2;249;38;114minstance\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdistributivePair\u001b[0m\u001b[38;2;248;248;242m ∷ \u001b[0m\u001b[3;38;2;102;217;239mDistributive\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mPair\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mwhere\u001b[0m\n\u001b[38;2;248;248;242m  distribute xs \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m map fst xs \u001b[0m\u001b[38;2;249;38;114m~\u001b[0m\u001b[38;2;248;248;242m map snd xs\u001b[0m\n\u001b[38;2;248;248;242m  collect f xs \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m map (fst \u001b[0m\u001b[38;2;249;38;114m<<<\u001b[0m\u001b[38;2;248;248;242m f) xs \u001b[0m\u001b[38;2;249;38;114m~\u001b[0m\u001b[38;2;248;248;242m map (snd \u001b[0m\u001b[38;2;249;38;114m<<<\u001b[0m\u001b[38;2;248;248;242m f) xs\u001b[0m\n\n\u001b[38;2;249;38;114minstance\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255marbitraryPair\u001b[0m\u001b[38;2;248;248;242m ∷ \u001b[0m\u001b[3;38;2;102;217;239mArbitrary\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255ma\u001b[0m\u001b[38;2;248;248;242m ⇒ \u001b[0m\u001b[3;38;2;102;217;239mArbitrary\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[3;38;2;102;217;239mPair\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255ma\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mwhere\u001b[0m\n\u001b[38;2;248;248;242m  arbitrary \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mPair\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<$>\u001b[0m\u001b[38;2;248;248;242m arbitrary \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m*\u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;248;248;242m arbitrary\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Python/battest.py",
    "content": "\u001b[38;2;249;38;114mfrom\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mos\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mgetcwd\u001b[0m\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mnumpy\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mas\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mnp\u001b[0m\n\u001b[38;2;249;38;114mfrom\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mmatplotlib\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mpyplot\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mplot\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mas\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mplt\u001b[0m\n\u001b[38;2;249;38;114mfrom\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mtime\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m*\u001b[0m\n\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m COMMENT test\u001b[0m\n\u001b[38;2;248;248;242mh2\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m this is a comment\u001b[0m\n\u001b[38;2;117;113;94m\"\"\"\u001b[0m\u001b[38;2;117;113;94mthis is also a comment\u001b[0m\u001b[38;2;117;113;94m\"\"\"\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Import test\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m class test\u001b[0m\n\n\n\u001b[38;2;249;38;114mclass\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;102;217;239mHello\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mdef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239m__init__\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mself\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mx\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255mself\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mname\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mx\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mdef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mselfprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mself\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mhello my name is \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mself\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mname\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mdef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtestprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mself\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m%\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m8\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m9\u001b[0m\u001b[38;2;249;38;114m/\u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m23\u001b[0m\u001b[38;2;249;38;114m/\u001b[0m\u001b[38;2;249;38;114m/\u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Decorators test\u001b[0m\n\u001b[38;2;249;38;114mclass\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;102;217;239mDecorators\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m@\u001b[0m\u001b[38;2;102;217;239mclassmethod\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mdef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mdecoratorsTest\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mself\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mpass\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\n\u001b[38;2;248;248;242mH1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mHello\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mjohn\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242mH1\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mselfprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242mH1\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mtestprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m list test\u001b[0m\n\u001b[38;2;248;248;242ma\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242ma\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242msort\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242ma\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242ma\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242ma\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242ma\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m dictionary test\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m copied from w3schools example\u001b[0m\n\n\u001b[38;2;248;248;242mmyfamily\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mchild1\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mname\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mEmil\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116myear\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2004\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mchild2\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mname\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mTobias\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116myear\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2007\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mchild3\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mname\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mLinus\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116myear\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2011\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m tuple test\u001b[0m\n\n\u001b[38;2;248;248;242mtestTuple\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mone\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m3\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mtestTuple\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mnp\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mrandom\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mrandint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m45\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m string test\u001b[0m\n\u001b[38;2;248;248;242ma\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mhello world\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242mb\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\"\"\u001b[0m\u001b[38;2;230;219;116mgood morning\u001b[0m\n\u001b[38;2;230;219;116mhello world\u001b[0m\n\u001b[38;2;230;219;116mbye\u001b[0m\u001b[38;2;230;219;116m\"\"\"\u001b[0m\n\n\u001b[38;2;248;248;242mformattest\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mteststring is =\u001b[0m\u001b[38;2;190;132;255m{\u001b[0m\u001b[38;2;190;132;255m}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mformat\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m lambda test\u001b[0m\n\n\n\u001b[38;2;249;38;114mdef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mx2\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mn\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;249;38;114mlambda\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mn\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mn\u001b[0m\u001b[38;2;249;38;114m/\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\n\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m if else ladder\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116myes\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114melif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mmaybe\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mno\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m loops\u001b[0m\n\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\n\u001b[38;2;249;38;114mwhile\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\n\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mx\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mrange\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m20\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mx\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/QML/BatSyntaxTest.qml",
    "content": "\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;102;217;239mQtQuick\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2.0\u001b[0m\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"../components\"\u001b[0m\n\n\u001b[3;38;2;166;226;46mPage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116mid\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mpage\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m properties\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255mproperty\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mbool\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mstartup\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255mreadonly\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mproperty\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mvar\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mvar1\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mnull\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255mreadonly\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mproperty\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mQtObject\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mvar2\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mnull\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116mallowedOrientations\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mOrientation\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mAll\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m/*\u001b[0m\u001b[38;2;117;113;94m components \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255mDBusServiceWatcher\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;230;219;116mid\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdbusService\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;230;219;116mservice\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116morg.bat.service\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;230;219;116monRegisteredChanged\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255mdbusService\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mregistered\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;255;255;255mannouncedNameField\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mtext\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdaemon\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;248;248;242mannouncedName\u001b[0m\u001b[38;2;248;248;242m()\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255mComponent\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255monCompleted\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[3;38;2;166;226;46mconsole\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;248;248;242mdebug\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mcompleted\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255mFlickable\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255manchors\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mfill\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mparent\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;230;219;116mcontentHeight\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mcolumn\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mheight\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;230;219;116mvisible\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdbusService\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mregistered\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255mViewPlaceholder\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;230;219;116menabled\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m!\u001b[0m\u001b[38;2;255;255;255mstartup\u001b[0m\n\u001b[38;2;248;248;242m                     \u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mtrustedDevices\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mcount\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;174;129;255m0\u001b[0m\n\u001b[38;2;248;248;242m                     \u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mnearDevices\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mcount\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;174;129;255m0\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;230;219;116mtext\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mqsTr\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mInstall Bat.\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255mColumn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;230;219;116mid\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mcolumn\u001b[0m\n\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;230;219;116mwidth\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mpage\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mwidth\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;230;219;116mspacing\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mTheme\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mpaddingLarge\u001b[0m\n\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;255;255;255mPageHeader\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;230;219;116mtitle\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mqsTr\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mSyntax Test\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;255;255;255mTextField\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;230;219;116mid\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mannouncedNameField\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;230;219;116mwidth\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mparent\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mwidth\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;230;219;116mlabel\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mqsTr\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mDevice Name\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;230;219;116mtext\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdbusService\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mregistered\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdaemon\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;248;248;242mannouncedName\u001b[0m\u001b[38;2;248;248;242m()\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;230;219;116monActiveFocusChanged\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255mactiveFocus\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\n\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255mtext\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mlength\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m===\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;174;129;255m0\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255mtext\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdaemon\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;248;248;242mannouncedName\u001b[0m\u001b[38;2;248;248;242m()\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255mdaemon\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;248;248;242msetAnnouncedName\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255mtext\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255mplaceholderText\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mtext\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;255;255;255mEnterKey\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255monClicked\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mannouncedNameField\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mfocus\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mfalse\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;255;255;255mEnterKey\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255miconSource\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mimage://theme/icon-m-enter-close\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;255;255;255mComponent\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;230;219;116mid\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdeviceDelegate\u001b[0m\n\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;255;255;255mListItem\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;230;219;116mid\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mlistItem\u001b[0m\n\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;255;255;255mproperty\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mbool\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mshowStatus\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdeviceStatusLabel\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mtext\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mlength\u001b[0m\n\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;230;219;116mwidth\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mpage\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mwidth\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;230;219;116mheight\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mTheme\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mitemSizeMedium\u001b[0m\n\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;255;255;255mImage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;230;219;116mid\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255micon\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;230;219;116msource\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255miconUrl\u001b[0m\n\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;230;219;116mx\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mTheme\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mhorizontalPageMargin\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255manchors\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mverticalCenter\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mparent\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mverticalCenter\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255msourceSize\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mwidth\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mTheme\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255miconSizeMedium\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255msourceSize\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mheight\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mTheme\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255miconSizeMedium\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;255;255;255mLabel\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;230;219;116mid\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdeviceNameLabel\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255manchors\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;230;219;116mleft\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255micon\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mright\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;230;219;116mleftMargin\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mTheme\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mpaddingLarge\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;230;219;116mright\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mparent\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mright\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;230;219;116mrightMargin\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mTheme\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mhorizontalPageMargin\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;230;219;116my\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mlistItem\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mcontentHeight\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m/\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;174;129;255m2\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mimplicitHeight\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m/\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;174;129;255m2\u001b[0m\n\u001b[38;2;248;248;242m                           \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mshowStatus\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255mdeviceStatusLabel\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mimplicitHeight\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m/\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;174;129;255m2\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;230;219;116mtext\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mname\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;230;219;116mcolor\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mlistItem\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mhighlighted\u001b[0m\n\u001b[38;2;248;248;242m                               \u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mTheme\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mhighlightColor\u001b[0m\n\u001b[38;2;248;248;242m                               \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mTheme\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mprimaryColor\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;230;219;116mtruncationMode\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mTruncationMode\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mFade\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;230;219;116mtextFormat\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mText\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mPlainText\u001b[0m\n\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255mBehavior\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mon\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255my\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mNumberAnimation\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;255;255;255mLabel\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;230;219;116mid\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdeviceStatusLabel\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255manchors\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;230;219;116mleft\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdeviceNameLabel\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mleft\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;230;219;116mtop\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdeviceNameLabel\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mbottom\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;230;219;116mright\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mparent\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mright\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;230;219;116mrightMargin\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mTheme\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mhorizontalPageMargin\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;230;219;116mtext\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255mtrusted\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mreachable\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m                              \u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mqsTr\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mConnected\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m                              \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255mhasPairingRequests\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m||\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mwaitsForPairing\u001b[0m\n\u001b[38;2;248;248;242m                                 \u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mqsTr\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mPending pairing request ...\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;230;219;116mcolor\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mlistItem\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mhighlighted\u001b[0m\n\u001b[38;2;248;248;242m                               \u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mTheme\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255msecondaryHighlightColor\u001b[0m\n\u001b[38;2;248;248;242m                               \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mTheme\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255msecondaryColor\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;230;219;116mtruncationMode\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mTruncationMode\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mFade\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255mfont\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mpixelSize\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mTheme\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mfontSizeExtraSmall\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;230;219;116mopacity\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mshowStatus\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;174;129;255m1.0\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;174;129;255m0.0\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;230;219;116mwidth\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mparent\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mwidth\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;230;219;116mtextFormat\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mText\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mPlainText\u001b[0m\n\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255mBehavior\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mon\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mopacity\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mFadeAnimation\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;230;219;116monClicked\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255mpageStack\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;248;248;242mpush\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;255;255;255mQt\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;248;248;242mresolvedUrl\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mDevicePage.qml\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mdeviceId\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mid\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;255;255;255mDeviceListModel\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;230;219;116mid\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdevicelistModel\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;255;255;255mColumnView\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;230;219;116mid\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdevicesView\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;230;219;116mwidth\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mpage\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mwidth\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;230;219;116mitemHeight\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mTheme\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mitemSizeMedium\u001b[0m\n\n\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;230;219;116mmodel\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mtrustedDevicesModel\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;230;219;116mdelegate\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdeviceDelegate\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;230;219;116mvisible\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdevicesView\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mcount\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;174;129;255m0\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255mPullDownMenu\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m            MenuItem {\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m                text: qsTr(\"About ...\")\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m                onClicked: pageStack.push(Qt.resolvedUrl(\"AboutPage.qml\"))\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m            }\u001b[0m\n\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;255;255;255mMenuItem\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;230;219;116mtext\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mqsTr\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mSettings ...\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;230;219;116monClicked\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mpageStack\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;248;248;242mpush\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255mQt\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;248;248;242mresolvedUrl\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mSettingsPage.qml\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255mVerticalScrollDecorator\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m/*\u001b[0m\n\u001b[38;2;117;113;94m    Connections {\u001b[0m\n\u001b[38;2;117;113;94m        target: ui\u001b[0m\n\u001b[38;2;117;113;94m        onOpeningDevicePage: openDevicePage(deviceId)\u001b[0m\n\u001b[38;2;117;113;94m    }\u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255mTimer\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;230;219;116minterval\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;174;129;255m1000\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;230;219;116mrunning\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;230;219;116mrepeat\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mfalse\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;230;219;116monTriggered\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mstartup\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mfalse\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;166;226;46mopenDevicePage\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[3;38;2;253;151;31mdeviceId\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;249;38;114mtypeof\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mpageStack\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m===\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mundefined\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[3;38;2;166;226;46mconsole\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;102;217;239mlog\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mopening device \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdeviceId\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[3;38;2;166;226;46mwindow\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;248;248;242mactivate\u001b[0m\u001b[38;2;248;248;242m()\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[3;38;2;102;217;239mvar\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdevicePage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mpageStack\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;248;248;242mfind\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[3;38;2;253;151;31mpage\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mpage\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mobjectName\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m===\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mDevicePage\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255mdevicePage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m!==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mnull\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdevicePage\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mdeviceId\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m===\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdeviceId\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;255;255;255mpageStack\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;248;248;242mpop\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255mdevicePage\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;255;255;255mui\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;248;248;242mshowMainWindow\u001b[0m\u001b[38;2;248;248;242m()\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255mpageStack\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;248;248;242mpop\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255mpage\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;255;255;255mPageStackAction\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mImmediate\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255mpageStack\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;248;248;242mpush\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;255;255;255mQt\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;248;248;242mresolvedUrl\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mDevicePage.qml\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mdeviceId\u001b[0m\u001b[38;2;190;132;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdeviceId\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;255;255;255mPageStackAction\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mImmediate\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/R/test.r",
    "content": "\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m take input from the user\u001b[0m\n\u001b[38;2;248;248;242mnum \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mas.integer\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mreadline\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mprompt\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mEnter a number: \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242mfactorial \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m check is the number is negative, positive or zero\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mnum \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mSorry, factorial does not exist for negative numbers\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mnum \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mThe factorial of 0 is 1\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mi \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242mnum\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242mfactorial \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m factorial \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m i\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mpaste\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mThe factorial of\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m num \u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mis\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242mfactorial\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242mx \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mx \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mNegative number\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mx \u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mPositive number\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mZero\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;248;248;242mx \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\n\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mval \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m x\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mval \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;249;38;114mnext\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mval\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242mx \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\u001b[38;2;249;38;114mrepeat\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mx\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242mx \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m x\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mx \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m6\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;249;38;114mbreak\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;166;226;46m`%divisible%`\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mx\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[3;38;2;253;151;31my\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mx\u001b[0m\u001b[38;2;249;38;114m%%\u001b[0m\u001b[38;2;248;248;242my \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255mTRUE\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m          \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255mFALSE\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;102;217;239mswitch\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mlength\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mcolor\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mred\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mshape\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116msquare\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mlength\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\n\n\u001b[38;2;166;226;46mrecursive.factorial\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mx\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mx \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m           \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mx \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mrecursive.factorial\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mx\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;166;226;46mpow\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mx\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31my\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m function to print x raised to the power y\u001b[0m\n\u001b[38;2;248;248;242mresult \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m x\u001b[0m\u001b[38;2;249;38;114m^\u001b[0m\u001b[38;2;248;248;242my\u001b[0m\n\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mpaste\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mx\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mraised to the power\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m y\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mis\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m result\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242mA \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mread.table\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mx.data\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31msep\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m,\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[3;38;2;253;151;31mcol.names\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;102;217;239mc\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116myear\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mmy1\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mmy2\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;102;217;239mnrow\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mA\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m                                 \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Count the rows in A\u001b[0m\n\n\u001b[38;2;102;217;239msummary\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mA\u001b[0m\u001b[38;2;249;38;114m$\u001b[0m\u001b[38;2;248;248;242myear\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m                        \u001b[0m\n\n\u001b[38;2;248;248;242mA\u001b[0m\u001b[38;2;249;38;114m$\u001b[0m\u001b[38;2;248;248;242mnewcol \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m A\u001b[0m\u001b[38;2;249;38;114m$\u001b[0m\u001b[38;2;248;248;242mmy1 \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m A\u001b[0m\u001b[38;2;249;38;114m$\u001b[0m\u001b[38;2;248;248;242mmy2               \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Makes a new\u001b[0m\n\u001b[38;2;248;248;242mnewvar \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m A\u001b[0m\u001b[38;2;249;38;114m$\u001b[0m\u001b[38;2;248;248;242mmy1 \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m A\u001b[0m\u001b[38;2;249;38;114m$\u001b[0m\u001b[38;2;248;248;242mmy2                 \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Makes a \u001b[0m\n\u001b[38;2;248;248;242mA\u001b[0m\u001b[38;2;249;38;114m$\u001b[0m\u001b[38;2;248;248;242mmy1 \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mNULL\u001b[0m\u001b[38;2;248;248;242m                           \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Removes \u001b[0m\n\u001b[38;2;102;217;239mstr\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mA\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;102;217;239msummary\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mA\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;102;217;239mlibrary\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mHmisc\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m          \u001b[0m\n\u001b[38;2;248;248;242mcontents\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mA\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242mdescribe\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mA\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;102;217;239mset.seed\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m102\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m                           \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m This yields a good illustration.\u001b[0m\n\u001b[38;2;248;248;242mx \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239msample\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m15\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mreplace\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;190;132;255mTRUE\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242meducation \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mfactor\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mx\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mlabels\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;102;217;239mc\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mNone\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mSchool\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mCollege\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242mx \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239msample\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m15\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mreplace\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;190;132;255mTRUE\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242mgender \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mfactor\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mx\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mlabels\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;102;217;239mc\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mMale\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mFemale\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242mage \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mrunif\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m15\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mmin\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;190;132;255m20\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[3;38;2;253;151;31mmax\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;190;132;255m60\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;248;248;242mD \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mdata.frame\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mage\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m gender\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m education\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;102;217;239mrm\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mx\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242mage\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242mgender\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242meducation\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mD\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Table about education\u001b[0m\n\u001b[38;2;102;217;239mtable\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mD\u001b[0m\u001b[38;2;249;38;114m$\u001b[0m\u001b[38;2;248;248;242meducation\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Table about education and gender --\u001b[0m\n\u001b[38;2;102;217;239mtable\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mD\u001b[0m\u001b[38;2;249;38;114m$\u001b[0m\u001b[38;2;248;248;242mgender\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m D\u001b[0m\u001b[38;2;249;38;114m$\u001b[0m\u001b[38;2;248;248;242meducation\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Joint distribution of education and gender --\u001b[0m\n\u001b[38;2;102;217;239mtable\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mD\u001b[0m\u001b[38;2;249;38;114m$\u001b[0m\u001b[38;2;248;248;242mgender\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m D\u001b[0m\u001b[38;2;249;38;114m$\u001b[0m\u001b[38;2;248;248;242meducation\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114m/\u001b[0m\u001b[38;2;102;217;239mnrow\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mD\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Add in the marginal distributions also\u001b[0m\n\u001b[38;2;102;217;239maddmargins\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mtable\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mD\u001b[0m\u001b[38;2;249;38;114m$\u001b[0m\u001b[38;2;248;248;242mgender\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m D\u001b[0m\u001b[38;2;249;38;114m$\u001b[0m\u001b[38;2;248;248;242meducation\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;102;217;239maddmargins\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mtable\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mD\u001b[0m\u001b[38;2;249;38;114m$\u001b[0m\u001b[38;2;248;248;242mgender\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m D\u001b[0m\u001b[38;2;249;38;114m$\u001b[0m\u001b[38;2;248;248;242meducation\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114m/\u001b[0m\u001b[38;2;102;217;239mnrow\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mD\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Generate a good LaTeX table out of it --\u001b[0m\n\u001b[38;2;102;217;239mlibrary\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mxtable\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242mxtable\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239maddmargins\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mtable\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mD\u001b[0m\u001b[38;2;249;38;114m$\u001b[0m\u001b[38;2;248;248;242mgender\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m D\u001b[0m\u001b[38;2;249;38;114m$\u001b[0m\u001b[38;2;248;248;242meducation\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114m/\u001b[0m\u001b[38;2;102;217;239mnrow\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mD\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m       \u001b[0m\u001b[3;38;2;253;151;31mdigits\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;102;217;239mc\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m  \u001b[0m\n\n\u001b[38;2;102;217;239mby\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mD\u001b[0m\u001b[38;2;249;38;114m$\u001b[0m\u001b[38;2;248;248;242mage\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m D\u001b[0m\u001b[38;2;249;38;114m$\u001b[0m\u001b[38;2;248;248;242mgender\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m mean\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;102;217;239mby\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mD\u001b[0m\u001b[38;2;249;38;114m$\u001b[0m\u001b[38;2;248;248;242mage\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m D\u001b[0m\u001b[38;2;249;38;114m$\u001b[0m\u001b[38;2;248;248;242mgender\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m sd\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;102;217;239mby\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mD\u001b[0m\u001b[38;2;249;38;114m$\u001b[0m\u001b[38;2;248;248;242mage\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m D\u001b[0m\u001b[38;2;249;38;114m$\u001b[0m\u001b[38;2;248;248;242mgender\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m summary\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;248;248;242ma \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mmatrix\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mby\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mD\u001b[0m\u001b[38;2;249;38;114m$\u001b[0m\u001b[38;2;248;248;242mage\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mlist\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mD\u001b[0m\u001b[38;2;249;38;114m$\u001b[0m\u001b[38;2;248;248;242mgender\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m D\u001b[0m\u001b[38;2;249;38;114m$\u001b[0m\u001b[38;2;248;248;242meducation\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m mean\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mnrow\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;102;217;239mrownames\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242ma\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mlevels\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mD\u001b[0m\u001b[38;2;249;38;114m$\u001b[0m\u001b[38;2;248;248;242mgender\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;102;217;239mcolnames\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242ma\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mlevels\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mD\u001b[0m\u001b[38;2;249;38;114m$\u001b[0m\u001b[38;2;248;248;242meducation\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242ma\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mxtable\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242ma\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;248;248;242mdat \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mread.csv\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mfile\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mfiles/dataset-2013-01.csv\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mheader\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mTRUE\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242minterim_object \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mdata.frame\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mrep\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m100\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m10\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m                             \u001b[0m\u001b[38;2;102;217;239mrep\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m101\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m200\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m10\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m                             \u001b[0m\u001b[38;2;102;217;239mrep\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m201\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m300\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m10\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;102;217;239mobject.size\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242minterim_object\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;102;217;239mrm\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116minterim_object\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;102;217;239mls\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;102;217;239mrm\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mlist\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mls\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;248;248;242mvector1 \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mc\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m9\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242mvector2 \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mc\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m10\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m11\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m12\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m13\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m14\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m15\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242marray1 \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239marray\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mc\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mvector1\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242mvector2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[3;38;2;253;151;31mdim\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mc\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242mvector3 \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mc\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m9\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242mvector4 \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mc\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m6\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m11\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m14\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m6\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m9\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242marray2 \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239marray\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mc\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mvector1\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242mvector2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[3;38;2;253;151;31mdim\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mc\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242mmatrix1 \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m array1\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242mmatrix2 \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m array2\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242mresult \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m matrix1\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242mmatrix2\u001b[0m\n\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mresult\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;248;248;242mcolumn.names \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mc\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mCOL1\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mCOL2\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mCOL3\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242mrow.names \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mc\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mROW1\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mROW2\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mROW3\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242mmatrix.names \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mc\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mMatrix1\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mMatrix2\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242mresult \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239marray\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mc\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mvector1\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242mvector2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[3;38;2;253;151;31mdim\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mc\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[3;38;2;253;151;31mdimnames\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mlist\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mrow.names\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m   column.names\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m matrix.names\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mresult\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mresult\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mresult\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Load the package required to read JSON files.\u001b[0m\n\u001b[38;2;102;217;239mlibrary\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mrjson\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242mresult \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mfromJSON\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mfile\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116minput.json\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mresult\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;248;248;242mx \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mc\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m151\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m174\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m138\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m186\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m128\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m136\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m179\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m163\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m152\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m131\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242my \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mc\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m63\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m81\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m56\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m91\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m47\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m57\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m76\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m72\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m62\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m48\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242mrelation \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mlm\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242my\u001b[0m\u001b[38;2;249;38;114m~\u001b[0m\u001b[38;2;248;248;242mx\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mrelation\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;248;248;242mrelation \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mlm\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242my\u001b[0m\u001b[38;2;249;38;114m~\u001b[0m\u001b[38;2;248;248;242mx\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;102;217;239mpng\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mfile\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mlinearregression.png\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;102;217;239mplot\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242my\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242mx\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[3;38;2;253;151;31mcol\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mblue\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[3;38;2;253;151;31mmain\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mHeight & Weight Regression\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;102;217;239mabline\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mlm\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mx\u001b[0m\u001b[38;2;249;38;114m~\u001b[0m\u001b[38;2;248;248;242my\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[3;38;2;253;151;31mcex\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;190;132;255m.\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[3;38;2;253;151;31mpch\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m16\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[3;38;2;253;151;31mxlab\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mWeight in Kg\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[3;38;2;253;151;31mylab\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mHeight in cm\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;102;217;239mdev.off\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;248;248;242mdata \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mc\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mEast\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mWest\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mEast\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mNorth\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mNorth\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mEast\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mWest\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mWest\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mWest\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mEast\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mNorth\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mdata\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mis.factor\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mdata\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242mfactor_data \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mfactor\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mdata\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mfactor_data\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mis.factor\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mfactor_data\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;248;248;242mv \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mc\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m12\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m28\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m41\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Give the chart file a name.\u001b[0m\n\u001b[38;2;102;217;239mpng\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mfile\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mline_chart_label_colored.jpg\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;102;217;239mplot\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mv\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[3;38;2;253;151;31mtype\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mcol\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mred\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mxlab\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mMonth\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mylab\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mRain fall\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mmain\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mRain fall chart\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Racket/test.rkt",
    "content": "\u001b[38;2;248;248;242m#lang racket\u001b[0m\n\n\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mrequire\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m\"main.rkt\" rackunit)\u001b[0m\n\n\u001b[38;2;117;113;94m;; Helper for test cases with multiple outputs\u001b[0m\n\u001b[38;2;117;113;94m;; See: https://stackoverflow.com/questions/41081395/unit-testing-in-racket-with-multiple-outputs\u001b[0m\n\u001b[38;2;248;248;242m(define-syntax check-values-equal?\u001b[0m\n\u001b[38;2;248;248;242m  (syntax-rules ()\u001b[0m\n\u001b[38;2;248;248;242m    [(_ a b) (check-equal? (call-with-values (thunk a) list) b)]))\u001b[0m\n\n\n\u001b[38;2;117;113;94m;; Named POSIX semaphores\u001b[0m\n\u001b[38;2;248;248;242m(test-begin\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mdefine\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtest-sem-name\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m\"/test-nix-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m\")\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m;; Unlink if already exists\u001b[0m\n\u001b[38;2;248;248;242m  (sem-unlink test-sem-name)\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m;; Open and unlink\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mdefine\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtest-sem-p\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(sem-open test-sem-name (+ O_CREAT O_EXCL)))\u001b[0m\n\u001b[38;2;248;248;242m  (check-not-false test-sem-p)\u001b[0m\n\u001b[38;2;248;248;242m  (check-not-equal? test-sem-p (void))\u001b[0m\n\u001b[38;2;248;248;242m  (check-exn exn:fail?\u001b[0m\n\u001b[38;2;248;248;242m             \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mlambda\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m() (sem-open test-sem-name (+ O_CREAT O_EXCL)))\u001b[0m\n\u001b[38;2;248;248;242m             \u001b[0m\u001b[38;2;230;219;116m\"Permission denied\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  (check-exn exn:fail?\u001b[0m\n\u001b[38;2;248;248;242m             \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mlambda\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m() (sem-open test-sem-name (+ O_CREAT O_EXCL))))\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m;; Change values\u001b[0m\n\u001b[38;2;248;248;242m  (check-equal? (sem-getvalue test-sem-p) \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  (sem-post test-sem-p)\u001b[0m\n\u001b[38;2;248;248;242m  (check-equal? (sem-getvalue test-sem-p) \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  (sem-wait test-sem-p)\u001b[0m\n\u001b[38;2;248;248;242m  (check-equal? (sem-getvalue test-sem-p) \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  (sem-post test-sem-p)\u001b[0m\n\u001b[38;2;248;248;242m  (check-equal? (sem-getvalue test-sem-p) \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  (sem-post test-sem-p)\u001b[0m\n\u001b[38;2;248;248;242m  (check-equal? (sem-getvalue test-sem-p) \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  (sem-trywait test-sem-p)\u001b[0m\n\u001b[38;2;248;248;242m  (check-equal? (sem-getvalue test-sem-p) \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m;; Can't unlink twice\u001b[0m\n\u001b[38;2;248;248;242m  (check-not-false (sem-unlink test-sem-name))\u001b[0m\n\u001b[38;2;248;248;242m  (check-false (sem-unlink test-sem-name)))\u001b[0m\n\n\n\u001b[38;2;117;113;94m;; Named POSIX shared memory\u001b[0m\n\u001b[38;2;248;248;242m(test-begin\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mdefine\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtest-shm-name\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m\"test-nix-mem-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m\")\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m;; Open and unlink\u001b[0m\n\u001b[38;2;248;248;242m  (shm-unlink test-shm-name)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mdefine\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtest-shm-fd\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(shm-open test-shm-name (+ O_EXCL O_CREAT O_RDWR) #o644))\u001b[0m\n\u001b[38;2;248;248;242m  (check > test-shm-fd \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  (check-not-false (shm-unlink test-shm-name))\u001b[0m\n\u001b[38;2;248;248;242m  (check-false (shm-unlink test-shm-name)))\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Rego/src_test.rego",
    "content": "\u001b[38;2;249;38;114mpackage \u001b[0m\u001b[38;2;248;248;242mk8sazureprocmount\u001b[0m\n\n\u001b[38;2;166;226;46mtest_input_container_not_proc_mount_allowed\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242minput\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;248;248;242m { \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mreview\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;248;248;242minput_review\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mparameters\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;248;248;242minput_parameters_default\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mresults\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mviolation\u001b[0m\u001b[38;2;249;38;114m with \u001b[0m\u001b[38;2;248;248;242minput\u001b[0m\u001b[38;2;249;38;114m as \u001b[0m\u001b[38;2;248;248;242minput\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239mcount\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mresults\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;166;226;46mtest_input_container_proc_mount_not_allowed\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242minput\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;248;248;242m { \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mreview\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;248;248;242minput_review_unmasked\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mparameters\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;248;248;242minput_parameters_default\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mresults\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mviolation\u001b[0m\u001b[38;2;249;38;114m with \u001b[0m\u001b[38;2;248;248;242minput\u001b[0m\u001b[38;2;249;38;114m as \u001b[0m\u001b[38;2;248;248;242minput\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239mcount\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mresults\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;166;226;46mtest_input_container_proc_mount_not_allowed_null_param\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242minput\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;248;248;242m { \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mreview\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;248;248;242minput_review_unmasked\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mparameters\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;190;132;255mnull\u001b[0m\u001b[38;2;248;248;242m }\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mresults\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mviolation\u001b[0m\u001b[38;2;249;38;114m with \u001b[0m\u001b[38;2;248;248;242minput\u001b[0m\u001b[38;2;249;38;114m as \u001b[0m\u001b[38;2;248;248;242minput\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239mcount\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mresults\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;166;226;46mtest_input_container_proc_mount_not_allowed_missing_param\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242minput\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;248;248;242m { \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mreview\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;248;248;242minput_review_unmasked\u001b[0m\u001b[38;2;248;248;242m }\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mresults\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mviolation\u001b[0m\u001b[38;2;249;38;114m with \u001b[0m\u001b[38;2;248;248;242minput\u001b[0m\u001b[38;2;249;38;114m as \u001b[0m\u001b[38;2;248;248;242minput\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239mcount\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mresults\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;166;226;46mtest_input_container_many_not_proc_mount_allowed\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242minput\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;248;248;242m { \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mreview\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;248;248;242minput_review_many\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mparameters\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;248;248;242minput_parameters_default\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mresults\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mviolation\u001b[0m\u001b[38;2;249;38;114m with \u001b[0m\u001b[38;2;248;248;242minput\u001b[0m\u001b[38;2;249;38;114m as \u001b[0m\u001b[38;2;248;248;242minput\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239mcount\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mresults\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;166;226;46mtest_input_container_many_mixed_proc_mount_not_allowed\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242minput\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;248;248;242m { \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mreview\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;248;248;242minput_review_many_mixed\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mparameters\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;248;248;242minput_parameters_default\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mresults\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mviolation\u001b[0m\u001b[38;2;249;38;114m with \u001b[0m\u001b[38;2;248;248;242minput\u001b[0m\u001b[38;2;249;38;114m as \u001b[0m\u001b[38;2;248;248;242minput\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239mcount\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mresults\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;166;226;46mtest_input_container_many_mixed_proc_mount_not_allowed_two\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242minput\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;248;248;242m { \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mreview\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;248;248;242minput_review_many_mixed_two\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mparameters\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;248;248;242minput_parameters_default\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mresults\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mviolation\u001b[0m\u001b[38;2;249;38;114m with \u001b[0m\u001b[38;2;248;248;242minput\u001b[0m\u001b[38;2;249;38;114m as \u001b[0m\u001b[38;2;248;248;242minput\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239mcount\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mresults\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;166;226;46mtest_input_container_proc_mount_case_insensitive\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242minput\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;248;248;242m { \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mreview\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;248;248;242minput_review\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mparameters\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;248;248;242minput_parameters_default_lower\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mresults\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mviolation\u001b[0m\u001b[38;2;249;38;114m with \u001b[0m\u001b[38;2;248;248;242minput\u001b[0m\u001b[38;2;249;38;114m as \u001b[0m\u001b[38;2;248;248;242minput\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239mcount\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mresults\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;166;226;46mtest_input_container_not_proc_mount_unmasked\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242minput\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;248;248;242m { \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mreview\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;248;248;242minput_review\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mparameters\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;248;248;242minput_parameters_unmasked\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mresults\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mviolation\u001b[0m\u001b[38;2;249;38;114m with \u001b[0m\u001b[38;2;248;248;242minput\u001b[0m\u001b[38;2;249;38;114m as \u001b[0m\u001b[38;2;248;248;242minput\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239mcount\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mresults\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;166;226;46mtest_input_container_proc_mount_unmasked\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242minput\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;248;248;242m { \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mreview\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;248;248;242minput_review_unmasked\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mparameters\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;248;248;242minput_parameters_unmasked\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mresults\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mviolation\u001b[0m\u001b[38;2;249;38;114m with \u001b[0m\u001b[38;2;248;248;242minput\u001b[0m\u001b[38;2;249;38;114m as \u001b[0m\u001b[38;2;248;248;242minput\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239mcount\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mresults\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;166;226;46mtest_input_container_many_mixed_proc_mount_allowed_two\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242minput\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;248;248;242m { \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mreview\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;248;248;242minput_review_many_mixed_two\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mparameters\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;248;248;242minput_parameters_unmasked\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mresults\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mviolation\u001b[0m\u001b[38;2;249;38;114m with \u001b[0m\u001b[38;2;248;248;242minput\u001b[0m\u001b[38;2;249;38;114m as \u001b[0m\u001b[38;2;248;248;242minput\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239mcount\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mresults\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;166;226;46minput_review\u001b[0m\u001b[38;2;248;248;242m =\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mobject\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: {\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mmetadata\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: {\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mname\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mnginx\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m        },\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mspec\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: {\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mcontainers\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;248;248;242minput_containers_one\u001b[0m\n\u001b[38;2;248;248;242m        }\u001b[0m\n\u001b[38;2;248;248;242m    }\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;166;226;46minput_review_unmasked\u001b[0m\u001b[38;2;248;248;242m =\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mobject\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: {\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mmetadata\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: {\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mname\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mnginx\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m        },\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mspec\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: {\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mcontainers\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;248;248;242minput_containers_one_unmasked\u001b[0m\n\u001b[38;2;248;248;242m        }\u001b[0m\n\u001b[38;2;248;248;242m    }\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;166;226;46minput_review_many\u001b[0m\u001b[38;2;248;248;242m =\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mobject\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: {\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mmetadata\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: {\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mname\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mnginx\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m        },\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mspec\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: {\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mcontainers\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;248;248;242minput_containers_many\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116minitContainers\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;248;248;242minput_containers_one\u001b[0m\n\u001b[38;2;248;248;242m        }\u001b[0m\n\u001b[38;2;248;248;242m    }\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;166;226;46minput_review_many_mixed\u001b[0m\u001b[38;2;248;248;242m =\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mobject\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: {\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mmetadata\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: {\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mname\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mnginx\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m        },\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mspec\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: {\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mcontainers\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;248;248;242minput_containers_many\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116minitContainers\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;248;248;242minput_containers_one_unmasked\u001b[0m\n\u001b[38;2;248;248;242m        }\u001b[0m\n\u001b[38;2;248;248;242m    }\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;166;226;46minput_review_many_mixed_two\u001b[0m\u001b[38;2;248;248;242m =\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mobject\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: {\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mmetadata\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: {\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mname\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mnginx\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m        },\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mspec\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: {\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mcontainers\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;248;248;242minput_containers_many_mixed\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116minitContainers\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;248;248;242minput_containers_one_unmasked\u001b[0m\n\u001b[38;2;248;248;242m        }\u001b[0m\n\u001b[38;2;248;248;242m    }\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;166;226;46minput_containers_one\u001b[0m\u001b[38;2;248;248;242m =\u001b[0m\u001b[38;2;248;248;242m [\u001b[0m\n\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mname\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mnginx\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mimage\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mnginx\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116msecurityContext\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: {\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mprocMount\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mDefault\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m    }\u001b[0m\n\u001b[38;2;248;248;242m}]\u001b[0m\n\n\u001b[38;2;166;226;46minput_containers_one_unmasked\u001b[0m\u001b[38;2;248;248;242m =\u001b[0m\u001b[38;2;248;248;242m [\u001b[0m\n\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mname\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mnginx\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mimage\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mnginx\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116msecurityContext\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: {\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mprocMount\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mUnmasked\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m    }\u001b[0m\n\u001b[38;2;248;248;242m}]\u001b[0m\n\n\u001b[38;2;166;226;46minput_containers_many\u001b[0m\u001b[38;2;248;248;242m =\u001b[0m\u001b[38;2;248;248;242m [\u001b[0m\n\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mname\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mnginx\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mimage\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mnginx\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116msecurityContext\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: {\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mprocMount\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mDefault\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m    }\u001b[0m\n\u001b[38;2;248;248;242m},\u001b[0m\n\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mname\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mnginx1\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mimage\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mnginx\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m},\u001b[0m\n\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mname\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mnginx2\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mimage\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mnginx\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116msecurityContext\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: {\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mrunAsUser\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m1000\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m    }\u001b[0m\n\u001b[38;2;248;248;242m}]\u001b[0m\n\n\u001b[38;2;166;226;46minput_containers_many_mixed\u001b[0m\u001b[38;2;248;248;242m =\u001b[0m\u001b[38;2;248;248;242m [\u001b[0m\n\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mname\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mnginx\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mimage\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mnginx\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116msecurityContext\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: {\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mprocMount\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mDefault\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m    }\u001b[0m\n\u001b[38;2;248;248;242m},\u001b[0m\n\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mname\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mnginx1\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mimage\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mnginx\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116msecurityContext\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: {\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mprocMount\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mUnmasked\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m    }\u001b[0m\n\u001b[38;2;248;248;242m}]\u001b[0m\n\n\u001b[38;2;166;226;46minput_parameters_default\u001b[0m\u001b[38;2;248;248;242m =\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m     \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mprocMount\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mDefault\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;166;226;46minput_parameters_default_lower\u001b[0m\u001b[38;2;248;248;242m =\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m     \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mprocMount\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mdefault\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;166;226;46minput_parameters_unmasked\u001b[0m\u001b[38;2;248;248;242m =\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m     \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mprocMount\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mUnmasked\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Regular Expression/test.re",
    "content": "\u001b[38;2;249;38;114m^\u001b[0m\u001b[38;2;190;132;255m\\[\u001b[0m\u001b[38;2;248;248;242mS\u001b[0m\u001b[38;2;248;248;242mT\u001b[0m\u001b[38;2;248;248;242mA\u001b[0m\u001b[38;2;248;248;242mR\u001b[0m\u001b[38;2;248;248;242mT\u001b[0m\u001b[38;2;190;132;255m\\]\u001b[0m\u001b[38;2;249;38;114m\\d\u001b[0m\u001b[38;2;249;38;114m\\D\u001b[0m\u001b[38;2;249;38;114m\\h\u001b[0m\u001b[38;2;249;38;114m\\H\u001b[0m\u001b[38;2;249;38;114m\\s\u001b[0m\u001b[38;2;249;38;114m\\S\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;190;132;255ma\u001b[0m\u001b[38;2;190;132;255m-z\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;249;38;114m\\v\u001b[0m\u001b[38;2;249;38;114m\\V\u001b[0m\u001b[38;2;249;38;114m\\w\u001b[0m\u001b[38;2;249;38;114m\\W\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;190;132;255ma\u001b[0m\u001b[38;2;190;132;255m-z\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m{3,5}\u001b[0m\u001b[38;2;190;132;255m\\[\u001b[0m\u001b[38;2;248;248;242mE\u001b[0m\u001b[38;2;248;248;242mN\u001b[0m\u001b[38;2;248;248;242mD\u001b[0m\u001b[38;2;190;132;255m\\]\u001b[0m\u001b[38;2;249;38;114m$\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Requirements.txt/requirements.txt",
    "content": "\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Options\u001b[0m\n\u001b[38;2;166;226;46m--allow-external\u001b[0m\n\u001b[38;2;166;226;46m--allow-unverified\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Freeze packages\u001b[0m\n\u001b[3;38;2;253;151;31malabaster\u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;190;132;255m0.7.6\u001b[0m\n\u001b[3;38;2;253;151;31mBabel\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;190;132;255m2.9.1\u001b[0m\n\u001b[3;38;2;253;151;31mdocutils\u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;190;132;255m0.12\u001b[0m\n\u001b[3;38;2;253;151;31mgevent_subprocess\u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;190;132;255m0.1.2\u001b[0m\n\u001b[3;38;2;253;151;31mgitpython\u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;190;132;255m3.0.7\u001b[0m\n\u001b[3;38;2;253;151;31mhg-diff\u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;190;132;255m1.2.4\u001b[0m\n\u001b[3;38;2;253;151;31mJinja2\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;190;132;255m2.8.1\u001b[0m\n\u001b[3;38;2;253;151;31mMarkupSafe\u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;190;132;255m0.23\u001b[0m\n\u001b[3;38;2;253;151;31mPygments\u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;190;132;255m2.7.4\u001b[0m\n\u001b[3;38;2;253;151;31mpytz\u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;190;132;255m2015.7\u001b[0m\n\u001b[3;38;2;253;151;31msix\u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;190;132;255m1.10.0\u001b[0m\n\u001b[3;38;2;253;151;31msnowballstemmer\u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;190;132;255m1.2.0\u001b[0m\n\u001b[3;38;2;253;151;31mSphinx\u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;190;132;255m1.3.3\u001b[0m\n\u001b[3;38;2;253;151;31msphinx-rtd-theme\u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;190;132;255m0.1.9\u001b[0m\n\u001b[3;38;2;253;151;31msvn\u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;190;132;255m1.0.1\u001b[0m\n\u001b[3;38;2;253;151;31mzope.interface\u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;190;132;255m4.2.0\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Examples from PEP508\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m c.f. https://www.python.org/dev/peps/pep-0508/\u001b[0m\n\u001b[3;38;2;253;151;31mrequests\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242msecurity\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242mtests\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2.8.1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2.8.*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mpython_version\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m2.7\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Comment\u001b[0m\n\u001b[3;38;2;253;151;31mpip\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;166;226;46m@ \u001b[0m\u001b[4;38;2;166;226;46mhttps://github.com/pypa/pip/archive/1.3.1.zip#sha1=da9234ee9982d4bbb3c72346a6de940a148ea686\u001b[0m\n\u001b[3;38;2;253;151;31mname\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;166;226;46m@ \u001b[0m\u001b[4;38;2;166;226;46mgopher:/foo/com\"\u001b[0m\n\u001b[3;38;2;253;151;31mfoobar\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mquux\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mos_name\u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m VCS repositories\u001b[0m\n\u001b[38;2;166;226;46m-e\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;166;226;46mgit+git://git.myproject.org/MyProject#egg=MyProject\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Git\u001b[0m\n\u001b[38;2;166;226;46m-e\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;166;226;46mgit://git.myproject.org/MyProject.git@v1.0#egg=MyProject\u001b[0m\n\u001b[38;2;166;226;46m-e\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;166;226;46mhg+https://hg.myproject.org/MyProject#egg=MyProject\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Mercurial\u001b[0m\n\u001b[38;2;166;226;46m-e\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;166;226;46mhg+http://hg.myproject.org/MyProject@da39a3ee5e6b#egg=MyProject\u001b[0m\n\u001b[38;2;166;226;46m-e\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;166;226;46msvn+http://svn.myproject.org/svn/MyProject/trunk@2019#egg=MyProject\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Subversion\u001b[0m\n\u001b[38;2;166;226;46m-e\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;166;226;46mbzr+ssh://user@myproject.org/MyProject/trunk#egg=MyProject\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Bazaar\u001b[0m\n\u001b[38;2;166;226;46m-e\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;166;226;46mbzr+https://bzr.myproject.org/MyProject/trunk@2019#egg=MyProject\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Project or archive URL\u001b[0m\n\u001b[4;38;2;166;226;46mhttps://github.com/pallets/click/archive/7.0.zip#egg=click\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Robot Framework/recipe141_aws_simple_storage_service.robot",
    "content": "\u001b[38;2;230;219;116m*** Settings ***\u001b[0m\n\u001b[38;2;117;113;94mDocumentation     PROBLEM:\u001b[0m\n\u001b[38;2;117;113;94m...               You want to test the existence of a file in an AWS S3 bucket\u001b[0m\n\u001b[38;2;117;113;94m...               without using lower level Python code or developing a custom library.\u001b[0m\n\u001b[38;2;117;113;94m...               DISCUSSION:\u001b[0m\n\u001b[38;2;117;113;94m...               This recipe demonstrates:\u001b[0m\n\u001b[38;2;117;113;94m...               - using a Suite Teardown to end the test suite cleanly\u001b[0m\n\u001b[38;2;117;113;94m...               - using keywords from an external library\u001b[0m\n\u001b[38;2;117;113;94m...               - accessing OS Environment Variables directly using %{} syntax\u001b[0m\n\u001b[38;2;117;113;94m...               This recipe has the following external dependencies:\u001b[0m\n\u001b[38;2;117;113;94m...               $ pip install --upgrade robotframework-aws\u001b[0m\n\u001b[38;2;117;113;94m...               This recipe also requires the following OS environment variables:\u001b[0m\n\u001b[38;2;117;113;94m...               AWS_ACCESS_KEY_ID\u001b[0m\n\u001b[38;2;117;113;94m...               AWS_SECRET_ACCESS_KEY\u001b[0m\n\u001b[38;2;190;132;255mSuite Teardown  \u001b[0m\u001b[38;2;248;248;242m  Delete All Sessions\u001b[0m\n\u001b[38;2;190;132;255mLibrary  \u001b[0m\u001b[38;2;248;248;242m         AWSLibrary\u001b[0m\n\u001b[38;2;190;132;255mForce Tags  \u001b[0m\u001b[38;2;248;248;242m      no-ci-testing\u001b[0m\n\n\u001b[38;2;230;219;116m*** Variables ***\u001b[0m\n\u001b[4;38;2;102;217;239m${recipe}\u001b[0m\u001b[38;2;248;248;242m         Recipe 14.1 AWS Simple Storage Service\u001b[0m\n\u001b[4;38;2;102;217;239m${level}\u001b[0m\u001b[38;2;248;248;242m          Intermediate\u001b[0m\n\u001b[4;38;2;102;217;239m${category}\u001b[0m\u001b[38;2;248;248;242m       External Library: AWSLibrary\u001b[0m\n\u001b[4;38;2;102;217;239m${REGION}\u001b[0m\u001b[38;2;248;248;242m         us-east-1\u001b[0m\n\u001b[4;38;2;102;217;239m${BUCKET}\u001b[0m\u001b[38;2;248;248;242m         YOUR_BUCKET_NAME_GOES_HERE\u001b[0m\n\u001b[4;38;2;102;217;239m${KEY}\u001b[0m\u001b[38;2;248;248;242m            YOUR_FILE_PATH_GOES_HERE\u001b[0m\n\n\u001b[38;2;230;219;116m*** Test Cases ***\u001b[0m\n\u001b[38;2;249;38;114mCheck Key Exists In Bucket\u001b[0m\n\u001b[38;2;248;248;242m    Log Variables\u001b[0m\n\u001b[38;2;248;248;242m    Create Session With Keys    \u001b[0m\u001b[4;38;2;102;217;239m${REGION}\u001b[0m\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;253;151;31m%{AWS_ACCESS_KEY_ID}\u001b[0m\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;253;151;31m%{AWS_SECRET_ACCESS_KEY}\u001b[0m\n\u001b[38;2;248;248;242m    Key Should Exist            \u001b[0m\u001b[4;38;2;102;217;239m${BUCKET}\u001b[0m\u001b[38;2;248;248;242m    \u001b[0m\u001b[4;38;2;102;217;239m${KEY}\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Ruby/output.rb",
    "content": "\u001b[3;38;2;249;38;114mclass\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[4;38;2;102;217;239mRepeatedSubstring\u001b[0m\n\u001b[38;2;166;226;46m  \u001b[0m\u001b[3;38;2;249;38;114mdef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;246;170;17mfind_repeated_substring\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[3;38;2;253;151;31ms\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m catch the edge cases\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m'\u001b[0m\u001b[38;2;230;219;116mNONE\u001b[0m\u001b[38;2;249;38;114m'\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m s \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m'\u001b[0m\u001b[38;2;249;38;114m'\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m check if the string consists of only one character => \"aaaaaa\" => \"a\"\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m s\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242msplit\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;249;38;114m'\u001b[0m\u001b[38;2;249;38;114m'\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242muniq\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m s\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242msplit\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;249;38;114m'\u001b[0m\u001b[38;2;249;38;114m'\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242muniq\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mlength \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\n\u001b[38;2;248;248;242m    searched \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m    longest_prefix \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;248;248;242m    long_prefix \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m'\u001b[0m\u001b[38;2;249;38;114m'\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m..\u001b[0m\u001b[38;2;248;248;242ms\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mlength \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242meach \u001b[0m\u001b[38;2;249;38;114mdo\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;253;151;31mi\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mnext\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m searched\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239minclude?\u001b[0m\u001b[38;2;248;248;242m s\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\n\u001b[38;2;248;248;242m      searched\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mpush\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;248;248;242ms\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m      next_occurrences \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m next_index\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;248;248;242ms\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m i \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m s\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m      next_occurrences\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242meach \u001b[0m\u001b[38;2;249;38;114mdo\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;253;151;31mnext_occurrence\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mnext\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m next_occurrence \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\n\u001b[38;2;248;248;242m        prefix \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m ge_prefix\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;248;248;242ms\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m..\u001b[0m\u001b[38;2;248;248;242mnext_occurrence \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m s\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mnext_occurrence\u001b[0m\u001b[38;2;249;38;114m..\u001b[0m\u001b[38;2;248;248;242ms\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mlength\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m prefix\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mlength \u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;248;248;242m longest_prefix\u001b[0m\n\u001b[38;2;248;248;242m          longest_prefix \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m prefix\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mlength\u001b[0m\n\u001b[38;2;248;248;242m          long_prefix \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m prefix\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m if prefix == \"       \" it is a invalid sequence\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m'\u001b[0m\u001b[38;2;230;219;116mNONE\u001b[0m\u001b[38;2;249;38;114m'\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m long_prefix\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mstrip\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mempty?\u001b[0m\n\n\u001b[38;2;248;248;242m    long_prefix\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;249;38;114mdef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;246;170;17mget_prefix\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[3;38;2;253;151;31ms1\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31ms2\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m    prefix \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m'\u001b[0m\u001b[38;2;249;38;114m'\u001b[0m\n\u001b[38;2;248;248;242m    min_length \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242ms1\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mlength\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m s2\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mlength\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mmin\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m'\u001b[0m\u001b[38;2;249;38;114m'\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m s1\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mnil?\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m||\u001b[0m\u001b[38;2;248;248;242m s2\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mnil?\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m..\u001b[0m\u001b[38;2;248;248;242mmin_length \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242meach \u001b[0m\u001b[38;2;249;38;114mdo\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;253;151;31mi\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m prefix \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m s1\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m!=\u001b[0m\u001b[38;2;248;248;242m s2\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\n\u001b[38;2;248;248;242m      prefix \u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;248;248;242m s1\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\u001b[38;2;248;248;242m    prefix\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;249;38;114mdef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;246;170;17mnext_index\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[3;38;2;253;151;31mseq\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mindex\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mvalue\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m    indexes \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;102;217;239mindex\u001b[0m\u001b[38;2;249;38;114m..\u001b[0m\u001b[38;2;248;248;242mseq\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mlength\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242meach \u001b[0m\u001b[38;2;249;38;114mdo\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;253;151;31mi\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\n\u001b[38;2;248;248;242m      indexes\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mpush\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m seq\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m value\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\u001b[38;2;248;248;242m    indexes\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;249;38;114mdef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;246;170;17mfind_repeated_substring_file\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[3;38;2;253;151;31mfile_path\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239mFile\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mopen\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;248;248;242mfile_path\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mread\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242meach_line\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mmap \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;253;151;31mline\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[38;2;248;248;242m find_repeated_substring\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;248;248;242mline\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\u001b[38;2;249;38;114mend\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Ruby Haml/test.html.haml",
    "content": "\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;249;38;114mhtml\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;249;38;114mhead\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;249;38;114mtitle\u001b[0m\u001b[38;2;248;248;242m Test Title\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;249;38;114mbody\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;249;38;114mnavigation\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mrender\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;246;240;128m:\u001b[0m\u001b[38;2;246;240;128mpartial\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m\"\u001b[0m\u001b[38;2;230;219;116mnavigation_top\u001b[0m\u001b[38;2;249;38;114m\"\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;249;38;114mh1\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m page\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mtitle\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;249;38;114mp\u001b[0m\n\u001b[38;2;248;248;242m      Here is a point to emphasize:\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;249;38;114mstrong\u001b[0m\u001b[38;2;249;38;114m.highlighted\u001b[0m\u001b[38;2;249;38;114m#search_item_found\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m item1\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mtext\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;249;38;114mspan\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;246;240;128m:\u001b[0m\u001b[38;2;246;240;128mclass\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m\"\u001b[0m\u001b[38;2;230;219;116mfancy\u001b[0m\u001b[38;2;249;38;114m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;246;240;128m:\u001b[0m\u001b[38;2;246;240;128mid\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m\"\u001b[0m\u001b[38;2;230;219;116mfancy1\u001b[0m\u001b[38;2;249;38;114m\"\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m item2\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mtext\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114m.special\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m special\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mtext\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;249;38;114mol\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;249;38;114mli\u001b[0m\u001b[38;2;248;248;242m First\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;249;38;114mli\u001b[0m\u001b[38;2;248;248;242m Second\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Ruby On Rails/test.rb",
    "content": "\u001b[3;38;2;249;38;114mclass\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[4;38;2;102;217;239mContactsController\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;166;226;46m<\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[3;4;38;2;166;226;46mApplicationController\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;249;38;114mdef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;246;170;17mnew\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;246;170;17m@\u001b[0m\u001b[38;2;255;255;255mcontact\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mContact\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;166;226;46mnew\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;249;38;114mdef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;246;170;17mcreate\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;246;170;17m@\u001b[0m\u001b[38;2;255;255;255mcontact\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mContact\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;166;226;46mnew\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;248;248;242msecure_params\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;246;170;17m@\u001b[0m\u001b[38;2;255;255;255mcontact\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mvalid?\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;102;217;239mUserMailer\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mcontact_email\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;246;170;17m@\u001b[0m\u001b[38;2;255;255;255mcontact\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mdeliver_now\u001b[0m\n\u001b[38;2;248;248;242m      flash\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;246;240;128m:\u001b[0m\u001b[38;2;246;240;128mnotice\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m\"\u001b[0m\u001b[38;2;230;219;116mMessage sent from \u001b[0m\u001b[38;2;248;248;242m#{\u001b[0m\u001b[38;2;246;170;17m@\u001b[0m\u001b[38;2;255;255;255mcontact\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mname\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;249;38;114m\"\u001b[0m\n\u001b[38;2;248;248;242m      redirect_to root_path\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;248;248;242m      render \u001b[0m\u001b[38;2;246;240;128m:\u001b[0m\u001b[38;2;246;240;128mnew\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mprivate\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;249;38;114mdef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;246;170;17msecure_params\u001b[0m\n\u001b[38;2;248;248;242m    params\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;249;38;114mrequire\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;246;240;128m:\u001b[0m\u001b[38;2;246;240;128mcontact\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mpermit\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;246;240;128m:\u001b[0m\u001b[38;2;246;240;128mname\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;246;240;128m:\u001b[0m\u001b[38;2;246;240;128memail\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;246;240;128m:\u001b[0m\u001b[38;2;246;240;128mcontent\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\u001b[38;2;249;38;114mend\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Rust/output.rs",
    "content": "\u001b[38;2;249;38;114muse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mstd\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242mio\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;255;255;255mself\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m Write\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m#\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mcfg\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mfeature \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mpaging\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;249;38;114muse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mstd\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242mprocess\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242mChild\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;249;38;114muse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mcrate\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242merror\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m#\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mcfg\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mfeature \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mpaging\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;249;38;114muse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mcrate\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242mless\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242mretrieve_less_version\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m#\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mcfg\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mfeature \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mpaging\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;249;38;114muse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mcrate\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242mpaging\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242mPagingMode\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m#\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mderive\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mDebug\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;249;38;114mpub\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239menum\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mOutputType\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m#\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mcfg\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mfeature \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mpaging\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m    Pager\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mChild\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    Stdout\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mio\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242mStdout\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[3;38;2;102;217;239mimpl\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mOutputType\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m#\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mcfg\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mfeature \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mpaging\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mpub\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mfn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mfrom_mode\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mmode\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m PagingMode, \u001b[0m\u001b[3;38;2;253;151;31mpager\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mOption\u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[38;2;249;38;114m&\u001b[0m\u001b[3;38;2;102;217;239mstr\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mResult\u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;102;217;239mSelf\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114muse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mself\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242mPagingMode\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[3;38;2;166;226;46mOk\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mmatch\u001b[0m\u001b[38;2;248;248;242m mode \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m            Always \u001b[0m\u001b[38;2;249;38;114m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mOutputType\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242mtry_pager\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255mfalse\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m pager\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m            QuitIfOneScreen \u001b[0m\u001b[38;2;249;38;114m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mOutputType\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242mtry_pager\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m pager\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114m_\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mOutputType\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242mstdout\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m///\u001b[0m\u001b[38;2;117;113;94m Try to launch the pager. Fall back to stdout in case of errors.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m#\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mcfg\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mfeature \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mpaging\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mfn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtry_pager\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mquit_if_one_screen\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mbool\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;253;151;31mpager_from_config\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mOption\u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[38;2;249;38;114m&\u001b[0m\u001b[3;38;2;102;217;239mstr\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mResult\u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;102;217;239mSelf\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114muse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mstd\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242menv\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114muse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mstd\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242mffi\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242mOsString\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114muse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mstd\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242mpath\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242mPathBuf\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114muse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mstd\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242mprocess\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242mCommand\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m Stdio\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mmut\u001b[0m\u001b[38;2;248;248;242m replace_arguments_to_less \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mfalse\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m pager_from_env \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mmatch\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242menv\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242mvar\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mBAT_PAGER\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242menv\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242mvar\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mPAGER\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;166;226;46mOk\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mbat_pager\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m_\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mSome\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mbat_pager\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114m_\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mOk\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mpager\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m less needs to be called with the '-R' option in order to properly interpret the\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m ANSI color sequences printed by bat. If someone has set PAGER=\"less -F\", we\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m therefore need to overwrite the arguments and add '-R'.\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m We only do this for PAGER (as it is not specific to 'bat'), not for BAT_PAGER\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m or bats '--pager' command line option.\u001b[0m\n\u001b[38;2;248;248;242m                replace_arguments_to_less \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[3;38;2;166;226;46mSome\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mpager\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114m_\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mNone\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m pager_from_config \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m pager_from_config\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mmap\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;253;151;31mp\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mp\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mto_string\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m pager_from_config\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mis_some\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m            replace_arguments_to_less \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mfalse\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m pager \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m pager_from_config\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mor\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mpager_from_env\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239munwrap_or_else\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mString\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242mfrom\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mless\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m pagerflags \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242mshell_words\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242msplit\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114m&\u001b[0m\u001b[38;2;248;248;242mpager\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mchain_err\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mCould not parse pager command.\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mmatch\u001b[0m\u001b[38;2;248;248;242m pagerflags\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239msplit_first\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[3;38;2;166;226;46mSome\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mpager_name\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m args\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mmut\u001b[0m\u001b[38;2;248;248;242m pager_path \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mPathBuf\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242mfrom\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mpager_name\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m pager_path\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mfile_stem\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mSome\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114m&\u001b[0m\u001b[38;2;248;248;242mOsString\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242mfrom\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mbat\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m                    pager_path \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mPathBuf\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242mfrom\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mless\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m is_less \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m pager_path\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mfile_stem\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mSome\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114m&\u001b[0m\u001b[38;2;248;248;242mOsString\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242mfrom\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mless\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mmut\u001b[0m\u001b[38;2;248;248;242m process \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m is_less \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mmut\u001b[0m\u001b[38;2;248;248;242m p \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mCommand\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242mnew\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114m&\u001b[0m\u001b[38;2;248;248;242mpager_path\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m args\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mis_empty\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m||\u001b[0m\u001b[38;2;248;248;242m replace_arguments_to_less \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m                        p\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239marg\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m--RAW-CONTROL-CHARS\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m quit_if_one_screen \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m                            p\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239marg\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m--quit-if-one-screen\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Passing '--no-init' fixes a bug with '--quit-if-one-screen' in older\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m versions of 'less'. Unfortunately, it also breaks mouse-wheel support.\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m See: http://www.greenwoodsoftware.com/less/news.530.html\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m For newer versions (530 or 558 on Windows), we omit '--no-init' as it\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m is not needed anymore.\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;249;38;114mmatch\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mretrieve_less_version\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[3;38;2;166;226;46mNone\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m                                p\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239marg\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m--no-init\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[3;38;2;166;226;46mSome\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mversion\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m                                \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mversion \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m530\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m||\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mcfg!\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mwindows\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;248;248;242m version \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m558\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=>\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m                                p\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239marg\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m--no-init\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;249;38;114m_\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m                        p\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239margs\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242margs\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m                    p\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239menv\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mLESSCHARSET\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mUTF-8\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m                    p\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mmut\u001b[0m\u001b[38;2;248;248;242m p \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mCommand\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242mnew\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114m&\u001b[0m\u001b[38;2;248;248;242mpager_path\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m                    p\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239margs\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242margs\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m                    p\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[3;38;2;166;226;46mOk\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mprocess\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mstdin\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mStdio\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242mpiped\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mspawn\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mmap\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mOutputType\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242mPager\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239munwrap_or_else\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[38;2;248;248;242m_\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mOutputType\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242mstdout\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[3;38;2;166;226;46mNone\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mOk\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mOutputType\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242mstdout\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mpub\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mcrate\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mfn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mstdout\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mSelf\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242mOutputType\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242mStdout\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mio\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242mstdout\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m#\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mcfg\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mfeature \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mpaging\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mpub\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mcrate\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mfn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mis_pager\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114m&\u001b[0m\u001b[3;38;2;253;151;31mself\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mbool\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mOutputType\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242mPager\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114m_\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mself\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;190;132;255mfalse\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m#\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mcfg\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mnot\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mfeature \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mpaging\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mpub\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mcrate\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mfn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mis_pager\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114m&\u001b[0m\u001b[3;38;2;253;151;31mself\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mbool\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;190;132;255mfalse\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mpub\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mfn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mhandle\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114m&\u001b[0m\u001b[38;2;249;38;114mmut\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mself\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mResult\u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[38;2;249;38;114m&\u001b[0m\u001b[38;2;249;38;114mmut\u001b[0m\u001b[38;2;248;248;242m dyn Write\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[3;38;2;166;226;46mOk\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mmatch\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;255;255;255mself\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242m#\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mcfg\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mfeature \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mpaging\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242mOutputType\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242mPager\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mref\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mmut\u001b[0m\u001b[38;2;248;248;242m command\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=>\u001b[0m\u001b[38;2;248;248;242m command\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mstdin\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mas_mut\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mchain_err\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mCould not open stdin for pager\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242mOutputType\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242mStdout\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mref\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mmut\u001b[0m\u001b[38;2;248;248;242m handle\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=>\u001b[0m\u001b[38;2;248;248;242m handle\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m#\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mcfg\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mfeature \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mpaging\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[3;38;2;102;217;239mimpl\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mDrop \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mOutputType\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mfn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mdrop\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114m&\u001b[0m\u001b[38;2;249;38;114mmut\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mself\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mOutputType\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242mPager\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mref\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mmut\u001b[0m\u001b[38;2;248;248;242m command\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;255;255;255mself\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m_\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m command\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mwait\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/SCSS/example.scss",
    "content": "\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mfonts\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;248;248;242mtheme_dark\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mbackground-color\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;190;132;255mnull\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;248;248;242mtheme_main\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mtext-size\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;190;132;255mem\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mtext-color\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;102;217;239mblack\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mtext-shadow\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;190;132;255m#\u001b[0m\u001b[38;2;190;132;255m36ad\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;190;132;255mpx\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;190;132;255mpx\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;190;132;255mpx\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mcard-background\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;190;132;255m#\u001b[0m\u001b[38;2;190;132;255md6f\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mcard-shadow\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;190;132;255m#\u001b[0m\u001b[38;2;190;132;255m11121212\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;190;132;255mpx\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;190;132;255mpx\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;190;132;255mpx\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;190;132;255mpx\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mcard-padding\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;190;132;255mrem\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mcard-margin\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;190;132;255m.\u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;190;132;255min\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mimage-width\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;190;132;255m600\u001b[0m\u001b[38;2;190;132;255mpx\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mimage-height\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;190;132;255m100\u001b[0m\u001b[38;2;190;132;255mvh\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mbackground-color\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;190;132;255m#\u001b[0m\u001b[38;2;190;132;255mdedbef\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mi-ran-out-of-placeholders-for-units\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;190;132;255mvw\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m100\u001b[0m\u001b[38;2;190;132;255m%\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m60\u001b[0m\u001b[38;2;190;132;255mpt\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\n\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;248;248;242mcurrent_theme\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mtheme_main\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\n\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114mmixin\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mthemed\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;248;248;242mcurrent_theme\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mtheme_main\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m!global\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114mcontent\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114mmedia\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;248;248;242mprefers\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[3;38;2;166;226;46mcolor\u001b[0m\u001b[38;2;248;248;242m-scheme\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m dark\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \t\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;248;248;242mcurrent_theme\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mtheme_dark\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m!global\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m  \t\u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114mcontent\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;255;255;255m#\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mdark\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m&\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;248;248;242mcurrent_theme\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mtheme_dark\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m!global\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114mcontent\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtheme\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[3;38;2;255;255;255m$\u001b[0m\u001b[3;38;2;253;151;31mvariable\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mmap-has_key\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mcurrent_theme\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mvariable\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mmap-get\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mcurrent_theme\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mvariable\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114merror\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mUnknown theme variable: \u001b[0m\u001b[38;2;255;255;255m#\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mvariable\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;249;38;114mbody\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114minclude\u001b[0m\u001b[38;2;248;248;242m themed\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mbackground-color\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mtheme\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mbackground-color\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mbackground-image\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239murl\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mhttps://github.com/sharkdp/bat/raw/master/doc/logo-header.svg\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mheader\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mdata-selectable\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mfalse\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;166;226;46m-webkit-\u001b[0m\u001b[3;38;2;102;217;239muser-select\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mnone\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;166;226;46m-moz-\u001b[0m\u001b[3;38;2;102;217;239muser-select\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mnone\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;166;226;46m-ms-\u001b[0m\u001b[3;38;2;102;217;239muser-select\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m/\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mCSS\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mcomment\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m/\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mnone\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mcursor\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mdefault\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m!important\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m SCSS comment\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mdiv\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mborder\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m#\u001b[0m\u001b[38;2;190;132;255m04f\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;190;132;255mpx\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239msolid\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114m&\u001b[0m\u001b[38;2;166;226;46m::\u001b[0m\u001b[38;2;166;226;46mafter\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[3;38;2;102;217;239mcontent\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mPseudo\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[3;38;2;102;217;239mcolor\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m#\u001b[0m\u001b[38;2;190;132;255m2F5F7F\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[3;38;2;102;217;239mbox-sizing\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mborder-box\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114mkeyframes\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mrotate\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;190;132;255m%\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mtransform\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mrotate\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;190;132;255mdeg\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;190;132;255m50\u001b[0m\u001b[38;2;190;132;255m%\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mtransform\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mrotate\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;190;132;255m180\u001b[0m\u001b[38;2;190;132;255mdeg\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;190;132;255m100\u001b[0m\u001b[38;2;190;132;255m%\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[3;38;2;102;217;239mtransform\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mrotate\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;190;132;255mrad\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114mfont-face\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mfont-family\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mExample Font\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239msrc\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239murl\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116mexample.ttf\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mformat\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mttf\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239msrc\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mlocal\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mComic Sans MS\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/SLS/test.sls",
    "content": "\u001b[38;2;249;38;114mrequired_packages\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mpkg.installed\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mpkgs\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;248;248;242m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mgit\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;248;248;242m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mperl\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;248;248;242m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mfortune\u001b[0m\n\n\u001b[38;2;249;38;114mcowsay_source\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mgit.latest\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mname\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mhttps://github.com/jasonm23/cowsay.git\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mtarget\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m/root/cowsay\u001b[0m\n\n\u001b[38;2;249;38;114mrun_installer\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mcmd.run\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mname\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m./install.sh /usr/local\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mcwd\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m/root/cowsay\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114monchanges\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;248;248;242m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mgit\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mcowsay_source\u001b[0m\n\n\u001b[38;2;166;226;46m{%\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mset\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mcowfiles\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255msalt\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;255;255;255mcmd\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;255;255;255mrun\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mcowsay -l\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;255;255;255msplit\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;190;132;255m\\n\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m1\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m%}\u001b[0m\n\u001b[38;2;166;226;46m{%\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mset\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mascii_arts\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mcowfiles\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mjoin\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m%}\u001b[0m\n\n\u001b[38;2;166;226;46m{%\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mascii_art\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mascii_arts\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;255;255;255msplit\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m%}\u001b[0m\n\u001b[38;2;249;38;114mrun_cowsay_{{ ascii_art }}\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;117;113;94m \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m name must be unique\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mcmd.run\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46m{%\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mascii_art\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255min\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mhead-in\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116msodomized\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mtelebears\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m%}\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mname\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mecho cowsay -f {{ ascii_art }} should not be used\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46m{%\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m%}\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mname\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mfortune | cowsay -f {{ ascii_art }}\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46m{%\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mendif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m%}\u001b[0m\n\u001b[38;2;166;226;46m{%\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mendfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m%}\u001b[0m\n\n\u001b[38;2;249;38;114mecho_pillar_demo_1\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mcmd.run\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mname\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mecho {{ pillar.demo_text | default('pillar not defined') }}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\n\u001b[38;2;249;38;114mecho_pillar_demo_2\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mcmd.run\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mname\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mecho {{ pillar.demo.text | default('pillar not defined') }}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Comment\u001b[0m\n\u001b[38;2;166;226;46m{%\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mset\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mrand\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255msalt\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mrandom.get_str\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m20\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m%}\u001b[0m\n\u001b[38;2;166;226;46m{%\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mset\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mIP_Address\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mpillar\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mIP_Address\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m%}\u001b[0m\n\n\u001b[38;2;249;38;114mwait\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mcmd.run\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mname\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116msleep 210\u001b[0m\u001b[38;2;117;113;94m  \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m another comment\u001b[0m\n\n\u001b[38;2;249;38;114mcreate_roster_file\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mfile.managed\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mname\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m/tmp/salt-roster-{{ rand }}\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mcontents\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;248;248;242m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mswitch:\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;248;248;242m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m  host: {{ IP_Address }}\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;248;248;242m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m  user: test\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;248;248;242m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m  passwd: {{ passwd }}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/SML/sample.sml",
    "content": "\u001b[38;2;249;38;114mval\u001b[0m\u001b[38;2;248;248;242m x = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\n\u001b[38;2;249;38;114mval\u001b[0m\u001b[38;2;248;248;242m hello = \u001b[0m\u001b[38;2;230;219;116m\"hello world\"\u001b[0m\n\n\u001b[38;2;249;38;114mval\u001b[0m\u001b[38;2;248;248;242m id = \u001b[0m\u001b[38;2;249;38;114mfn\u001b[0m\u001b[38;2;248;248;242m x \u001b[0m\u001b[38;2;190;132;255m=>\u001b[0m\u001b[38;2;248;248;242m x\u001b[0m\n\n\u001b[38;2;249;38;114mfun\u001b[0m\u001b[38;2;248;248;242m id' x = x\u001b[0m\n\n\u001b[38;2;249;38;114mval\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m()\u001b[0m\u001b[38;2;248;248;242m = \u001b[0m\u001b[38;2;249;38;114mprint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"hello world\\n\"\u001b[0m\n\n\u001b[38;2;249;38;114mval\u001b[0m\u001b[38;2;248;248;242m _ = \u001b[0m\u001b[38;2;249;38;114mlet\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mval\u001b[0m\u001b[38;2;248;248;242m hello = \u001b[0m\u001b[38;2;230;219;116m\"hello\"\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mval\u001b[0m\u001b[38;2;248;248;242m world = \u001b[0m\u001b[38;2;230;219;116m\"world\"\u001b[0m\n\u001b[38;2;249;38;114min\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mprint\u001b[0m\u001b[38;2;248;248;242m (hello ^ \u001b[0m\u001b[38;2;230;219;116m\" \"\u001b[0m\u001b[38;2;248;248;242m ^ world ^ \u001b[0m\u001b[38;2;230;219;116m\"\\n\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114mend\u001b[0m\n\n\u001b[38;2;249;38;114mfun\u001b[0m\u001b[38;2;248;248;242m isZero n =\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m n = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mtrue\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mfalse\u001b[0m\n\n\u001b[38;2;249;38;114mfun\u001b[0m\u001b[38;2;248;248;242m isTrue b =\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;248;248;242m b \u001b[0m\u001b[38;2;249;38;114mof\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mtrue\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mtrue\u001b[0m\n\u001b[38;2;248;248;242m  | \u001b[0m\u001b[38;2;249;38;114mfalse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mfalse\u001b[0m\n\n\u001b[38;2;249;38;114mexception\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mBad_value\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mof\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mstring\u001b[0m\n\n\u001b[38;2;249;38;114mfun\u001b[0m\u001b[38;2;248;248;242m isTrue' b =\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;248;248;242m b \u001b[0m\u001b[38;2;249;38;114mof\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mtrue\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mtrue\u001b[0m\n\u001b[38;2;248;248;242m  | _    \u001b[0m\u001b[38;2;190;132;255m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mraise\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[3;38;2;166;226;46mBad_value\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"value is not true!\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;249;38;114mval\u001b[0m\u001b[38;2;248;248;242m alwaysTrue =\u001b[0m\n\u001b[38;2;248;248;242m  isTrue' \u001b[0m\u001b[38;2;249;38;114mfalse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mhandle\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mBad_value\u001b[0m\u001b[38;2;248;248;242m _ \u001b[0m\u001b[38;2;190;132;255m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mtrue\u001b[0m\n\n\u001b[38;2;249;38;114mdatatype\u001b[0m\u001b[38;2;248;248;242m myBool = \u001b[0m\u001b[3;38;2;166;226;46mTrue\u001b[0m\u001b[38;2;248;248;242m | \u001b[0m\u001b[3;38;2;166;226;46mFalse\u001b[0m\n\n\u001b[38;2;249;38;114mdatatype\u001b[0m\u001b[38;2;248;248;242m shape = \u001b[0m\u001b[3;38;2;166;226;46mSquare\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mof\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mreal\u001b[0m\u001b[38;2;248;248;242m | \u001b[0m\u001b[3;38;2;166;226;46mCircle\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mof\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mreal\u001b[0m\u001b[38;2;248;248;242m | \u001b[0m\u001b[3;38;2;166;226;46mPoint\u001b[0m\n\n\u001b[38;2;249;38;114msignature\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mFOO\u001b[0m\u001b[38;2;248;248;242m = \u001b[0m\u001b[38;2;249;38;114msig\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mval\u001b[0m\u001b[38;2;248;248;242m foo : 'a \u001b[0m\u001b[38;2;190;132;255m->\u001b[0m\u001b[38;2;248;248;242m 'a\u001b[0m\n\u001b[38;2;249;38;114mend\u001b[0m\n\n\u001b[38;2;249;38;114mstructure\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mFoo\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m:>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mFOO\u001b[0m\u001b[38;2;248;248;242m = \u001b[0m\u001b[38;2;249;38;114mstruct\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mfun\u001b[0m\u001b[38;2;248;248;242m foo x = x\u001b[0m\n\u001b[38;2;249;38;114mend\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/SQL/ims.sql",
    "content": "\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m interships\u001b[0m\n\u001b[38;2;249;38;114mcreate\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mtable\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46minterships\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242m(intership_id \u001b[0m\u001b[3;38;2;102;217;239mnumber\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mconstraint\u001b[0m\u001b[38;2;248;248;242m intership_id_pk \u001b[0m\u001b[38;2;249;38;114mprimary key\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242mname \u001b[0m\u001b[3;38;2;102;217;239mvarchar2\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m50\u001b[0m\u001b[38;2;248;248;242m),\u001b[0m\n\u001b[38;2;248;248;242mstart_date \u001b[0m\u001b[3;38;2;102;217;239mdate\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242mend_date \u001b[0m\u001b[3;38;2;102;217;239mdate\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\n\n\u001b[38;2;249;38;114minsert into\u001b[0m\u001b[38;2;248;248;242m interships\u001b[0m\n\u001b[38;2;249;38;114mvalues\u001b[0m\n\u001b[38;2;248;248;242m  (\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mLeaderator 2019\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m   to_date(\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m15/02/2019\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mDD/MM/YYYY\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m),\u001b[0m\n\u001b[38;2;248;248;242m   to_date(\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m01/09/2019\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mDD/MM/YYYY\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m));\u001b[0m\n\n\u001b[38;2;249;38;114minsert into\u001b[0m\u001b[38;2;248;248;242m interships\u001b[0m\n\u001b[38;2;248;248;242m  (intership_id, name, start_date)\u001b[0m\n\u001b[38;2;249;38;114mvalues\u001b[0m\n\u001b[38;2;248;248;242m  (\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mLeaderator 2020\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m, to_date(\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m10/02/2019\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mDD/MM/YYYY\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m));\u001b[0m\n\n\u001b[38;2;249;38;114mcommit\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m directions\u001b[0m\n\u001b[38;2;249;38;114mcreate\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mtable\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mdirections\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242m(direction_id \u001b[0m\u001b[3;38;2;102;217;239mnumber\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mconstraint\u001b[0m\u001b[38;2;248;248;242m direction_id_pk \u001b[0m\u001b[38;2;249;38;114mprimary key\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242mname \u001b[0m\u001b[3;38;2;102;217;239mvarchar2\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m50\u001b[0m\u001b[38;2;248;248;242m));\u001b[0m\n\n\u001b[38;2;249;38;114minsert into\u001b[0m\u001b[38;2;248;248;242m directions \u001b[0m\u001b[38;2;249;38;114mvalues\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mData Science\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\n\u001b[38;2;249;38;114minsert into\u001b[0m\u001b[38;2;248;248;242m directions \u001b[0m\u001b[38;2;249;38;114mvalues\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mOracle Development\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\n\u001b[38;2;249;38;114mcommit\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m participants\u001b[0m\n\u001b[38;2;249;38;114mcreate\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mtable\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mparticipants\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242m(participant_id \u001b[0m\u001b[3;38;2;102;217;239mnumber\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mconstraint\u001b[0m\u001b[38;2;248;248;242m participant_id_pk \u001b[0m\u001b[38;2;249;38;114mprimary key\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242mfirst_name \u001b[0m\u001b[3;38;2;102;217;239mvarchar2\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m25\u001b[0m\u001b[38;2;248;248;242m),\u001b[0m\n\u001b[38;2;248;248;242mlast_name \u001b[0m\u001b[3;38;2;102;217;239mvarchar2\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m25\u001b[0m\u001b[38;2;248;248;242m),\u001b[0m\n\u001b[38;2;248;248;242mpersonal_id \u001b[0m\u001b[3;38;2;102;217;239mnumber\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m11\u001b[0m\u001b[38;2;248;248;242m),\u001b[0m\n\u001b[38;2;248;248;242mintership_id \u001b[0m\u001b[3;38;2;102;217;239mnumber\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mconstraint\u001b[0m\u001b[38;2;248;248;242m participant_inter_id_fk \u001b[0m\u001b[38;2;249;38;114mreferences\u001b[0m\u001b[38;2;248;248;242m interships (intership_id),\u001b[0m\n\u001b[38;2;248;248;242mdirection_id \u001b[0m\u001b[3;38;2;102;217;239mnumber\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mconstraint\u001b[0m\u001b[38;2;248;248;242m participant_direct_id_fk \u001b[0m\u001b[38;2;249;38;114mreferences\u001b[0m\u001b[38;2;248;248;242m directions (direction_id),\u001b[0m\n\u001b[38;2;249;38;114mconstraint\u001b[0m\u001b[38;2;248;248;242m personal_id_unique unique (personal_id));\u001b[0m\n\n\u001b[38;2;249;38;114minsert into\u001b[0m\u001b[38;2;248;248;242m participants\u001b[0m\n\u001b[38;2;249;38;114mvalues\u001b[0m\n\u001b[38;2;248;248;242m  (\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mErekle\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mTvinadze\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m01011234567\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\n\u001b[38;2;249;38;114minsert into\u001b[0m\u001b[38;2;248;248;242m participants\u001b[0m\n\u001b[38;2;249;38;114mvalues\u001b[0m\n\u001b[38;2;248;248;242m  (\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mMariami\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mChakhvadze\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m01011234568\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\n\u001b[38;2;249;38;114mcommit\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m hiring_layer_types\u001b[0m\n\u001b[38;2;249;38;114mcreate\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mtable\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mhiring_layer_types\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242m(layer_type_id \u001b[0m\u001b[3;38;2;102;217;239mnumber\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mconstraint\u001b[0m\u001b[38;2;248;248;242m layer_id_pk \u001b[0m\u001b[38;2;249;38;114mprimary key\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242mtype \u001b[0m\u001b[3;38;2;102;217;239mvarchar2\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m50\u001b[0m\u001b[38;2;248;248;242m));\u001b[0m\n\n\u001b[38;2;249;38;114minsert into\u001b[0m\u001b[38;2;248;248;242m hiring_layer_types \u001b[0m\u001b[38;2;249;38;114mvalues\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mGMAT\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\n\u001b[38;2;249;38;114minsert into\u001b[0m\u001b[38;2;248;248;242m hiring_layer_types \u001b[0m\u001b[38;2;249;38;114mvalues\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mAlgorithms\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\n\u001b[38;2;249;38;114minsert into\u001b[0m\u001b[38;2;248;248;242m hiring_layer_types \u001b[0m\u001b[38;2;249;38;114mvalues\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mInterview\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\n\u001b[38;2;249;38;114mcommit\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m hiring_layers\u001b[0m\n\u001b[38;2;249;38;114mcreate\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mtable\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mhiring_layers\u001b[0m\n\u001b[38;2;248;248;242m(layer_id \u001b[0m\u001b[3;38;2;102;217;239mnumber\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mconstraint\u001b[0m\u001b[38;2;248;248;242m layer_pk \u001b[0m\u001b[38;2;249;38;114mprimary key\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242mlayer_type_id \u001b[0m\u001b[3;38;2;102;217;239mnumber\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mconstraint\u001b[0m\u001b[38;2;248;248;242m layer_type_fk \u001b[0m\u001b[38;2;249;38;114mreferences\u001b[0m\u001b[38;2;248;248;242m hiring_layer_types (layer_type_id),\u001b[0m\n\u001b[38;2;248;248;242mparticipant_id \u001b[0m\u001b[3;38;2;102;217;239mnumber\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mconstraint\u001b[0m\u001b[38;2;248;248;242m participant_id_fk \u001b[0m\u001b[38;2;249;38;114mreferences\u001b[0m\u001b[38;2;248;248;242m participants (participant_id),\u001b[0m\n\u001b[38;2;248;248;242mresult \u001b[0m\u001b[3;38;2;102;217;239mnumber\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m));\u001b[0m\n\n\u001b[38;2;249;38;114minsert into\u001b[0m\u001b[38;2;248;248;242m hiring_layers \u001b[0m\u001b[38;2;249;38;114mvalues\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m52\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\n\u001b[38;2;249;38;114minsert into\u001b[0m\u001b[38;2;248;248;242m hiring_layers \u001b[0m\u001b[38;2;249;38;114mvalues\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m80\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\n\u001b[38;2;249;38;114minsert into\u001b[0m\u001b[38;2;248;248;242m hiring_layers \u001b[0m\u001b[38;2;249;38;114mvalues\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m75\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\n\u001b[38;2;249;38;114minsert into\u001b[0m\u001b[38;2;248;248;242m hiring_layers \u001b[0m\u001b[38;2;249;38;114mvalues\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m100\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\n\u001b[38;2;249;38;114mcommit\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m subjects\u001b[0m\n\u001b[38;2;249;38;114mcreate\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mtable\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46msubjects\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242m(subject_id \u001b[0m\u001b[3;38;2;102;217;239mnumber\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mconstraint\u001b[0m\u001b[38;2;248;248;242m subject_id_pk \u001b[0m\u001b[38;2;249;38;114mprimary key\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242mname \u001b[0m\u001b[3;38;2;102;217;239mvarchar2\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m100\u001b[0m\u001b[38;2;248;248;242m),\u001b[0m\n\u001b[38;2;248;248;242mminimum_score \u001b[0m\u001b[3;38;2;102;217;239mnumber\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m));\u001b[0m\n\n\u001b[38;2;249;38;114minsert into\u001b[0m\u001b[38;2;248;248;242m subjects \u001b[0m\u001b[38;2;249;38;114mvalues\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mSQL\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m70\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\n\u001b[38;2;249;38;114minsert into\u001b[0m\u001b[38;2;248;248;242m subjects \u001b[0m\u001b[38;2;249;38;114mvalues\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mMachine Learning\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m70\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\n\u001b[38;2;249;38;114mcommit\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m direction_subjects\u001b[0m\n\u001b[38;2;249;38;114mcreate\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mtable\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mdirection_subjects\u001b[0m\n\u001b[38;2;248;248;242m(direction_subject_id \u001b[0m\u001b[3;38;2;102;217;239mnumber\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mconstraint\u001b[0m\u001b[38;2;248;248;242m direct_sub_id \u001b[0m\u001b[38;2;249;38;114mprimary key\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242mdirection_id \u001b[0m\u001b[3;38;2;102;217;239mnumber\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mconstraint\u001b[0m\u001b[38;2;248;248;242m direct_id_fk \u001b[0m\u001b[38;2;249;38;114mreferences\u001b[0m\u001b[38;2;248;248;242m directions (direction_id),\u001b[0m\n\u001b[38;2;248;248;242msubject_id \u001b[0m\u001b[3;38;2;102;217;239mnumber\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mconstraint\u001b[0m\u001b[38;2;248;248;242m subject_id_fk \u001b[0m\u001b[38;2;249;38;114mreferences\u001b[0m\u001b[38;2;248;248;242m subjects (subject_id));\u001b[0m\n\n\u001b[38;2;249;38;114minsert into\u001b[0m\u001b[38;2;248;248;242m direction_subjects \u001b[0m\u001b[38;2;249;38;114mvalues\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\n\u001b[38;2;249;38;114minsert into\u001b[0m\u001b[38;2;248;248;242m direction_subjects \u001b[0m\u001b[38;2;249;38;114mvalues\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\n\u001b[38;2;249;38;114minsert into\u001b[0m\u001b[38;2;248;248;242m direction_subjects \u001b[0m\u001b[38;2;249;38;114mvalues\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\n\u001b[38;2;249;38;114mcommit\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m component_types\u001b[0m\n\u001b[38;2;249;38;114mcreate\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mtable\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mcomponent_types\u001b[0m\n\u001b[38;2;248;248;242m(component_type_id \u001b[0m\u001b[3;38;2;102;217;239mnumber\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mconstraint\u001b[0m\u001b[38;2;248;248;242m com_type_id_pk \u001b[0m\u001b[38;2;249;38;114mprimary key\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242mtype \u001b[0m\u001b[3;38;2;102;217;239mvarchar2\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m50\u001b[0m\u001b[38;2;248;248;242m));\u001b[0m\n\n\u001b[38;2;249;38;114minsert into\u001b[0m\u001b[38;2;248;248;242m component_types \u001b[0m\u001b[38;2;249;38;114mvalues\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mHomework\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\n\u001b[38;2;249;38;114minsert into\u001b[0m\u001b[38;2;248;248;242m component_types \u001b[0m\u001b[38;2;249;38;114mvalues\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mQuiz\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\n\u001b[38;2;249;38;114mcommit\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m components\u001b[0m\n\u001b[38;2;249;38;114mcreate\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mtable\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mcomponents\u001b[0m\n\u001b[38;2;248;248;242m(component_id \u001b[0m\u001b[3;38;2;102;217;239mnumber\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mconstraint\u001b[0m\u001b[38;2;248;248;242m component_id_pk \u001b[0m\u001b[38;2;249;38;114mprimary key\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242msubject_id \u001b[0m\u001b[3;38;2;102;217;239mnumber\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mconstraint\u001b[0m\u001b[38;2;248;248;242m sub_id_fk \u001b[0m\u001b[38;2;249;38;114mreferences\u001b[0m\u001b[38;2;248;248;242m subjects (subject_id),\u001b[0m\n\u001b[38;2;248;248;242mminimum_score \u001b[0m\u001b[3;38;2;102;217;239mnumber\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m),\u001b[0m\n\u001b[38;2;248;248;242mcomponent_type_id \u001b[0m\u001b[3;38;2;102;217;239mnumber\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mconstraint\u001b[0m\u001b[38;2;248;248;242m com_type_id_fk \u001b[0m\u001b[38;2;249;38;114mreferences\u001b[0m\u001b[38;2;248;248;242m component_types (component_type_id),\u001b[0m\n\u001b[38;2;248;248;242mweight \u001b[0m\u001b[3;38;2;102;217;239mnumber\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m));\u001b[0m\n\n\u001b[38;2;249;38;114minsert into\u001b[0m\u001b[38;2;248;248;242m components \u001b[0m\u001b[38;2;249;38;114mvalues\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m60\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m20\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\n\u001b[38;2;249;38;114minsert into\u001b[0m\u001b[38;2;248;248;242m components \u001b[0m\u001b[38;2;249;38;114mvalues\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m65\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m50\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\n\u001b[38;2;249;38;114mcommit\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m results\u001b[0m\n\u001b[38;2;249;38;114mcreate\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mtable\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mresults\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242m(result_id \u001b[0m\u001b[3;38;2;102;217;239mnumber\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mconstraint\u001b[0m\u001b[38;2;248;248;242m result_id_pk \u001b[0m\u001b[38;2;249;38;114mprimary key\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242missue_date \u001b[0m\u001b[3;38;2;102;217;239mdate\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242mgrade \u001b[0m\u001b[3;38;2;102;217;239mnumber\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m),\u001b[0m\n\u001b[38;2;248;248;242mparticipant_id \u001b[0m\u001b[3;38;2;102;217;239mnumber\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mconstraint\u001b[0m\u001b[38;2;248;248;242m particip_id_fk \u001b[0m\u001b[38;2;249;38;114mreferences\u001b[0m\u001b[38;2;248;248;242m participants (participant_id),\u001b[0m\n\u001b[38;2;248;248;242mcomponent_id \u001b[0m\u001b[3;38;2;102;217;239mnumber\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mconstraint\u001b[0m\u001b[38;2;248;248;242m component_id_fk \u001b[0m\u001b[38;2;249;38;114mreferences\u001b[0m\u001b[38;2;248;248;242m components (component_id));\u001b[0m\n\n\u001b[38;2;249;38;114minsert into\u001b[0m\u001b[38;2;248;248;242m results\u001b[0m\n\u001b[38;2;249;38;114mvalues\u001b[0m\n\u001b[38;2;248;248;242m  (\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, to_date(\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m04/05/2020\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mDD/MM/YYYY\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m), \u001b[0m\u001b[38;2;190;132;255m87\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\n\u001b[38;2;249;38;114mcommit\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m learning_material_types\u001b[0m\n\u001b[38;2;249;38;114mcreate\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mtable\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mlearning_material_types\u001b[0m\n\u001b[38;2;248;248;242m(material_type_id \u001b[0m\u001b[3;38;2;102;217;239mnumber\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mconstraint\u001b[0m\u001b[38;2;248;248;242m lear_material_id_pk \u001b[0m\u001b[38;2;249;38;114mprimary key\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242mtype \u001b[0m\u001b[3;38;2;102;217;239mvarchar\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m50\u001b[0m\u001b[38;2;248;248;242m));\u001b[0m\n\n\u001b[38;2;249;38;114minsert into\u001b[0m\u001b[38;2;248;248;242m learning_material_types \u001b[0m\u001b[38;2;249;38;114mvalues\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mBook\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\n\u001b[38;2;249;38;114minsert into\u001b[0m\u001b[38;2;248;248;242m learning_material_types \u001b[0m\u001b[38;2;249;38;114mvalues\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mPPT\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\n\u001b[38;2;249;38;114minsert into\u001b[0m\u001b[38;2;248;248;242m learning_material_types \u001b[0m\u001b[38;2;249;38;114mvalues\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mYoutube Video\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\n\u001b[38;2;249;38;114mcommit\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m learning_materials\u001b[0m\n\u001b[38;2;249;38;114mcreate\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mtable\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mlearning_materials\u001b[0m\n\u001b[38;2;248;248;242m(learning_material_id \u001b[0m\u001b[3;38;2;102;217;239mnumber\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;248;248;242m),\u001b[0m\n\u001b[38;2;248;248;242murl \u001b[0m\u001b[3;38;2;102;217;239mvarchar2\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m3000\u001b[0m\u001b[38;2;248;248;242m),\u001b[0m\n\u001b[38;2;248;248;242msubject_id \u001b[0m\u001b[3;38;2;102;217;239mnumber\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mconstraint\u001b[0m\u001b[38;2;248;248;242m subj_id_fk \u001b[0m\u001b[38;2;249;38;114mreferences\u001b[0m\u001b[38;2;248;248;242m subjects (subject_id),\u001b[0m\n\u001b[38;2;248;248;242mmaterial_type_id \u001b[0m\u001b[3;38;2;102;217;239mnumber\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mconstraint\u001b[0m\u001b[38;2;248;248;242m material_type_id_fk \u001b[0m\u001b[38;2;249;38;114mreferences\u001b[0m\u001b[38;2;248;248;242m learning_material_types (material_type_id));\u001b[0m\n\n\u001b[38;2;249;38;114minsert into\u001b[0m\u001b[38;2;248;248;242m learning_materials \u001b[0m\u001b[38;2;249;38;114mvalues\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mwww.youtube.com\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\n\u001b[38;2;249;38;114mcommit\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m sessions\u001b[0m\n\u001b[38;2;249;38;114mcreate\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mtable\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46msessions\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242m(session_id \u001b[0m\u001b[3;38;2;102;217;239mnumber\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mconstraint\u001b[0m\u001b[38;2;248;248;242m session_id_pk \u001b[0m\u001b[38;2;249;38;114mprimary key\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242mstart_date \u001b[0m\u001b[3;38;2;102;217;239mdate\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242mend_date \u001b[0m\u001b[3;38;2;102;217;239mdate\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242mintership_id \u001b[0m\u001b[3;38;2;102;217;239mnumber\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mconstraint\u001b[0m\u001b[38;2;248;248;242m inter_idd_fk \u001b[0m\u001b[38;2;249;38;114mreferences\u001b[0m\u001b[38;2;248;248;242m interships (intership_id),\u001b[0m\n\u001b[38;2;248;248;242mdirection_id \u001b[0m\u001b[3;38;2;102;217;239mnumber\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mconstraint\u001b[0m\u001b[38;2;248;248;242m direct_fk \u001b[0m\u001b[38;2;249;38;114mreferences\u001b[0m\u001b[38;2;248;248;242m directions (direction_id),\u001b[0m\n\u001b[38;2;248;248;242msubject_id \u001b[0m\u001b[3;38;2;102;217;239mnumber\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mconstraint\u001b[0m\u001b[38;2;248;248;242m subject_fk \u001b[0m\u001b[38;2;249;38;114mreferences\u001b[0m\u001b[38;2;248;248;242m subjects (subject_id));\u001b[0m\n\n\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m attendances\u001b[0m\n\u001b[38;2;249;38;114mcreate\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mtable\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mattendances\u001b[0m\n\u001b[38;2;248;248;242m(attendance_id \u001b[0m\u001b[3;38;2;102;217;239mnumber\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mconstraint\u001b[0m\u001b[38;2;248;248;242m attend_id_pk \u001b[0m\u001b[38;2;249;38;114mprimary key\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242mparticipant_id \u001b[0m\u001b[3;38;2;102;217;239mnumber\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mconstraint\u001b[0m\u001b[38;2;248;248;242m participant_fk \u001b[0m\u001b[38;2;249;38;114mreferences\u001b[0m\u001b[38;2;248;248;242m participants (participant_id),\u001b[0m\n\u001b[38;2;248;248;242msession_id \u001b[0m\u001b[3;38;2;102;217;239mnumber\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mconstraint\u001b[0m\u001b[38;2;248;248;242m session_id_fk \u001b[0m\u001b[38;2;249;38;114mreferences\u001b[0m\u001b[38;2;248;248;242m sessions (session_id),\u001b[0m\n\u001b[38;2;248;248;242mstatus \u001b[0m\u001b[3;38;2;102;217;239mvarchar2\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m25\u001b[0m\u001b[38;2;248;248;242m));\u001b[0m\n\n\n\u001b[38;2;117;113;94m/*\u001b[0m\n\u001b[38;2;117;113;94mშექმენით view სადაც იქნება სტაჟირების შესახებ ინფორმაცია:\u001b[0m\n\u001b[38;2;117;113;94mსახელი,\u001b[0m\n\u001b[38;2;117;113;94mდაწყების თარიღი,\u001b[0m\n\u001b[38;2;117;113;94mდასრულების თარიღი,\u001b[0m\n\u001b[38;2;117;113;94mმონაწილეების რაოდენობა.\u001b[0m\n\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;249;38;114mcreate\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mview\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mintership_info\u001b[0m\n\u001b[38;2;249;38;114mas\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mselect\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mi\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mname\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255mi\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mstart_date\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255mi\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mend_date\u001b[0m\u001b[38;2;248;248;242m, (\u001b[0m\u001b[38;2;249;38;114mselect\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mcount\u001b[0m\u001b[38;2;248;248;242m(participant_id) \u001b[0m\u001b[38;2;249;38;114mfrom\u001b[0m\u001b[38;2;248;248;242m participants p \u001b[0m\u001b[38;2;249;38;114mwhere\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mp\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mintership_id\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mi\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mintership_id\u001b[0m\u001b[38;2;248;248;242m) number_of_participants\u001b[0m\n\u001b[38;2;249;38;114mfrom\u001b[0m\u001b[38;2;248;248;242m interships i;\u001b[0m\n\n\u001b[38;2;117;113;94m/*\u001b[0m\n\u001b[38;2;117;113;94mშექმენით view სადაც იქნება მონაწილეებზე ინფორმაცია:\u001b[0m\n\u001b[38;2;117;113;94mსტაჟირების სახელი,\u001b[0m\n\u001b[38;2;117;113;94mმონაწილის სახელი,\u001b[0m\n\u001b[38;2;117;113;94mმიმართულება,\u001b[0m\n\u001b[38;2;117;113;94mშერჩევის რამდენი ეტაპი გაიარა,\u001b[0m\n\u001b[38;2;117;113;94mსტაჟირების სტატუსი(გაიარა, ვერ გაიარა, მიმდინარე,ვერ მოხვდა სტაჟირებაზე)\u001b[0m\n\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;249;38;114mcreate\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mview\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mparticipant_info\u001b[0m\n\u001b[38;2;249;38;114mas\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mselect\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mi\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mname\u001b[0m\u001b[38;2;248;248;242m intership, \u001b[0m\u001b[38;2;190;132;255mp\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mfirst_name\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255mp\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mlast_name\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255md\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mname\u001b[0m\u001b[38;2;248;248;242m direction, \u001b[0m\n\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mselect\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mcount\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255mh2\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mparticipant_id\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mfrom\u001b[0m\u001b[38;2;248;248;242m hiring_layers h2 \u001b[0m\u001b[38;2;249;38;114mwhere\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mh2\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mparticipant_id\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mp\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mparticipant_id\u001b[0m\u001b[38;2;248;248;242m) number_of_layers,\u001b[0m\n\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mwhen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mp\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mdirection_id\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mnull\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mRejected\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mwhen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mi\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mend_date\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mnull\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mPresent\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mwhen\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;249;38;114mselect\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mh2\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mresult\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mfrom\u001b[0m\u001b[38;2;248;248;242m hiring_layers h2 \u001b[0m\u001b[38;2;249;38;114mjoin\u001b[0m\u001b[38;2;248;248;242m hiring_layer_types l on \u001b[0m\u001b[38;2;190;132;255mh2\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mlayer_type_id\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255ml\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mlayer_type_id\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mwhere\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mh2\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mparticipant_id\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mp\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mparticipant_id\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mand\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255ml\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mtype\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mIntership\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;249;38;114mselect\u001b[0m\u001b[38;2;248;248;242m minimum_score \u001b[0m\u001b[38;2;249;38;114mfrom\u001b[0m\u001b[38;2;248;248;242m subjects) \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mPassed\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mFailed\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m  status\u001b[0m\n\u001b[38;2;249;38;114mfrom\u001b[0m\u001b[38;2;248;248;242m interships i,\u001b[0m\n\u001b[38;2;248;248;242mparticipants p,\u001b[0m\n\u001b[38;2;248;248;242mdirections d\u001b[0m\n\u001b[38;2;249;38;114mwhere\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mi\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mintership_id\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mp\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mintership_id\u001b[0m\n\u001b[38;2;249;38;114mand\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;190;132;255md\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mdirection_id\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mp\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mdirection_id\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mp\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mdirection_id\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mnull\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\n\u001b[38;2;117;113;94m/*\u001b[0m\n\u001b[38;2;117;113;94mშექნენით view სადაც იქნება მიმართულებებზე ინფორმაცია:\u001b[0m\n\u001b[38;2;117;113;94mმიმართულების სახელი,\u001b[0m\n\u001b[38;2;117;113;94mრა საგნები ისწავლება\u001b[0m\n\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;249;38;114mcreate\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mview\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mdirection_info\u001b[0m\n\u001b[38;2;249;38;114mas\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mselect\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255md\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mname\u001b[0m\u001b[38;2;248;248;242m direction, \u001b[0m\u001b[38;2;190;132;255ms\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mname\u001b[0m\u001b[38;2;248;248;242m subject\u001b[0m\n\u001b[38;2;249;38;114mfrom\u001b[0m\u001b[38;2;248;248;242m directions d,\u001b[0m\n\u001b[38;2;248;248;242mdirection_subjects ds,\u001b[0m\n\u001b[38;2;248;248;242msubjects s\u001b[0m\n\u001b[38;2;249;38;114mwhere\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255md\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mdirection_id\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mds\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mdirection_id\u001b[0m\n\u001b[38;2;249;38;114mand\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mds\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255msubject_id\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255ms\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255msubject_id\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;117;113;94m/*\u001b[0m\n\u001b[38;2;117;113;94mშექმენით view სადც იქნება საგნების ინფორმაცია:\u001b[0m\n\u001b[38;2;117;113;94mსაგნის სახელი,\u001b[0m\n\u001b[38;2;117;113;94mსაგნის ზღვარი,\u001b[0m\n\u001b[38;2;117;113;94mშეფასების კომპონენტები(სახელი, ზღვარი , წონა).\u001b[0m\n\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;249;38;114mcreate\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mview\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46msubject_info\u001b[0m\n\u001b[38;2;249;38;114mas\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mselect\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255ms\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mname\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255ms\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mminimum_score\u001b[0m\u001b[38;2;248;248;242m subject_min_score, \u001b[0m\u001b[38;2;190;132;255mct\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mtype\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255mc\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mminimum_score\u001b[0m\u001b[38;2;248;248;242m component_min_score, \u001b[0m\u001b[38;2;190;132;255mc\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mweight\u001b[0m\n\u001b[38;2;249;38;114mfrom\u001b[0m\u001b[38;2;248;248;242m subjects s,\u001b[0m\n\u001b[38;2;248;248;242mcomponent_types ct,\u001b[0m\n\u001b[38;2;248;248;242mcomponents c\u001b[0m\n\u001b[38;2;249;38;114mwhere\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255ms\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255msubject_id\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mc\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255msubject_id\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;249;38;114mand\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mc\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mcomponent_type_id\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mct\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mcomponent_type_id\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;117;113;94m/*\u001b[0m\n\u001b[38;2;117;113;94mშექმენით view დასწრების აღრიცხვა მონაწილეების მიხედვით:\u001b[0m\n\u001b[38;2;117;113;94mსტაჟირებაზე მიმართულების მიხედვით:\u001b[0m\n\u001b[38;2;117;113;94mრამდენი ჩატარდა,\u001b[0m\n\u001b[38;2;117;113;94mრამდენს დაესწრო,\u001b[0m\n\u001b[38;2;117;113;94mრამდენს არ დაესწრო.\u001b[0m\n\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;249;38;114mcreate\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mview\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mattendance_info\u001b[0m\n\u001b[38;2;249;38;114mas\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mselect\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mp\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mfirst_name\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255mp\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mlast_name\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\n\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mselect\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mcount\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255ms2\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255msession_id\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mfrom\u001b[0m\u001b[38;2;248;248;242m sessions s2 \u001b[0m\u001b[38;2;249;38;114mwhere\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255ms2\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mdirection_id\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mp\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mdirection_id\u001b[0m\u001b[38;2;248;248;242m) lectures,\u001b[0m\n\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mselect\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mcount\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255ma2\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mattendance_id\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mfrom\u001b[0m\u001b[38;2;248;248;242m attendances a2 \u001b[0m\u001b[38;2;249;38;114mwhere\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255ma2\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mparticipant_id\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mp\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mparticipant_id\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mand\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255ma2\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mstatus\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mPresent\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m) present,\u001b[0m\n\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mselect\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mcount\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255ma2\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mattendance_id\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mfrom\u001b[0m\u001b[38;2;248;248;242m attendances a2 \u001b[0m\u001b[38;2;249;38;114mwhere\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255ma2\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mparticipant_id\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mp\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mparticipant_id\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mand\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255ma2\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mstatus\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mAbsent\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m) absent\u001b[0m\n\u001b[38;2;249;38;114mfrom\u001b[0m\u001b[38;2;248;248;242m participants p,\u001b[0m\n\u001b[38;2;248;248;242mattendances a,\u001b[0m\n\u001b[38;2;248;248;242msessions s\u001b[0m\n\u001b[38;2;249;38;114mwhere\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mp\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mparticipant_id\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255ma\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255mparticipant_id\u001b[0m\n\u001b[38;2;249;38;114mand\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255ma\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255msession_id\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255ms\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255msession_id\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/SSH Config/ssh_config",
    "content": "\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m A comment\u001b[0m\n\n\u001b[38;2;249;38;114mIdentityFile\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mcustom/id_ed25519\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;249;38;114mPort\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1984\u001b[0m\n\n\u001b[38;2;249;38;114mHost\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mexample.com\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mUser\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116md\u001b[0m\u001b[38;2;230;219;116mummy\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mCompression\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mno\u001b[0m\n\n\u001b[38;2;249;38;114mHost\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;166;226;46m.co.uk\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mBatchMode\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mno\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mGlobalKnownHostsFile\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m/etc/ssh/ssh_known_hosts\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/SSHD Config/sshd_config",
    "content": "\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m This test sshd config file is intended for syntax testing\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m purposes only.\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Definitely do not use this in production for sshd.\u001b[0m\n\n\u001b[38;2;249;38;114mPort\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m22\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Here's a directive commented out:\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94mListenAddress\u001b[0m\u001b[38;2;117;113;94m 0.0.0.0\u001b[0m\n\n\u001b[38;2;249;38;114mListenAddress\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m127.0.0.1\u001b[0m\n\n\u001b[38;2;249;38;114mHostKey\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m/etc/ssh/ssh_host_rsa_key\u001b[0m\n\u001b[38;2;249;38;114mIgnoreRhosts\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255myes\u001b[0m\n\u001b[38;2;249;38;114mPrintMotd\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255myes\u001b[0m\n\u001b[38;2;249;38;114mX11Forwarding\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mno\u001b[0m\n\u001b[38;2;249;38;114mAllowAgentForwarding\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mno\u001b[0m\n\u001b[38;2;249;38;114mPermitRootLogin\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mforced-commands-only\u001b[0m\n\u001b[38;2;249;38;114mSyslogFacility\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mAUTH\u001b[0m\n\n\u001b[38;2;249;38;114mLogLevel\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mVERBOSE\u001b[0m\n\n\u001b[38;2;249;38;114mAuthorizedKeysFile\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m/etc/ssh/authorized-keys/\u001b[0m\u001b[38;2;190;132;255m%u\u001b[0m\n\n\u001b[38;2;249;38;114mPasswordAuthentication\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255myes\u001b[0m\n\u001b[38;2;249;38;114mPermitEmptyPasswords\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mno\u001b[0m\n\u001b[38;2;249;38;114mAllowUsers\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116malice\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m pass locale information\u001b[0m\n\u001b[38;2;249;38;114mAcceptEnv\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mLANG LC_\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\n\n\u001b[38;2;249;38;114mBanner\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m/etc/sshd_banner\u001b[0m\n\n\u001b[38;2;249;38;114mAllowTcpForwarding\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255myes\u001b[0m\n\u001b[38;2;249;38;114mPermitTunnel\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mno\u001b[0m\n\u001b[38;2;249;38;114mPermitTTY\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255myes\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Sass/example.sass",
    "content": "\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mfonts\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\n\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;248;248;242mtheme_dark\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mbackground-color\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;190;132;255mnull\u001b[0m\n\u001b[38;2;255;255;255m)\u001b[0m\n\n\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;248;248;242mtheme_main\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mtext-size\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;190;132;255mem\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mtext-color\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;102;217;239mblack\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mtext-shadow\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;190;132;255m#\u001b[0m\u001b[38;2;190;132;255m36ad\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;190;132;255mpx\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;190;132;255mpx\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;190;132;255mpx\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mcard-background\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;190;132;255m#\u001b[0m\u001b[38;2;190;132;255md6f\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mcard-shadow\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;190;132;255m#\u001b[0m\u001b[38;2;190;132;255m11121212\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;190;132;255mpx\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;190;132;255mpx\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;190;132;255mpx\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;190;132;255mpx\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mcard-padding\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;190;132;255mrem\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mcard-margin\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;190;132;255m.\u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;190;132;255min\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mimage-width\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;190;132;255m600\u001b[0m\u001b[38;2;190;132;255mpx\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mimage-height\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;190;132;255m100\u001b[0m\u001b[38;2;190;132;255mvh\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mbackground-color\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;190;132;255m#\u001b[0m\u001b[38;2;190;132;255mdedbef\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mi-ran-out-of-placeholders-for-units\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;190;132;255mvw\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m100\u001b[0m\u001b[38;2;190;132;255m%\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m60\u001b[0m\u001b[38;2;190;132;255mpt\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;255;255;255m)\u001b[0m\n\n\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;248;248;242mcurrent_theme\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mtheme_main\u001b[0m\n\n\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114mmixin\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mthemed\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;248;248;242mcurrent_theme\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mtheme_main\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m!global\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114mcontent\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114mmedia\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;248;248;242mprefers\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[3;38;2;166;226;46mcolor\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242mscheme: dark\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;248;248;242mcurrent_theme\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mtheme_dark\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m!global\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114mcontent\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;255;255;255m#\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mdark\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m&\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;248;248;242mcurrent_theme\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mtheme_dark\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m!global\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114mcontent\u001b[0m\n\n\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtheme\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[3;38;2;255;255;255m$\u001b[0m\u001b[3;38;2;253;151;31mvariable\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mmap-has_key\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mcurrent_theme\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mvariable\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mmap-get\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mcurrent_theme\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mvariable\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114merror\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mUnknown theme variable: \u001b[0m\u001b[38;2;255;255;255m#\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mvariable\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\n\u001b[38;2;249;38;114mbody\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114minclude\u001b[0m\u001b[38;2;248;248;242m themed\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mbackground-color\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mtheme\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mbackground-color\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mbackground-image\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239murl\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mhttps://github.com/sharkdp/bat/raw/master/doc/logo-header.svg\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mheader\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mdata-selectable\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mfalse\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;166;226;46m-webkit-\u001b[0m\u001b[3;38;2;102;217;239muser-select\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mnone\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;166;226;46m-moz-\u001b[0m\u001b[3;38;2;102;217;239muser-select\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mnone\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;166;226;46m-ms-\u001b[0m\u001b[3;38;2;102;217;239muser-select\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m/\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mCSS\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mcomment\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m/\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mnone\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mcursor\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mdefault\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m!important\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m/\u001b[0m\u001b[38;2;249;38;114m/\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mSass\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mcomment\u001b[0m\n\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mdiv\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mborder\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m#\u001b[0m\u001b[38;2;190;132;255m04f\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;190;132;255mpx\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239msolid\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114m&\u001b[0m\u001b[38;2;166;226;46m::\u001b[0m\u001b[38;2;166;226;46mafter\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[3;38;2;102;217;239mcontent\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mPseudo\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[3;38;2;102;217;239mcolor\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m#\u001b[0m\u001b[38;2;190;132;255m2f5f7f\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[3;38;2;102;217;239mbox-sizing\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mborder-box\u001b[0m\n\n\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114mkeyframes\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mrotate\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;190;132;255m%\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mtransform\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mrotate\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;190;132;255mdeg\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;190;132;255m50\u001b[0m\u001b[38;2;190;132;255m%\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mtransform\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mrotate\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;190;132;255m180\u001b[0m\u001b[38;2;190;132;255mdeg\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;190;132;255m100\u001b[0m\u001b[38;2;190;132;255m%\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mtransform\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mrotate\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;190;132;255mrad\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\n\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;249;38;114mfont-face\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mfont-family\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mExample Font\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239msrc\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239murl\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116mexample.ttf\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mformat\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mttf\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239msrc\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mlocal\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mComic Sans MS\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Scala/ConcurrentEffectLaws.scala",
    "content": "\u001b[38;2;117;113;94m/*\u001b[0m\n\u001b[38;2;117;113;94m * Copyright (c) 2017-2019 The Typelevel Cats-effect Project Developers\u001b[0m\n\u001b[38;2;117;113;94m *\u001b[0m\n\u001b[38;2;117;113;94m * Licensed under the Apache License, Version 2.0 (the \"License\");\u001b[0m\n\u001b[38;2;117;113;94m * you may not use this file except in compliance with the License.\u001b[0m\n\u001b[38;2;117;113;94m * You may obtain a copy of the License at\u001b[0m\n\u001b[38;2;117;113;94m *\u001b[0m\n\u001b[38;2;117;113;94m *     http://www.apache.org/licenses/LICENSE-2.0\u001b[0m\n\u001b[38;2;117;113;94m *\u001b[0m\n\u001b[38;2;117;113;94m * Unless required by applicable law or agreed to in writing, software\u001b[0m\n\u001b[38;2;117;113;94m * distributed under the License is distributed on an \"AS IS\" BASIS,\u001b[0m\n\u001b[38;2;117;113;94m * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\u001b[0m\n\u001b[38;2;117;113;94m * See the License for the specific language governing permissions and\u001b[0m\n\u001b[38;2;117;113;94m * limitations under the License.\u001b[0m\n\u001b[38;2;117;113;94m */\u001b[0m\n\n\u001b[38;2;249;38;114mpackage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mcats\u001b[0m\n\u001b[38;2;249;38;114mpackage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46meffect\u001b[0m\n\u001b[38;2;249;38;114mpackage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mlaws\u001b[0m\n\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m cats\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242meffect\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mconcurrent\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mDeferred\u001b[0m\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m cats\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242msyntax\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mall\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;255;255;255m_\u001b[0m\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m cats\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mlaws\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;255;255;255m_\u001b[0m\n\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m scala\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mconcurrent\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mPromise\u001b[0m\n\n\u001b[3;38;2;102;217;239mtrait\u001b[0m\u001b[4;38;2;102;217;239m ConcurrentEffectLaws\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;166;226;46mF\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;255;255;255m_\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mextends\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;4;38;2;166;226;46mConcurrentLaws\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;166;226;46mF\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mwith\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;4;38;2;166;226;46mEffectLaws\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;166;226;46mF\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mimplicit\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mdef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mF\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mConcurrentEffect\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;166;226;46mF\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mdef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mrunAsyncRunCancelableCoherence\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;166;226;46mA\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mfa\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mF\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;166;226;46mA\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mval\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mfa1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mIO\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242masync\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;166;226;46mA\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mcb\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m=>\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;102;217;239mF\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mrunAsync\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mfa\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mIO\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mcb\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mr\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242munsafeRunSync\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mval\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mfa2\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mIO\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mcancelable\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;166;226;46mA\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mcb\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m=>\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;102;217;239mF\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mtoIO\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mF\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mrunCancelable\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mfa\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mIO\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mcb\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mr\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242munsafeRunSync\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m    fa1 <-> fa2\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mdef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mrunCancelableIsSynchronous\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;166;226;46mA\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mval\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mlh\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mDeferred\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242muncancelable\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;166;226;46mF\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mUnit\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mflatMap \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mlatch\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m=>\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[3;38;2;102;217;239mval\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mspawned\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mPromise\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;102;217;239mUnit\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Never ending task\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[3;38;2;102;217;239mval\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mff\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mF\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mcancelable\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;166;226;46mA\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m_\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m=>\u001b[0m\n\u001b[38;2;248;248;242m        spawned\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242msuccess\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m()\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m latch\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mcomplete\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m()\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Execute, then cancel\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[3;38;2;102;217;239mval\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mtoken\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mF\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mdelay\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mF\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mrunCancelable\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mff\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255m_\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mIO\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242munit\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242munsafeRunSync\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mflatMap \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mcancel\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m=>\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Waiting for the task to start before cancelling it\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;102;217;239mAsync\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mfromFuture\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mF\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mpure\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mspawned\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mfuture\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m >> cancel\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;102;217;239mF\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mliftIO\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mF\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mrunAsync\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mtoken\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255m_\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mIO\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242munit\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mtoIO\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m *> latch\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mget\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m    lh <-> \u001b[0m\u001b[38;2;102;217;239mF\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242munit\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mdef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mrunCancelableStartCancelCoherence\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;166;226;46mA\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31ma\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mA\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Cancellation via runCancelable\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mval\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mf1\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mF\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;166;226;46mA\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[3;38;2;253;151;31meffect1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mDeferred\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242muncancelable\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;166;226;46mF\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mA\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[3;38;2;253;151;31mlatch\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mF\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mdelay\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mPromise\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;102;217;239mUnit\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[3;38;2;253;151;31mnever\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mF\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mcancelable\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;166;226;46mA\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m_\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m=>\u001b[0m\n\u001b[38;2;248;248;242m        latch\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242msuccess\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m()\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m effect1\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mcomplete\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242ma\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[3;38;2;253;151;31mcancel\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mF\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mliftIO\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mF\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mrunCancelable\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mnever\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255m_\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mIO\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242munit\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mtoIO\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Waiting for the task to start before cancelling it\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255m_\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mAsync\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mfromFuture\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mF\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mpure\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mlatch\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mfuture\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m TODO get rid of this, IO, and Future here\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255m_\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m cancel\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[3;38;2;253;151;31mresult\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m effect1\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mget\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114myield\u001b[0m\u001b[38;2;248;248;242m result\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Cancellation via start.flatMap(_.cancel)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mval\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mf2\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mF\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;166;226;46mA\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[3;38;2;253;151;31meffect2\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mDeferred\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242muncancelable\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;166;226;46mF\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mA\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Using a latch to ensure that the task started\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[3;38;2;253;151;31mlatch\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mDeferred\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242muncancelable\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;166;226;46mF\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mUnit\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[3;38;2;253;151;31mnever\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mF\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mbracket\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mlatch\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mcomplete\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m()\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255m_\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mF\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mnever\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;102;217;239mUnit\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255m_\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m=>\u001b[0m\u001b[38;2;248;248;242m effect2\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mcomplete\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242ma\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[3;38;2;253;151;31mfiber\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mF\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mstart\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mnever\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Waiting for the task to start before cancelling it\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255m_\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m latch\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mget\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255m_\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mF\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mstart\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mfiber\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mcancel\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[3;38;2;253;151;31mresult\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<-\u001b[0m\u001b[38;2;248;248;242m effect2\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mget\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114myield\u001b[0m\u001b[38;2;248;248;242m result\u001b[0m\n\n\u001b[38;2;248;248;242m    f1 <-> f2\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mdef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtoIORunCancelableConsistency\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;166;226;46mA\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mfa\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mF\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;166;226;46mA\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239mConcurrentEffect\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mtoIOFromRunCancelable\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mfa\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m <-> \u001b[0m\u001b[38;2;102;217;239mF\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mtoIO\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mfa\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[3;38;2;102;217;239mobject\u001b[0m\u001b[4;38;2;102;217;239m ConcurrentEffectLaws\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mdef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mapply\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;166;226;46mF\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;255;255;255m_\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mimplicit\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mF0\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mConcurrentEffect\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;166;226;46mF\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mcontextShift0\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mContextShift\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;166;226;46mF\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mConcurrentEffectLaws\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;166;226;46mF\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mnew\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mConcurrentEffectLaws\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;166;226;46mF\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[3;38;2;102;217;239mval\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mF\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mF0\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[3;38;2;102;217;239mval\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mcontextShift\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m contextShift0\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Slim/test.slim",
    "content": "\u001b[38;2;249;38;114mdoctype\u001b[0m\u001b[38;2;248;248;242m html\u001b[0m\n\u001b[38;2;249;38;114mhtml\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mlang\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;248;248;242mlocale\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mhead\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mmeta\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mcharset\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116mutf-8\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mtitle\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m#{\u001b[0m\u001b[38;2;246;170;17m@\u001b[0m\u001b[38;2;255;255;255mtitle\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m\"\u001b[0m\u001b[38;2;248;248;242m#{\u001b[0m\u001b[38;2;246;170;17m@\u001b[0m\u001b[38;2;255;255;255mtitle\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;230;219;116m | Testing\u001b[0m\u001b[38;2;249;38;114m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m'\u001b[0m\u001b[38;2;230;219;116mTesting\u001b[0m\u001b[38;2;249;38;114m'\u001b[0m\u001b[38;2;249;38;114m}\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m==\u001b[0m\u001b[38;2;248;248;242m stylesheet\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;249;38;114m'\u001b[0m\u001b[38;2;230;219;116mapp.css\u001b[0m\u001b[38;2;249;38;114m'\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mbody\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mheader\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mh1\u001b[0m\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mtitle\u001b[0m\u001b[38;2;248;248;242m Testing\u001b[0m\n\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;248;248;242m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;246;170;17m@\u001b[0m\u001b[38;2;255;255;255mlinks\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242meach \u001b[0m\u001b[38;2;249;38;114mdo\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;253;151;31mlink\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114ma\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mhref\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;248;248;242mlink.href\u001b[0m\n\u001b[38;2;248;248;242m          \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242mlink\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mtitle\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mdiv\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;248;248;242m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114myield\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mAPP_ENV\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m'\u001b[0m\u001b[38;2;230;219;116mproduction\u001b[0m\u001b[38;2;249;38;114m'\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mfooter\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mp\u001b[0m\u001b[38;2;248;248;242m Testing\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Solidity/ERC721.sol",
    "content": "\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m SPDX-License-Identifier: MIT\u001b[0m\n\n\u001b[38;2;249;38;114mpragma\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114msolidity\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m^\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;190;132;255m.8.0\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116m/\u001b[0m\u001b[38;2;230;219;116mI\u001b[0m\u001b[38;2;230;219;116mE\u001b[0m\u001b[38;2;230;219;116mR\u001b[0m\u001b[38;2;230;219;116mC\u001b[0m\u001b[38;2;230;219;116m7\u001b[0m\u001b[38;2;230;219;116m2\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116m/\u001b[0m\u001b[38;2;230;219;116mI\u001b[0m\u001b[38;2;230;219;116mE\u001b[0m\u001b[38;2;230;219;116mR\u001b[0m\u001b[38;2;230;219;116mC\u001b[0m\u001b[38;2;230;219;116m7\u001b[0m\u001b[38;2;230;219;116m2\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;230;219;116mR\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mc\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116mv\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116m/\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mx\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116m/\u001b[0m\u001b[38;2;230;219;116mI\u001b[0m\u001b[38;2;230;219;116mE\u001b[0m\u001b[38;2;230;219;116mR\u001b[0m\u001b[38;2;230;219;116mC\u001b[0m\u001b[38;2;230;219;116m7\u001b[0m\u001b[38;2;230;219;116m2\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;230;219;116mM\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116md\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116m/\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116m/\u001b[0m\u001b[38;2;230;219;116mu\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116m/\u001b[0m\u001b[38;2;230;219;116mA\u001b[0m\u001b[38;2;230;219;116md\u001b[0m\u001b[38;2;230;219;116md\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116m/\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116m/\u001b[0m\u001b[38;2;230;219;116mu\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116m/\u001b[0m\u001b[38;2;230;219;116mC\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mx\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116m/\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116m/\u001b[0m\u001b[38;2;230;219;116mu\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116m/\u001b[0m\u001b[38;2;230;219;116mS\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116mg\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116m/\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116m/\u001b[0m\u001b[38;2;230;219;116mu\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116m/\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116mp\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mc\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116m/\u001b[0m\u001b[38;2;230;219;116mE\u001b[0m\u001b[38;2;230;219;116mR\u001b[0m\u001b[38;2;230;219;116mC\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;230;219;116m6\u001b[0m\u001b[38;2;230;219;116m5\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;117;113;94m/**\u001b[0m\n\u001b[38;2;117;113;94m * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including\u001b[0m\n\u001b[38;2;117;113;94m * the Metadata extension, but not including the Enumerable extension, which is available separately as\u001b[0m\n\u001b[38;2;117;113;94m * {ERC721Enumerable}.\u001b[0m\n\u001b[38;2;117;113;94m \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;249;38;114mcontract\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;102;217;239mERC721\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mContext\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mERC165\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mIERC721\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mIERC721Metadata\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114musing\u001b[0m\u001b[38;2;248;248;242m Address \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114musing\u001b[0m\u001b[38;2;248;248;242m Strings \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255muint256\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Token name\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;190;132;255mstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mprivate \u001b[0m\u001b[38;2;248;248;242m_name\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Token symbol\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;190;132;255mstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mprivate \u001b[0m\u001b[38;2;248;248;242m_symbol\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Mapping from token ID to owner address\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mmapping\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255muint256\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mprivate\u001b[0m\u001b[38;2;248;248;242m _owners;\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Mapping owner address to token count\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mmapping\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255muint256\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mprivate\u001b[0m\u001b[38;2;248;248;242m _balances;\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Mapping from token ID to approved address\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mmapping\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255muint256\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mprivate\u001b[0m\u001b[38;2;248;248;242m _tokenApprovals;\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Mapping from owner to operator approvals\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mmapping\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mmapping\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mbool\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mprivate\u001b[0m\u001b[38;2;248;248;242m _operatorApprovals;\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m/**\u001b[0m\n\u001b[38;2;117;113;94m     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\u001b[0m\n\u001b[38;2;117;113;94m     \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46mconstructor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255mstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mmemory\u001b[0m\u001b[3;38;2;253;151;31m name_\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255mstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mmemory\u001b[0m\u001b[3;38;2;253;151;31m symbol_\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m_name\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m name_;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m_symbol\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m symbol_;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m/**\u001b[0m\n\u001b[38;2;117;113;94m     * @dev See {IERC165-supportsInterface}.\u001b[0m\n\u001b[38;2;117;113;94m     \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46msupportsInterface\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255mbytes4\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31minterfaceId\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mpublic\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mview\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mvirtual\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114moverride\u001b[0m\u001b[38;2;248;248;242m(ERC165, IERC165) \u001b[0m\u001b[38;2;249;38;114mreturns\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255mbool\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m interfaceId \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mtype\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mIERC721\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m.interfaceId\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114m||\u001b[0m\u001b[38;2;248;248;242m interfaceId \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mtype\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mIERC721Metadata\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m.interfaceId\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114m||\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114msuper\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239msupportsInterface\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242minterfaceId\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m/**\u001b[0m\n\u001b[38;2;117;113;94m     * @dev See {IERC721-balanceOf}.\u001b[0m\n\u001b[38;2;117;113;94m     \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mbalanceOf\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mowner\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mpublic\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mview\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mvirtual\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114moverride\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mreturns\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255muint256\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mrequire\u001b[0m\u001b[38;2;248;248;242m(owner \u001b[0m\u001b[38;2;249;38;114m!=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mE\u001b[0m\u001b[38;2;230;219;116mR\u001b[0m\u001b[38;2;230;219;116mC\u001b[0m\u001b[38;2;230;219;116m7\u001b[0m\u001b[38;2;230;219;116m2\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mb\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116mc\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mq\u001b[0m\u001b[38;2;230;219;116mu\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116my\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mf\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mh\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mz\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116md\u001b[0m\u001b[38;2;230;219;116md\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m _balances\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mowner\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m/**\u001b[0m\n\u001b[38;2;117;113;94m     * @dev See {IERC721-ownerOf}.\u001b[0m\n\u001b[38;2;117;113;94m     \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mownerOf\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255muint256\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mtokenId\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mpublic\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mview\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mvirtual\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114moverride\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mreturns\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mowner\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m _owners\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mtokenId\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mrequire\u001b[0m\u001b[38;2;248;248;242m(owner \u001b[0m\u001b[38;2;249;38;114m!=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mE\u001b[0m\u001b[38;2;230;219;116mR\u001b[0m\u001b[38;2;230;219;116mC\u001b[0m\u001b[38;2;230;219;116m7\u001b[0m\u001b[38;2;230;219;116m2\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mw\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mq\u001b[0m\u001b[38;2;230;219;116mu\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116my\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mf\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mx\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mk\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m owner;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m/**\u001b[0m\n\u001b[38;2;117;113;94m     * @dev See {IERC721Metadata-name}.\u001b[0m\n\u001b[38;2;117;113;94m     \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mname\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mpublic\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mview\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mvirtual\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114moverride\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mreturns\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255mstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mmemory\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m _name;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m/**\u001b[0m\n\u001b[38;2;117;113;94m     * @dev See {IERC721Metadata-symbol}.\u001b[0m\n\u001b[38;2;117;113;94m     \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46msymbol\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mpublic\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mview\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mvirtual\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114moverride\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mreturns\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255mstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mmemory\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m _symbol;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m/**\u001b[0m\n\u001b[38;2;117;113;94m     * @dev See {IERC721Metadata-tokenURI}.\u001b[0m\n\u001b[38;2;117;113;94m     \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtokenURI\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255muint256\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mtokenId\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mpublic\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mview\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mvirtual\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114moverride\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mreturns\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255mstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mmemory\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mrequire\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239m_exists\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mtokenId\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mE\u001b[0m\u001b[38;2;230;219;116mR\u001b[0m\u001b[38;2;230;219;116mC\u001b[0m\u001b[38;2;230;219;116m7\u001b[0m\u001b[38;2;230;219;116m2\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;230;219;116mM\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116md\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mU\u001b[0m\u001b[38;2;230;219;116mR\u001b[0m\u001b[38;2;230;219;116mI\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mq\u001b[0m\u001b[38;2;230;219;116mu\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116my\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mf\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mx\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mk\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;190;132;255mstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mmemory \u001b[0m\u001b[38;2;248;248;242mbaseURI\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239m_baseURI\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mbytes\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mbaseURI\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[3;38;2;166;226;46mlength\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mstring\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mabi.encodePacked\u001b[0m\u001b[38;2;248;248;242m(baseURI, \u001b[0m\u001b[38;2;248;248;242mtokenId\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mtoString\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m/**\u001b[0m\n\u001b[38;2;117;113;94m     * @dev Base URI for computing {tokenURI}. Empty by default, can be overriden\u001b[0m\n\u001b[38;2;117;113;94m     * in child contracts.\u001b[0m\n\u001b[38;2;117;113;94m     \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m_baseURI\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114minternal\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mview\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mvirtual\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mreturns\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255mstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mmemory\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m/**\u001b[0m\n\u001b[38;2;117;113;94m     * @dev See {IERC721-approve}.\u001b[0m\n\u001b[38;2;117;113;94m     \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mapprove\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mto\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255muint256\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mtokenId\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mpublic\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mvirtual\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114moverride\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mowner\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mERC721\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mownerOf\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mtokenId\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mrequire\u001b[0m\u001b[38;2;248;248;242m(to \u001b[0m\u001b[38;2;249;38;114m!=\u001b[0m\u001b[38;2;248;248;242m owner, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mE\u001b[0m\u001b[38;2;230;219;116mR\u001b[0m\u001b[38;2;230;219;116mC\u001b[0m\u001b[38;2;230;219;116m7\u001b[0m\u001b[38;2;230;219;116m2\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mp\u001b[0m\u001b[38;2;230;219;116mp\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mv\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mc\u001b[0m\u001b[38;2;230;219;116mu\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mw\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mrequire\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239m_msgSender\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m owner \u001b[0m\u001b[38;2;249;38;114m||\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239misApprovedForAll\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mowner, \u001b[0m\u001b[38;2;102;217;239m_msgSender\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mE\u001b[0m\u001b[38;2;230;219;116mR\u001b[0m\u001b[38;2;230;219;116mC\u001b[0m\u001b[38;2;230;219;116m7\u001b[0m\u001b[38;2;230;219;116m2\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mp\u001b[0m\u001b[38;2;230;219;116mp\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mv\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mc\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mw\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mp\u001b[0m\u001b[38;2;230;219;116mp\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mv\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116md\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mf\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;102;217;239m_approve\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mto, tokenId\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m/**\u001b[0m\n\u001b[38;2;117;113;94m     * @dev See {IERC721-getApproved}.\u001b[0m\n\u001b[38;2;117;113;94m     \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mgetApproved\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255muint256\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mtokenId\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mpublic\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mview\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mvirtual\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114moverride\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mreturns\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mrequire\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239m_exists\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mtokenId\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mE\u001b[0m\u001b[38;2;230;219;116mR\u001b[0m\u001b[38;2;230;219;116mC\u001b[0m\u001b[38;2;230;219;116m7\u001b[0m\u001b[38;2;230;219;116m2\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mp\u001b[0m\u001b[38;2;230;219;116mp\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mv\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116md\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mq\u001b[0m\u001b[38;2;230;219;116mu\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116my\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mf\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mx\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mk\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m _tokenApprovals\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mtokenId\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m/**\u001b[0m\n\u001b[38;2;117;113;94m     * @dev See {IERC721-setApprovalForAll}.\u001b[0m\n\u001b[38;2;117;113;94m     \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46msetApprovalForAll\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31moperator\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255mbool\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mapproved\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mpublic\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mvirtual\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114moverride\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mrequire\u001b[0m\u001b[38;2;248;248;242m(operator \u001b[0m\u001b[38;2;249;38;114m!=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239m_msgSender\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mE\u001b[0m\u001b[38;2;230;219;116mR\u001b[0m\u001b[38;2;230;219;116mC\u001b[0m\u001b[38;2;230;219;116m7\u001b[0m\u001b[38;2;230;219;116m2\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mp\u001b[0m\u001b[38;2;230;219;116mp\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mv\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mc\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m        _operatorApprovals\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;102;217;239m_msgSender\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242moperator\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m approved;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114memit\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mApprovalForAll\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239m_msgSender\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m, operator, approved\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m/**\u001b[0m\n\u001b[38;2;117;113;94m     * @dev See {IERC721-isApprovedForAll}.\u001b[0m\n\u001b[38;2;117;113;94m     \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46misApprovedForAll\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mowner\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31moperator\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mpublic\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mview\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mvirtual\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114moverride\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mreturns\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255mbool\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m _operatorApprovals\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mowner\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242moperator\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m/**\u001b[0m\n\u001b[38;2;117;113;94m     * @dev See {IERC721-transferFrom}.\u001b[0m\n\u001b[38;2;117;113;94m     \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtransferFrom\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mfrom\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mto\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255muint256\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mtokenId\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mpublic\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mvirtual\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114moverride\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94msolhint-disable-next-line max-line-length\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mrequire\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239m_isApprovedOrOwner\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239m_msgSender\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m, tokenId\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mE\u001b[0m\u001b[38;2;230;219;116mR\u001b[0m\u001b[38;2;230;219;116mC\u001b[0m\u001b[38;2;230;219;116m7\u001b[0m\u001b[38;2;230;219;116m2\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116mf\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mc\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mw\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mp\u001b[0m\u001b[38;2;230;219;116mp\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mv\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116md\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;102;217;239m_transfer\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mfrom, to, tokenId\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m/**\u001b[0m\n\u001b[38;2;117;113;94m     * @dev See {IERC721-safeTransferFrom}.\u001b[0m\n\u001b[38;2;117;113;94m     \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46msafeTransferFrom\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mfrom\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mto\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255muint256\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mtokenId\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mpublic\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mvirtual\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114moverride\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;102;217;239msafeTransferFrom\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mfrom, to, tokenId, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m/**\u001b[0m\n\u001b[38;2;117;113;94m     * @dev See {IERC721-safeTransferFrom}.\u001b[0m\n\u001b[38;2;117;113;94m     \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46msafeTransferFrom\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mfrom\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mto\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255muint256\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mtokenId\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255mbytes\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mmemory\u001b[0m\u001b[3;38;2;253;151;31m _data\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mpublic\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mvirtual\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114moverride\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mrequire\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239m_isApprovedOrOwner\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239m_msgSender\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m, tokenId\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mE\u001b[0m\u001b[38;2;230;219;116mR\u001b[0m\u001b[38;2;230;219;116mC\u001b[0m\u001b[38;2;230;219;116m7\u001b[0m\u001b[38;2;230;219;116m2\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116mf\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mc\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mw\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mp\u001b[0m\u001b[38;2;230;219;116mp\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mv\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116md\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;102;217;239m_safeTransfer\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mfrom, to, tokenId, _data\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m/**\u001b[0m\n\u001b[38;2;117;113;94m     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\u001b[0m\n\u001b[38;2;117;113;94m     * are aware of the ERC721 protocol to prevent tokens from being forever locked.\u001b[0m\n\u001b[38;2;117;113;94m     *\u001b[0m\n\u001b[38;2;117;113;94m     * `_data` is additional data, it has no specified format and it is sent in call to `to`.\u001b[0m\n\u001b[38;2;117;113;94m     *\u001b[0m\n\u001b[38;2;117;113;94m     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\u001b[0m\n\u001b[38;2;117;113;94m     * implement alternative mechanisms to perform token transfer, such as signature-based.\u001b[0m\n\u001b[38;2;117;113;94m     *\u001b[0m\n\u001b[38;2;117;113;94m     * Requirements:\u001b[0m\n\u001b[38;2;117;113;94m     *\u001b[0m\n\u001b[38;2;117;113;94m     * - `from` cannot be the zero address.\u001b[0m\n\u001b[38;2;117;113;94m     * - `to` cannot be the zero address.\u001b[0m\n\u001b[38;2;117;113;94m     * - `tokenId` token must exist and be owned by `from`.\u001b[0m\n\u001b[38;2;117;113;94m     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\u001b[0m\n\u001b[38;2;117;113;94m     *\u001b[0m\n\u001b[38;2;117;113;94m     * Emits a {Transfer} event.\u001b[0m\n\u001b[38;2;117;113;94m     \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m_safeTransfer\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mfrom\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mto\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255muint256\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mtokenId\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255mbytes\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mmemory\u001b[0m\u001b[3;38;2;253;151;31m _data\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114minternal\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mvirtual\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;102;217;239m_transfer\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mfrom, to, tokenId\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mrequire\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239m_checkOnERC721Received\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mfrom, to, tokenId, _data\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mE\u001b[0m\u001b[38;2;230;219;116mR\u001b[0m\u001b[38;2;230;219;116mC\u001b[0m\u001b[38;2;230;219;116m7\u001b[0m\u001b[38;2;230;219;116m2\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116mf\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mE\u001b[0m\u001b[38;2;230;219;116mR\u001b[0m\u001b[38;2;230;219;116mC\u001b[0m\u001b[38;2;230;219;116m7\u001b[0m\u001b[38;2;230;219;116m2\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;230;219;116mR\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mc\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116mv\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116mm\u001b[0m\u001b[38;2;230;219;116mp\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mm\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m/**\u001b[0m\n\u001b[38;2;117;113;94m     * @dev Returns whether `tokenId` exists.\u001b[0m\n\u001b[38;2;117;113;94m     *\u001b[0m\n\u001b[38;2;117;113;94m     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\u001b[0m\n\u001b[38;2;117;113;94m     *\u001b[0m\n\u001b[38;2;117;113;94m     * Tokens start existing when they are minted (`_mint`),\u001b[0m\n\u001b[38;2;117;113;94m     * and stop existing when they are burned (`_burn`).\u001b[0m\n\u001b[38;2;117;113;94m     \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m_exists\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255muint256\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mtokenId\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114minternal\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mview\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mvirtual\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mreturns\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255mbool\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m _owners\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mtokenId\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m!=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m/**\u001b[0m\n\u001b[38;2;117;113;94m     * @dev Returns whether `spender` is allowed to manage `tokenId`.\u001b[0m\n\u001b[38;2;117;113;94m     *\u001b[0m\n\u001b[38;2;117;113;94m     * Requirements:\u001b[0m\n\u001b[38;2;117;113;94m     *\u001b[0m\n\u001b[38;2;117;113;94m     * - `tokenId` must exist.\u001b[0m\n\u001b[38;2;117;113;94m     \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m_isApprovedOrOwner\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mspender\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255muint256\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mtokenId\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114minternal\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mview\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mvirtual\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mreturns\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255mbool\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mrequire\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239m_exists\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mtokenId\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mE\u001b[0m\u001b[38;2;230;219;116mR\u001b[0m\u001b[38;2;230;219;116mC\u001b[0m\u001b[38;2;230;219;116m7\u001b[0m\u001b[38;2;230;219;116m2\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mp\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mq\u001b[0m\u001b[38;2;230;219;116mu\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116my\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mf\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mx\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mk\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mowner\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mERC721\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mownerOf\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mtokenId\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mspender \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m owner \u001b[0m\u001b[38;2;249;38;114m||\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mgetApproved\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mtokenId\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m spender \u001b[0m\u001b[38;2;249;38;114m||\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239misApprovedForAll\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mowner, spender\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m/**\u001b[0m\n\u001b[38;2;117;113;94m     * @dev Safely mints `tokenId` and transfers it to `to`.\u001b[0m\n\u001b[38;2;117;113;94m     *\u001b[0m\n\u001b[38;2;117;113;94m     * Requirements:\u001b[0m\n\u001b[38;2;117;113;94m     *\u001b[0m\n\u001b[38;2;117;113;94m     * - `tokenId` must not exist.\u001b[0m\n\u001b[38;2;117;113;94m     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\u001b[0m\n\u001b[38;2;117;113;94m     *\u001b[0m\n\u001b[38;2;117;113;94m     * Emits a {Transfer} event.\u001b[0m\n\u001b[38;2;117;113;94m     \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m_safeMint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mto\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255muint256\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mtokenId\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114minternal\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mvirtual\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;102;217;239m_safeMint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mto, tokenId, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m/**\u001b[0m\n\u001b[38;2;117;113;94m     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\u001b[0m\n\u001b[38;2;117;113;94m     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\u001b[0m\n\u001b[38;2;117;113;94m     \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m_safeMint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mto\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255muint256\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mtokenId\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255mbytes\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mmemory\u001b[0m\u001b[3;38;2;253;151;31m _data\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114minternal\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mvirtual\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;102;217;239m_mint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mto, tokenId\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mrequire\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239m_checkOnERC721Received\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m, to, tokenId, _data\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mE\u001b[0m\u001b[38;2;230;219;116mR\u001b[0m\u001b[38;2;230;219;116mC\u001b[0m\u001b[38;2;230;219;116m7\u001b[0m\u001b[38;2;230;219;116m2\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116mf\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mE\u001b[0m\u001b[38;2;230;219;116mR\u001b[0m\u001b[38;2;230;219;116mC\u001b[0m\u001b[38;2;230;219;116m7\u001b[0m\u001b[38;2;230;219;116m2\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;230;219;116mR\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mc\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116mv\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116mm\u001b[0m\u001b[38;2;230;219;116mp\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mm\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m/**\u001b[0m\n\u001b[38;2;117;113;94m     * @dev Mints `tokenId` and transfers it to `to`.\u001b[0m\n\u001b[38;2;117;113;94m     *\u001b[0m\n\u001b[38;2;117;113;94m     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\u001b[0m\n\u001b[38;2;117;113;94m     *\u001b[0m\n\u001b[38;2;117;113;94m     * Requirements:\u001b[0m\n\u001b[38;2;117;113;94m     *\u001b[0m\n\u001b[38;2;117;113;94m     * - `tokenId` must not exist.\u001b[0m\n\u001b[38;2;117;113;94m     * - `to` cannot be the zero address.\u001b[0m\n\u001b[38;2;117;113;94m     *\u001b[0m\n\u001b[38;2;117;113;94m     * Emits a {Transfer} event.\u001b[0m\n\u001b[38;2;117;113;94m     \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m_mint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mto\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255muint256\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mtokenId\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114minternal\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mvirtual\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mrequire\u001b[0m\u001b[38;2;248;248;242m(to \u001b[0m\u001b[38;2;249;38;114m!=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mE\u001b[0m\u001b[38;2;230;219;116mR\u001b[0m\u001b[38;2;230;219;116mC\u001b[0m\u001b[38;2;230;219;116m7\u001b[0m\u001b[38;2;230;219;116m2\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mm\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mh\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mz\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116md\u001b[0m\u001b[38;2;230;219;116md\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mrequire\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114m!\u001b[0m\u001b[38;2;102;217;239m_exists\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mtokenId\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mE\u001b[0m\u001b[38;2;230;219;116mR\u001b[0m\u001b[38;2;230;219;116mC\u001b[0m\u001b[38;2;230;219;116m7\u001b[0m\u001b[38;2;230;219;116m2\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mk\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116md\u001b[0m\u001b[38;2;230;219;116my\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mm\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116md\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;102;217;239m_beforeTokenTransfer\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m, to, tokenId\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m        _balances\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mto\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        _owners\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mtokenId\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m to;\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114memit\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mTransfer\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m, to, tokenId\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m/**\u001b[0m\n\u001b[38;2;117;113;94m     * @dev Destroys `tokenId`.\u001b[0m\n\u001b[38;2;117;113;94m     * The approval is cleared when the token is burned.\u001b[0m\n\u001b[38;2;117;113;94m     *\u001b[0m\n\u001b[38;2;117;113;94m     * Requirements:\u001b[0m\n\u001b[38;2;117;113;94m     *\u001b[0m\n\u001b[38;2;117;113;94m     * - `tokenId` must exist.\u001b[0m\n\u001b[38;2;117;113;94m     *\u001b[0m\n\u001b[38;2;117;113;94m     * Emits a {Transfer} event.\u001b[0m\n\u001b[38;2;117;113;94m     \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m_burn\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255muint256\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mtokenId\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114minternal\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mvirtual\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mowner\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mERC721\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mownerOf\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mtokenId\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;102;217;239m_beforeTokenTransfer\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mowner, \u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m, tokenId\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Clear approvals\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;102;217;239m_approve\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m, tokenId\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m        _balances\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mowner\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mdelete\u001b[0m\u001b[38;2;248;248;242m _owners\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mtokenId\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114memit\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mTransfer\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mowner, \u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m, tokenId\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m/**\u001b[0m\n\u001b[38;2;117;113;94m     * @dev Transfers `tokenId` from `from` to `to`.\u001b[0m\n\u001b[38;2;117;113;94m     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\u001b[0m\n\u001b[38;2;117;113;94m     *\u001b[0m\n\u001b[38;2;117;113;94m     * Requirements:\u001b[0m\n\u001b[38;2;117;113;94m     *\u001b[0m\n\u001b[38;2;117;113;94m     * - `to` cannot be the zero address.\u001b[0m\n\u001b[38;2;117;113;94m     * - `tokenId` token must be owned by `from`.\u001b[0m\n\u001b[38;2;117;113;94m     *\u001b[0m\n\u001b[38;2;117;113;94m     * Emits a {Transfer} event.\u001b[0m\n\u001b[38;2;117;113;94m     \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m_transfer\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mfrom\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mto\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255muint256\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mtokenId\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114minternal\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mvirtual\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mrequire\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mERC721\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mownerOf\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mtokenId\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m from, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mE\u001b[0m\u001b[38;2;230;219;116mR\u001b[0m\u001b[38;2;230;219;116mC\u001b[0m\u001b[38;2;230;219;116m7\u001b[0m\u001b[38;2;230;219;116m2\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116mf\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mf\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mk\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mh\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mw\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mrequire\u001b[0m\u001b[38;2;248;248;242m(to \u001b[0m\u001b[38;2;249;38;114m!=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mE\u001b[0m\u001b[38;2;230;219;116mR\u001b[0m\u001b[38;2;230;219;116mC\u001b[0m\u001b[38;2;230;219;116m7\u001b[0m\u001b[38;2;230;219;116m2\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116mf\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mh\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mz\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116md\u001b[0m\u001b[38;2;230;219;116md\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;102;217;239m_beforeTokenTransfer\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mfrom, to, tokenId\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Clear approvals from the previous owner\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;102;217;239m_approve\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m, tokenId\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m        _balances\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mfrom\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        _balances\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mto\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        _owners\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mtokenId\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m to;\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114memit\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mTransfer\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mfrom, to, tokenId\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m/**\u001b[0m\n\u001b[38;2;117;113;94m     * @dev Approve `to` to operate on `tokenId`\u001b[0m\n\u001b[38;2;117;113;94m     *\u001b[0m\n\u001b[38;2;117;113;94m     * Emits a {Approval} event.\u001b[0m\n\u001b[38;2;117;113;94m     \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m_approve\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mto\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255muint256\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mtokenId\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114minternal\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mvirtual\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        _tokenApprovals\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mtokenId\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m to;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114memit\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mApproval\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mERC721\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mownerOf\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mtokenId\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m, to, tokenId\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m/**\u001b[0m\n\u001b[38;2;117;113;94m     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\u001b[0m\n\u001b[38;2;117;113;94m     * The call is not executed if the target address is not a contract.\u001b[0m\n\u001b[38;2;117;113;94m     *\u001b[0m\n\u001b[38;2;117;113;94m     * @param from address representing the previous owner of the given token ID\u001b[0m\n\u001b[38;2;117;113;94m     * @param to target address that will receive the tokens\u001b[0m\n\u001b[38;2;117;113;94m     * @param tokenId uint256 ID of the token to be transferred\u001b[0m\n\u001b[38;2;117;113;94m     * @param _data bytes optional data to send along with the call\u001b[0m\n\u001b[38;2;117;113;94m     * @return bool whether the call correctly returned the expected magic value\u001b[0m\n\u001b[38;2;117;113;94m     \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m_checkOnERC721Received\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mfrom\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mto\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255muint256\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mtokenId\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255mbytes\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mmemory\u001b[0m\u001b[3;38;2;253;151;31m _data\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mprivate\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mreturns\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255mbool\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mto\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239misContract\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mtry\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mIERC721Receiver\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mto\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239monERC721Received\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239m_msgSender\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m, from, tokenId, _data\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mreturns\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255mbytes4\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mretval\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m retval \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mIERC721Receiver\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mto\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m.onERC721Received.\u001b[0m\u001b[38;2;249;38;114mselector\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mcatch\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255mbytes\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mmemory\u001b[0m\u001b[3;38;2;253;151;31m reason\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mreason.\u001b[0m\u001b[3;38;2;166;226;46mlength\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m 0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;249;38;114mrevert\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mE\u001b[0m\u001b[38;2;230;219;116mR\u001b[0m\u001b[38;2;230;219;116mC\u001b[0m\u001b[38;2;230;219;116m7\u001b[0m\u001b[38;2;230;219;116m2\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116mf\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mE\u001b[0m\u001b[38;2;230;219;116mR\u001b[0m\u001b[38;2;230;219;116mC\u001b[0m\u001b[38;2;230;219;116m7\u001b[0m\u001b[38;2;230;219;116m2\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;230;219;116mR\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mc\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116mv\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116mm\u001b[0m\u001b[38;2;230;219;116mp\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mm\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m solhint-disable-next-line no-inline-assembly\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[3;38;2;102;217;239massembly\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;102;217;239mrevert\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239madd\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m32\u001b[0m\u001b[38;2;248;248;242m, reason), \u001b[0m\u001b[38;2;102;217;239mmload\u001b[0m\u001b[38;2;248;248;242m(reason))\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m/**\u001b[0m\n\u001b[38;2;117;113;94m     * @dev Hook that is called before any token transfer. This includes minting\u001b[0m\n\u001b[38;2;117;113;94m     * and burning.\u001b[0m\n\u001b[38;2;117;113;94m     *\u001b[0m\n\u001b[38;2;117;113;94m     * Calling conditions:\u001b[0m\n\u001b[38;2;117;113;94m     *\u001b[0m\n\u001b[38;2;117;113;94m     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\u001b[0m\n\u001b[38;2;117;113;94m     * transferred to `to`.\u001b[0m\n\u001b[38;2;117;113;94m     * - When `from` is zero, `tokenId` will be minted for `to`.\u001b[0m\n\u001b[38;2;117;113;94m     * - When `to` is zero, ``from``'s `tokenId` will be burned.\u001b[0m\n\u001b[38;2;117;113;94m     * - `from` cannot be the zero address.\u001b[0m\n\u001b[38;2;117;113;94m     * - `to` cannot be the zero address.\u001b[0m\n\u001b[38;2;117;113;94m     *\u001b[0m\n\u001b[38;2;117;113;94m     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\u001b[0m\n\u001b[38;2;117;113;94m     \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m_beforeTokenTransfer\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mfrom\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mto\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255muint256\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mtokenId\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114minternal\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mvirtual\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Strace/ls.strace",
    "content": "\u001b[38;2;249;38;114mexecve\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"/usr/bin/ls\"\u001b[0m\u001b[38;2;248;248;242m, [\u001b[0m\u001b[38;2;230;219;116m\"ls\"\u001b[0m\u001b[38;2;248;248;242m], \u001b[0m\u001b[38;2;190;132;255m0x7fff7d89cea0\u001b[0m\u001b[38;2;248;248;242m /* \u001b[0m\u001b[38;2;190;132;255m34\u001b[0m\u001b[38;2;248;248;242m vars */) = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;249;38;114mbrk\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mNULL\u001b[0m\u001b[38;2;248;248;242m)                               = \u001b[0m\u001b[38;2;190;132;255m0x55bc0a294000\u001b[0m\n\u001b[38;2;249;38;114maccess\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"/etc/ld.so.preload\"\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mR_OK\u001b[0m\u001b[38;2;248;248;242m)      = -\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mENOENT\u001b[0m\u001b[38;2;248;248;242m (No such file or directory)\u001b[0m\n\u001b[38;2;249;38;114mopenat\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mAT_FDCWD\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"/etc/ld.so.cache\"\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mO_RDONLY\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mO_CLOEXEC\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\n\u001b[38;2;249;38;114mfstat\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, {st_mode=\u001b[0m\u001b[3;38;2;102;217;239mS_IFREG\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[38;2;190;132;255m0644\u001b[0m\u001b[38;2;248;248;242m, st_size=\u001b[0m\u001b[38;2;190;132;255m45404\u001b[0m\u001b[38;2;248;248;242m, ...}) = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;249;38;114mmmap\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mNULL\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m45404\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mPROT_READ\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mMAP_PRIVATE\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m0x7f7066972000\u001b[0m\n\u001b[38;2;249;38;114mclose\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m)                                = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;249;38;114mopenat\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mAT_FDCWD\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"/lib/x86_64-linux-gnu/libselinux.so.1\"\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mO_RDONLY\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mO_CLOEXEC\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\n\u001b[38;2;249;38;114mread\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;190;132;255m\\1\u001b[0m\u001b[38;2;230;219;116m77ELF\u001b[0m\u001b[38;2;190;132;255m\\2\u001b[0m\u001b[38;2;190;132;255m\\1\u001b[0m\u001b[38;2;190;132;255m\\1\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\3\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;230;219;116m>\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\1\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;230;219;116m@k\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m..., \u001b[0m\u001b[38;2;190;132;255m832\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m832\u001b[0m\n\u001b[38;2;249;38;114mfstat\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, {st_mode=\u001b[0m\u001b[3;38;2;102;217;239mS_IFREG\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[38;2;190;132;255m0644\u001b[0m\u001b[38;2;248;248;242m, st_size=\u001b[0m\u001b[38;2;190;132;255m155296\u001b[0m\u001b[38;2;248;248;242m, ...}) = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;249;38;114mmmap\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mNULL\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m8192\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mPROT_READ\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mPROT_WRITE\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mMAP_PRIVATE\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mMAP_ANONYMOUS\u001b[0m\u001b[38;2;248;248;242m, -\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m0x7f7066970000\u001b[0m\n\u001b[38;2;249;38;114mmmap\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mNULL\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m2259632\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mPROT_READ\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mPROT_EXEC\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mMAP_PRIVATE\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mMAP_DENYWRITE\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m0x7f7066748000\u001b[0m\n\u001b[38;2;249;38;114mmprotect\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0x7f706676d000\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m2093056\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mPROT_NONE\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;249;38;114mmmap\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0x7f706696c000\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m8192\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mPROT_READ\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mPROT_WRITE\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mMAP_PRIVATE\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mMAP_FIXED\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mMAP_DENYWRITE\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m0x24000\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m0x7f706696c000\u001b[0m\n\u001b[38;2;249;38;114mmmap\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0x7f706696e000\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m6832\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mPROT_READ\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mPROT_WRITE\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mMAP_PRIVATE\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mMAP_FIXED\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mMAP_ANONYMOUS\u001b[0m\u001b[38;2;248;248;242m, -\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m0x7f706696e000\u001b[0m\n\u001b[38;2;249;38;114mclose\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m)                                = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;249;38;114mopenat\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mAT_FDCWD\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"/lib/x86_64-linux-gnu/libc.so.6\"\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mO_RDONLY\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mO_CLOEXEC\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\n\u001b[38;2;249;38;114mread\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;190;132;255m\\1\u001b[0m\u001b[38;2;230;219;116m77ELF\u001b[0m\u001b[38;2;190;132;255m\\2\u001b[0m\u001b[38;2;190;132;255m\\1\u001b[0m\u001b[38;2;190;132;255m\\1\u001b[0m\u001b[38;2;190;132;255m\\3\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\3\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;230;219;116m>\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\1\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\2\u001b[0m\u001b[38;2;230;219;116m60A\u001b[0m\u001b[38;2;190;132;255m\\2\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m..., \u001b[0m\u001b[38;2;190;132;255m832\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m832\u001b[0m\n\u001b[38;2;249;38;114mfstat\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, {st_mode=\u001b[0m\u001b[3;38;2;102;217;239mS_IFREG\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[38;2;190;132;255m0755\u001b[0m\u001b[38;2;248;248;242m, st_size=\u001b[0m\u001b[38;2;190;132;255m1824496\u001b[0m\u001b[38;2;248;248;242m, ...}) = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;249;38;114mmmap\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mNULL\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m1837056\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mPROT_READ\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mMAP_PRIVATE\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mMAP_DENYWRITE\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m0x7f7066587000\u001b[0m\n\u001b[38;2;249;38;114mmprotect\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0x7f70665a9000\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m1658880\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mPROT_NONE\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;249;38;114mmmap\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0x7f70665a9000\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m1343488\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mPROT_READ\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mPROT_EXEC\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mMAP_PRIVATE\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mMAP_FIXED\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mMAP_DENYWRITE\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m0x22000\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m0x7f70665a9000\u001b[0m\n\u001b[38;2;249;38;114mmmap\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0x7f70666f1000\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m311296\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mPROT_READ\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mMAP_PRIVATE\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mMAP_FIXED\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mMAP_DENYWRITE\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m0x16a000\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m0x7f70666f1000\u001b[0m\n\u001b[38;2;249;38;114mmmap\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0x7f706673e000\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m24576\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mPROT_READ\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mPROT_WRITE\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mMAP_PRIVATE\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mMAP_FIXED\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mMAP_DENYWRITE\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m0x1b6000\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m0x7f706673e000\u001b[0m\n\u001b[38;2;249;38;114mmmap\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0x7f7066744000\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m14336\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mPROT_READ\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mPROT_WRITE\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mMAP_PRIVATE\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mMAP_FIXED\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mMAP_ANONYMOUS\u001b[0m\u001b[38;2;248;248;242m, -\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m0x7f7066744000\u001b[0m\n\u001b[38;2;249;38;114mclose\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m)                                = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;249;38;114mopenat\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mAT_FDCWD\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"/lib/x86_64-linux-gnu/libpcre.so.3\"\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mO_RDONLY\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mO_CLOEXEC\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\n\u001b[38;2;249;38;114mread\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;190;132;255m\\1\u001b[0m\u001b[38;2;230;219;116m77ELF\u001b[0m\u001b[38;2;190;132;255m\\2\u001b[0m\u001b[38;2;190;132;255m\\1\u001b[0m\u001b[38;2;190;132;255m\\1\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\3\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;230;219;116m>\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\1\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\3\u001b[0m\u001b[38;2;230;219;116m40!\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m..., \u001b[0m\u001b[38;2;190;132;255m832\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m832\u001b[0m\n\u001b[38;2;249;38;114mfstat\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, {st_mode=\u001b[0m\u001b[3;38;2;102;217;239mS_IFREG\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[38;2;190;132;255m0644\u001b[0m\u001b[38;2;248;248;242m, st_size=\u001b[0m\u001b[38;2;190;132;255m468944\u001b[0m\u001b[38;2;248;248;242m, ...}) = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;249;38;114mmmap\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mNULL\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m471304\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mPROT_READ\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mMAP_PRIVATE\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mMAP_DENYWRITE\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m0x7f7066513000\u001b[0m\n\u001b[38;2;249;38;114mmmap\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0x7f7066515000\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m335872\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mPROT_READ\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mPROT_EXEC\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mMAP_PRIVATE\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mMAP_FIXED\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mMAP_DENYWRITE\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m0x2000\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m0x7f7066515000\u001b[0m\n\u001b[38;2;249;38;114mmmap\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0x7f7066567000\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m122880\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mPROT_READ\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mMAP_PRIVATE\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mMAP_FIXED\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mMAP_DENYWRITE\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m0x54000\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m0x7f7066567000\u001b[0m\n\u001b[38;2;249;38;114mmmap\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0x7f7066585000\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m8192\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mPROT_READ\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mPROT_WRITE\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mMAP_PRIVATE\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mMAP_FIXED\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mMAP_DENYWRITE\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m0x71000\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m0x7f7066585000\u001b[0m\n\u001b[38;2;249;38;114mclose\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m)                                = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;249;38;114mopenat\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mAT_FDCWD\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"/lib/x86_64-linux-gnu/libdl.so.2\"\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mO_RDONLY\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mO_CLOEXEC\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\n\u001b[38;2;249;38;114mread\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;190;132;255m\\1\u001b[0m\u001b[38;2;230;219;116m77ELF\u001b[0m\u001b[38;2;190;132;255m\\2\u001b[0m\u001b[38;2;190;132;255m\\1\u001b[0m\u001b[38;2;190;132;255m\\1\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\3\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;230;219;116m>\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\1\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;230;219;116m000\u001b[0m\u001b[38;2;190;132;255m\\2\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m..., \u001b[0m\u001b[38;2;190;132;255m832\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m832\u001b[0m\n\u001b[38;2;249;38;114mfstat\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, {st_mode=\u001b[0m\u001b[3;38;2;102;217;239mS_IFREG\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[38;2;190;132;255m0644\u001b[0m\u001b[38;2;248;248;242m, st_size=\u001b[0m\u001b[38;2;190;132;255m14592\u001b[0m\u001b[38;2;248;248;242m, ...}) = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;249;38;114mmmap\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mNULL\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m16656\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mPROT_READ\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mMAP_PRIVATE\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mMAP_DENYWRITE\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m0x7f706650e000\u001b[0m\n\u001b[38;2;249;38;114mmmap\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0x7f706650f000\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m4096\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mPROT_READ\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mPROT_EXEC\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mMAP_PRIVATE\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mMAP_FIXED\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mMAP_DENYWRITE\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m0x1000\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m0x7f706650f000\u001b[0m\n\u001b[38;2;249;38;114mmmap\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0x7f7066510000\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m4096\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mPROT_READ\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mMAP_PRIVATE\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mMAP_FIXED\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mMAP_DENYWRITE\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m0x2000\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m0x7f7066510000\u001b[0m\n\u001b[38;2;249;38;114mmmap\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0x7f7066511000\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m8192\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mPROT_READ\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mPROT_WRITE\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mMAP_PRIVATE\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mMAP_FIXED\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mMAP_DENYWRITE\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m0x2000\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m0x7f7066511000\u001b[0m\n\u001b[38;2;249;38;114mclose\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m)                                = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;249;38;114mopenat\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mAT_FDCWD\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"/lib/x86_64-linux-gnu/libpthread.so.0\"\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mO_RDONLY\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mO_CLOEXEC\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\n\u001b[38;2;249;38;114mread\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;190;132;255m\\1\u001b[0m\u001b[38;2;230;219;116m77ELF\u001b[0m\u001b[38;2;190;132;255m\\2\u001b[0m\u001b[38;2;190;132;255m\\1\u001b[0m\u001b[38;2;190;132;255m\\1\u001b[0m\u001b[38;2;190;132;255m\\3\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\3\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;230;219;116m>\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\1\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;230;219;116m@l\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;190;132;255m\\0\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m..., \u001b[0m\u001b[38;2;190;132;255m832\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m832\u001b[0m\n\u001b[38;2;249;38;114mfstat\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, {st_mode=\u001b[0m\u001b[3;38;2;102;217;239mS_IFREG\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[38;2;190;132;255m0755\u001b[0m\u001b[38;2;248;248;242m, st_size=\u001b[0m\u001b[38;2;190;132;255m146968\u001b[0m\u001b[38;2;248;248;242m, ...}) = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;249;38;114mmmap\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mNULL\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m132288\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mPROT_READ\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mMAP_PRIVATE\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mMAP_DENYWRITE\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m0x7f70664ed000\u001b[0m\n\u001b[38;2;249;38;114mmmap\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0x7f70664f3000\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m61440\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mPROT_READ\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mPROT_EXEC\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mMAP_PRIVATE\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mMAP_FIXED\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mMAP_DENYWRITE\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m0x6000\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m0x7f70664f3000\u001b[0m\n\u001b[38;2;249;38;114mmmap\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0x7f7066502000\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m24576\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mPROT_READ\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mMAP_PRIVATE\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mMAP_FIXED\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mMAP_DENYWRITE\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m0x15000\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m0x7f7066502000\u001b[0m\n\u001b[38;2;249;38;114mmmap\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0x7f7066508000\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m8192\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mPROT_READ\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mPROT_WRITE\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mMAP_PRIVATE\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mMAP_FIXED\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mMAP_DENYWRITE\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m0x1a000\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m0x7f7066508000\u001b[0m\n\u001b[38;2;249;38;114mmmap\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0x7f706650a000\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m13504\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mPROT_READ\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mPROT_WRITE\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mMAP_PRIVATE\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mMAP_FIXED\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mMAP_ANONYMOUS\u001b[0m\u001b[38;2;248;248;242m, -\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m0x7f706650a000\u001b[0m\n\u001b[38;2;249;38;114mclose\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m)                                = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;249;38;114mmmap\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mNULL\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m8192\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mPROT_READ\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mPROT_WRITE\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mMAP_PRIVATE\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mMAP_ANONYMOUS\u001b[0m\u001b[38;2;248;248;242m, -\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m0x7f70664eb000\u001b[0m\n\u001b[38;2;249;38;114march_prctl\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mARCH_SET_FS\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m0x7f70664ec380\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;249;38;114mmprotect\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0x7f706673e000\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m16384\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mPROT_READ\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;249;38;114mmprotect\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0x7f7066508000\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m4096\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mPROT_READ\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;249;38;114mmprotect\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0x7f7066511000\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m4096\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mPROT_READ\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;249;38;114mmprotect\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0x7f7066585000\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m4096\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mPROT_READ\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;249;38;114mmprotect\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0x7f706696c000\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m4096\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mPROT_READ\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;249;38;114mmprotect\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0x55bc08de8000\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m4096\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mPROT_READ\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;249;38;114mmprotect\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0x7f70669a5000\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m4096\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mPROT_READ\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;249;38;114mmunmap\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0x7f7066972000\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m45404\u001b[0m\u001b[38;2;248;248;242m)           = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;249;38;114mset_tid_address\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0x7f70664ec650\u001b[0m\u001b[38;2;248;248;242m)         = \u001b[0m\u001b[38;2;190;132;255m1737\u001b[0m\n\u001b[38;2;249;38;114mset_robust_list\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0x7f70664ec660\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m24\u001b[0m\u001b[38;2;248;248;242m)     = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;249;38;114mrt_sigaction\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mSIGRTMIN\u001b[0m\u001b[38;2;248;248;242m, {sa_handler=\u001b[0m\u001b[38;2;190;132;255m0x7f70664f36b0\u001b[0m\u001b[38;2;248;248;242m, sa_mask=[], sa_flags=\u001b[0m\u001b[3;38;2;102;217;239mSA_RESTORER\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mSA_SIGINFO\u001b[0m\u001b[38;2;248;248;242m, sa_restorer=\u001b[0m\u001b[38;2;190;132;255m0x7f70664ff730\u001b[0m\u001b[38;2;248;248;242m}, \u001b[0m\u001b[3;38;2;102;217;239mNULL\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m8\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;249;38;114mrt_sigaction\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mSIGRT_1\u001b[0m\u001b[38;2;248;248;242m, {sa_handler=\u001b[0m\u001b[38;2;190;132;255m0x7f70664f3740\u001b[0m\u001b[38;2;248;248;242m, sa_mask=[], sa_flags=\u001b[0m\u001b[3;38;2;102;217;239mSA_RESTORER\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mSA_RESTART\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mSA_SIGINFO\u001b[0m\u001b[38;2;248;248;242m, sa_restorer=\u001b[0m\u001b[38;2;190;132;255m0x7f70664ff730\u001b[0m\u001b[38;2;248;248;242m}, \u001b[0m\u001b[3;38;2;102;217;239mNULL\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m8\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;249;38;114mrt_sigprocmask\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mSIG_UNBLOCK\u001b[0m\u001b[38;2;248;248;242m, [\u001b[0m\u001b[3;38;2;102;217;239mRTMIN\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mRT_1\u001b[0m\u001b[38;2;248;248;242m], \u001b[0m\u001b[3;38;2;102;217;239mNULL\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m8\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;249;38;114mprlimit64\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mRLIMIT_STACK\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mNULL\u001b[0m\u001b[38;2;248;248;242m, {rlim_cur=\u001b[0m\u001b[38;2;190;132;255m8192\u001b[0m\u001b[38;2;248;248;242m*\u001b[0m\u001b[38;2;190;132;255m1024\u001b[0m\u001b[38;2;248;248;242m, rlim_max=\u001b[0m\u001b[3;38;2;102;217;239mRLIM64_INFINITY\u001b[0m\u001b[38;2;248;248;242m}) = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;249;38;114mstatfs\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"/sys/fs/selinux\"\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m0x7ffd655ea110\u001b[0m\u001b[38;2;248;248;242m) = -\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mENOENT\u001b[0m\u001b[38;2;248;248;242m (No such file or directory)\u001b[0m\n\u001b[38;2;249;38;114mstatfs\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"/selinux\"\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m0x7ffd655ea110\u001b[0m\u001b[38;2;248;248;242m)      = -\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mENOENT\u001b[0m\u001b[38;2;248;248;242m (No such file or directory)\u001b[0m\n\u001b[38;2;249;38;114mbrk\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mNULL\u001b[0m\u001b[38;2;248;248;242m)                               = \u001b[0m\u001b[38;2;190;132;255m0x55bc0a294000\u001b[0m\n\u001b[38;2;249;38;114mbrk\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0x55bc0a2b5000\u001b[0m\u001b[38;2;248;248;242m)                     = \u001b[0m\u001b[38;2;190;132;255m0x55bc0a2b5000\u001b[0m\n\u001b[38;2;249;38;114mopenat\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mAT_FDCWD\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"/proc/filesystems\"\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mO_RDONLY\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mO_CLOEXEC\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\n\u001b[38;2;249;38;114mfstat\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, {st_mode=\u001b[0m\u001b[3;38;2;102;217;239mS_IFREG\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[38;2;190;132;255m0444\u001b[0m\u001b[38;2;248;248;242m, st_size=\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m, ...}) = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;249;38;114mread\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"nodev\u001b[0m\u001b[38;2;190;132;255m\\t\u001b[0m\u001b[38;2;230;219;116msysfs\u001b[0m\u001b[38;2;190;132;255m\\n\u001b[0m\u001b[38;2;230;219;116mnodev\u001b[0m\u001b[38;2;190;132;255m\\t\u001b[0m\u001b[38;2;230;219;116mrootfs\u001b[0m\u001b[38;2;190;132;255m\\n\u001b[0m\u001b[38;2;230;219;116mnodev\u001b[0m\u001b[38;2;190;132;255m\\t\u001b[0m\u001b[38;2;230;219;116mr\"\u001b[0m\u001b[38;2;248;248;242m..., \u001b[0m\u001b[38;2;190;132;255m1024\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m333\u001b[0m\n\u001b[38;2;249;38;114mread\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"\"\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m1024\u001b[0m\u001b[38;2;248;248;242m)                       = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;249;38;114mclose\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m)                                = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;249;38;114maccess\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"/etc/selinux/config\"\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mF_OK\u001b[0m\u001b[38;2;248;248;242m)     = -\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mENOENT\u001b[0m\u001b[38;2;248;248;242m (No such file or directory)\u001b[0m\n\u001b[38;2;249;38;114mopenat\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mAT_FDCWD\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"/usr/lib/locale/locale-archive\"\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mO_RDONLY\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mO_CLOEXEC\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\n\u001b[38;2;249;38;114mfstat\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, {st_mode=\u001b[0m\u001b[3;38;2;102;217;239mS_IFREG\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[38;2;190;132;255m0644\u001b[0m\u001b[38;2;248;248;242m, st_size=\u001b[0m\u001b[38;2;190;132;255m3031696\u001b[0m\u001b[38;2;248;248;242m, ...}) = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;249;38;114mmmap\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mNULL\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3031696\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mPROT_READ\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mMAP_PRIVATE\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m0x7f7066206000\u001b[0m\n\u001b[38;2;249;38;114mclose\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m)                                = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;249;38;114mioctl\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mTCGETS\u001b[0m\u001b[38;2;248;248;242m, {\u001b[0m\u001b[3;38;2;102;217;239mB38400\u001b[0m\u001b[38;2;248;248;242m opost isig icanon echo ...}) = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;249;38;114mioctl\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mTIOCGWINSZ\u001b[0m\u001b[38;2;248;248;242m, {ws_row=\u001b[0m\u001b[38;2;190;132;255m46\u001b[0m\u001b[38;2;248;248;242m, ws_col=\u001b[0m\u001b[38;2;190;132;255m173\u001b[0m\u001b[38;2;248;248;242m, ws_xpixel=\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m, ws_ypixel=\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m}) = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;249;38;114mopenat\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mAT_FDCWD\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\".\"\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mO_RDONLY\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mO_NONBLOCK\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mO_CLOEXEC\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[3;38;2;102;217;239mO_DIRECTORY\u001b[0m\u001b[38;2;248;248;242m) = \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\n\u001b[38;2;249;38;114mfstat\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, {st_mode=\u001b[0m\u001b[3;38;2;102;217;239mS_IFDIR\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[38;2;190;132;255m0700\u001b[0m\u001b[38;2;248;248;242m, st_size=\u001b[0m\u001b[38;2;190;132;255m4096\u001b[0m\u001b[38;2;248;248;242m, ...}) = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;249;38;114mgetdents64\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, /* \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m entries */, \u001b[0m\u001b[38;2;190;132;255m32768\u001b[0m\u001b[38;2;248;248;242m)   = \u001b[0m\u001b[38;2;190;132;255m80\u001b[0m\n\u001b[38;2;249;38;114mgetdents64\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m, /* \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m entries */, \u001b[0m\u001b[38;2;190;132;255m32768\u001b[0m\u001b[38;2;248;248;242m)   = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;249;38;114mclose\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m)                                = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;249;38;114mfstat\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, {st_mode=\u001b[0m\u001b[3;38;2;102;217;239mS_IFCHR\u001b[0m\u001b[38;2;248;248;242m|\u001b[0m\u001b[38;2;190;132;255m0620\u001b[0m\u001b[38;2;248;248;242m, st_rdev=makedev(\u001b[0m\u001b[38;2;190;132;255m0x88\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m), ...}) = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;249;38;114mwrite\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"ls.strace\u001b[0m\u001b[38;2;190;132;255m\\n\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m10\u001b[0m\u001b[38;2;248;248;242m)             = \u001b[0m\u001b[38;2;190;132;255m10\u001b[0m\n\u001b[38;2;249;38;114mclose\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)                                = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;249;38;114mclose\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m)                                = \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;249;38;114mexit_group\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)                           = ?\u001b[0m\n\u001b[38;2;248;248;242m+++ exited with \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m +++\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Stylus/gradients.styl",
    "content": "\u001b[38;2;249;38;114m@import\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'config'\u001b[0m\n\n\u001b[38;2;117;113;94m/*\u001b[0m\n\u001b[38;2;117;113;94m * Implicit color stop position.\u001b[0m\n\u001b[38;2;117;113;94m \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\n\u001b[38;2;166;226;46mpos-in-stops\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mi\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;255;255;255mstops\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255mlen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mlength\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mstops\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mlen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mi\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46m100%\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mi\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46munit\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mi\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m/\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mlen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m100\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m'%'\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;166;226;46m0\u001b[0m\n\n\u001b[38;2;117;113;94m/*\u001b[0m\n\u001b[38;2;117;113;94m * Normalize color stops:\u001b[0m\n\u001b[38;2;117;113;94m *\u001b[0m\n\u001b[38;2;117;113;94m *   - (color pos) -> (pos color)\u001b[0m\n\u001b[38;2;117;113;94m *   - (color) -> (implied-pos color)\u001b[0m\n\u001b[38;2;117;113;94m *\u001b[0m\n\u001b[38;2;117;113;94m \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\n\u001b[38;2;166;226;46mnormalize-stops\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mstops\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255mstops\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mclone\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mstops\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mstop\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;255;255;255mi\u001b[0m\u001b[38;2;249;38;114m in\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mstops\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mlength\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mstop\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255mcolor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mstop\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;255;255;255m0\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255mstop\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;255;255;255m0\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mpos-in-stops\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mi\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;255;255;255mstops\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255mstop\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mcolor\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtypeof\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mstop\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'unit'\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255mpos\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mstop\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255mstop\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mstop\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;255;255;255m0\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255mstop\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;255;255;255m0\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mpos\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;166;226;46ms\u001b[0m\u001b[3;38;2;166;226;46mt\u001b[0m\u001b[3;38;2;166;226;46mo\u001b[0m\u001b[3;38;2;166;226;46mp\u001b[0m\u001b[3;38;2;166;226;46ms\u001b[0m\n\n\u001b[38;2;117;113;94m/*\u001b[0m\n\u001b[38;2;117;113;94m * Join color stops with the given translation function.\u001b[0m\n\u001b[38;2;117;113;94m \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\n\u001b[38;2;166;226;46mjoin-stops\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mstops\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;255;255;255mtranslate\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255mstr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m''\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255mlen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mlength\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mstops\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mstop\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;255;255;255mi\u001b[0m\u001b[38;2;249;38;114m in\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mstops\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;166;226;46ms\u001b[0m\u001b[3;38;2;166;226;46mt\u001b[0m\u001b[3;38;2;166;226;46mr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m', '\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mi\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255mpos\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mstop\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;255;255;255m0\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255mcolor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mstop\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;166;226;46ms\u001b[0m\u001b[3;38;2;166;226;46mt\u001b[0m\u001b[3;38;2;166;226;46mr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtranslate\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mcolor\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;255;255;255mpos\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46munquote\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mstr\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;117;113;94m/*\u001b[0m\n\u001b[38;2;117;113;94m * Standard color stop.\u001b[0m\n\u001b[38;2;117;113;94m \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\n\u001b[38;2;166;226;46mstd-stop\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mcolor\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;255;255;255mpos\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116m'%s %s'\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m%\u001b[0m\u001b[38;2;248;248;242m (color pos)\u001b[0m\n\n\u001b[38;2;117;113;94m/*\u001b[0m\n\u001b[38;2;117;113;94m * Create a linear gradient with the given start position\u001b[0m\n\u001b[38;2;117;113;94m * and variable number of color stops.\u001b[0m\n\u001b[38;2;117;113;94m *\u001b[0m\n\u001b[38;2;117;113;94m * Examples:\u001b[0m\n\u001b[38;2;117;113;94m *\u001b[0m\n\u001b[38;2;117;113;94m *    background: linear-gradient(top, red, green, blue)\u001b[0m\n\u001b[38;2;117;113;94m *    background: linear-gradient(bottom, red, green 50%, blue)\u001b[0m\n\u001b[38;2;117;113;94m *    background: linear-gradient(bottom, red, 50% green, blue)\u001b[0m\n\u001b[38;2;117;113;94m *    background: linear-gradient(bottom, red, 50% green, 90% white, blue)\u001b[0m\n\u001b[38;2;117;113;94m *\u001b[0m\n\u001b[38;2;117;113;94m \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\n\u001b[38;2;166;226;46mlinear-gradient\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mstart\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;255;255;255mstops\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46merror\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m'color stops required'\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114munless\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mlength\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mstops\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46munquote\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m'linear-gradient('\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mjoin\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m', '\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;255;255;255marguments\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m')'\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;117;113;94m/*\u001b[0m\n\u001b[38;2;117;113;94m * Create a linear gradient image with the given start position\u001b[0m\n\u001b[38;2;117;113;94m * and variable number of color stops.\u001b[0m\n\u001b[38;2;117;113;94m \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\n\u001b[38;2;166;226;46mlinear-gradient-image\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mstart\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;255;255;255mstops\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46merror\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m'node-canvas is required for linear-gradient-image()'\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114munless\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mhas-canvas\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255mstops\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mstops\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;255;255;255m0\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mlength\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mstops\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46merror\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m'gradient image size required'\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114munless\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mstart\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;255;255;255m0\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;249;38;114m is a\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'unit'\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255msize\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mstart\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;255;255;255m0\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255mstart\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mstart\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'top'\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255mgrad\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mcreate-gradient-image\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255msize\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;255;255;255mstart\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255mstops\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mnormalize-stops\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mstops\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46madd-color-stop\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mgrad\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;255;255;255mstop\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;255;255;255m0\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;255;255;255mstop\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mstop\u001b[0m\u001b[38;2;249;38;114m in\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mstops\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116m'url(%s)'\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m%\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mgradient-data-uri\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mgrad\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Svelte/App.svelte",
    "content": "\u001b[38;2;255;255;255m<\u001b[0m\u001b[3;38;2;249;38;114mscript\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255monMount\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mfrom\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116msvelte\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mList\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mfrom\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m./List.svelte\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mItem\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mfrom\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m./Item.svelte\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mitem\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mpage\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[3;38;2;102;217;239masync\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;166;226;46mhashchange\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m the poor man's router!\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[3;38;2;102;217;239mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mpath\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mwindow\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mlocation\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mhash\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;248;248;242mslice\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;174;129;255m1\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255mpath\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;248;248;242mstartsWith\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m/item\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[3;38;2;102;217;239mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mid\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mpath\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;248;248;242mslice\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;174;129;255m6\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;255;255;255mitem\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mawait\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mfetch\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;249;38;114m`\u001b[0m\u001b[38;2;230;219;116mh\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mp\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;230;219;116m/\u001b[0m\u001b[38;2;230;219;116m/\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116md\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116m-\u001b[0m\u001b[38;2;230;219;116mh\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mp\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116mh\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mk\u001b[0m\u001b[38;2;230;219;116mu\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mp\u001b[0m\u001b[38;2;230;219;116mp\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116mc\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mm\u001b[0m\u001b[38;2;230;219;116m/\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mm\u001b[0m\u001b[38;2;230;219;116m/\u001b[0m\u001b[38;2;249;38;114m${\u001b[0m\u001b[38;2;255;255;255mid\u001b[0m\u001b[38;2;249;38;114m}\u001b[0m\u001b[38;2;249;38;114m`\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;248;248;242mthen\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[3;38;2;253;151;31mr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mr\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;248;248;242mjson\u001b[0m\u001b[38;2;248;248;242m()\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[3;38;2;166;226;46mwindow\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;248;248;242mscrollTo\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;174;129;255m0\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;174;129;255m0\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255mpath\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;248;248;242mstartsWith\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m/top\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;255;255;255mpage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;255;255;255mpath\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;248;248;242mslice\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;174;129;255m5\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[38;2;255;255;255mitem\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mnull\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\u001b[0m\u001b[3;38;2;166;226;46mwindow\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mlocation\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255mhash\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m/top/1\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;248;248;242monMount\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255mhashchange\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;255;255;255m</\u001b[0m\u001b[3;38;2;249;38;114mscript\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[3;38;2;249;38;114mscript\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtype\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mtext/livescript\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;246;170;17m// This block is a regression test for a bat panic when a LiveScript syntax definition is missing\u001b[0m\n\u001b[38;2;255;255;255m</\u001b[0m\u001b[3;38;2;249;38;114mscript\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mstyle\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mlang\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mtext/postcss\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;117;113;94m/*\u001b[0m\u001b[38;2;117;113;94m This block is a regression test for a bat panic when a PostCSS syntax definition is missing \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mstyle\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mstyle\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;249;38;114mmain\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[3;38;2;102;217;239mposition\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mrelative\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[3;38;2;102;217;239mmax-width\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m800\u001b[0m\u001b[38;2;249;38;114mpx\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[3;38;2;102;217;239mmargin\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mauto\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[3;38;2;102;217;239mmin-height\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m101\u001b[0m\u001b[38;2;249;38;114mvh\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[3;38;2;102;217;239mpadding\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114mem\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;249;38;114mmain\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mglobal\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mmeta\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[3;38;2;102;217;239mcolor\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m#\u001b[0m\u001b[38;2;190;132;255m999\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[3;38;2;102;217;239mfont-size\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m12\u001b[0m\u001b[38;2;249;38;114mpx\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[3;38;2;102;217;239mmargin\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114mem\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;249;38;114mmain\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mglobal\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114ma\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[3;38;2;102;217;239mcolor\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mrgb\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;190;132;255m150\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\n\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mstyle\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114msvelte:window\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mon\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;230;219;116mhashchange\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;255;255;255mhashchange\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mmain\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;249;38;114m#if\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mitem\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mItem\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;255;255;255mitem\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mreturnTo\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m#/top/\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255mpage\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;249;38;114m:else if\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mpage\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m\t\t\u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mList\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;255;255;255mpage\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m\t\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;249;38;114m/if\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mmain\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Swift/test.swift",
    "content": "\u001b[3;38;2;102;217;239mclass\u001b[0m\u001b[38;2;248;248;242m Person {\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m We can define class property here\u001b[0m\n\u001b[3;38;2;102;217;239mvar\u001b[0m\u001b[38;2;248;248;242m age  \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m25\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Implement Class initializer. Initializers are called when a new object of this class is created\u001b[0m\n\u001b[38;2;249;38;114minit\u001b[0m\u001b[38;2;248;248;242m() { \u001b[0m\n\u001b[38;2;248;248;242m   print(“A \u001b[0m\u001b[38;2;249;38;114mnew\u001b[0m\u001b[38;2;248;248;242m instance of this \u001b[0m\u001b[3;38;2;102;217;239mclass\u001b[0m\u001b[38;2;248;248;242m Person \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\u001b[38;2;248;248;242m created\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242m”) \u001b[0m\n\u001b[38;2;248;248;242m } \u001b[0m\n\u001b[38;2;248;248;242m} \u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m We can now create an instance of class Person - an object - by putting parentheses after the class name\u001b[0m\n\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m personObj \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m  Person()\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Once an instance of Person class is created we can access its properties using the dot “.” syntax.\u001b[0m\n\u001b[38;2;248;248;242mprint(“This person age \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\u001b[38;2;248;248;242m \\(personObj\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mage)”)\u001b[0m\n\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mFoundation\u001b[0m\n\u001b[3;38;2;102;217;239mclass\u001b[0m\u001b[38;2;248;248;242m Friend \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m Comparable {\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m name \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mString\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m age \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mInt\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114minit\u001b[0m\u001b[38;2;248;248;242m(name \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mString\u001b[0m\u001b[38;2;248;248;242m, age: \u001b[0m\u001b[3;38;2;166;226;46mInt\u001b[0m\u001b[38;2;248;248;242m) {\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mself\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mname \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m name\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mself\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mage \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m age\u001b[0m\n\u001b[38;2;248;248;242m    }\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[3;38;2;102;217;239mfunc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m<\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mlhs: Friend, rhs: Friend\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mBool\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m lhs\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mage \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m rhs\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mage \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m; \u001b[0m\u001b[3;38;2;102;217;239mfunc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mlhs: Friend, rhs: Friend\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mBool\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m lhs\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mage \u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;248;248;242m rhs\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mage\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[3;38;2;102;217;239mfunc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mlhs: Friend, rhs: Friend\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mBool\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mvar\u001b[0m\u001b[38;2;248;248;242m returnValue \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mfalse\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m (lhs\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mname \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m rhs\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mname) \u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;248;248;242m (lhs\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mage \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m rhs\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mage)\u001b[0m\n\u001b[38;2;248;248;242m    {\u001b[0m\n\u001b[38;2;248;248;242m        returnValue \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mtrue\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m returnValue\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m friend1 \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m Friend(name: \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mS\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116mg\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116my\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m, age: \u001b[0m\u001b[38;2;190;132;255m35\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m friend2 \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m Friend(name: \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mS\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116mg\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116my\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m, age: \u001b[0m\u001b[38;2;190;132;255m30\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\n\u001b[38;2;248;248;242m        print(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mC\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mm\u001b[0m\u001b[38;2;230;219;116mp\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116mF\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116md\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mb\u001b[0m\u001b[38;2;230;219;116mj\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mc\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116mS\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mm\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116mp\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116m?\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116m(\u001b[0m\u001b[38;2;230;219;116mf\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116md\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116m=\u001b[0m\u001b[38;2;230;219;116m=\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116mf\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116md\u001b[0m\u001b[38;2;230;219;116m2\u001b[0m\u001b[38;2;230;219;116m)\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[3;38;2;102;217;239mfunc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46msayHelloWorld\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    print(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mH\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116mW\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116md\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Call function\u001b[0m\n\u001b[38;2;248;248;242msayHelloWorld()\u001b[0m\n\n\u001b[3;38;2;102;217;239mfunc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mprintOutFriendNames\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mnames: \u001b[0m\u001b[3;38;2;166;226;46mString\u001b[0m\u001b[38;2;249;38;114m...\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m name \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m names {\u001b[0m\n\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242m        print(name)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Call the printOutFriendNames with two parameters\u001b[0m\n\u001b[38;2;248;248;242mprintOutFriendNames(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mS\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116mg\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116my\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mB\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Call the function with more parameters\u001b[0m\n\u001b[38;2;248;248;242mprintOutFriendNames(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mS\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116mg\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116my\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mB\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mM\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mx\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m simpleClosure \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m    print(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mF\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mm\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116mm\u001b[0m\u001b[38;2;230;219;116mp\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mC\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116mu\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Call closure\u001b[0m\n\u001b[38;2;248;248;242msimpleClosure() \u001b[0m\n\n\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m fullName \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m { (firstName:\u001b[0m\u001b[3;38;2;166;226;46mString\u001b[0m\u001b[38;2;248;248;242m, lastName:\u001b[0m\u001b[3;38;2;166;226;46mString\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[3;38;2;166;226;46mString\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m firstName \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m lastName\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Call Closure\u001b[0m\n\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m myFullName \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m fullName(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mS\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116mg\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116my\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mK\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116mg\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mp\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mv\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242mprint(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mM\u001b[0m\u001b[38;2;230;219;116my\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116mf\u001b[0m\u001b[38;2;230;219;116mu\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mm\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;248;248;242m\\(\u001b[0m\u001b[38;2;248;248;242mmyFullName\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m myDictionary \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m [\u001b[0m\u001b[3;38;2;166;226;46mString\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[3;38;2;166;226;46mString\u001b[0m\u001b[38;2;248;248;242m]()\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Another way to create an empty dictionary\u001b[0m\n\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m myDictionary2:[\u001b[0m\u001b[3;38;2;166;226;46mString\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[3;38;2;166;226;46mString\u001b[0m\u001b[38;2;248;248;242m] \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m [\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Keys in dictionary can also be of type Int\u001b[0m\n\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m myDictionary3 \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m [\u001b[0m\u001b[3;38;2;166;226;46mInt\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[3;38;2;166;226;46mString\u001b[0m\u001b[38;2;248;248;242m]()\u001b[0m\n\n\u001b[3;38;2;102;217;239mvar\u001b[0m\u001b[38;2;248;248;242m myDictionary \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m [\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mf\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116m_\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mm\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mS\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116mg\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116my\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116m_\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mm\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mK\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116mg\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mp\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mv\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m print to preview\u001b[0m\n\u001b[38;2;248;248;242mprint(myDictionary)\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Add a new key with a value\u001b[0m\n\u001b[38;2;248;248;242mmyDictionary[\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mu\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116m_\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116md\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m] \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mf\u001b[0m\u001b[38;2;230;219;116m5\u001b[0m\u001b[38;2;230;219;116mh\u001b[0m\u001b[38;2;230;219;116m7\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116mu\u001b[0m\u001b[38;2;230;219;116m0\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mJ\u001b[0m\u001b[38;2;230;219;116mu\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116mY\u001b[0m\u001b[38;2;230;219;116m8\u001b[0m\u001b[38;2;230;219;116mf\u001b[0m\u001b[38;2;230;219;116m7\u001b[0m\u001b[38;2;230;219;116mg\u001b[0m\u001b[38;2;230;219;116m5\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116m6\u001b[0m\u001b[38;2;230;219;116mf\u001b[0m\u001b[38;2;230;219;116md\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m We should now have 3 key value pairs printed\u001b[0m\n\u001b[38;2;248;248;242mprint(myDictionary)\u001b[0m\n\n\u001b[3;38;2;102;217;239mvar\u001b[0m\u001b[38;2;248;248;242m myDictionary \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m [\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mf\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116m_\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mm\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mS\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116mg\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116my\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116m_\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mm\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mK\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116mg\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mp\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mv\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Loop through dictionary keys and print values\u001b[0m\n\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m (key,value) \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m myDictionary {\u001b[0m\n\u001b[38;2;248;248;242m    print(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m\\(\u001b[0m\u001b[38;2;248;248;242mkey\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116m=\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;248;248;242m\\(\u001b[0m\u001b[38;2;248;248;242mvalue\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mclass\u001b[0m\u001b[38;2;248;248;242m Friend {\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m name \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mString\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m age \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mInt\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114minit\u001b[0m\u001b[38;2;248;248;242m(name \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mString\u001b[0m\u001b[38;2;248;248;242m, age: \u001b[0m\u001b[3;38;2;166;226;46mInt\u001b[0m\u001b[38;2;248;248;242m) {\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mself\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mname \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m name\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mself\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mage \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m age\u001b[0m\n\u001b[38;2;248;248;242m    }\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mvar\u001b[0m\u001b[38;2;248;248;242m friends:[Friend] \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m []\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m friend1 \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m Friend(name: \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mS\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116mg\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116my\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m, age: \u001b[0m\u001b[38;2;190;132;255m30\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m friend2 \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m Friend(name: \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mB\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m, age: \u001b[0m\u001b[38;2;190;132;255m35\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m friend3 \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m Friend(name: \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mM\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116mc\u001b[0m\u001b[38;2;230;219;116mh\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m, age: \u001b[0m\u001b[38;2;190;132;255m21\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\n\u001b[38;2;248;248;242m        friends\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mappend(friend1)\u001b[0m\n\u001b[38;2;248;248;242m        friends\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mappend(friend2)\u001b[0m\n\u001b[38;2;248;248;242m        friends\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mappend(friend3)\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\n\u001b[38;2;248;248;242m        printFriends(friends: friends)\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Get sorted array in descending order (largest to the smallest number)\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m sortedFriends \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m friends\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242msorted(by: { $\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mage \u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;248;248;242m $\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mage })\u001b[0m\n\u001b[38;2;248;248;242m        printFriends(friends: sortedFriends)\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Get sorted array in ascending order (smallest to the largest number)\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m sortedFriendsAscendingOrder \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m friends\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242msorted(by: { $\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mage \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m $\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mage })\u001b[0m\n\u001b[38;2;248;248;242m        printFriends(friends: sortedFriendsAscendingOrder)\u001b[0m\n\n\n\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mfunc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mprintFriends\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mfriends: [Friend]\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m friendEntry \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m friends {\u001b[0m\n\u001b[38;2;248;248;242m            print(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mN\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mm\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;248;248;242m\\(\u001b[0m\u001b[38;2;248;248;242mfriendEntry\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mname\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;230;219;116m,\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mg\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;248;248;242m\\(\u001b[0m\u001b[38;2;248;248;242mfriendEntry\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mage\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m    }\u001b[0m\n\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mUIKit\u001b[0m\n\u001b[3;38;2;102;217;239mclass\u001b[0m\u001b[38;2;248;248;242m ViewController: UIViewController  {\u001b[0m\n\u001b[38;2;249;38;114moverride\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mfunc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mviewDidLoad\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114msuper\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mviewDidLoad()\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;249;38;114moverride\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mfunc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mviewWillAppear\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m_ animated: \u001b[0m\u001b[3;38;2;166;226;46mBool\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114msuper\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mviewWillAppear(animated)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Create destination URL \u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m documentsUrl:URL \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m  FileManager\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;249;38;114mdefault\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242murls(\u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mdocumentDirectory, \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242muserDomainMask)\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mfirst \u001b[0m\u001b[38;2;249;38;114mas\u001b[0m\u001b[38;2;248;248;242m URL\u001b[0m\u001b[38;2;249;38;114m!\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m destinationFileUrl \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m documentsUrl\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mappendingPathComponent(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116md\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mw\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116md\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116md\u001b[0m\u001b[38;2;230;219;116mF\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116mj\u001b[0m\u001b[38;2;230;219;116mp\u001b[0m\u001b[38;2;230;219;116mg\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94mCreate URL to the source file you want to download\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m fileURL \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m URL(string: \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mh\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mp\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;230;219;116m/\u001b[0m\u001b[38;2;230;219;116m/\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116m3\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mm\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mz\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mw\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116mc\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mm\u001b[0m\u001b[38;2;230;219;116m/\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116m-\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116mw\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116mf\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116m/\u001b[0m\u001b[38;2;230;219;116mI\u001b[0m\u001b[38;2;230;219;116mM\u001b[0m\u001b[38;2;230;219;116mG\u001b[0m\u001b[38;2;230;219;116m_\u001b[0m\u001b[38;2;230;219;116m0\u001b[0m\u001b[38;2;230;219;116m0\u001b[0m\u001b[38;2;230;219;116m0\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116mJ\u001b[0m\u001b[38;2;230;219;116mP\u001b[0m\u001b[38;2;230;219;116mG\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m sessionConfig \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m URLSessionConfiguration\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;249;38;114mdefault\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m session \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m URLSession(configuration: sessionConfig)\u001b[0m\n\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m request \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m URLRequest(url:fileURL\u001b[0m\u001b[38;2;249;38;114m!\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m task \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m session\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mdownloadTask(with: request) { (tempLocalUrl, response, error) \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m tempLocalUrl \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m tempLocalUrl, error \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mnil\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Success\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m statusCode \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m (response \u001b[0m\u001b[38;2;249;38;114mas?\u001b[0m\u001b[38;2;248;248;242m HTTPURLResponse)?\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mstatusCode {\u001b[0m\n\u001b[38;2;248;248;242m                print(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mS\u001b[0m\u001b[38;2;230;219;116mu\u001b[0m\u001b[38;2;230;219;116mc\u001b[0m\u001b[38;2;230;219;116mc\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116mf\u001b[0m\u001b[38;2;230;219;116mu\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116my\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116md\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mw\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116md\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116md\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116mS\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mu\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116mc\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116md\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;248;248;242m\\(\u001b[0m\u001b[38;2;248;248;242mstatusCode\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;248;248;242mdo\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114mtry\u001b[0m\u001b[38;2;248;248;242m FileManager\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;249;38;114mdefault\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mcopyItem(at: tempLocalUrl, to: destinationFileUrl)\u001b[0m\n\u001b[38;2;248;248;242m            } \u001b[0m\u001b[38;2;248;248;242mcatch\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m writeError) {\u001b[0m\n\u001b[38;2;248;248;242m                print(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mE\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116mc\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116mg\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116mf\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;248;248;242m\\(\u001b[0m\u001b[38;2;248;248;242mdestinationFileUrl\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;248;248;242m\\(\u001b[0m\u001b[38;2;248;248;242mwriteError\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m            }\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\n\u001b[38;2;248;248;242m        } \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m            print(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mE\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mk\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116mp\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mc\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116mw\u001b[0m\u001b[38;2;230;219;116mh\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116md\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mw\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116md\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116mg\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116mf\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116mE\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116md\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116mc\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116mp\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116m%\u001b[0m\u001b[38;2;230;219;116m@\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m, error?\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mlocalizedDescription);\u001b[0m\n\u001b[38;2;248;248;242m        }\u001b[0m\n\u001b[38;2;248;248;242m    }\u001b[0m\n\u001b[38;2;248;248;242m    task\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mresume()\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\n\u001b[38;2;248;248;242m  }\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242mdo\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Convert JSON Object received from server side into Swift NSArray.\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Note the use \"try\"\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m convertedJsonIntoArray \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mtry\u001b[0m\u001b[38;2;248;248;242m JSONSerialization\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mJSONObjectWithData(data\u001b[0m\u001b[38;2;249;38;114m!\u001b[0m\u001b[38;2;248;248;242m, options: []) \u001b[0m\u001b[38;2;249;38;114mas?\u001b[0m\u001b[38;2;248;248;242m NSArray {\u001b[0m\n\u001b[38;2;248;248;242m            }\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\n\u001b[38;2;248;248;242m        } \u001b[0m\u001b[38;2;248;248;242mcatch\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m error \u001b[0m\u001b[38;2;249;38;114mas\u001b[0m\u001b[38;2;248;248;242m NSError {\u001b[0m\n\u001b[38;2;248;248;242m            print(error\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mlocalizedDescription)\u001b[0m\n\u001b[38;2;248;248;242m        }\u001b[0m\n\n\u001b[38;2;248;248;242mDispatchQueue\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mglobal(qos: \u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242muserInitiated)\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242masync {\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Do some time consuming task in this background thread\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Mobile app will remain to be responsive to user actions\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\n\u001b[38;2;248;248;242m            print(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mP\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116mf\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116mm\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116mg\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116mm\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116mc\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116mu\u001b[0m\u001b[38;2;230;219;116mm\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116mg\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116mk\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mh\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116mb\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mc\u001b[0m\u001b[38;2;230;219;116mk\u001b[0m\u001b[38;2;230;219;116mg\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mu\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116md\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mh\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116md\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\n\u001b[38;2;248;248;242m           DispatchQueue\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mmain\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242masync {\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Task consuming task has completed\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Update UI from this block of code\u001b[0m\n\u001b[38;2;248;248;242m                print(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mT\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116mm\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116mc\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116mu\u001b[0m\u001b[38;2;230;219;116mm\u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116mg\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116mk\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116mh\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116mc\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mm\u001b[0m\u001b[38;2;230;219;116mp\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116md\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116mF\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mm\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116mh\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116mw\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116ml\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mw\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116md\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116mu\u001b[0m\u001b[38;2;230;219;116mp\u001b[0m\u001b[38;2;230;219;116md\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116mu\u001b[0m\u001b[38;2;230;219;116ms\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116mi\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116mr\u001b[0m\u001b[38;2;230;219;116mf\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mc\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116m.\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m            }\u001b[0m\n\u001b[38;2;248;248;242m        }\u001b[0m\n\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mUIKit\u001b[0m\n\u001b[3;38;2;102;217;239mclass\u001b[0m\u001b[38;2;248;248;242m ViewController: UIViewController {\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114moverride\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mfunc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mviewDidLoad\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114msuper\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mviewDidLoad()\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Do any additional setup after loading the view, typically from a nib.\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m button \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m UIButton(type: UIButtonType\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242msystem) \u001b[0m\u001b[38;2;249;38;114mas\u001b[0m\u001b[38;2;248;248;242m UIButton\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m xPostion:CGFloat \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m50\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m yPostion:CGFloat \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m100\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m buttonWidth:CGFloat \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m150\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m buttonHeight:CGFloat \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m45\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\n\u001b[38;2;248;248;242m        button\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mframe \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m CGRect(x:xPostion, y:yPostion, width:buttonWidth, height:buttonHeight)\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\n\u001b[38;2;248;248;242m        button\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mbackgroundColor \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m UIColor\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mlightGray\u001b[0m\n\u001b[38;2;248;248;242m        button\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242msetTitle(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mT\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mp\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116mm\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m: UIControlState\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mnormal)\u001b[0m\n\u001b[38;2;248;248;242m        button\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mtintColor \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m UIColor\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mblack\u001b[0m\n\u001b[38;2;248;248;242m        button\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242maddTarget(\u001b[0m\u001b[38;2;249;38;114mself\u001b[0m\u001b[38;2;248;248;242m, action: #selector(ViewController\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mbuttonAction(_:)), \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mtouchUpInside)\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mself\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mview\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242maddSubview(button)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mfunc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mbuttonAction\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m_ sender:UIButton\u001b[0m\u001b[38;2;249;38;114m!\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        print(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mB\u001b[0m\u001b[38;2;230;219;116mu\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116mo\u001b[0m\u001b[38;2;230;219;116mn\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;230;219;116mt\u001b[0m\u001b[38;2;230;219;116ma\u001b[0m\u001b[38;2;230;219;116mp\u001b[0m\u001b[38;2;230;219;116mp\u001b[0m\u001b[38;2;230;219;116me\u001b[0m\u001b[38;2;230;219;116md\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114moverride\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mfunc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mdidReceiveMemoryWarning\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114msuper\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mdidReceiveMemoryWarning()\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Dispose of any resources that can be recreated.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mUIKit\u001b[0m\n\u001b[3;38;2;102;217;239mclass\u001b[0m\u001b[38;2;248;248;242m ViewController: UIViewController {\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114moverride\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mfunc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mviewDidLoad\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114msuper\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mviewDidLoad()\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94mCreate Activity Indicator\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m myActivityIndicator \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mgray)\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Position Activity Indicator in the center of the main view\u001b[0m\n\u001b[38;2;248;248;242m        myActivityIndicator\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mcenter \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m view\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mcenter\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m If needed, you can prevent Acivity Indicator from hiding when stopAnimating() is called\u001b[0m\n\u001b[38;2;248;248;242m        myActivityIndicator\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mhidesWhenStopped \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mfalse\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Start Activity Indicator\u001b[0m\n\u001b[38;2;248;248;242m        myActivityIndicator\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mstartAnimating()\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Call stopAnimating() when need to stop activity indicator\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94mmyActivityIndicator.stopAnimating()\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\n\u001b[38;2;248;248;242m        view\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242maddSubview(myActivityIndicator)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114moverride\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mfunc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mdidReceiveMemoryWarning\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114msuper\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mdidReceiveMemoryWarning()\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\n\n\n\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Syslog/example.syslog",
    "content": "\u001b[38;2;190;132;255mApr  4\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m00:00:01\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mhostname-here\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239msystemd\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m logrotate.service: Succeeded.\u001b[0m\n\u001b[38;2;190;132;255mApr  4\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m00:00:01\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mhostname-here\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239msystemd\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m Finished Rotate log files.\u001b[0m\n\u001b[38;2;190;132;255mApr  4\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m00:00:01\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mhostname-here\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mcolord\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m920\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;221;32;32mfailed\u001b[0m\u001b[38;2;248;248;240m to get session [pid \u001b[0m\u001b[38;2;190;132;255m137485\u001b[0m\u001b[38;2;248;248;240m]: No data available\u001b[0m\n\u001b[38;2;190;132;255mApr  4\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m00:00:21\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mhostname-here\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mkernel\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31m55604\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[3;38;2;253;151;31m908232\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m audit: \u001b[0m\u001b[3;38;2;253;151;31mtype\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;190;132;255m1400\u001b[0m\u001b[38;2;248;248;242m audit(\u001b[0m\u001b[38;2;190;132;255m1617483621\u001b[0m\u001b[38;2;190;132;255m.\u001b[0m\u001b[38;2;190;132;255m094\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m28\u001b[0m\u001b[38;2;248;248;242m): \u001b[0m\u001b[3;38;2;253;151;31mapparmor\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m\"DENIED\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31moperation\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m\"capable\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mprofile\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m\"/usr/sbin/cups-browsed\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mpid\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;190;132;255m59311\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mcomm\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m\"cups-browsed\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mcapability\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;190;132;255m23\u001b[0m\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;253;151;31mcapname\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m\"sys_nice\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;190;132;255mApr  4\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m00:01:38\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mhostname-here\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239msystemd-resolved\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m721\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;240mServer returned \u001b[0m\u001b[38;2;221;32;32merror\u001b[0m\u001b[38;2;248;248;240m NXDOMAIN, mitigating potential DNS violation DVE-\u001b[0m\u001b[38;2;190;132;255m2018\u001b[0m\u001b[38;2;248;248;240m-\u001b[0m\u001b[38;2;190;132;255m0001\u001b[0m\u001b[38;2;248;248;240m, retrying transaction with reduced feature level UDP.\u001b[0m\n\u001b[38;2;190;132;255mApr  4\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m00:04:46\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mhostname-here\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mntpd\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m952\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m Soliciting pool server \u001b[0m\u001b[38;2;190;132;255m255\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255m76\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255m59\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255m37\u001b[0m\n\u001b[38;2;190;132;255mApr  4\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m00:05:21\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mhostname-here\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mntpd\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m952\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m local addr \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m -> \u001b[0m\u001b[38;2;190;132;255m<null>\u001b[0m\n\u001b[38;2;190;132;255mApr  4\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m00:06:29\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mhostname-here\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mntpd\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m952\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m receive: Unexpected origin timestamp \u001b[0m\u001b[38;2;190;132;255m0x\u001b[0m\u001b[38;2;190;132;255me414a8d1\u001b[0m\u001b[38;2;190;132;255m.\u001b[0m\u001b[38;2;190;132;255m82e825f5\u001b[0m\u001b[38;2;248;248;242m does not match aorg \u001b[0m\u001b[38;2;190;132;255m0x\u001b[0m\u001b[38;2;190;132;255me414a8d5\u001b[0m\u001b[38;2;190;132;255m.\u001b[0m\u001b[38;2;190;132;255m82c50d8c\u001b[0m\u001b[38;2;248;248;242m from server@\u001b[0m\u001b[38;2;190;132;255m127\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m xmt \u001b[0m\u001b[38;2;190;132;255m0x\u001b[0m\u001b[38;2;190;132;255me414a8d1\u001b[0m\u001b[38;2;190;132;255m.\u001b[0m\u001b[38;2;190;132;255me671d7c4\u001b[0m\n\u001b[38;2;190;132;255mApr  4\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m09:30:01\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mhostname-here\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mCRON\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m89278\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m (root) \u001b[0m\u001b[38;2;166;226;46mCMD\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239m[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mx\u001b[0m\u001b[38;2;255;255;255m /etc/init.d/anacron \u001b[0m\u001b[38;2;102;217;239m]\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m!\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31md\u001b[0m\u001b[38;2;255;255;255m /run/systemd/system \u001b[0m\u001b[38;2;102;217;239m]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m/usr/sbin/invoke-rc.d\u001b[0m\u001b[38;2;255;255;255m anacron start \u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;255;255;255m/dev/null\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114mfi\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;190;132;255mApr  4\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m16:32:07\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mhostname-here\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mNetworkManager\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m740\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m<info>\u001b[0m\u001b[38;2;248;248;242m  [\u001b[0m\u001b[38;2;190;132;255m1617629527\u001b[0m\u001b[38;2;190;132;255m.\u001b[0m\u001b[38;2;190;132;255m1101\u001b[0m\u001b[38;2;248;248;242m] manager: NetworkManager state is now CONNECTED_GLOBAL\u001b[0m\n\u001b[38;2;190;132;255mApr  4\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m22:00:45\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mhostname-here\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mdbus-daemon\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m1094\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31msession\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31muid\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;190;132;255m1000\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mpid\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;190;132;255m1094\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m Successfully activated service \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mio.github.celluloid_player.Celluloid\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\n\u001b[38;2;190;132;255mAug 11\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m13:29:06\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mhostname-here\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239minsomnia_insomnia.desktop\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m142666\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m13:29:06\u001b[0m\u001b[38;2;190;132;255m.\u001b[0m\u001b[38;2;190;132;255m316\u001b[0m\u001b[38;2;248;248;242m › [updater] Updater not running \u001b[0m\u001b[3;38;2;253;151;31mplatform\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242mlinux \u001b[0m\u001b[3;38;2;253;151;31mdev\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242mfalse\u001b[0m\n\u001b[38;2;190;132;255mAug 11\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m13:36:34\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m192.168.220.5\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mnginx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2021/08/11\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m13:36:34\u001b[0m\u001b[38;2;248;248;242m [\u001b[0m\u001b[38;2;248;248;242mdebug\u001b[0m\u001b[38;2;248;248;242m] \u001b[0m\u001b[38;2;190;132;255m2031\u001b[0m\u001b[38;2;248;248;242m#\u001b[0m\u001b[38;2;190;132;255m2031\u001b[0m\u001b[38;2;248;248;242m: epoll add event: fd:\u001b[0m\u001b[38;2;190;132;255m6\u001b[0m\u001b[38;2;248;248;242m op:\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m ev:\u001b[0m\u001b[38;2;190;132;255m00002001\u001b[0m\n\u001b[38;2;190;132;255mAug 11\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m21:31:08\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m::1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mnginx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2021/08/11\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m21:31:08\u001b[0m\u001b[38;2;248;248;242m [\u001b[0m\u001b[38;2;248;248;242mdebug\u001b[0m\u001b[38;2;248;248;242m] \u001b[0m\u001b[38;2;190;132;255m760831\u001b[0m\u001b[38;2;248;248;242m#\u001b[0m\u001b[38;2;190;132;255m760831\u001b[0m\u001b[38;2;248;248;242m: epoll add event: fd:\u001b[0m\u001b[38;2;190;132;255m6\u001b[0m\u001b[38;2;248;248;242m op:\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m ev:\u001b[0m\u001b[38;2;190;132;255m10000001\u001b[0m\n\u001b[38;2;190;132;255mAug 11\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m21:40:31\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mhostname-here\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mscop\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mhello\u001b[0m\n\u001b[38;2;190;132;255mAug 16\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m21:38:21\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mhostname-here\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239msystemd\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m Finished Cleanup of Temporary Directories.\u001b[0m\n\u001b[38;2;190;132;255m2025-02-08\u001b[0m\u001b[38;2;248;248;240m \u001b[0m\u001b[38;2;190;132;255m20:52:11\u001b[0m\u001b[38;2;190;132;255m.\u001b[0m\u001b[38;2;190;132;255m039\u001b[0m\u001b[38;2;248;248;240m - setfont: \u001b[0m\u001b[38;2;221;32;32mERROR\u001b[0m\u001b[38;2;248;248;240m kdfontop.c:\u001b[0m\u001b[38;2;190;132;255m183\u001b[0m\u001b[38;2;248;248;240m put_font_kdfontop: Unable to load such font with such kernel version\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/SystemVerilog/output.sv",
    "content": "\u001b[38;2;190;132;255m`timescale\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1ns\u001b[0m\u001b[38;2;249;38;114m/\u001b[0m\u001b[38;2;190;132;255m1ps\u001b[0m\n\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Design Code\u001b[0m\n\u001b[38;2;249;38;114mmodule\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mADDER\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\n\u001b[3;38;2;166;226;46m    input\u001b[0m\u001b[38;2;248;248;242m clk,\u001b[0m\n\u001b[3;38;2;166;226;46m    input\u001b[0m\u001b[38;2;248;248;242m [\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m]\ta,\u001b[0m\n\u001b[3;38;2;166;226;46m    input\u001b[0m\u001b[38;2;248;248;242m [\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m]\tb,\u001b[0m\n\u001b[3;38;2;166;226;46m    input\u001b[0m\u001b[38;2;248;248;242m bIsPos,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;166;226;46moutput\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mreg\u001b[0m\u001b[38;2;248;248;242m [\u001b[0m\u001b[38;2;190;132;255m8\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m] result\u001b[0m\n\u001b[38;2;248;248;242m);\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114malways\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;249;38;114mposedge\u001b[0m\u001b[38;2;248;248;242m clk) \u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m (bIsPos) \u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\u001b[38;2;248;248;242m\t\u001b[0m\n\u001b[38;2;248;248;242m            result \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m a \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m b;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\n\u001b[38;2;248;248;242m            result \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m a \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m b;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\n\u001b[38;2;249;38;114mendmodule\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mADDER\u001b[0m\n\n\u001b[38;2;249;38;114minterface\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46madder_if\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;166;226;46minput\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mbit\u001b[0m\u001b[38;2;248;248;242m clk,\u001b[0m\n\u001b[3;38;2;166;226;46m    input\u001b[0m\u001b[38;2;248;248;242m [\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m] a,\u001b[0m\n\u001b[3;38;2;166;226;46m    input\u001b[0m\u001b[38;2;248;248;242m [\u001b[0m\u001b[38;2;190;132;255m7\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m] b,\u001b[0m\n\u001b[3;38;2;166;226;46m    input\u001b[0m\u001b[38;2;248;248;242m bIsPos,\u001b[0m\n\u001b[3;38;2;166;226;46m    input\u001b[0m\u001b[38;2;248;248;242m [\u001b[0m\u001b[38;2;190;132;255m8\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m] result\u001b[0m\n\u001b[38;2;248;248;242m);\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mclocking\u001b[0m\u001b[38;2;248;248;242m cb \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mposedge\u001b[0m\u001b[38;2;248;248;242m clk);\u001b[0m\n\u001b[3;38;2;166;226;46m        output\u001b[0m\u001b[38;2;248;248;242m a;\u001b[0m\n\u001b[3;38;2;166;226;46m        output\u001b[0m\u001b[38;2;248;248;242m b;\u001b[0m\n\u001b[3;38;2;166;226;46m        output\u001b[0m\u001b[38;2;248;248;242m bIsPos;\u001b[0m\n\u001b[3;38;2;166;226;46m        input\u001b[0m\u001b[38;2;248;248;242m result;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mendclocking\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mcb\u001b[0m\n\n\u001b[38;2;249;38;114mendinterface\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46madder_if\u001b[0m\n\n\n\u001b[38;2;249;38;114mbind\u001b[0m\u001b[38;2;248;248;242m ADDER \u001b[0m\u001b[3;38;2;102;217;239madder_if\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mmy_adder_if\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\n\u001b[38;2;248;248;242m    .\u001b[0m\u001b[38;2;102;217;239mclk\u001b[0m\u001b[38;2;248;248;242m(clk),\u001b[0m\n\u001b[38;2;248;248;242m    .\u001b[0m\u001b[38;2;102;217;239ma\u001b[0m\u001b[38;2;248;248;242m(a),\u001b[0m\n\u001b[38;2;248;248;242m    .\u001b[0m\u001b[38;2;102;217;239mb\u001b[0m\u001b[38;2;248;248;242m(b),\u001b[0m\n\u001b[38;2;248;248;242m    .\u001b[0m\u001b[38;2;102;217;239mbIsPos\u001b[0m\u001b[38;2;248;248;242m(bIsPos),\u001b[0m\n\u001b[38;2;248;248;242m    .\u001b[0m\u001b[38;2;102;217;239mresult\u001b[0m\u001b[38;2;248;248;242m(result)\u001b[0m\n\u001b[38;2;248;248;242m);\u001b[0m\n\n\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Testbench Code\u001b[0m\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46muvm_pkg\u001b[0m\u001b[38;2;249;38;114m::\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;190;132;255m`include\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116muvm_macros.svh\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\n\u001b[38;2;249;38;114mclass\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtestbench_env\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mextends\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;4;38;2;166;226;46muvm_env\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mvirtual \u001b[0m\u001b[3;38;2;102;217;239madder_if\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mm_if;\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mnew\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mstring\u001b[0m\u001b[38;2;248;248;242m name, \u001b[0m\u001b[3;38;2;102;217;239muvm_component\u001b[0m\u001b[38;2;248;248;242m parent \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mnull\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114msuper\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;249;38;114mnew\u001b[0m\u001b[38;2;248;248;242m(name, parent);\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mendfunction\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mfunction\u001b[0m\u001b[3;38;2;102;217;239m void\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mconnect_phase\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239muvm_phase\u001b[0m\u001b[38;2;248;248;242m phase\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114massert\u001b[0m\u001b[38;2;248;248;242m(uvm_resource_db\u001b[0m\u001b[38;2;249;38;114m#\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mvirtual\u001b[0m\u001b[38;2;248;248;242m adder_if)\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;102;217;239mread_by_name\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mget_full_name\u001b[0m\u001b[38;2;248;248;242m(), \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116madder_if\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m, m_if));\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mendfunction\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mconnect_phase\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mtask\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mrun_phase\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239muvm_phase\u001b[0m\u001b[38;2;248;248;242m phase\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        phase.\u001b[0m\u001b[38;2;102;217;239mraise_objection\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mthis\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;190;132;255m`uvm_info\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mget_name\u001b[0m\u001b[38;2;248;248;242m(), \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mStarting test!\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255mUVM_HIGH\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\n\u001b[3;38;2;102;217;239m            int\u001b[0m\u001b[38;2;248;248;242m a \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m8'h4\u001b[0m\u001b[38;2;248;248;242m, b \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m8'h5\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;248;248;242m(m_if.cb);\u001b[0m\n\u001b[38;2;248;248;242m            m_if.cb.a \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m a;\u001b[0m\n\u001b[38;2;248;248;242m            m_if.cb.b \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m b;\u001b[0m\n\u001b[38;2;248;248;242m            m_if.cb.bIsPos \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1'b1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mrepeat\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;248;248;242m(m_if.cb);\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;190;132;255m`uvm_info\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mget_name\u001b[0m\u001b[38;2;248;248;242m(), \u001b[0m\u001b[38;2;102;217;239m$sformatf\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;190;132;255m%0d\u001b[0m\u001b[38;2;230;219;116m + \u001b[0m\u001b[38;2;190;132;255m%0d\u001b[0m\u001b[38;2;230;219;116m = \u001b[0m\u001b[38;2;190;132;255m%0d\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m, a, b, m_if.cb.result), \u001b[0m\u001b[38;2;190;132;255mUVM_LOW\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;190;132;255m`uvm_info\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mget_name\u001b[0m\u001b[38;2;248;248;242m(), \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mEnding test!\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255mUVM_HIGH\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\u001b[38;2;248;248;242m        phase.\u001b[0m\u001b[38;2;102;217;239mdrop_objection\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mthis\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mendtask\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mrun_phase\u001b[0m\n\u001b[38;2;249;38;114mendclass\u001b[0m\n\n\n\u001b[38;2;249;38;114mmodule\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtop\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[3;38;2;102;217;239m    bit\u001b[0m\u001b[38;2;248;248;242m clk;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239menv\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242menvironment;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mADDER\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mdut\u001b[0m\u001b[38;2;248;248;242m(.\u001b[0m\u001b[38;2;102;217;239mclk\u001b[0m\u001b[38;2;248;248;242m (clk));\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114minitial\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242menvironment \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mnew\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mtestbench_env\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[3;38;2;102;217;239muvm_resource_db\u001b[0m\u001b[38;2;249;38;114m#\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mvirtual\u001b[0m\u001b[38;2;248;248;242m adder_if)\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;102;217;239mset\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116menv\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116madder_if\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m, dut.my_adder_if);\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242mclk \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;102;217;239mrun_test\u001b[0m\u001b[38;2;248;248;242m();\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Clock generation\t\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114minitial\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mforever\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114m#\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m) clk \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m~\u001b[0m\u001b[38;2;248;248;242mclk;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\n\u001b[38;2;249;38;114mendmodule\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/TOML/Cargo.toml",
    "content": "\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mpackage\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;249;38;114mauthors\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mDavid Peter <mail@david-peter.de>\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;249;38;114mcategories\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mcommand-line-utilities\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;249;38;114mdescription\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mA cat(1) clone with wings.\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;249;38;114mhomepage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mhttps://github.com/sharkdp/bat\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;249;38;114mlicense\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mMIT/Apache-2.0\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;249;38;114mname\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mbat\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;249;38;114mreadme\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mREADME.md\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;249;38;114mrepository\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mhttps://github.com/sharkdp/bat\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;249;38;114mversion\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m0.15.4\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;249;38;114mexclude\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116massets/syntaxes/*\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116massets/themes/*\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;249;38;114mbuild\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mbuild.rs\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;249;38;114medition\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m2018\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\n\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mfeatures\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;249;38;114mdefault\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mapplication\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Feature required for bat the application. Should be disabled when depending on\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m bat as a library.\u001b[0m\n\u001b[38;2;249;38;114mapplication\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116matty\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mclap\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mdirs\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mgit\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mlazy_static\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mliquid\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mpaging\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mwild\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mregex-onig\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;249;38;114mgit\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mgit2\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Support indicating git modifications\u001b[0m\n\u001b[38;2;249;38;114mpaging\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mshell-words\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Support applying a pager on the output\u001b[0m\n\u001b[38;2;249;38;114mregex-onig\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116msyntect/regex-onig\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Use the \"oniguruma\" regex engine\u001b[0m\n\u001b[38;2;249;38;114mregex-fancy\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116msyntect/regex-fancy\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Use the rust-only \"fancy-regex\" engine\u001b[0m\n\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mdependencies\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;249;38;114matty\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mversion\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m0.2.14\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114moptional\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;249;38;114mansi_term\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m^0.12.1\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;249;38;114mansi_colours\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m^1.0\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;249;38;114mconsole\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m0.11.3\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;249;38;114mdirs\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mversion\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m3.0\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114moptional\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;249;38;114mlazy_static\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mversion\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m1.4\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114moptional\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;249;38;114mwild\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mversion\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m2.0\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114moptional\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;249;38;114mcontent_inspector\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m0.2.4\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;249;38;114mencoding\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m0.2\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;249;38;114mshell-words\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mversion\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m1.0.0\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114moptional\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;249;38;114municode-width\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m0.1.8\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;249;38;114mglobset\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m0.4\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;249;38;114mserde\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mversion\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m1.0\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mfeatures\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mderive\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;249;38;114mserde_yaml\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m0.8\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;249;38;114msemver\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m0.10\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;249;38;114mpath_abs\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mversion\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m0.5\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mdefault-features\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mfalse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mdependencies\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;166;226;46mgit2\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;249;38;114mversion\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m0.13\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;249;38;114moptional\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\n\u001b[38;2;249;38;114mdefault-features\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mfalse\u001b[0m\n\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mdependencies\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;166;226;46msyntect\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;249;38;114mversion\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m4.2.0\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;249;38;114mdefault-features\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mfalse\u001b[0m\n\u001b[38;2;249;38;114mfeatures\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mparsing\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116myaml-load\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mdump-load\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mdump-create\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mdependencies\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;166;226;46mclap\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;249;38;114mversion\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m2.33\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;249;38;114moptional\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\n\u001b[38;2;249;38;114mdefault-features\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mfalse\u001b[0m\n\u001b[38;2;249;38;114mfeatures\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116msuggestions\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mcolor\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mwrap_help\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mdependencies\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;166;226;46merror-chain\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;249;38;114mversion\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m0.12\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;249;38;114mdefault-features\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mfalse\u001b[0m\n\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mdev-dependencies\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;249;38;114mtempdir\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m0.3\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;249;38;114massert_cmd\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m1.0.1\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;249;38;114mpredicates\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m1.0.5\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mbuild-dependencies\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;249;38;114mclap\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mversion\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m2.33\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114moptional\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;249;38;114mliquid\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mversion\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m0.21\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114moptional\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;166;226;46mprofile\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;166;226;46mrelease\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;249;38;114mlto\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\n\u001b[38;2;249;38;114mcodegen-units\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Tcl/test.tcl",
    "content": "\u001b[38;2;249;38;114mset\u001b[0m\u001b[38;2;248;248;242m part1 hello\u001b[0m\n\u001b[38;2;249;38;114mset\u001b[0m\u001b[38;2;248;248;242m part2 how\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mset\u001b[0m\u001b[38;2;248;248;242m part3 are\u001b[0m\n\u001b[38;2;249;38;114mset\u001b[0m\u001b[38;2;248;248;242m part4 you\u001b[0m\n\n\u001b[38;2;249;38;114mset\u001b[0m\u001b[38;2;248;248;242m part2\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;249;38;114mset\u001b[0m\u001b[38;2;248;248;242m greeting \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mpart1\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mpart2\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mpart3\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mpart4\u001b[0m\n\n\u001b[38;2;249;38;114mset\u001b[0m\u001b[38;2;248;248;242m somevar \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mThis\u001b[0m\u001b[38;2;248;248;242m is a literal $ sign, and this \u001b[0m\u001b[38;2;190;132;255m\\}\u001b[0m\u001b[38;2;248;248;242m escaped\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mbrace\u001b[0m\u001b[38;2;248;248;242m remains uninterpreted\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;249;38;114mset\u001b[0m\u001b[38;2;248;248;242m name Neo\u001b[0m\n\u001b[38;2;249;38;114mset\u001b[0m\u001b[38;2;248;248;242m greeting \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mHello, \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mname\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\n\u001b[38;2;249;38;114mvariable\u001b[0m\u001b[38;2;248;248;242m name NotNeo\u001b[0m\n\n\u001b[38;2;249;38;114mnamespace\u001b[0m\u001b[38;2;248;248;242m eval \u001b[0m\u001b[38;2;166;226;46mpeople\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mset\u001b[0m\u001b[38;2;248;248;242m name NeoAgain\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/TeX/main.tex",
    "content": "\u001b[38;2;117;113;94m% !TeX program = lualatex\u001b[0m\n\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;249;38;114m\\\u001b[0m\u001b[38;2;249;38;114mdocumentclass\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[3;38;2;166;226;46ma\u001b[0m\u001b[3;38;2;166;226;46mr\u001b[0m\u001b[3;38;2;166;226;46mt\u001b[0m\u001b[3;38;2;166;226;46mi\u001b[0m\u001b[3;38;2;166;226;46mc\u001b[0m\u001b[3;38;2;166;226;46ml\u001b[0m\u001b[3;38;2;166;226;46me\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\n\u001b[38;2;249;38;114m\\\u001b[0m\u001b[38;2;249;38;114musepackage\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[3;38;2;166;226;46mverse\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\n\u001b[38;2;249;38;114m\\\u001b[0m\u001b[38;2;249;38;114musepackage\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[3;38;2;166;226;46mfontspec\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;249;38;114m\\\u001b[0m\u001b[38;2;249;38;114mnewcommand\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[38;2;166;226;46m\\attrib\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\u001b[38;2;255;255;255m[\u001b[0m\u001b[38;2;248;248;242m1\u001b[0m\u001b[38;2;255;255;255m]\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[38;2;102;217;239m\\\u001b[0m\u001b[38;2;102;217;239mnopagebreak\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[38;2;102;217;239m\\\u001b[0m\u001b[38;2;102;217;239mraggedleft\u001b[0m\u001b[38;2;102;217;239m\\\u001b[0m\u001b[38;2;102;217;239mfootnotesize\u001b[0m\u001b[38;2;248;248;242m #1\u001b[0m\u001b[38;2;102;217;239m\\\u001b[0m\u001b[38;2;102;217;239mpar\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\n\u001b[38;2;249;38;114m\\\u001b[0m\u001b[38;2;249;38;114mrenewcommand\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[38;2;166;226;46m\\poemtitlefont\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[38;2;102;217;239m\\\u001b[0m\u001b[38;2;102;217;239mnormalfont\u001b[0m\u001b[38;2;102;217;239m\\\u001b[0m\u001b[38;2;102;217;239mlarge\u001b[0m\u001b[38;2;102;217;239m\\\u001b[0m\u001b[38;2;102;217;239mitshape\u001b[0m\u001b[38;2;102;217;239m\\\u001b[0m\u001b[38;2;102;217;239mcentering\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;102;217;239m\\\u001b[0m\u001b[38;2;102;217;239msetmainfont\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[38;2;248;248;242mDejaVu Sans\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;249;38;114m\\\u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[3;38;2;253;151;31mdocument\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;102;217;239m\\\u001b[0m\u001b[38;2;102;217;239mpoemtitle\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[38;2;248;248;242mსევდამოსილი\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\n\u001b[38;2;102;217;239m\\\u001b[0m\u001b[38;2;102;217;239msettowidth\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[38;2;102;217;239m\\\u001b[0m\u001b[38;2;102;217;239mversewidth\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[38;2;248;248;242mThan Tycho Brahe, or Erra Pater:\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;249;38;114m\\\u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[3;38;2;253;151;31mverse\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\u001b[38;2;255;255;255m[\u001b[0m\u001b[38;2;102;217;239m\\\u001b[0m\u001b[38;2;102;217;239mversewidth\u001b[0m\u001b[38;2;255;255;255m]\u001b[0m\n\u001b[38;2;248;248;242m    ცა პირს შეიკრავს, ჩამობნელდება, \u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\n\u001b[38;2;248;248;242m    გრილი ნიავი მოცერავს ფერდობს, \u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\n\u001b[38;2;248;248;242m    ჩვენი სიცოცხლე უმალ ნელდება, \u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\n\u001b[38;2;248;248;242m    იმედი აქცევს არსს უმოქმედოს. \u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239m\\\u001b[0m\u001b[38;2;102;217;239mbigskip\u001b[0m\n\n\u001b[38;2;248;248;242m    სხვისი წესებით აგებულ სხეულს, \u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\n\u001b[38;2;248;248;242m    მიჯაჭვულია გონებით, ხორცით, \u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\n\u001b[38;2;248;248;242m    მილიონიდან განსახებს ეულს, \u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\n\u001b[38;2;248;248;242m    დილის ნათება ეწყება ლოცვით. \u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239m\\\u001b[0m\u001b[38;2;102;217;239mbigskip\u001b[0m\n\n\u001b[38;2;248;248;242m    ახალგაზრდაა, დიდსულოვანი, \u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\n\u001b[38;2;248;248;242m    ზოგჯერ რაინდი, ხანაც მგოსანი, \u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\n\u001b[38;2;248;248;242m    თავდადებული, კონტრნაღმოსანი, \u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\n\u001b[38;2;248;248;242m    თვისი სამიზნე - დოტას როშანი. \u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239m\\\u001b[0m\u001b[38;2;102;217;239mbigskip\u001b[0m\n\n\u001b[38;2;248;248;242m    თუ შეიყვარებ, არასდროს გავნებს, \u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\n\u001b[38;2;248;248;242m    დღეგამოშვებით იბარებს თავნებს, \u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\n\u001b[38;2;248;248;242m    ყველას ჰპატიობს, გულქვას და თავნებს, \u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\n\u001b[38;2;248;248;242m    სხვის მაგივრადაც საკუთარ თავს ვნებს. \u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239m\\\u001b[0m\u001b[38;2;102;217;239mbigskip\u001b[0m\n\n\u001b[38;2;248;248;242m    მისი სახელი - თენგიზი (დიდი), \u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\n\u001b[38;2;248;248;242m    სახის იერი - ნაზი და მშვიდი, \u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\n\u001b[38;2;248;248;242m    ვიზუალურად - ათიდან შვიდი, \u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\n\u001b[38;2;248;248;242m    ხანმოკლე ვითარც ეფემერიდი. \u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239m\\\u001b[0m\u001b[38;2;102;217;239mbigskip\u001b[0m\n\n\u001b[38;2;248;248;242m    მე ის მახარებს რომ სხვას ახარებ, \u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\n\u001b[38;2;248;248;242m    შაირს რომ იტყვი, იმასხარავებ, \u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\n\u001b[38;2;248;248;242m    კეთილ საქმეს რომ არვის ახარბებ, \u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\n\u001b[38;2;248;248;242m    გულიანად რომ გადიხარხარებ. \u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239m\\\u001b[0m\u001b[38;2;102;217;239mbigskip\u001b[0m\n\n\u001b[38;2;248;248;242m    როცა დაგჭირდეს, ჭირში თუ ლხინში, \u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\n\u001b[38;2;248;248;242m    მიწაზე, წყალში... ნავში თუ ქარში, \u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\n\u001b[38;2;248;248;242m    ჩათვალე, მიდგას კოდურად ჯინში, \u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\n\u001b[38;2;248;248;242m    სათქმელი არის? იქნება პირში. \u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239m\\\u001b[0m\u001b[38;2;102;217;239mbigskip\u001b[0m\n\n\u001b[38;2;248;248;242m    შენ არ იჯავრო, - კარგად იქნები, \u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\n\u001b[38;2;248;248;242m    მიხედე შენს თავს, ეძიე უკვლევს, \u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\n\u001b[38;2;248;248;242m    მეგზურად გყვება ჩუმი ფიქრები, \u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\n\u001b[38;2;248;248;242m    შეუმჩნევლად რომ გითვლიან სულ წლებს. \u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239m\\\u001b[0m\u001b[38;2;102;217;239mbigskip\u001b[0m\n\n\u001b[38;2;248;248;242m    გილოცავ ამ დღეს, დედამ რომ გშობა, \u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\n\u001b[38;2;248;248;242m    როცა შეჰმატე გარემოს ფერები, \u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\n\u001b[38;2;248;248;242m    ერთად გეტაროთ აღდგომა, შობა, \u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\n\u001b[38;2;248;248;242m    მე კი ლექსიდან მოგეფერები. \u001b[0m\u001b[38;2;190;132;255m\\\\\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239m\\\u001b[0m\u001b[38;2;102;217;239mbigskip\u001b[0m\n\u001b[38;2;249;38;114m\\\u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[3;38;2;253;151;31mverse\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;102;217;239m\\\u001b[0m\u001b[38;2;102;217;239mattrib\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[38;2;248;248;242mგიორგი ბერიაშვილი (1999--\u001b[0m\u001b[38;2;230;219;116m$\u001b[0m\u001b[38;2;102;217;239m\\\u001b[0m\u001b[38;2;102;217;239minfty\u001b[0m\u001b[38;2;190;132;255m)\u001b[0m\u001b[38;2;230;219;116m$\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;249;38;114m\\\u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[3;38;2;253;151;31mdocument\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Terraform/main.tf",
    "content": "\u001b[3;38;2;102;217;239mprovider\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mgithub\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255morganization\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;102;217;239mvar\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;255;255;255mgithub_organization\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[3;38;2;102;217;239mresource\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mtls_private_key\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mdeploy_key\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255malgorithm\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mRSA\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255mrsa_bits\u001b[0m\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m4096\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[3;38;2;102;217;239mresource\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mnull_resource\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mprivate_key_file\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255mtriggers\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116mdeploy_key\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m tls_private_key\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;255;255;255mdeploy_key\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;255;255;255mprivate_key_pem\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mprovisioner\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mfile\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255mcontent\u001b[0m\u001b[38;2;248;248;242m     \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mtls_private_key\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;255;255;255mdeploy_key\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;255;255;255mprivate_key_pem\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255mdestination\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m~/\u001b[0m\u001b[38;2;249;38;114m${\u001b[0m\u001b[38;2;102;217;239mvar\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;255;255;255mrepo_name\u001b[0m\u001b[38;2;249;38;114m}\u001b[0m\u001b[38;2;230;219;116m_deploy_key.pem\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46mconnection\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255mtype\u001b[0m\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mssh\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255muser\u001b[0m\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mcentos\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255mprivate_key\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;102;217;239mvar\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;255;255;255mterraform_ssh_key\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255mhost\u001b[0m\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;102;217;239mvar\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;255;255;255mserver_ip\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mprovisioner\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mremote-exec\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255minline\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116msudo mv ~/\u001b[0m\u001b[38;2;249;38;114m${\u001b[0m\u001b[38;2;102;217;239mvar\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;255;255;255mrepo_name\u001b[0m\u001b[38;2;249;38;114m}\u001b[0m\u001b[38;2;230;219;116m_deploy_key.pem /app/ssh_keys/\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116msudo chmod 0400 /app/ssh_keys/\u001b[0m\u001b[38;2;249;38;114m${\u001b[0m\u001b[38;2;102;217;239mvar\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;255;255;255mrepo_name\u001b[0m\u001b[38;2;249;38;114m}\u001b[0m\u001b[38;2;230;219;116m_deploy_key.pem\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116msudo chown app:app /app/ssh_keys/\u001b[0m\u001b[38;2;249;38;114m${\u001b[0m\u001b[38;2;102;217;239mvar\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;255;255;255mrepo_name\u001b[0m\u001b[38;2;249;38;114m}\u001b[0m\u001b[38;2;230;219;116m_deploy_key.pem\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46mconnection\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255mtype\u001b[0m\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mssh\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255muser\u001b[0m\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mcentos\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255mprivate_key\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;102;217;239mvar\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;255;255;255mterraform_ssh_key\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255mhost\u001b[0m\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;102;217;239mvar\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;255;255;255mserver_ip\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[3;38;2;102;217;239mresource\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mgithub_repository_deploy_key\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mrepo_deploy_key\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255mtitle\u001b[0m\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;249;38;114m${\u001b[0m\u001b[38;2;102;217;239mvar\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;255;255;255menv_name\u001b[0m\u001b[38;2;249;38;114m}\u001b[0m\u001b[38;2;230;219;116m Deploy Key\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255mrepository\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;102;217;239mvar\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;255;255;255mrepo_name\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255mkey\u001b[0m\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;248;248;242mtls_private_key\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;255;255;255mdeploy_key\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;255;255;255mpublic_key_openssh\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255mread_only\u001b[0m\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114m= \u001b[0m\u001b[38;2;102;217;239mvar\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;255;255;255mread_only\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Textile/test.textile",
    "content": "\u001b[38;2;248;248;242m###. Single line comment\u001b[0m\n\n\u001b[38;2;248;248;242m###..\u001b[0m\n\u001b[38;2;248;248;242mMulti line comment.\u001b[0m\n\n\u001b[38;2;248;248;242mThis line is also part of comment.\u001b[0m\n\n\u001b[38;2;248;248;242mContinues till next block element\u001b[0m\n\n\u001b[38;2;249;38;114mp\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242m This is not a comment, but I am a paragraph.\u001b[0m\n\n\u001b[38;2;124;120;101m<!--\u001b[0m\u001b[38;2;124;120;101m HTML comments can also be used \u001b[0m\u001b[38;2;124;120;101m-->\u001b[0m\n\n\n\u001b[38;2;249;38;114mh1\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;253;151;31m This is an \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mh1\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\n\u001b[38;2;249;38;114mh2\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;253;151;31m This is an \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mh2\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\n\u001b[38;2;249;38;114mh3\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;253;151;31m This is an \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mh3\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\n\u001b[38;2;249;38;114mh4\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;253;151;31m This is an \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mh4\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\n\u001b[38;2;249;38;114mh5\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;253;151;31m This is an \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mh5\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\n\u001b[38;2;249;38;114mh6\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;253;151;31m This is an \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mh6\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\n\u001b[38;2;248;248;242m--\u001b[0m\n\n\u001b[38;2;248;248;242m* \u001b[0m\u001b[38;2;248;248;242mItem\u001b[0m\n\u001b[38;2;248;248;242m** \u001b[0m\u001b[38;2;248;248;242mSub-Item\u001b[0m\n\u001b[38;2;248;248;242m* \u001b[0m\u001b[38;2;248;248;242mAnother item\u001b[0m\n\u001b[38;2;248;248;242m** \u001b[0m\u001b[38;2;248;248;242mAnother sub-item\u001b[0m\n\u001b[38;2;248;248;242m** \u001b[0m\u001b[38;2;248;248;242mYet another sub-item\u001b[0m\n\u001b[38;2;248;248;242m*** \u001b[0m\u001b[38;2;248;248;242mThree levels deep\u001b[0m\n\n\u001b[38;2;249;38;114mp\u001b[0m\u001b[38;2;166;226;46m{color:red}\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242m This line will be red.\u001b[0m\n\n\u001b[3;38;2;228;46;112m%span%\u001b[0m\u001b[38;2;248;248;242m are enclosed in percent symbols.\u001b[0m\n\n\u001b[38;2;248;248;242mdiv. This is a new div element\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Todo.txt/todo.txt",
    "content": "\u001b[38;2;166;226;46mRule 1.1: Priority\u001b[0m\n\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m/ Should have priority ///\u001b[0m\n\u001b[38;2;248;248;240m(A)\u001b[0m\u001b[38;2;166;226;46m Thank Mom for the meatballs \u001b[0m\u001b[38;2;249;38;114m@phone\u001b[0m\n\u001b[38;2;248;248;240m(B)\u001b[0m\u001b[38;2;166;226;46m Schedule Goodwill pickup \u001b[0m\u001b[38;2;230;219;116m+GarageSale\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;249;38;114m@phone\u001b[0m\n\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m/ Should not have priority ///\u001b[0m\n\u001b[38;2;166;226;46mReally gotta call Mom (A) \u001b[0m\u001b[38;2;249;38;114m@phone\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;249;38;114m@someday\u001b[0m\n\u001b[38;2;166;226;46m(b) Get back to the boss\u001b[0m\n\u001b[38;2;166;226;46m(B)->Submit TPS report\u001b[0m\n\n\n\u001b[38;2;166;226;46mRule 1.2: Creation date\u001b[0m\n\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m/ Date should be after priority ///\u001b[0m\n\u001b[38;2;190;132;255m2011-03-02\u001b[0m\u001b[38;2;166;226;46m Document \u001b[0m\u001b[38;2;230;219;116m+TodoTxt\u001b[0m\u001b[38;2;166;226;46m task format\u001b[0m\n\u001b[38;2;248;248;240m(A)\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;190;132;255m2011-03-02\u001b[0m\u001b[38;2;166;226;46m Call Mom\u001b[0m\n\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m/ Should not have creation date ///\u001b[0m\n\u001b[38;2;248;248;240m(A)\u001b[0m\u001b[38;2;166;226;46m Call Mom 2011-03-02\u001b[0m\n\n\n\u001b[38;2;166;226;46mRule 1.3: Context and Projects \u001b[0m\n\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m/ Contexts and projects can appear anywhere ///\u001b[0m\n\u001b[38;2;248;248;240m(A)\u001b[0m\u001b[38;2;166;226;46m Call Mom \u001b[0m\u001b[38;2;230;219;116m+Family\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;230;219;116m+PeaceLoveAndHappiness\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;249;38;114m@iphone\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;249;38;114m@phone\u001b[0m\u001b[38;2;166;226;46m to celebrate!\u001b[0m\n\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m/ No context ///\u001b[0m\n\u001b[38;2;166;226;46mEmail SoAndSo at soandso@example.com\u001b[0m\n\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m/ No project ///\u001b[0m\n\u001b[38;2;166;226;46mLearn how to add 2+2\u001b[0m\n\n\n\u001b[38;2;166;226;46mRule 2.1: Completed task\u001b[0m\n\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m/ Complete task ///\u001b[0m\n\u001b[38;2;117;113;94mx \u001b[0m\u001b[38;2;190;132;255m2011-03-03\u001b[0m\u001b[38;2;117;113;94m \u001b[0m\u001b[38;2;117;113;94mCall Mom\u001b[0m\n\u001b[38;2;117;113;94mx \u001b[0m\u001b[38;2;117;113;94mWith \u001b[0m\u001b[38;2;249;38;114m@contexts\u001b[0m\u001b[38;2;117;113;94m \u001b[0m\u001b[38;2;230;219;116m+projects\u001b[0m\u001b[38;2;117;113;94m and\u001b[0m\u001b[38;2;255;255;255m key:value\u001b[0m\n\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m/ Not completed tasks ///\u001b[0m\n\u001b[38;2;166;226;46mxylophone lesson\u001b[0m\n\u001b[38;2;166;226;46mX 2012-01-01 Make resolutions\u001b[0m\n\u001b[38;2;248;248;240m(A)\u001b[0m\u001b[38;2;166;226;46m x Find ticket prices\u001b[0m\n\n\n\u001b[38;2;166;226;46mRule 2.2: Completion date\u001b[0m\n\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m/ Only completion date is valuable ///\u001b[0m\n\u001b[38;2;117;113;94mx \u001b[0m\u001b[38;2;117;113;94mCompletion date is optional\u001b[0m\n\u001b[38;2;117;113;94mx \u001b[0m\u001b[38;2;190;132;255m2022-10-21\u001b[0m\u001b[38;2;117;113;94m \u001b[0m\u001b[38;2;117;113;94mBut you can specify it\u001b[0m\n\u001b[38;2;117;113;94mx \u001b[0m\u001b[38;2;190;132;255m2011-03-02\u001b[0m\u001b[38;2;117;113;94m \u001b[0m\u001b[38;2;190;132;255m2011-03-01\u001b[0m\u001b[38;2;117;113;94m \u001b[0m\n\n\n\u001b[38;2;166;226;46mAdditional definition\u001b[0m\n\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m/ Properties ///\u001b[0m\n\u001b[38;2;166;226;46mDecide on present for Mom\u001b[0m\u001b[38;2;255;255;255m due:2022-01-01 pri:1\u001b[0m\n\n\n\n\u001b[38;2;166;226;46mUnspecified\u001b[0m\n\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m/ Delayed tasks with WAIT keyword ///\u001b[0m\n\u001b[38;2;249;38;114mWAIT\u001b[0m\u001b[38;2;166;226;46m for \u001b[0m\u001b[38;2;249;38;114m@Patric\u001b[0m\u001b[38;2;166;226;46m to finish his task with \u001b[0m\u001b[38;2;230;219;116m+program\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/TypeScript/example.cts",
    "content": "\u001b[3;38;2;102;217;239mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdummy\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mRegression test for https://github.com/sharkdp/bat/pull/2236\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/TypeScript/example.ts",
    "content": "\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mletNumber\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m10\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[3;38;2;102;217;239mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mconstNumber\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m20\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[3;38;2;102;217;239mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mbool\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mboolean\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[3;38;2;102;217;239mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mlist\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mnumber\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[3;38;2;102;217;239mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255marray\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mArray\u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[3;38;2;166;226;46mnumber\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[3;38;2;102;217;239mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mpair\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;166;226;46mstring\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mnumber\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mhello\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m10\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mi\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mi\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mlist\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mlength\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mi\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;166;226;46mconsole\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mlog\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255mlist\u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;255;255;255mi\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255mbool\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;166;226;46mconsole\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mlog\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mTrue\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;166;226;46mconsole\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mlog\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mFalse\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[3;38;2;102;217;239mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mstr\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mJake\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[3;38;2;102;217;239mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mtemplateStr\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mstring\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m`\u001b[0m\u001b[38;2;230;219;116mHello, \u001b[0m\u001b[38;2;230;219;116m${\u001b[0m\u001b[38;2;255;255;255mstr\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;230;219;116m!\u001b[0m\u001b[38;2;230;219;116m`\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m A comment\u001b[0m\n\n\u001b[38;2;117;113;94m/*\u001b[0m\n\u001b[38;2;117;113;94m * Multiline comments\u001b[0m\n\u001b[38;2;117;113;94m * Multiline comments\u001b[0m\n\u001b[38;2;117;113;94m \u001b[0m\u001b[38;2;117;113;94m*/\u001b[0m\n\n\u001b[3;38;2;102;217;239minterface\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mSquareConfig\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242mlabel\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mstring\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242mcolor\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mstring\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242mwidth\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mnumber\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[3;38;2;253;151;31mpropName\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mstring\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46many\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[3;38;2;102;217;239minterface\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mSearchFunc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31msource\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mstring\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31msubString\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mstring\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mboolean\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[3;38;2;102;217;239menum\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mColor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255mRed\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255mGreen\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[3;38;2;102;217;239mtype\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mEasing\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mease-in\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mease-out\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mease-in-out\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[3;38;2;102;217;239mclass\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mGreeter\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mprivate\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mreadonly\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mgreeting\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mstring\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mconstructor\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mmessage\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mstring\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255mthis\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;255;255;255mgreeting\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mmessage\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mgreet\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mHello, \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mthis\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;255;255;255mgreeting\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mgreeter\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mnew\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mGreeter\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mworld\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[3;38;2;102;217;239mclass\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mAnimal\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mmove\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mdistanceInMeters\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mnumber\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;166;226;46mconsole\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mlog\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m`\u001b[0m\u001b[38;2;230;219;116mAnimal moved \u001b[0m\u001b[38;2;230;219;116m${\u001b[0m\u001b[38;2;255;255;255mdistanceInMeters\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;230;219;116mm.\u001b[0m\u001b[38;2;230;219;116m`\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[3;38;2;102;217;239mclass\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mDog\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mextends\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;4;38;2;166;226;46mAnimal\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mbark\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;166;226;46mconsole\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mlog\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mWoof! Woof!\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[3;38;2;102;217;239mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mdog\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mnew\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mDog\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;255;255;255mdog\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;166;226;46mbark\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;255;255;255mdog\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mmove\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;190;132;255m10\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;255;255;255mdog\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;166;226;46mbark\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[3;38;2;102;217;239mclass\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mPoint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242mx\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mnumber\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242my\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mnumber\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[3;38;2;102;217;239minterface\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mPoint3d\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mextends\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mPoint\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242mz\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mnumber\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mpoint3d\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mPoint3d\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242my\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mz\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46madd\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mx\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31my\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mx\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255my\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mmyAdd\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mx\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31my\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mx\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255my\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;255;255;255m(\u001b[0m\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;166;226;46mconsole\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mlog\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mIIFE\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[3;38;2;102;217;239mfunction\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46midentity\u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[38;2;166;226;46mT\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31marg\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mT\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mT\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255marg\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[3;38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mmyIdentity\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[38;2;166;226;46mT\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31marg\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mT\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mT\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255midentity\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[3;38;2;102;217;239mclass\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mGenericNumber\u001b[0m\u001b[38;2;248;248;242m<\u001b[0m\u001b[38;2;166;226;46mT\u001b[0m\u001b[38;2;248;248;242m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242mzeroValue\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mT\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46madd\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mx\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mT\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31my\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mT\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mT\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/TypeScriptReact/app.tsx",
    "content": "\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mas\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mReact\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mfrom\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mreact\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mHelloComponent\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mfrom\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m./hello\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mNameEditComponent\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mfrom\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m./nameEdit\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;249;38;114mexport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mApp\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;255;255;255mname\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255msetName\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mReact\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;166;226;46museState\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mdefaultUserName\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;255;255;255meditingName\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255msetEditingName\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mReact\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;166;226;46museState\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mdefaultUserName\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mloadUsername\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239msetTimeout\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;166;226;46msetName\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mname from async call\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;166;226;46msetEditingName\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mname from async call\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m500\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255mReact\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;166;226;46museEffect\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46mloadUsername\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46msetUsernameState\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46msetName\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255meditingName\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[3;38;2;166;226;46mHelloComponent\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46muserName\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;255;255;255mname\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[3;38;2;166;226;46mNameEditComponent\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;166;226;46minitialUserName\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;255;255;255mname\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;166;226;46meditingName\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;255;255;255meditingName\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;166;226;46monNameUpdated\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;255;255;255msetUsernameState\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;166;226;46monEditingNameUpdated\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;255;255;255msetEditingName\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Typst/test.typ",
    "content": "\u001b[38;2;249;38;114m#\u001b[0m\u001b[38;2;249;38;114mset\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mtext\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m9\u001b[0m\u001b[38;2;190;132;255m.\u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;190;132;255mpt\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;253;151;31m=\u001b[0m\u001b[38;2;253;151;31m \u001b[0m\u001b[38;2;253;151;31mHeading\u001b[0m\n\n\u001b[38;2;248;248;242m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mBullet 1\u001b[0m\n\u001b[38;2;248;248;242m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mBullet 2\u001b[0m\n\u001b[38;2;248;248;242m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mBullet 3\u001b[0m\n\n\u001b[38;2;248;248;242m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mList 1\u001b[0m\n\u001b[38;2;248;248;242m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mList 2\u001b[0m\n\u001b[38;2;248;248;242m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mList 3\u001b[0m\n\n\u001b[38;2;248;248;242m#\u001b[0m\u001b[38;2;248;248;242mfigure\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239mtable\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;253;151;31mcolumns\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255mauto\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mauto\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    table\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mheader\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mName\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mAge\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mJohn\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m50\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mJane\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242m48\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;253;151;31mcaption\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;248;248;242mPeople\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;248;248;242m```\u001b[0m\u001b[38;2;190;132;255mpython\u001b[0m\n\u001b[38;2;249;38;114mdef\u001b[0m\u001b[38;2;174;129;255m \u001b[0m\u001b[38;2;166;226;46mfoo\u001b[0m\u001b[38;2;174;129;255m(\u001b[0m\u001b[38;2;174;129;255m)\u001b[0m\u001b[38;2;174;129;255m:\u001b[0m\n\u001b[38;2;174;129;255m  \u001b[0m\u001b[38;2;102;217;239mprint\u001b[0m\u001b[38;2;174;129;255m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mhi\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;174;129;255m)\u001b[0m\n\u001b[38;2;248;248;242m```\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/VHDL/test.vhdl",
    "content": "\u001b[38;2;117;113;94m--\u001b[0m\u001b[38;2;117;113;94m This is a single-line comment\u001b[0m\n\n\u001b[38;2;249;38;114mlibrary\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mIEEE\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;249;38;114muse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mIEEE\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mSTD_LOGIC_1164\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;249;38;114mALL\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;249;38;114muse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mIEEE\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mNUMERIC_STD\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;249;38;114mALL\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;249;38;114mentity\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mSyntaxTest\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mgeneric\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242mDATA_WIDTH \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239minteger\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m8\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242mclk     \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mstd_logic\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242mrst     \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mstd_logic\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242ma\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mb    \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mstd_logic_vector\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mDATA_WIDTH \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mdownto\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242msel     \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mstd_logic\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242mresult  \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mout\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mstd_logic_vector\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mDATA_WIDTH \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mdownto\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242mflag    \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mout\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mstd_logic\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mSyntaxTest\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;249;38;114marchitecture\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mBehavioral\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mof\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mSyntaxTest\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114msignal\u001b[0m\u001b[38;2;248;248;242m tmp \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mstd_logic_vector\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mDATA_WIDTH \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mdownto\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114msignal\u001b[0m\u001b[38;2;248;248;242m done \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mstd_logic\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m'0'\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mtype\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mstate_type\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mIDLE\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m LOAD\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m EXECUTE\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m DONE\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114msignal\u001b[0m\u001b[38;2;248;248;242m state \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mstate_type\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mIDLE\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;249;38;114mbegin\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mprocess\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mclk\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m rst\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mvariable\u001b[0m\u001b[38;2;248;248;242m i \u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239minteger\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m rst \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m'1'\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m            tmp   \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114mothers\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m'0'\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m            flag  \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m'0'\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m            state \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m IDLE\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114melsif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mrising_edge\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mclk\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;248;248;242m state \u001b[0m\u001b[38;2;249;38;114mis\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114mwhen\u001b[0m\u001b[38;2;248;248;242m IDLE \u001b[0m\u001b[38;2;249;38;114m=>\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m sel \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m'1'\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m                        tmp \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m a \u001b[0m\u001b[38;2;249;38;114mand\u001b[0m\u001b[38;2;248;248;242m b\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m                        state \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m EXECUTE\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;248;248;242m                        tmp \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m a \u001b[0m\u001b[38;2;249;38;114mor\u001b[0m\u001b[38;2;248;248;242m b\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m                        state \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m LOAD\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114mwhen\u001b[0m\u001b[38;2;248;248;242m LOAD \u001b[0m\u001b[38;2;249;38;114m=>\u001b[0m\n\u001b[38;2;248;248;242m                    tmp \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m a \u001b[0m\u001b[38;2;249;38;114mxor\u001b[0m\u001b[38;2;248;248;242m b\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m                    state \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m EXECUTE\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114mwhen\u001b[0m\u001b[38;2;248;248;242m EXECUTE \u001b[0m\u001b[38;2;249;38;114m=>\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m i \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m DATA_WIDTH \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m                        tmp\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mnot\u001b[0m\u001b[38;2;248;248;242m tmp\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m                        i \u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;248;248;242m i \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;248;248;242m                        state \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m DONE\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114mwhen\u001b[0m\u001b[38;2;248;248;242m DONE \u001b[0m\u001b[38;2;249;38;114m=>\u001b[0m\n\u001b[38;2;248;248;242m                    flag \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m'1'\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m                    state \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m IDLE\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;249;38;114mwhen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mothers\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=>\u001b[0m\n\u001b[38;2;248;248;242m                    state \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m IDLE\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;249;38;114m process\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m    result \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m tmp\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mBehavioral\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m"
  },
  {
    "path": "tests/syntax-tests/highlighted/Verilog/div_pipelined.v",
    "content": "\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Copyright 2018 Schuyler Eldridge\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Licensed under the Apache License, Version 2.0 (the \"License\");\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m you may not use this file except in compliance with the License.\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m You may obtain a copy of the License at\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m     http://www.apache.org/licenses/LICENSE-2.0\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Unless required by applicable law or agreed to in writing, software\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m distributed under the License is distributed on an \"AS IS\" BASIS,\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m See the License for the specific language governing permissions and\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m limitations under the License.\u001b[0m\n\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m Implements a fixed-point parameterized pipelined division\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m operation. Outputs are expected to be on range [-1,1), techincally\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m [-1,2^(BITS-1)-1/2^(BITS-1)]. There is no convergent rounding.\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m [TODO] Implement optional convergent rounding and some form of\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m variable output binary point placement. There are arguments in\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m these changes that make sense (specifically, adding an additional\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m bit results in a gain of one value when all the other 2^6 values\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m greater than 1 aren't used). Other improvements that are needed: 1)\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m quotient_gen is getting smaller by one bit in every stage, it would\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m make more sense to generate this as such, 2) there's some weird\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m initial behavior after rst_n is deasserted, you get weird output on\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m the quotient line for a number of cycles.\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m [TODO] This doesn't exactly behave as expected if you specify\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m different BITS and STAGES parameters (which for a functional\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m module, should be implemented). Note, that this technically works,\u001b[0m\n\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m but needs more investigation to fully understand its properties.\u001b[0m\n\n\u001b[38;2;190;132;255m`timescale\u001b[0m\u001b[38;2;248;248;242m 1ns \u001b[0m\u001b[38;2;249;38;114m/\u001b[0m\u001b[38;2;248;248;242m 1ps\u001b[0m\n\u001b[3;38;2;102;217;239mmodule\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mdiv_pipelined\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[3;38;2;166;226;46minput\u001b[0m\u001b[38;2;248;248;242m                 clk\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[3;38;2;166;226;46minput\u001b[0m\u001b[38;2;248;248;242m                 rst_n\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[3;38;2;166;226;46minput\u001b[0m\u001b[38;2;248;248;242m                 start\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[3;38;2;166;226;46minput\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m      dividend\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[3;38;2;166;226;46minput\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m      divisor\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[3;38;2;166;226;46moutput\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mreg\u001b[0m\u001b[38;2;248;248;242m            data_valid\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[3;38;2;166;226;46moutput\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mreg\u001b[0m\u001b[38;2;248;248;242m            div_by_zero\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[3;38;2;166;226;46moutput\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mreg\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mSTAGES\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m quotient\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m   output reg [7:0]      quotient_correct\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m WARNING!!! THESE PARAMETERS ARE INTENDED TO BE MODIFIED IN A TOP\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m LEVEL MODULE. LOCAL CHANGES HERE WILL, MOST LIKELY, BE\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m OVERWRITTEN!\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mparameter\u001b[0m\n\u001b[38;2;248;248;242m    BITS  \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m8\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\n\u001b[38;2;248;248;242m    STAGES  \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m BITS\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m y = a/bQ\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mreg\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mSTAGES\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m       start_gen\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m negative_quotient_gen\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m div_by_zero_gen\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mreg\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mSTAGES\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m dividend_gen\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m divisor_gen\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m quotient_gen\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mwire\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m             pad_dividend\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mwire\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m             pad_divisor\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114massign\u001b[0m\u001b[38;2;248;248;242m pad_dividend  \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114massign\u001b[0m\u001b[38;2;248;248;242m pad_divisor  \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m sign conversion stage\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114malways\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114mposedge\u001b[0m\u001b[38;2;248;248;242m clk \u001b[0m\u001b[3;38;2;166;226;46mor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mnegedge\u001b[0m\u001b[38;2;248;248;242m rst_n\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m!\u001b[0m\u001b[38;2;248;248;242mrst_n\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\n\u001b[38;2;248;248;242m        div_by_zero_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m        start_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m        negative_quotient_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m        dividend_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m        divisor_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\n\u001b[38;2;248;248;242m        div_by_zero_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mdivisor \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m        start_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m             \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m start\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m        negative_quotient_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m dividend\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m^\u001b[0m\u001b[38;2;248;248;242m divisor\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m        dividend_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mdividend\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m~\u001b[0m\u001b[38;2;249;38;114m{\u001b[0m\u001b[38;2;248;248;242mdividend\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242mpad_dividend\u001b[0m\u001b[38;2;249;38;114m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m{\u001b[0m\u001b[38;2;248;248;242mdividend\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242mpad_dividend\u001b[0m\u001b[38;2;249;38;114m}\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m        divisor_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mdivisor \u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m~\u001b[0m\u001b[38;2;249;38;114m{\u001b[0m\u001b[38;2;190;132;255m1'b1\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242mdivisor\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m pad_divisor\u001b[0m\u001b[38;2;249;38;114m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m{\u001b[0m\u001b[38;2;190;132;255m1'b0\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242mdivisor\u001b[0m\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m pad_divisor\u001b[0m\u001b[38;2;249;38;114m}\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m first computation stage\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114malways\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114mposedge\u001b[0m\u001b[38;2;248;248;242m clk \u001b[0m\u001b[3;38;2;166;226;46mor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mnegedge\u001b[0m\u001b[38;2;248;248;242m rst_n\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m!\u001b[0m\u001b[38;2;248;248;242mrst_n\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\n\u001b[38;2;248;248;242m      div_by_zero_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m              \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m      start_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m      negative_quotient_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m      divisor_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m      quotient_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m      dividend_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\n\u001b[38;2;248;248;242m      div_by_zero_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m             \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m div_by_zero_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m      start_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m                   \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m start_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m      negative_quotient_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m negative_quotient_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m      divisor_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m divisor_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242m dividend_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m divisor_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\n\u001b[38;2;248;248;242m        quotient_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m STAGES \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m        dividend_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m dividend_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m divisor_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\n\u001b[38;2;248;248;242m        quotient_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m        dividend_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m dividend_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m else: !if(!rst_n)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m always @ (posedge clk)\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mgenerate\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mgenvar\u001b[0m\u001b[38;2;248;248;242m            i\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mi \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;248;248;242m i \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m STAGES \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;248;248;242m i \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m i \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m pipeline\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114malways\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114mposedge\u001b[0m\u001b[38;2;248;248;242m clk \u001b[0m\u001b[3;38;2;166;226;46mor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mnegedge\u001b[0m\u001b[38;2;248;248;242m rst_n\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m!\u001b[0m\u001b[38;2;248;248;242mrst_n\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\n\u001b[38;2;248;248;242m          div_by_zero_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m                     \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m          start_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m                           \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m          negative_quotient_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m          divisor_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m          quotient_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m     \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m          dividend_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\n\u001b[38;2;248;248;242m          div_by_zero_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m                     \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m div_by_zero_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m          start_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m                           \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m start_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m          negative_quotient_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m negative_quotient_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m          divisor_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m divisor_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m          \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mdividend_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m divisor_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\n\u001b[38;2;248;248;242m            quotient_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m quotient_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mSTAGES\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m            dividend_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m dividend_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m divisor_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m          \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\u001b[38;2;248;248;242m          \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\n\u001b[38;2;248;248;242m            quotient_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m     \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m quotient_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m            dividend_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m dividend_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242mi\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m          \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m else: !if(!rst_n)\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m always @ (posedge clk or negedge rst_n)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m block: pipeline\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mendgenerate\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m last computation stage\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114malways\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114mposedge\u001b[0m\u001b[38;2;248;248;242m clk \u001b[0m\u001b[3;38;2;166;226;46mor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mnegedge\u001b[0m\u001b[38;2;248;248;242m rst_n\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m!\u001b[0m\u001b[38;2;248;248;242mrst_n\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\n\u001b[38;2;248;248;242m      div_by_zero_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mSTAGES\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m                           \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m      start_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mSTAGES\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m                                 \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m      negative_quotient_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mSTAGES\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m                     \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m      quotient_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mSTAGES\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mSTAGES\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\n\u001b[38;2;248;248;242m      div_by_zero_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mSTAGES\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m       \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m div_by_zero_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mSTAGES\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m      start_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mSTAGES\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m             \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m start_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mSTAGES\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m      negative_quotient_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mSTAGES\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m negative_quotient_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mSTAGES\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242m dividend_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mSTAGES\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mSTAGES\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;248;248;242m divisor_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mSTAGES\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mSTAGES\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;248;248;242m        quotient_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mSTAGES\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mSTAGES\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m quotient_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mSTAGES\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mSTAGES\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;248;248;242m        quotient_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mSTAGES\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mSTAGES\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m quotient_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mSTAGES\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mSTAGES\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m else: !if(!rst_n)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m always @ (posedge clk)\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m//\u001b[0m\u001b[38;2;117;113;94m sign conversion stage\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114malways\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114mposedge\u001b[0m\u001b[38;2;248;248;242m clk \u001b[0m\u001b[3;38;2;166;226;46mor\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mnegedge\u001b[0m\u001b[38;2;248;248;242m rst_n\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;249;38;114m!\u001b[0m\u001b[38;2;248;248;242mrst_n\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\n\u001b[38;2;248;248;242m      div_by_zero \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m      data_valid  \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m      quotient    \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mbegin\u001b[0m\n\u001b[38;2;248;248;242m      div_by_zero \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m div_by_zero_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mSTAGES\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m      data_valid  \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m start_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mSTAGES\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m      quotient    \u001b[0m\u001b[38;2;249;38;114m<=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mnegative_quotient_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mSTAGES\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m~\u001b[0m\u001b[38;2;248;248;242mquotient_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mSTAGES\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mSTAGES\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m quotient_gen\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mSTAGES\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242mBITS\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m(\u001b[0m\u001b[38;2;248;248;242mSTAGES\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mend\u001b[0m\n\n\u001b[3;38;2;102;217;239mendmodule\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/VimHelp/helphelp.txt",
    "content": "\u001b[38;2;248;248;242m*helphelp.txt*\tNvim\u001b[0m\n\n\n\u001b[38;2;248;248;242m\t\t  VIM REFERENCE MANUAL    by Bram Moolenaar\u001b[0m\n\n\n\u001b[38;2;248;248;242mHelp on help files\t\t\t\t\t*helphelp*\u001b[0m\n\n\u001b[38;2;248;248;242m                                      Type |gO| to see the table of contents.\u001b[0m\n\n\u001b[38;2;248;248;242m==============================================================================\u001b[0m\n\u001b[38;2;248;248;242m1. Help commands\t\t\t\t\t*online-help*\u001b[0m\n\n\u001b[38;2;248;248;242m\t\t\t*help* *<Help>* *:h* *:help* *<F1>* *i_<F1>* *i_<Help>*\u001b[0m\n\u001b[38;2;248;248;242m<Help>\t\tor\u001b[0m\n\u001b[38;2;248;248;242m:h[elp]\t\t\tOpen a window and display the help file in read-only\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tmode.  If there is a help window open already, use\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tthat one.  Otherwise, if the current window uses the\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tfull width of the screen or is at least 80 characters\u001b[0m\n\u001b[38;2;248;248;242m\t\t\twide, the help window will appear just above the\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tcurrent window.  Otherwise the new window is put at\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tthe very top.\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tThe 'helplang' option is used to select a language, if\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tthe main help file is available in several languages.\u001b[0m\n\n\u001b[38;2;248;248;242m\t\t\tType |gO| to see the table of contents.\u001b[0m\n\n\u001b[38;2;248;248;242m\t\t\t\t\t\t*{subject}* *E149* *E661*\u001b[0m\n\u001b[38;2;248;248;242m:h[elp] {subject}\tLike \":help\", additionally jump to the tag {subject}.\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tFor example:  >\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t:help options\u001b[0m\n\n\u001b[38;2;248;248;242m<\t\t\t{subject} can include wildcards such as \"*\", \"?\" and\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\"[a-z]\":\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t   :help z?\tjump to help for any \"z\" command\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t   :help z.\tjump to the help for \"z.\"\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tBut when a tag exists it is taken literally:\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t   :help :?\tjump to help for \":?\"\u001b[0m\n\n\u001b[38;2;248;248;242m\t\t\tIf there is no full match for the pattern, or there\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tare several matches, the \"best\" match will be used.\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tA sophisticated algorithm is used to decide which\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tmatch is better than another one.  These items are\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tconsidered in the computation:\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t- A match with same case is much better than a match\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t  with different case.\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t- A match that starts after a non-alphanumeric\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t  character is better than a match in the middle of a\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t  word.\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t- A match at or near the beginning of the tag is\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t  better than a match further on.\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t- The more alphanumeric characters match, the better.\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t- The shorter the length of the match, the better.\u001b[0m\n\n\u001b[38;2;248;248;242m\t\t\tThe 'helplang' option is used to select a language, if\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tthe {subject} is available in several languages.\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tTo find a tag in a specific language, append \"@ab\",\u001b[0m\n\u001b[38;2;248;248;242m\t\t\twhere \"ab\" is the two-letter language code.  See\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t|help-translated|.\u001b[0m\n\n\u001b[38;2;248;248;242m\t\t\tNote that the longer the {subject} you give, the less\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tmatches will be found.  You can get an idea how this\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tall works by using commandline completion (type CTRL-D\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tafter \":help subject\" |c_CTRL-D|).\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tIf there are several matches, you can have them listed\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tby hitting CTRL-D.  Example: >\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t:help cont<Ctrl-D>\u001b[0m\n\n\u001b[38;2;248;248;242m<\t\t\tInstead of typing \":help CTRL-V\" to search for help\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tfor CTRL-V you can type: >\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t:help ^V\u001b[0m\n\u001b[38;2;248;248;242m<\t\t\tThis also works together with other characters, for\u001b[0m\n\u001b[38;2;248;248;242m\t\t\texample to find help for CTRL-V in Insert mode: >\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t:help i^V\u001b[0m\n\u001b[38;2;248;248;242m<\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tIt is also possible to first do \":help\" and then\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tuse \":tag {pattern}\" in the help window.  The\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\":tnext\" command can then be used to jump to other\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tmatches, \"tselect\" to list matches and choose one. >\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t:help index\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t:tselect /.*mode\u001b[0m\n\n\u001b[38;2;248;248;242m<\t\t\tWhen there is no argument you will see matches for\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\"help\", to avoid listing all possible matches (that\u001b[0m\n\u001b[38;2;248;248;242m\t\t\twould be very slow).\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tThe number of matches displayed is limited to 300.\u001b[0m\n\n\u001b[38;2;248;248;242m\t\t\tThe `:help` command can be followed by '|' and another\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tcommand, but you don't need to escape the '|' inside a\u001b[0m\n\u001b[38;2;248;248;242m\t\t\thelp command.  So these both work: >\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t:help |\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t:help k| only\u001b[0m\n\u001b[38;2;248;248;242m<\t\t\tNote that a space before the '|' is seen as part of\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tthe \":help\" argument.\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tYou can also use <NL> or <CR> to separate the help\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tcommand from a following command.  You need to type\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tCTRL-V first to insert the <NL> or <CR>.  Example: >\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t:help so<C-V><CR>only\u001b[0m\n\u001b[38;2;248;248;242m<\u001b[0m\n\n\u001b[38;2;248;248;242m:h[elp]! [subject]\tLike \":help\", but in non-English help files prefer to\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tfind a tag in a file with the same language as the\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tcurrent file.  See |help-translated|.\u001b[0m\n\n\u001b[38;2;248;248;242m\t\t\t\t\t\t\t*:helpc* *:helpclose*\u001b[0m\n\u001b[38;2;248;248;242m:helpc[lose]\t\tClose one help window, if there is one.\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tVim will try to restore the window layout (including\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tcursor position) to the same layout it was before\u001b[0m\n\u001b[38;2;248;248;242m\t\t\topening the help window initially.  This might cause\u001b[0m\n\u001b[38;2;248;248;242m\t\t\ttriggering several autocommands.\u001b[0m\n\n\u001b[38;2;248;248;242m\t\t\t\t\t\t\t*:helpg* *:helpgrep*\u001b[0m\n\u001b[38;2;248;248;242m:helpg[rep] {pattern}[@xx]\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tSearch all help text files and make a list of lines\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tin which {pattern} matches.  Jumps to the first match.\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tThe optional [@xx] specifies that only matches in the\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\"xx\" language are to be found.\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tYou can navigate through the matches with the\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t|quickfix| commands, e.g., |:cnext| to jump to the\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tnext one.  Or use |:cwindow| to get the list of\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tmatches in the quickfix window.\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t{pattern} is used as a Vim regexp |pattern|.\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t'ignorecase' is not used, add \"\\c\" to ignore case.\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tExample for case sensitive search: >\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t:helpgrep Uganda\u001b[0m\n\u001b[38;2;248;248;242m<\t\t\tExample for case ignoring search: >\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t:helpgrep uganda\\c\u001b[0m\n\u001b[38;2;248;248;242m<\t\t\tExample for searching in French help: >\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t:helpgrep backspace@fr\u001b[0m\n\u001b[38;2;248;248;242m<\t\t\tThe pattern does not support line breaks, it must\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tmatch within one line.  You can use |:grep| instead,\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tbut then you need to get the list of help files in a\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tcomplicated way.\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tCannot be followed by another command, everything is\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tused as part of the pattern.  But you can use\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t|:execute| when needed.\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tCompressed help files will not be searched (Fedora\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tcompresses the help files).\u001b[0m\n\n\u001b[38;2;248;248;242m\t\t\t\t\t\t\t*:lh* *:lhelpgrep*\u001b[0m\n\u001b[38;2;248;248;242m:lh[elpgrep] {pattern}[@xx]\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tSame as \":helpgrep\", except the location list is used\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tinstead of the quickfix list.  If the help window is\u001b[0m\n\u001b[38;2;248;248;242m\t\t\talready opened, then the location list for that window\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tis used.  Otherwise, a new help window is opened and\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tthe location list for that window is set.  The\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tlocation list for the current window is not changed\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tthen.\u001b[0m\n\n\u001b[38;2;248;248;242m\t\t\t\t\t\t\t*:exu* *:exusage*\u001b[0m\n\u001b[38;2;248;248;242m:exu[sage]\t\tShow help on Ex commands.  Added to simulate the Nvi\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tcommand.\u001b[0m\n\n\u001b[38;2;248;248;242m\t\t\t\t\t\t\t*:viu* *:viusage*\u001b[0m\n\u001b[38;2;248;248;242m:viu[sage]\t\tShow help on Normal mode commands.  Added to simulate\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tthe Nvi command.\u001b[0m\n\n\u001b[38;2;248;248;242mWhen no argument is given to |:help| the file given with the 'helpfile' option\u001b[0m\n\u001b[38;2;248;248;242mwill be opened.  Otherwise the specified tag is searched for in all \"doc/tags\"\u001b[0m\n\u001b[38;2;248;248;242mfiles in the directories specified in the 'runtimepath' option.\u001b[0m\n\n\u001b[38;2;248;248;242mIf you would like to open the help in the current window, see this tip:\u001b[0m\n\u001b[38;2;248;248;242m|help-curwin|.\u001b[0m\n\n\u001b[38;2;248;248;242mThe initial height of the help window can be set with the 'helpheight' option\u001b[0m\n\u001b[38;2;248;248;242m(default 20).\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t\t\t*help-buffer-options*\u001b[0m\n\u001b[38;2;248;248;242mWhen the help buffer is created, several local options are set to make sure\u001b[0m\n\u001b[38;2;248;248;242mthe help text is displayed as it was intended:\u001b[0m\n\u001b[38;2;248;248;242m    'iskeyword'\t\tnearly all ASCII chars except ' ', '*', '\"' and '|'\u001b[0m\n\u001b[38;2;248;248;242m    'foldmethod'\t\"manual\"\u001b[0m\n\u001b[38;2;248;248;242m    'tabstop'\t\t8\u001b[0m\n\u001b[38;2;248;248;242m    'arabic'\t\toff\u001b[0m\n\u001b[38;2;248;248;242m    'binary'\t\toff\u001b[0m\n\u001b[38;2;248;248;242m    'buflisted'\t\toff\u001b[0m\n\u001b[38;2;248;248;242m    'cursorbind'\toff\u001b[0m\n\u001b[38;2;248;248;242m    'diff'\t\toff\u001b[0m\n\u001b[38;2;248;248;242m    'foldenable'\toff\u001b[0m\n\u001b[38;2;248;248;242m    'list'\t\toff\u001b[0m\n\u001b[38;2;248;248;242m    'modifiable'\toff\u001b[0m\n\u001b[38;2;248;248;242m    'number'\t\toff\u001b[0m\n\u001b[38;2;248;248;242m    'relativenumber'\toff\u001b[0m\n\u001b[38;2;248;248;242m    'rightleft'\t\toff\u001b[0m\n\u001b[38;2;248;248;242m    'scrollbind'\toff\u001b[0m\n\u001b[38;2;248;248;242m    'spell'\t\toff\u001b[0m\n\n\u001b[38;2;248;248;242mJump to specific subjects by using tags.  This can be done in two ways:\u001b[0m\n\u001b[38;2;248;248;242m- Use the \"CTRL-]\" command while standing on the name of a command or option.\u001b[0m\n\u001b[38;2;248;248;242m  This only works when the tag is a keyword.  \"<C-Leftmouse>\" and\u001b[0m\n\u001b[38;2;248;248;242m  \"g<LeftMouse>\" work just like \"CTRL-]\".\u001b[0m\n\u001b[38;2;248;248;242m- use the \":ta {subject}\" command.  This also works with non-keyword\u001b[0m\n\u001b[38;2;248;248;242m  characters.\u001b[0m\n\n\u001b[38;2;248;248;242mUse CTRL-T or CTRL-O to jump back.\u001b[0m\n\u001b[38;2;248;248;242mUse \":q\" to close the help window.\u001b[0m\n\n\u001b[38;2;248;248;242mIf there are several matches for an item you are looking for, this is how you\u001b[0m\n\u001b[38;2;248;248;242mcan jump to each one of them:\u001b[0m\n\u001b[38;2;248;248;242m1. Open a help window\u001b[0m\n\u001b[38;2;248;248;242m2. Use the \":tag\" command with a slash prepended to the tag.  E.g.: >\u001b[0m\n\u001b[38;2;248;248;242m\t:tag /min\u001b[0m\n\u001b[38;2;248;248;242m3. Use \":tnext\" to jump to the next matching tag.\u001b[0m\n\n\u001b[38;2;248;248;242mIt is possible to add help files for plugins and other items.  You don't need\u001b[0m\n\u001b[38;2;248;248;242mto change the distributed help files for that.  See |add-local-help|.\u001b[0m\n\n\u001b[38;2;248;248;242mTo write a local help file, see |write-local-help|.\u001b[0m\n\n\u001b[38;2;248;248;242mNote that the title lines from the local help files are automagically added to\u001b[0m\n\u001b[38;2;248;248;242mthe \"LOCAL ADDITIONS\" section in the \"help.txt\" help file |local-additions|.\u001b[0m\n\u001b[38;2;248;248;242mThis is done when viewing the file in Vim, the file itself is not changed.  It\u001b[0m\n\u001b[38;2;248;248;242mis done by going through all help files and obtaining the first line of each\u001b[0m\n\u001b[38;2;248;248;242mfile.  The files in $VIMRUNTIME/doc are skipped.\u001b[0m\n\n\u001b[38;2;248;248;242m\t\t\t\t\t*:helpt* *:helptags*\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t*E150* *E151* *E152* *E153* *E154* *E670* *E856*\u001b[0m\n\u001b[38;2;248;248;242m:helpt[ags] [++t] {dir}\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tGenerate the help tags file(s) for directory {dir}.\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tWhen {dir} is ALL then all \"doc\" directories in\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t'runtimepath' will be used.\u001b[0m\n\n\u001b[38;2;248;248;242m\t\t\tAll \"*.txt\" and \"*.??x\" files in the directory and\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tsub-directories are scanned for a help tag definition\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tin between stars.  The \"*.??x\" files are for\u001b[0m\n\u001b[38;2;248;248;242m\t\t\ttranslated docs, they generate the \"tags-??\" file, see\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t|help-translated|.  The generated tags files are\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tsorted.\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tWhen there are duplicates an error message is given.\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tAn existing tags file is silently overwritten.\u001b[0m\n\n\u001b[38;2;248;248;242m\t\t\tThe optional \"++t\" argument forces adding the\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\"help-tags\" tag.  This is also done when the {dir} is\u001b[0m\n\u001b[38;2;248;248;242m\t\t\tequal to $VIMRUNTIME/doc.\u001b[0m\n\n\u001b[38;2;248;248;242m\t\t\tTo rebuild the help tags in the runtime directory\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t(requires write permission there): >\u001b[0m\n\u001b[38;2;248;248;242m\t\t\t\t:helptags $VIMRUNTIME/doc\u001b[0m\n\u001b[38;2;248;248;242m<\u001b[0m\n\n\n\u001b[38;2;248;248;242m==============================================================================\u001b[0m\n\u001b[38;2;248;248;242m2. Translated help files\t\t\t\t*help-translated*\u001b[0m\n\n\u001b[38;2;248;248;242mIt is possible to add translated help files, next to the original English help\u001b[0m\n\u001b[38;2;248;248;242mfiles.  Vim will search for all help in \"doc\" directories in 'runtimepath'.\u001b[0m\n\n\u001b[38;2;248;248;242mAt this moment translations are available for:\u001b[0m\n\u001b[38;2;248;248;242m\tChinese  - multiple authors\u001b[0m\n\u001b[38;2;248;248;242m\tFrench   - translated by David Blanchet\u001b[0m\n\u001b[38;2;248;248;242m\tItalian  - translated by Antonio Colombo\u001b[0m\n\u001b[38;2;248;248;242m\tJapanese - multiple authors\u001b[0m\n\u001b[38;2;248;248;242m\tPolish   - translated by Mikolaj Machowski\u001b[0m\n\u001b[38;2;248;248;242m\tRussian  - translated by Vassily Ragosin\u001b[0m\n\u001b[38;2;248;248;242mSee the Vim website to find them: http://www.vim.org/translations.php\u001b[0m\n\n\u001b[38;2;248;248;242mA set of translated help files consists of these files:\u001b[0m\n\n\u001b[38;2;248;248;242m\thelp.abx\u001b[0m\n\u001b[38;2;248;248;242m\thowto.abx\u001b[0m\n\u001b[38;2;248;248;242m\t...\u001b[0m\n\u001b[38;2;248;248;242m\ttags-ab\u001b[0m\n\n\u001b[38;2;248;248;242m\"ab\" is the two-letter language code.  Thus for Italian the names are:\u001b[0m\n\n\u001b[38;2;248;248;242m\thelp.itx\u001b[0m\n\u001b[38;2;248;248;242m\thowto.itx\u001b[0m\n\u001b[38;2;248;248;242m\t...\u001b[0m\n\u001b[38;2;248;248;242m\ttags-it\u001b[0m\n\n\u001b[38;2;248;248;242mThe 'helplang' option can be set to the preferred language(s).  The default is\u001b[0m\n\u001b[38;2;248;248;242mset according to the environment.  Vim will first try to find a matching tag\u001b[0m\n\u001b[38;2;248;248;242min the preferred language(s).  English is used when it cannot be found.\u001b[0m\n\n\u001b[38;2;248;248;242mTo find a tag in a specific language, append \"@ab\" to a tag, where \"ab\" is the\u001b[0m\n\u001b[38;2;248;248;242mtwo-letter language code.  Example: >\u001b[0m\n\u001b[38;2;248;248;242m\t:he user-manual@it\u001b[0m\n\u001b[38;2;248;248;242m\t:he user-manual@en\u001b[0m\n\u001b[38;2;248;248;242mThe first one finds the Italian user manual, even when 'helplang' is empty.\u001b[0m\n\u001b[38;2;248;248;242mThe second one finds the English user manual, even when 'helplang' is set to\u001b[0m\n\u001b[38;2;248;248;242m\"it\".\u001b[0m\n\n\u001b[38;2;248;248;242mWhen using command-line completion for the \":help\" command, the \"@en\"\u001b[0m\n\u001b[38;2;248;248;242mextension is only shown when a tag exists for multiple languages.  When the\u001b[0m\n\u001b[38;2;248;248;242mtag only exists for English \"@en\" is omitted.  When the first candidate has an\u001b[0m\n\u001b[38;2;248;248;242m\"@ab\" extension and it matches the first language in 'helplang' \"@ab\" is also\u001b[0m\n\u001b[38;2;248;248;242momitted.\u001b[0m\n\n\u001b[38;2;248;248;242mWhen using |CTRL-]| or \":help!\" in a non-English help file Vim will try to\u001b[0m\n\u001b[38;2;248;248;242mfind the tag in the same language.  If not found then 'helplang' will be used\u001b[0m\n\u001b[38;2;248;248;242mto select a language.\u001b[0m\n\n\u001b[38;2;248;248;242mHelp files must use latin1 or utf-8 encoding.  Vim assumes the encoding is\u001b[0m\n\u001b[38;2;248;248;242mutf-8 when finding non-ASCII characters in the first line.  Thus you must\u001b[0m\n\u001b[38;2;248;248;242mtranslate the header with \"For Vim version\".\u001b[0m\n\n\u001b[38;2;248;248;242mThe same encoding must be used for the help files of one language in one\u001b[0m\n\u001b[38;2;248;248;242mdirectory.  You can use a different encoding for different languages and use\u001b[0m\n\u001b[38;2;248;248;242ma different encoding for help files of the same language but in a different\u001b[0m\n\u001b[38;2;248;248;242mdirectory.\u001b[0m\n\n\u001b[38;2;248;248;242mHints for translators:\u001b[0m\n\u001b[38;2;248;248;242m- Do not translate the tags.  This makes it possible to use 'helplang' to\u001b[0m\n\u001b[38;2;248;248;242m  specify the preferred language.  You may add new tags in your language.\u001b[0m\n\u001b[38;2;248;248;242m- When you do not translate a part of a file, add tags to the English version,\u001b[0m\n\u001b[38;2;248;248;242m  using the \"tag@en\" notation.\u001b[0m\n\u001b[38;2;248;248;242m- Make a package with all the files and the tags file available for download.\u001b[0m\n\u001b[38;2;248;248;242m  Users can drop it in one of the \"doc\" directories and start use it.\u001b[0m\n\u001b[38;2;248;248;242m  Report this to Bram, so that he can add a link on www.vim.org.\u001b[0m\n\u001b[38;2;248;248;242m- Use the |:helptags| command to generate the tags files.  It will find all\u001b[0m\n\u001b[38;2;248;248;242m  languages in the specified directory.\u001b[0m\n\n\u001b[38;2;248;248;242m==============================================================================\u001b[0m\n\u001b[38;2;248;248;242m3. Writing help files\t\t\t\t\t*help-writing*\u001b[0m\n\n\u001b[38;2;248;248;242mFor ease of use, a Vim help file for a plugin should follow the format of the\u001b[0m\n\u001b[38;2;248;248;242mstandard Vim help files, except for the first line.  If you are writing a new\u001b[0m\n\u001b[38;2;248;248;242mhelp file it's best to copy one of the existing files and use it as a\u001b[0m\n\u001b[38;2;248;248;242mtemplate.\u001b[0m\n\n\u001b[38;2;248;248;242mThe first line in a help file should have the following format:\u001b[0m\n\n\u001b[38;2;248;248;242m*plugin_name.txt*\t{short description of the plugin}\u001b[0m\n\n\u001b[38;2;248;248;242mThe first field is a help tag where \":help plugin_name\" will jump to.  The\u001b[0m\n\u001b[38;2;248;248;242mremainder of the line, after a Tab, describes the plugin purpose in a short\u001b[0m\n\u001b[38;2;248;248;242mway.  This will show up in the \"LOCAL ADDITIONS\" section of the main help\u001b[0m\n\u001b[38;2;248;248;242mfile.  Check there that it shows up properly: |local-additions|.\u001b[0m\n\n\u001b[38;2;248;248;242mIf you want to add a version number or last modification date, put it in the\u001b[0m\n\u001b[38;2;248;248;242msecond line, right aligned.\u001b[0m\n\n\u001b[38;2;248;248;242mAt the bottom of the help file, place a Vim modeline to set the 'textwidth'\u001b[0m\n\u001b[38;2;248;248;242mand 'tabstop' options and the 'filetype' to \"help\".  Never set a global option\u001b[0m\n\u001b[38;2;248;248;242min such a modeline, that can have undesired consequences.\u001b[0m\n\n\n\u001b[38;2;248;248;242mTAGS\u001b[0m\n\n\u001b[38;2;248;248;242mTo define a help tag, place the name between asterisks (*tag-name*).  The\u001b[0m\n\u001b[38;2;248;248;242mtag-name should be different from all the Vim help tag names and ideally\u001b[0m\n\u001b[38;2;248;248;242mshould begin with the name of the Vim plugin.  The tag name is usually right\u001b[0m\n\u001b[38;2;248;248;242maligned on a line.\u001b[0m\n\n\u001b[38;2;248;248;242mWhen referring to an existing help tag and to create a hot-link, place the\u001b[0m\n\u001b[38;2;248;248;242mname between two bars (|) eg. |help-writing|.\u001b[0m\n\n\u001b[38;2;248;248;242mWhen referring to a Vim command and to create a hot-link, place the\u001b[0m\n\u001b[38;2;248;248;242mname between two backticks, eg. inside `:filetype`.  You will see this is\u001b[0m\n\u001b[38;2;248;248;242mhighlighted as a command, like a code block (see below).\u001b[0m\n\n\u001b[38;2;248;248;242mWhen referring to a Vim option in the help file, place the option name between\u001b[0m\n\u001b[38;2;248;248;242mtwo single quotes, eg. 'statusline'\u001b[0m\n\n\u001b[38;2;248;248;242mWhen referring to any other technical term, such as a filename or function\u001b[0m\n\u001b[38;2;248;248;242mparameter, surround it in backticks, eg. `~/.path/to/init.vim`.\u001b[0m\n\n\n\u001b[38;2;248;248;242mHIGHLIGHTING\u001b[0m\n\n\u001b[38;2;248;248;242mTo define a column heading, use a tilde character at the end of the line.\u001b[0m\n\u001b[38;2;248;248;242mThis will highlight the column heading in a different color.  E.g.\u001b[0m\n\n\u001b[38;2;248;248;242mColumn heading~\u001b[0m\n\n\u001b[38;2;248;248;242mTo separate sections in a help file, place a series of '=' characters in a\u001b[0m\n\u001b[38;2;248;248;242mline starting from the first column.  The section separator line is highlighted\u001b[0m\n\u001b[38;2;248;248;242mdifferently.\u001b[0m\n\n\u001b[38;2;248;248;242m\t\t\t\t\t\t\t      *help-codeblock*\u001b[0m\n\u001b[38;2;248;248;242mTo quote a block of ex-commands verbatim, place a greater than (>) character\u001b[0m\n\u001b[38;2;248;248;242mat the end of the line before the block and a less than (<) character as the\u001b[0m\n\u001b[38;2;248;248;242mfirst non-blank on a line following the block.  Any line starting in column 1\u001b[0m\n\u001b[38;2;248;248;242malso implicitly stops the block of ex-commands before it.  E.g. >\u001b[0m\n\u001b[38;2;248;248;242m    function Example_Func()\u001b[0m\n\u001b[38;2;248;248;242m\techo \"Example\"\u001b[0m\n\u001b[38;2;248;248;242m    endfunction\u001b[0m\n\u001b[38;2;248;248;242m<\u001b[0m\n\n\u001b[38;2;248;248;242mThe following are highlighted differently in a Vim help file:\u001b[0m\n\u001b[38;2;248;248;242m  - a special key name expressed either in <> notation as in <PageDown>, or\u001b[0m\n\u001b[38;2;248;248;242m    as a Ctrl character as in CTRL-X\u001b[0m\n\u001b[38;2;248;248;242m  - anything between {braces}, e.g. {lhs} and {rhs}\u001b[0m\n\n\u001b[38;2;248;248;242mThe word \"Note\", \"Notes\" and similar automagically receive distinctive\u001b[0m\n\u001b[38;2;248;248;242mhighlighting.  So do these:\u001b[0m\n\u001b[38;2;248;248;242m\t*Todo\tsomething to do\u001b[0m\n\u001b[38;2;248;248;242m\t*Error\tsomething wrong\u001b[0m\n\n\u001b[38;2;248;248;242mYou can find the details in $VIMRUNTIME/syntax/help.vim\u001b[0m\n\n\n\u001b[38;2;248;248;242m vim:tw=78:ts=8:noet:ft=help:norl:\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/VimL/source.vim",
    "content": "\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m&compatible\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239mset\u001b[0m\u001b[38;2;248;248;242m nocompatible\u001b[0m\n\u001b[38;2;249;38;114mendif\u001b[0m\n\n\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mhas\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m'win32'\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114m||\u001b[0m\u001b[38;2;248;248;242m has (\u001b[0m\u001b[38;2;230;219;116m'win64'\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m $VIMHOME = $HOME \u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"/vimfiles\"\u001b[0m\n\u001b[38;2;249;38;114melseif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mv:false\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mv:true\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"Can't get here\"\u001b[0m\n\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m $VIMHOME = $HOME \u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"/.vim\"\u001b[0m\n\u001b[38;2;249;38;114mendif\u001b[0m\n\n\u001b[38;2;117;113;94m\" show existing tab with 2 spaces width\u001b[0m\n\u001b[38;2;102;217;239mset\u001b[0m\u001b[38;2;248;248;242m tabstop=\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\n\u001b[38;2;117;113;94m\" when indenting with '>', use 2 spaces width\u001b[0m\n\u001b[38;2;102;217;239mset\u001b[0m\u001b[38;2;248;248;242m shiftwidth=\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\n\u001b[38;2;117;113;94m\" always set autoindenting on\u001b[0m\n\u001b[38;2;102;217;239mset\u001b[0m\u001b[38;2;248;248;242m autoindent\u001b[0m\n\n\u001b[38;2;102;217;239mautocmd\u001b[0m\u001b[38;2;248;248;242m VimEnter \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"Hello Vim\"\u001b[0m\n\n\u001b[38;2;117;113;94m\" Allow :W and :Wq to save too\u001b[0m\n\u001b[38;2;102;217;239mcommand\u001b[0m\u001b[38;2;248;248;242m! Wq :wq\u001b[0m\n\u001b[38;2;102;217;239mcommand\u001b[0m\u001b[38;2;248;248;242m! W :w\u001b[0m\n\n\u001b[38;2;249;38;114maugroup\u001b[0m\u001b[38;2;248;248;242m vimrc\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239mautocmd\u001b[0m\u001b[38;2;248;248;242m!\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239mautocmd\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mFileType\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"New filetype\"\u001b[0m\n\u001b[38;2;249;38;114maugroup\u001b[0m\u001b[38;2;248;248;242m END\u001b[0m\n\n\u001b[38;2;249;38;114mfunction\u001b[0m\u001b[38;2;248;248;242m! \u001b[0m\u001b[38;2;166;226;46ms:echo\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mwhat)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239ma\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242mwhat\u001b[0m\n\u001b[38;2;249;38;114mendfunction\u001b[0m\n\n\u001b[38;2;249;38;114mfunction\u001b[0m\u001b[38;2;248;248;242m! \u001b[0m\u001b[38;2;166;226;46mHelloWorld\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mname)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255ml:function_local\u001b[0m\u001b[38;2;248;248;242m = \u001b[0m\u001b[38;2;230;219;116m\"function_local_var\"\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255ml:parts\u001b[0m\u001b[38;2;248;248;242m = \u001b[0m\u001b[38;2;102;217;239msplit\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255ml:function_local\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"_\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255ml:greeting\u001b[0m\u001b[38;2;248;248;242m = \u001b[0m\u001b[38;2;230;219;116m\"Hello \"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239ma\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242mname\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239ms:echo\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255ml:greeting\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;249;38;114mendfunction\u001b[0m\n\n\u001b[38;2;249;38;114mfunction\u001b[0m\u001b[38;2;248;248;242m! \u001b[0m\u001b[38;2;166;226;46msource#Hello\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"Hello from namespace\"\u001b[0m\n\u001b[38;2;249;38;114mendfunction\u001b[0m\n\n\u001b[38;2;249;38;114mfunction\u001b[0m\u001b[38;2;248;248;242m! \u001b[0m\u001b[38;2;166;226;46mEchoFunc\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m s \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239ma\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m000\u001b[0m\n\u001b[38;2;248;248;242m    echon \u001b[0m\u001b[38;2;230;219;116m' '\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242m s\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mendfor\u001b[0m\n\u001b[38;2;249;38;114mendfunction\u001b[0m\n\n\u001b[38;2;102;217;239mimap\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46m<C-h>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46m<C-r>\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;102;217;239mHelloWorld\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"World\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[3;38;2;166;226;46m<CR>\u001b[0m\n\n\u001b[38;2;102;217;239mcommand\u001b[0m\u001b[38;2;248;248;242m! \u001b[0m\u001b[3;38;2;166;226;46m-nargs=\u001b[0m\u001b[38;2;248;248;242m? Echo :call \u001b[0m\u001b[38;2;102;217;239mEchoFunc\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;166;226;46m<args>\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;117;113;94m\" TODO test stuff\u001b[0m\n\u001b[38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mg:global\u001b[0m\u001b[38;2;248;248;242m = \u001b[0m\u001b[38;2;230;219;116m\"global var\"\u001b[0m\n\u001b[38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255ms:script_var\u001b[0m\u001b[38;2;248;248;242m = \u001b[0m\u001b[38;2;230;219;116m\"script var\"\u001b[0m\n\u001b[38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mw:window_var\u001b[0m\u001b[38;2;248;248;242m = \u001b[0m\u001b[38;2;230;219;116m\"window war\"\u001b[0m\n\u001b[38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mb:buffer_var\u001b[0m\u001b[38;2;248;248;242m = \u001b[0m\u001b[38;2;230;219;116m\"buffer war\"\u001b[0m\n\u001b[38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m t\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242mtab_var = \u001b[0m\u001b[38;2;230;219;116m\"tab war\"\u001b[0m\n\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mv:false\u001b[0m\n\n\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m + \u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\n\n\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"Hello\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m==#\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"Hello2\"\u001b[0m\n\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"Hello\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m==?\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"Hello2\"\u001b[0m\n\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"Hello\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"Hello2\"\u001b[0m\n\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"Hello\"\u001b[0m\u001b[38;2;248;248;242m is \u001b[0m\u001b[38;2;230;219;116m\"Hello2\"\u001b[0m\n\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"Hello\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114misnot\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"Hello2\"\u001b[0m\n\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"Hello\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=~\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'xx*'\u001b[0m\n\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"Hello\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m!~\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"Hello2\"\u001b[0m\n\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"Hello\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m!~\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"Hello2\"\u001b[0m\n\n\u001b[38;2;102;217;239mecho\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"/This/should/not/be/a/regex\"\u001b[0m\n\n\u001b[38;2;117;113;94m\" Error case from issue #1604 (https://github.com/sharkdp/bat/issues/1064)\u001b[0m\n\u001b[38;2;102;217;239mset\u001b[0m\u001b[38;2;248;248;242m runtimepath\u001b[0m\u001b[38;2;249;38;114m=~\u001b[0m\u001b[38;2;248;248;242m/foo/bar\u001b[0m\n\n\u001b[38;2;248;248;242msilent \u001b[0m\u001b[38;2;246;170;17mg/Aap/\u001b[0m\u001b[38;2;248;248;242mp\u001b[0m\n\n\u001b[38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mg:dict\u001b[0m\u001b[38;2;248;248;242m = {}\u001b[0m\n\u001b[38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mg:dict\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mitem = [\u001b[0m\u001b[38;2;230;219;116m'l1'\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m'l2'\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\n\u001b[38;2;102;217;239mlet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mg:dict2\u001b[0m\u001b[38;2;248;248;242m = {\u001b[0m\u001b[38;2;230;219;116m'dict_item'\u001b[0m\u001b[38;2;248;248;242m: [\u001b[0m\u001b[38;2;230;219;116m'l1'\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m'l2'\u001b[0m\u001b[38;2;248;248;242m], \u001b[0m\u001b[38;2;230;219;116m'di2'\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;230;219;116m'x'\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;248;248;242msilent \u001b[0m\u001b[38;2;246;170;17mg/regex/\u001b[0m\n\u001b[38;2;248;248;242msilent \u001b[0m\u001b[38;2;246;170;17mv/regex/\u001b[0m\n\u001b[38;2;248;248;242msilent \u001b[0m\u001b[38;2;249;38;114m%\u001b[0m\u001b[38;2;246;170;17ms/regex/\u001b[0m\u001b[38;2;248;248;242mnot_regex/\u001b[0m\n\n\u001b[38;2;102;217;239mfiletype\u001b[0m\u001b[38;2;248;248;242m plugin indent on\u001b[0m\n\u001b[38;2;102;217;239msyntax\u001b[0m\u001b[38;2;248;248;242m enable\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Vue/example.vue",
    "content": "\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtemplate\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mdiv\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mid\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mapp\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mclass\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mcontainer-fluid\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mAppHeader\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mAppHeader\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtransition\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mname\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mpage\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mmode\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mout-in\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mv-if\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;249;38;114m!\u001b[0m\u001b[38;2;255;255;255misLoading\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mrouter-view\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mrouter-view\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtransition\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mAppLoadingIndicator\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mAppLoadingIndicator\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mdiv\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtemplate\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtemplate \u001b[0m\u001b[38;2;166;226;46mlang\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116mpug\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m  #container.col\u001b[0m\n\u001b[38;2;248;248;242m    p This shall be formatted as Plain Text as long as a Pug syntax definition is missing\u001b[0m\n\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtemplate\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[3;38;2;249;38;114mscript\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mAppHeader\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mfrom\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m@/components/AppHeader\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mAppLoadingIndicator\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mfrom\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m@/components/AppLoadingIndicator\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mmapGetters\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mfrom\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mvuex\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;249;38;114mexport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mdefault\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255mname\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mApp\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255mcomponents\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255mAppHeader\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255mAppLoadingIndicator\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mbeforeCreate\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mthis\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;255;255;255m$store\u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;248;248;242mdispatch\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mfetchData\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255mdata\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255mmessage\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mHello!\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255mcomputed\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114m...\u001b[0m\u001b[38;2;248;248;242mmapGetters\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255misLoading\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116misLoading\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;255;255;255m</\u001b[0m\u001b[3;38;2;249;38;114mscript\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mstyle\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;249;38;114mbody\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mbackground-color\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mrgba\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;190;132;255m72\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m163\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m184\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;190;132;255m.\u001b[0m\u001b[38;2;190;132;255m05\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m!important\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mpage-enter-active\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mpage-leave-active\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mtransition\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mopacity\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;190;132;255m.\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114ms\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mpage-enter\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mpage-leave-active\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mopacity\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;166;226;46m.\u001b[0m\u001b[38;2;166;226;46mpage-enter\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mhover\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mopacity\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mstyle\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Vyper/crowdsale.vy",
    "content": "\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m IndividuallyCappedCrowdsale\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Contributors: Binod Nirvan\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m This file is released under Apache 2.0 license.\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m @dev Crowdsale with a limit for total contributions.\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Ported from Open Zeppelin\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m https://github.com/OpenZeppelin\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m \u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m See https://github.com/OpenZeppelin\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Open Zeppelin tests ported: Crowdsale.test.js\u001b[0m\n\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m@dev ERC20/223 Features referenced by this contract\u001b[0m\n\u001b[38;2;249;38;114mcontract\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;102;217;239mTokenContract\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mdef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtransfer\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31m_to\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;253;151;31m_value\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;190;132;255muint256\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mbool\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m modifying\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Event for token purchase logging\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m @param _purchaser who paid for the tokens\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m @param _beneficiary who got the tokens\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m @param _value weis paid for purchase\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m @param _amount amount of tokens purchased\u001b[0m\n\u001b[38;2;248;248;242mTokenPurchase\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mevent\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m{_purchaser\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mindexed\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m, _beneficiary\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mindexed\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m, _value\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255muint256\u001b[0m\u001b[38;2;248;248;242m(wei\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m, _amount\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255muint256\u001b[0m\u001b[38;2;248;248;242m})\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m The token being sold\u001b[0m\n\u001b[38;2;248;248;242mtoken\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mpublic\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94mAddress where funds are collected\u001b[0m\n\u001b[38;2;248;248;242mwallet\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mpublic\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m How many token units a buyer gets per wei.\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m The rate is the conversion between wei and the smallest and indivisible token unit.\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m So, if you are using a rate of 1 with a DetailedERC20 token with 3 decimals called TOK\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m 1 wei will give you 1 unit, or 0.001 TOK.\u001b[0m\n\u001b[38;2;248;248;242mrate\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mpublic\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255muint256\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94mAmount of wei raised\u001b[0m\n\u001b[38;2;248;248;242mweiRaised\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mpublic\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255muint256\u001b[0m\u001b[38;2;248;248;242m(wei\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;249;38;114m@public\u001b[0m\n\u001b[3;38;2;102;217;239mdef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m__init__\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31m_rate\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;190;132;255muint256\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;253;151;31m_wallet\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;253;151;31m_token\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m\"\"\"\u001b[0m\n\u001b[38;2;117;113;94m    \u001b[0m\u001b[38;2;230;219;116m@dev\u001b[0m\u001b[38;2;117;113;94m Initializes this contract\u001b[0m\n\u001b[38;2;117;113;94m    \u001b[0m\u001b[38;2;230;219;116m@param\u001b[0m\u001b[38;2;117;113;94m _rate Number of token units a buyer gets per wei\u001b[0m\n\u001b[38;2;117;113;94m    \u001b[0m\u001b[38;2;230;219;116m@param\u001b[0m\u001b[38;2;117;113;94m _wallet Address where collected funds will be forwarded to\u001b[0m\n\u001b[38;2;117;113;94m    \u001b[0m\u001b[38;2;230;219;116m@param\u001b[0m\u001b[38;2;117;113;94m _token Address of the token being sold\u001b[0m\n\u001b[38;2;117;113;94m    \u001b[0m\u001b[38;2;117;113;94m\"\"\"\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114massert\u001b[0m\u001b[38;2;248;248;242m _rate \u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"Invalid value supplied for the parameter \\\"\u001b[0m\u001b[38;2;248;248;242m_rate\\\u001b[0m\u001b[38;2;230;219;116m\".\"\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114massert\u001b[0m\u001b[38;2;248;248;242m _wallet \u001b[0m\u001b[38;2;249;38;114m!=\u001b[0m\u001b[38;2;248;248;242m ZERO_ADDRESS, \u001b[0m\u001b[38;2;230;219;116m\"Invalid wallet address.\"\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114massert\u001b[0m\u001b[38;2;248;248;242m _token \u001b[0m\u001b[38;2;249;38;114m!=\u001b[0m\u001b[38;2;248;248;242m ZERO_ADDRESS, \u001b[0m\u001b[38;2;230;219;116m\"Invalid token address.\"\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mself\u001b[0m\u001b[38;2;248;248;242m.rate \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m _rate\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mself\u001b[0m\u001b[38;2;248;248;242m.wallet \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m _wallet\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mself\u001b[0m\u001b[38;2;248;248;242m.token \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m _token\u001b[0m\n\n\u001b[38;2;249;38;114m@private\u001b[0m\n\u001b[38;2;249;38;114m@constant\u001b[0m\n\u001b[3;38;2;102;217;239mdef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mgetTokenAmount\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31m_weiAmount\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;190;132;255muint256\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255muint256\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m _weiAmount \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mself\u001b[0m\u001b[38;2;248;248;242m.rate\u001b[0m\n\n\n\u001b[38;2;249;38;114m@private\u001b[0m\n\u001b[3;38;2;102;217;239mdef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mprocessTransaction\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31m_sender\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;253;151;31m_beneficiary\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;253;151;31m_weiAmount\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;190;132;255muint256\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mwei\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94mpre validate\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114massert\u001b[0m\u001b[38;2;248;248;242m _beneficiary \u001b[0m\u001b[38;2;249;38;114m!=\u001b[0m\u001b[38;2;248;248;242m ZERO_ADDRESS, \u001b[0m\u001b[38;2;230;219;116m\"Invalid address.\"\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114massert\u001b[0m\u001b[38;2;248;248;242m _weiAmount \u001b[0m\u001b[38;2;249;38;114m!=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"Invalid amount received.\"\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94mcalculate the number of tokens for the Ether contribution.\u001b[0m\n\u001b[38;2;248;248;242m    tokens\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255muint256\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mself\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mgetTokenAmount\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mas_unitless_number\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m_weiAmount\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mself\u001b[0m\u001b[38;2;248;248;242m.weiRaised \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m _weiAmount\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94mprocess purchase\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114massert\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mTokenContract\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mself\u001b[0m\u001b[38;2;248;248;242m.token\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mtransfer\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m_beneficiary, tokens\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"Could not forward funds due to an unknown error.\"\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mlog\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mTokenPurchase\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m_sender, _beneficiary, _weiAmount, tokens\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94mforward funds to the receiving wallet address.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239msend\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mself\u001b[0m\u001b[38;2;248;248;242m.wallet, _weiAmount\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94mpost validate\u001b[0m\n\n\u001b[38;2;249;38;114m@public\u001b[0m\n\u001b[38;2;249;38;114m@payable\u001b[0m\n\u001b[3;38;2;102;217;239mdef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mbuyTokens\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31m_beneficiary\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;190;132;255maddress\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mself\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mprocessTransaction\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255mmsg.sender\u001b[0m\u001b[38;2;248;248;242m, _beneficiary, \u001b[0m\u001b[38;2;190;132;255mmsg.value\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;249;38;114m@public\u001b[0m\n\u001b[38;2;249;38;114m@payable\u001b[0m\n\u001b[3;38;2;102;217;239mdef\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m__default__\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;102;217;239mself\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;102;217;239mprocessTransaction\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255mmsg.sender\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255mmsg.sender\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255mmsg.value\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/WGSL/test.wgsl",
    "content": "\u001b[3;38;2;102;217;239mstruct\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mVertexOut\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;166;226;46mbuiltin\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;255;255;255mposition\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mposition\u001b[0m\u001b[38;2;248;248;242m : \u001b[0m\u001b[3;38;2;102;217;239mvec4f\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;166;226;46mlocation\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mcolor\u001b[0m\u001b[38;2;248;248;242m : \u001b[0m\u001b[3;38;2;102;217;239mvec4f\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;166;226;46mvertex\u001b[0m\n\u001b[38;2;249;38;114mfn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mvertex_main\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;166;226;46mlocation\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mposition\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[3;38;2;102;217;239mvec4f\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m               \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;166;226;46mlocation\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mcolor\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[3;38;2;102;217;239mvec4f\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mVertexOut\u001b[0m\n\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mvar\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255moutput\u001b[0m\u001b[38;2;248;248;242m : \u001b[0m\u001b[38;2;166;226;46mVertexOut\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255moutput\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mposition \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mposition\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255moutput\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mcolor \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mcolor\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255moutput\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;166;226;46mfragment\u001b[0m\n\u001b[38;2;249;38;114mfn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mfragment_main\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mfragData: \u001b[0m\u001b[38;2;166;226;46mVertexOut\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m->\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m@\u001b[0m\u001b[38;2;166;226;46mlocation\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mvec4f\u001b[0m\n\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m fragData\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[38;2;248;248;242mcolor\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/XAML/ItemPage.xaml",
    "content": "\u001b[38;2;117;113;94m<!--\u001b[0m\n\u001b[38;2;117;113;94m    //*********************************************************\u001b[0m\n\u001b[38;2;117;113;94m    //\u001b[0m\n\u001b[38;2;117;113;94m    // Copyright (c) Microsoft. All rights reserved.\u001b[0m\n\u001b[38;2;117;113;94m    // THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF\u001b[0m\n\u001b[38;2;117;113;94m    // ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY\u001b[0m\n\u001b[38;2;117;113;94m    // IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR\u001b[0m\n\u001b[38;2;117;113;94m    // PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.\u001b[0m\n\u001b[38;2;117;113;94m    //\u001b[0m\n\u001b[38;2;117;113;94m    //*********************************************************\u001b[0m\n\u001b[38;2;117;113;94m-->\u001b[0m\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mPage\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46mx\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mClass\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mAppUIBasics.ItemPage\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46mxmlns\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mhttp://schemas.microsoft.com/winfx/2006/xaml/presentation\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46mxmlns\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mx\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mhttp://schemas.microsoft.com/winfx/2006/xaml\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46mxmlns\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mcommon\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116musing:AppUIBasics.Common\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46mxmlns\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46md\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mhttp://schemas.microsoft.com/expression/blend/2008\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46mxmlns\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mdata\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116musing:AppUIBasics.Data\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46mxmlns\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mlocal\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116musing:AppUIBasics\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46mxmlns\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mmc\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mhttp://schemas.openxmlformats.org/markup-compatibility/2006\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46mx\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mName\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mpageRoot\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46mmc\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mIgnorable\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116md\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m<!--\u001b[0m\n\u001b[38;2;117;113;94m        This grid acts as a root panel for the page that defines two rows:\u001b[0m\n\u001b[38;2;117;113;94m        * Row 0 contains the back button and page title\u001b[0m\n\u001b[38;2;117;113;94m        * Row 1 contains the rest of the page layout\u001b[0m\n\u001b[38;2;117;113;94m    \u001b[0m\u001b[38;2;117;113;94m-->\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mGrid\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mx\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mName\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mrootPanel\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46md\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mDataContext\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m{Binding Groups[0].Items[0], Source={d:DesignData Source=/DataModel/ControlinfoData.json, Type=data:ControlInfoDataSource}}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mBackground\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m{ThemeResource ApplicationPageBackgroundThemeBrush}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mVisualStateManager.VisualStateGroups\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mVisualStateGroup\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mVisualState\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mVisualState.StateTriggers\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mlocal\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;249;38;114mDeviceFamilyTrigger\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mDeviceFamily\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mWindows.Xbox\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mVisualState.StateTriggers\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mVisualState.Setters\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mSetter\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTarget\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116msvPanel.Margin\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mValue\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m0,0,48,27\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mVisualState.Setters\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mVisualState\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mVisualStateGroup\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mVisualStateGroup\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mVisualState\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mx\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mName\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mNormalFrameContent\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mVisualState\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mx\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mName\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mWideFrameContent\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mVisualState.Setters\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mSetter\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTarget\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mcontentFrame.Width\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mValue\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m1028\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mSetter\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTarget\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mcontentFrame.HorizontalAlignment\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mValue\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mLeft\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mVisualState.Setters\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mVisualState\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mVisualStateGroup\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mVisualStateGroup\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mx\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mName\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mLayoutVisualStates\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mVisualState\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mx\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mName\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mLargeLayout\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mVisualState.StateTriggers\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mAdaptiveTrigger\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mMinWindowWidth\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m1372\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mVisualState.StateTriggers\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mVisualState\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mVisualState\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mx\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mName\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mWideLayout\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mVisualState.StateTriggers\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mAdaptiveTrigger\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mMinWindowWidth\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m{StaticResource Breakpoint640Plus}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mVisualState.StateTriggers\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mVisualState.Setters\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mSetter\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTarget\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mseeAlsoPanel.Width\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mValue\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mAuto\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mSetter\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTarget\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mseeAlsoPanel.(Grid.Row)\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mValue\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m3\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mSetter\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTarget\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mseeAlsoPanel.(Grid.Column)\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mValue\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m0\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mSetter\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTarget\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mseeAlsoPanel.(Grid.ColumnSpan)\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mValue\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m3\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mSetter\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTarget\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mSourcePanel.(Grid.ColumnSpan)\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mValue\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mSetter\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTarget\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mDocumentationPanel.(Grid.ColumnSpan)\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mValue\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mSetter\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTarget\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mRelatedControlsPanel.(Grid.Row)\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mValue\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m0\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mSetter\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTarget\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mRelatedControlsPanel.(Grid.Column)\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mValue\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m2\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mSetter\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTarget\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mRelatedControlsPanel.(Grid.ColumnSpan)\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mValue\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mSetter\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTarget\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mFeedbackPanel.(Grid.Row)\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mValue\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mSetter\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTarget\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mFeedbackPanel.(Grid.Column)\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mValue\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m2\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mSetter\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTarget\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mFeedbackPanel.(Grid.ColumnSpan)\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mValue\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mVisualState.Setters\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mVisualState\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mVisualState\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mx\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mName\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mNarrowLayout\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mVisualState.StateTriggers\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mAdaptiveTrigger\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mMinWindowWidth\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m0\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mVisualState.StateTriggers\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mVisualState.Setters\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mSetter\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTarget\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mseeAlsoPanel.Width\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mValue\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mAuto\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mSetter\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTarget\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mseeAlsoPanel.(Grid.Row)\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mValue\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m3\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mSetter\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTarget\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mseeAlsoPanel.(Grid.Column)\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mValue\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m0\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mSetter\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTarget\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mseeAlsoPanel.(Grid.ColumnSpan)\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mValue\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m3\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mSetter\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTarget\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mSourcePanel.(Grid.ColumnSpan)\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mValue\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mSetter\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTarget\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mDocumentationPanel.(Grid.ColumnSpan)\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mValue\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mSetter\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTarget\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mRelatedControlsPanel.(Grid.Row)\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mValue\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m0\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mSetter\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTarget\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mRelatedControlsPanel.(Grid.Column)\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mValue\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m2\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mSetter\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTarget\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mRelatedControlsPanel.(Grid.ColumnSpan)\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mValue\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mSetter\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTarget\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mFeedbackPanel.(Grid.Row)\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mValue\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mSetter\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTarget\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mFeedbackPanel.(Grid.Column)\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mValue\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m2\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mSetter\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTarget\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mFeedbackPanel.(Grid.ColumnSpan)\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mValue\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mSetter\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTarget\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mrightMargin.Width\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mValue\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m0\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mSetter\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTarget\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mcontentRoot.Padding\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mValue\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m14,0\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mVisualState.Setters\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mVisualState\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mVisualStateGroup\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mVisualStateManager.VisualStateGroups\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;117;113;94m<!--\u001b[0m\u001b[38;2;117;113;94m  Content Region  \u001b[0m\u001b[38;2;117;113;94m-->\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mScrollViewer\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;166;226;46mx\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mName\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116msvPanel\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;166;226;46mVerticalScrollBarVisibility\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mAuto\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;166;226;46mVerticalScrollMode\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mAuto\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mGrid\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mx\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mName\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mcontentRoot\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mPadding\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m24,0,0,0\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mSizeChanged\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mOnContentRootSizeChanged\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mGrid.ColumnDefinitions\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mColumnDefinition\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mx\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mName\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mcontentColumn\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mColumnDefinition\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mx\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mName\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mrightMargin\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mWidth\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m20\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mColumnDefinition\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mx\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mName\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116minfoColumn\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mWidth\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mAuto\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mGrid.ColumnDefinitions\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mGrid.RowDefinitions\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mRowDefinition\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mHeight\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mAuto\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mRowDefinition\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mHeight\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m*\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mRowDefinition\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mHeight\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m20\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mRowDefinition\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mHeight\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mAuto\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mGrid.RowDefinitions\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mTextBlock\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;166;226;46mx\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mName\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mdescriptionText\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;166;226;46mStyle\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m{ThemeResource BodyTextBlockStyle}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;166;226;46mGrid.ColumnSpan\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m2\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;166;226;46mMargin\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m0,5,24,0\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;166;226;46mText\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m{x:Bind Item.Description}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mFrame\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mx\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mName\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mcontentFrame\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mGrid.Row\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mGrid\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;166;226;46mx\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mName\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mseeAlsoPanel\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;166;226;46mGrid.Row\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m0\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;166;226;46mGrid.RowSpan\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m2\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;166;226;46mGrid.Column\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m2\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;166;226;46mWidth\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m280\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;166;226;46mMargin\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m0,0,24,24\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mGrid.RowDefinitions\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mRowDefinition\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mHeight\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mAuto\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mRowDefinition\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mHeight\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mAuto\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mRowDefinition\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mHeight\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mAuto\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mRowDefinition\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mHeight\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mAuto\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mGrid.RowDefinitions\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mGrid.ColumnDefinitions\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mColumnDefinition\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mColumnDefinition\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mWidth\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m20\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mColumnDefinition\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mGrid.ColumnDefinitions\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mStackPanel\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mx\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mName\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mSourcePanel\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mGrid.Row\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m0\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mGrid.ColumnSpan\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m3\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mMargin\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m0,0,0,40\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mTextBlock\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;166;226;46mx\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mName\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mSourceHeader\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;166;226;46mx\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mUid\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mSourceHeader\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;166;226;46mStyle\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m{ThemeResource SubtitleTextBlockStyle}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;166;226;46mText\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mView page code on GitHub\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mHyperlinkButton\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;166;226;46mx\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mName\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mPageMarkupGitHubLink\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;166;226;46mToolTipService.ToolTip\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m{x:Bind PageMarkupGitHubLink.NavigateUri, Mode=OneWay}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mTextBlock\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mText\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mXAML source code\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mHyperlinkButton\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mHyperlinkButton\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;166;226;46mx\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mName\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mPageCodeGitHubLink\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;166;226;46mToolTipService.ToolTip\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m{x:Bind PageCodeGitHubLink.NavigateUri, Mode=OneWay}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;166;226;46mMargin\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m0,12,0,0\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mTextBlock\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mText\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mC# source code\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mHyperlinkButton\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mStackPanel\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mStackPanel\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mx\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mName\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mDocumentationPanel\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mGrid.Row\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mGrid.ColumnSpan\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m3\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mMargin\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m0,0,0,40\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mTextBlock\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;166;226;46mx\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mName\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mdocHeader\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;166;226;46mx\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mUid\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mDocHeader\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;166;226;46mStyle\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m{StaticResource SubtitleTextBlockStyle}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mItemsControl\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;166;226;46mx\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mName\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mDocsList\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;166;226;46mMargin\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m0,12,0,0\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;166;226;46mIsTabStop\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mFalse\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;166;226;46mItemsSource\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m{x:Bind Item.Docs}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mItemsControl.ItemsPanel\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                                \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mItemsPanelTemplate\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                                    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mStackPanel\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mOrientation\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mVertical\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                                \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mItemsPanelTemplate\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mItemsControl.ItemsPanel\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mItemsControl.ItemTemplate\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                                \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mDataTemplate\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mx\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mDataType\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mdata:ControlInfoDocLink\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                                    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mHyperlinkButton\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mNavigateUri\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m{Binding Uri}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mToolTipService.ToolTip\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m{Binding Uri}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mTextBlock\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mText\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m{x:Bind Title}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                                    \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mHyperlinkButton\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                                \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mDataTemplate\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mItemsControl.ItemTemplate\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mItemsControl\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mStackPanel\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mStackPanel\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mx\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mName\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mRelatedControlsPanel\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mGrid.Row\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m2\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mGrid.ColumnSpan\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m3\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mMargin\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m0,0,0,40\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mTextBlock\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;166;226;46mx\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mName\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mrelatedControlsHeader\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;166;226;46mx\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mUid\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mRelatedControlsHeader\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;166;226;46mStyle\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m{StaticResource SubtitleTextBlockStyle}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mItemsControl\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;166;226;46mx\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mName\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mrelatedItemsControl\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;166;226;46mMargin\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m0,12,0,0\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;166;226;46mIsTabStop\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mFalse\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;166;226;46mItemsSource\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m{x:Bind Item.RelatedControls}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mItemsControl.ItemsPanel\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                                \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mItemsPanelTemplate\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                                    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mStackPanel\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mOrientation\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mVertical\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                                \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mItemsPanelTemplate\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mItemsControl.ItemsPanel\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mItemsControl.ItemTemplate\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                                \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mDataTemplate\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mx\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mDataType\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mx:String\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                                    \u001b[0m\u001b[38;2;117;113;94m<!--\u001b[0m\u001b[38;2;117;113;94m A HyperlinkButton must always provide an accessible name to a screen reader which\u001b[0m\n\u001b[38;2;117;113;94m                                         conveys the purpose of the link. By default, when the HyperlinkButton is built\u001b[0m\n\u001b[38;2;117;113;94m                                         as below, with an Image and TextBlock, the HyperlinkButton provides no accessible\u001b[0m\n\u001b[38;2;117;113;94m                                         name. So bind the accessible name to the same data that provides the text shown\u001b[0m\n\u001b[38;2;117;113;94m                                         visually on the contained TextBlock. \u001b[0m\u001b[38;2;117;113;94m-->\u001b[0m\n\u001b[38;2;248;248;242m                                    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mHyperlinkButton\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mAutomationProperties.Name\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m{x:Bind}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mClick\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mOnRelatedControlClick\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mRelativePanel\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                                            \u001b[0m\u001b[38;2;117;113;94m<!--\u001b[0m\u001b[38;2;117;113;94m Now that the HyperlinkButton has a helpful accessible name, it serves no\u001b[0m\n\u001b[38;2;117;113;94m                                                 useful purpose for the contained Image, (which is purely decorative,) or\u001b[0m\n\u001b[38;2;117;113;94m                                                 the contained TextBlock to be exposed to a screen reader. All the information\u001b[0m\n\u001b[38;2;117;113;94m                                                 required by customers using a screen reader is accessible directly through the\u001b[0m\n\u001b[38;2;117;113;94m                                                 Hyperlink button. As such, mark the contained elements as not being interesting\u001b[0m\n\u001b[38;2;117;113;94m                                                 to a screen reader through use of the AutomationProperties.AccessibilityView\u001b[0m\n\u001b[38;2;117;113;94m                                                 property. \u001b[0m\u001b[38;2;117;113;94m-->\u001b[0m\n\u001b[38;2;248;248;242m                                            \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mImage\u001b[0m\n\u001b[38;2;248;248;242m                                                \u001b[0m\u001b[38;2;166;226;46mAutomationProperties.AccessibilityView\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mRaw\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m                                                \u001b[0m\u001b[38;2;166;226;46mx\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mName\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116miconImage\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m                                                \u001b[0m\u001b[38;2;166;226;46mWidth\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m25\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m                                                \u001b[0m\u001b[38;2;166;226;46mMargin\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m0,0,15,0\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m                                                \u001b[0m\u001b[38;2;166;226;46mcommon\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mImageLoader.Source\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m{Binding}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                                            \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mTextBlock\u001b[0m\n\u001b[38;2;248;248;242m                                                \u001b[0m\u001b[38;2;166;226;46mAutomationProperties.AccessibilityView\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mRaw\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m                                                \u001b[0m\u001b[38;2;166;226;46mForeground\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m{ThemeResource HyperlinkButtonForeground}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m                                                \u001b[0m\u001b[38;2;166;226;46mRelativePanel.RightOf\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116miconImage\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m                                                \u001b[0m\u001b[38;2;166;226;46mText\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m{x:Bind}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m                                                \u001b[0m\u001b[38;2;166;226;46mTextWrapping\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mWrap\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                                        \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mRelativePanel\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                                    \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mHyperlinkButton\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                                \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mDataTemplate\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mItemsControl.ItemTemplate\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mItemsControl\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mStackPanel\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mStackPanel\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mx\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mName\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mFeedbackPanel\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mGrid.Row\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m3\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mGrid.ColumnSpan\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m3\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mTextBlock\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;166;226;46mx\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mName\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mfeedbackHeader\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;166;226;46mx\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mUid\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mFeedbackHeader\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;166;226;46mStyle\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m{StaticResource SubtitleTextBlockStyle}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mHyperlinkButton\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mNavigateUri\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mhttps://github.com/microsoft/Xaml-Controls-Gallery/issues/new/choose\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242m                                         \u001b[0m\u001b[38;2;166;226;46mToolTipService.ToolTip\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mhttps://github.com/microsoft/Xaml-Controls-Gallery/issues/new/choose\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                            \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mTextBlock\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mx\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mUid\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mFeedbackLink\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m                        \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mHyperlinkButton\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                    \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mStackPanel\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m                \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mGrid\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mGrid\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mScrollViewer\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mGrid\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mPage\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/XML/Directory.Build.props",
    "content": "\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mProject\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mPropertyGroup\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mOutDir\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mC:\\output\\$(MSBuildProjectName)\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mOutDir\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mPropertyGroup\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mProject\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/XML/console.csproj",
    "content": "\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mProject\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mSdk\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mMicrosoft.NET.Sdk\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mPropertyGroup\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mOutputType\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mExe\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mOutputType\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mTargetFramework\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mnet9.0\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mTargetFramework\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mRootNamespace\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mSomeNamespace\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mRootNamespace\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mImplicitUsings\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242menable\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mImplicitUsings\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mNullable\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242menable\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mNullable\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mPropertyGroup\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\n\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mProject\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/XML/example.xml",
    "content": "\u001b[38;2;255;255;255m<?\u001b[0m\u001b[38;2;249;38;114mxml\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mversion\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m1.0\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mencoding\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mutf-8\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mstandalone\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mno\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m?>\u001b[0m\n\u001b[38;2;255;255;255m<?\u001b[0m\u001b[38;2;249;38;114mxml-stylesheet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mtype\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mtext/css\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mhref\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mtutorials.css\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m?>\u001b[0m\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mxsl\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;249;38;114mstylesheet\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mversion\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m1.0\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mxmlns\u001b[0m\u001b[38;2;166;226;46m:\u001b[0m\u001b[38;2;166;226;46mxsl\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mhttp://www.w3.org/1999/XSL/Transform\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;240m<\u001b[0m\u001b[38;2;248;248;242m!ENTITY name \"Some text\">\u001b[0m\n\u001b[38;2;248;248;240m<\u001b[0m\u001b[38;2;248;248;242m!ATTLIST tutorials type CDATA #REQUIRED>\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m<!\u001b[0m\u001b[38;2;249;38;114mDOCTYPE\u001b[0m\u001b[38;2;200;206;204m \u001b[0m\u001b[38;2;255;255;255mhtml\u001b[0m\u001b[38;2;200;206;204m \u001b[0m\u001b[3;38;2;102;217;239mPUBLIC\u001b[0m\u001b[38;2;200;206;204m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m-//W3C//DTD XHTML 1.0 Transitional//EN\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;200;206;204m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mhttp://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mroot_element\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m<!--\u001b[0m\u001b[38;2;117;113;94m    \u001b[0m\u001b[38;2;117;113;94m-->\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mCASE_sensITIVE\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mattribute\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46manother\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mfalse\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtrailing_slash\u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mCASE_sensITIVE\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mnumber_attribute42\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mnumber_attribute42\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mnumber42_trailingslash\u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m<!--\u001b[0m\u001b[38;2;117;113;94m Comment in Document \u001b[0m\u001b[38;2;117;113;94m-->\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mxsl\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;249;38;114mcomplicated_attribute\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mname\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mab1234567890!@#$%^\u001b[0m\u001b[38;2;190;132;255m&\u001b[0m\u001b[38;2;190;132;255mamp\u001b[0m\u001b[38;2;190;132;255m;\u001b[0m\u001b[38;2;230;219;116m*()\u001b[0m\u001b[38;2;190;132;255m&\u001b[0m\u001b[38;2;190;132;255mgt\u001b[0m\u001b[38;2;190;132;255m;\u001b[0m\u001b[38;2;230;219;116m?\u001b[0m\u001b[38;2;190;132;255m&\u001b[0m\u001b[38;2;190;132;255mlt\u001b[0m\u001b[38;2;190;132;255m;\u001b[0m\u001b[38;2;230;219;116m,.';`~:\\][{}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mxsl\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;249;38;114mcomplicated_attribute\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mentity_use\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;190;132;255m&\u001b[0m\u001b[38;2;190;132;255mname\u001b[0m\u001b[38;2;190;132;255m;\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mentity_use\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m<![\u001b[0m\u001b[38;2;249;38;114mCDATA\u001b[0m\u001b[38;2;255;255;255m[\u001b[0m\n\u001b[38;2;230;219;116m        Text you want to escape goes here...\u001b[0m\n\u001b[38;2;230;219;116m    \u001b[0m\u001b[38;2;255;255;255m]]>\u001b[0m\n\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mroot_element\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;117;113;94m<!--\u001b[0m\u001b[38;2;117;113;94m Comment after Document \u001b[0m\u001b[38;2;117;113;94m-->\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/XML/projectname.targets",
    "content": "\u001b[38;2;255;255;255m<?\u001b[0m\u001b[38;2;249;38;114mxml\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mversion\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m1.0\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mencoding\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mutf-8\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m?>\u001b[0m\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mProject\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mxmlns\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mhttp://schemas.microsoft.com/developer/msbuild/2003\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mTarget\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mName\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mTestTarget\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mAfterTargets\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mBuild\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mMessage\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mImportance\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mHigh\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mText\u001b[0m\u001b[38;2;248;248;242m=\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m-------------MHM----------------\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255m/>\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mTarget\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\n\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mProject\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/YAML/example.yaml",
    "content": "\u001b[38;2;166;226;46m---\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Simple example\u001b[0m\n\u001b[38;2;249;38;114mid\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3595\u001b[0m\n\u001b[38;2;249;38;114mname\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mTest User\u001b[0m\n\u001b[38;2;249;38;114musername\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mtestuser\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\u001b[38;2;249;38;114mother_names\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mBob\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mBill\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116mGeorge\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;249;38;114mhexa\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0x\u001b[0m\u001b[38;2;190;132;255m11c3\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94minline comment\u001b[0m\n\u001b[38;2;249;38;114mocta\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;190;132;255m21131\u001b[0m\n\u001b[38;2;249;38;114mlastseen\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m.\u001b[0m\u001b[38;2;190;132;255mNAN\u001b[0m\n\u001b[38;2;249;38;114menabled\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\n\u001b[38;2;249;38;114mlocked\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mfalse\u001b[0m\n\u001b[38;2;249;38;114mgroups\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116madministrators\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mengineering\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116msfa\u001b[0m\n\u001b[38;2;249;38;114maddress\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\n\u001b[38;2;230;219;116m  123 Alphabet Way\u001b[0m\n\u001b[38;2;230;219;116m  San Francisco, CA\u001b[0m\n\u001b[38;2;249;38;114mbio\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\n\u001b[38;2;230;219;116m  I am a hardworking person\u001b[0m\n\u001b[38;2;230;219;116m  and a member of the\u001b[0m\n\u001b[38;2;230;219;116m  executive staff\u001b[0m\n\u001b[38;2;249;38;114mphone\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mnull\u001b[0m\n\u001b[38;2;249;38;114memail\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m~\u001b[0m\n\u001b[38;2;249;38;114mbuilding_access\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255myes\u001b[0m\n\u001b[38;2;249;38;114msecure_access\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mno\u001b[0m\n\u001b[38;2;249;38;114mbulb\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mOn\u001b[0m\n\u001b[38;2;249;38;114mfans\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mOff\u001b[0m\n\u001b[38;2;249;38;114memails\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mexecutives\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;248;248;242m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mbob@example.com\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;248;248;242m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mbill@example.com\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114msupervisors\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;248;248;242m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mgeorge@example.com\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/Zig/example.zig",
    "content": "\u001b[38;2;117;113;94m//! this is a top level doc, starts with \"//!\"\u001b[0m\n\n\u001b[38;2;249;38;114mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mstd\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m@import\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"std\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;249;38;114mpub\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mfn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mmain\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239manyerror\u001b[0m\u001b[38;2;249;38;114m!\u001b[0m\u001b[3;38;2;102;217;239mvoid\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mstdout\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mstd\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mio\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mgetStdOut\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mwriter\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mtry\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mstdout\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mprint\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m\"Hello, {}!\u001b[0m\u001b[38;2;190;132;255m\\n\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m .\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;230;219;116m\"world\"\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;249;38;114mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mexpect\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mstd\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mtesting\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mexpect\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[3;38;2;102;217;239mtest\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"comments\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m// comments start with \"//\" until newline\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m// foo bar baz\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mx\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mtrue\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m// another comment\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mexpect\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mx\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;117;113;94m/// a doc comment starts with \"///\"\u001b[0m\n\u001b[38;2;117;113;94m/// multiple lines are merged together\u001b[0m\n\u001b[38;2;249;38;114mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTimestamp\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mstruct\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m/// number of seconds since epoch\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255mseconds\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mi64\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m/// number of nanoseconds past the second\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255mnano\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mu32\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mSelf\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239m@This\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mpub\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mfn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46munixEpoch\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mSelf\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mSelf\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m            .\u001b[0m\u001b[38;2;248;248;242mseconds\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m            .\u001b[0m\u001b[38;2;248;248;242mnanos\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;249;38;114mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mmy_val\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mswitch\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mstd\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;166;226;46mTarget\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mcurrent\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mos\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\u001b[38;2;248;248;242mtag\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;190;132;255m    .linux\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"Linux\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"not Linux\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;249;38;114mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mBook\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239menum\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mpaperback\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mhardcover\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mebook\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mpdf\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;249;38;114mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTokenType\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239munion\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239menum\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255mint\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239misize\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255mfloat\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mf64\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255mstring\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m []\u001b[0m\u001b[38;2;249;38;114mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mu8\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;249;38;114mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255marray_lit\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m [\u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[3;38;2;102;217;239mu8\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m .\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m11\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m22\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m33\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m44\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;249;38;114mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242msentinal_lit\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m [\u001b[0m\u001b[38;2;190;132;255m_\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[3;38;2;102;217;239mu8\u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[3;38;2;102;217;239mtest\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"address of syntax\"\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m// Get the address of a variable:\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255mx\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mi32\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1234\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mx_ptr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m&\u001b[0m\u001b[38;2;248;248;242mx\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m// Dereference a pointer:\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mexpect\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mx_ptr\u001b[0m\u001b[38;2;249;38;114m.*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1234\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m// When you get the address of a const variable, you get a const pointer to a single item.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mexpect\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239m@TypeOf\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242mx_ptr\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mi32\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;117;113;94m// If you want to mutate the value, you'd need an address of a mutable variable:\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mvar\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;255;255;255my\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mi32\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m5678\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242my_ptr\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m&\u001b[0m\u001b[38;2;248;248;242my\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mexpect\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239m@TypeOf\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242my_ptr\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;248;248;242mi32\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242my_ptr\u001b[0m\u001b[38;2;249;38;114m.*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m+=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242mexpect\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242my_ptr\u001b[0m\u001b[38;2;249;38;114m.*\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m==\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m5679\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;117;113;94m// integer literals\u001b[0m\n\u001b[38;2;249;38;114mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mdecimal_int\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m98222\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;249;38;114mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mhex_int\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0xff\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;249;38;114mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242manother_hex_int\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0xFF\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;249;38;114mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242moctal_int\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0o755\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;249;38;114mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mbinary_int\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0b11110000\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;117;113;94m// underscores may be placed between two digits as a visual separator\u001b[0m\n\u001b[38;2;249;38;114mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mone_billion\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1_000_000_000\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;249;38;114mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mbinary_mask\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0b1_1111_1111\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;249;38;114mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mpermissions\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0o7_5_5\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;249;38;114mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mbig_address\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0xFF80_0000_0000_0000\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;117;113;94m// float literals\u001b[0m\n\u001b[38;2;249;38;114mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mfloating_point\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m123.0E+77\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;249;38;114mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242manother_float\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m123.0\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;249;38;114mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242myet_another\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m123.0e+77\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;249;38;114mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mhex_floating_point\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0x103.70p-5\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;249;38;114mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242manother_hex_float\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0x103.70\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;249;38;114mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242myet_another_hex_float\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0x103.70P-5\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;117;113;94m// underscores may be placed between two digits as a visual separator\u001b[0m\n\u001b[38;2;249;38;114mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mlightspeed\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m299_792_458.000_000\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;249;38;114mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mnanosecond\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0.000_000_001\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;249;38;114mconst\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mmore_hex\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m0x1234_5678.9ABC_CDEFp-10\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[3;38;2;102;217;239mfn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mmax\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;102;217;239mcomptime\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mT\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mtype\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31ma\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mT\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mb\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mT\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mT\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242ma\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mb\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242ma\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242mb\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/cmd-help/test.cmd-help",
    "content": "\u001b[38;2;248;248;242mbat 0.22.1\u001b[0m\n\u001b[38;2;248;248;242mA cat(1) clone with wings.\u001b[0m\n\n\u001b[38;2;248;248;242mUse '--help' instead of '-h' to see a more detailed version of the help text.\u001b[0m\n\n\u001b[38;2;246;170;17mUSAGE:\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;190;132;255mbat\u001b[0m\u001b[38;2;248;248;242m [OPTIONS] [FILE]...\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;190;132;255mbat\u001b[0m\u001b[38;2;248;248;242m <SUBCOMMAND>\u001b[0m\n\n\u001b[38;2;246;170;17mARGS:\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114m<FILE>...\u001b[0m\u001b[38;2;248;248;242m    File(s) to print / concatenate. Use '-' for standard input.\u001b[0m\n\n\u001b[38;2;246;170;17mOPTIONS:\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46m-A\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;166;226;46m--show-all\u001b[0m\u001b[38;2;248;248;242m                    Show non-printable characters (space, tab, newline, ..).\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46m-p\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;166;226;46m--plain\u001b[0m\u001b[38;2;248;248;242m                       Show plain style (alias for '--style=plain').\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46m-l\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;166;226;46m--language\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<language>\u001b[0m\u001b[38;2;248;248;242m         Set the language for syntax highlighting.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46m-H\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;166;226;46m--highlight-line\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<N:M>\u001b[0m\u001b[38;2;248;248;242m        Highlight lines N through M.\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;166;226;46m--file-name\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<name>\u001b[0m\u001b[38;2;248;248;242m            Specify the name to display for a file.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46m-d\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;166;226;46m--diff\u001b[0m\u001b[38;2;248;248;242m                        Only show lines that have been added/removed/modified.\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;166;226;46m--tabs\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<T>\u001b[0m\u001b[38;2;248;248;242m                    Set the tab width to T spaces.\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;166;226;46m--wrap\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<mode>\u001b[0m\u001b[38;2;248;248;242m                 Specify the text-wrapping mode (*auto*, never, character).\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46m-n\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;166;226;46m--number\u001b[0m\u001b[38;2;248;248;242m                      Show line numbers (alias for '--style=numbers').\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;166;226;46m--color\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<when>\u001b[0m\u001b[38;2;248;248;242m                When to use colors (*auto*, never, always).\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;166;226;46m--italic-text\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<when>\u001b[0m\u001b[38;2;248;248;242m          Use italics in output (always, *never*)\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;166;226;46m--decorations\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<when>\u001b[0m\u001b[38;2;248;248;242m          When to show the decorations (*auto*, never, always).\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;166;226;46m--paging\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<when>\u001b[0m\u001b[38;2;248;248;242m               Specify when to use the pager, or use `-P` to disable (*auto*,\u001b[0m\n\u001b[38;2;248;248;242m                                      never, always).\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46m-m\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;166;226;46m--map-syntax\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<glob:syntax>\u001b[0m\u001b[38;2;248;248;242m    Use the specified syntax for files matching the glob pattern\u001b[0m\n\u001b[38;2;248;248;242m                                      ('*.cpp:C++').\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;166;226;46m--theme\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<theme>\u001b[0m\u001b[38;2;248;248;242m               Set the color theme for syntax highlighting.\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;166;226;46m--list-themes\u001b[0m\u001b[38;2;248;248;242m                 Display all supported highlighting themes.\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;166;226;46m--style\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<components>\u001b[0m\u001b[38;2;248;248;242m          Comma-separated list of style elements to display (*default*,\u001b[0m\n\u001b[38;2;248;248;242m                                      auto, full, plain, changes, header, header-filename,\u001b[0m\n\u001b[38;2;248;248;242m                                      header-filesize, grid, rule, numbers, snip).\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46m-r\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;166;226;46m--line-range\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m<N:M>\u001b[0m\u001b[38;2;248;248;242m            Only print the lines from N to M.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46m-L\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;166;226;46m--list-languages\u001b[0m\u001b[38;2;248;248;242m              Display all supported languages.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46m-h\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;166;226;46m--help\u001b[0m\u001b[38;2;248;248;242m                        Print this help message.\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;166;226;46m-V\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;166;226;46m--version\u001b[0m\u001b[38;2;248;248;242m                     Print version information\u001b[0m\n\n\u001b[38;2;246;170;17mSUBCOMMANDS:\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;190;132;255mcache\u001b[0m\u001b[38;2;248;248;242m    Modify the syntax-definition and theme cache\u001b[0m\n\n\u001b[38;2;248;248;242mNote: `bat -h` prints a short and concise overview while `bat --help` gives all details.\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/dash/shfm",
    "content": "\u001b[3;38;2;124;120;101m#\u001b[0m\u001b[3;38;2;124;120;101m!/usr/bin/env dash\u001b[0m\n\n\u001b[38;2;166;226;46mesc\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[3;38;2;124;120;101m#\u001b[0m\u001b[3;38;2;124;120;101m vt100 (IL is vt102) (DECTCEM is vt520)\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255mCUD\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m     \u001b[0m\u001b[38;2;102;217;239mprintf\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116m%s[%sB\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mesc_c\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m2\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m      \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;124;120;101m#\u001b[0m\u001b[3;38;2;124;120;101m cursor down\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255mCUP\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m     \u001b[0m\u001b[38;2;102;217;239mprintf\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116m%s[%s;%sH\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mesc_c\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m2\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m3\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;124;120;101m#\u001b[0m\u001b[3;38;2;124;120;101m cursor home\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255mCUU\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m     \u001b[0m\u001b[38;2;102;217;239mprintf\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116m%s[%sA\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mesc_c\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m2\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m      \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;124;120;101m#\u001b[0m\u001b[3;38;2;124;120;101m cursor up\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255mDECAWM\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m  \u001b[0m\u001b[38;2;102;217;239mprintf\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116m%s[?7%s\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m   \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mesc_c\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m2\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m      \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;124;120;101m#\u001b[0m\u001b[3;38;2;124;120;101m line wrap\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255mDECRC\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m   \u001b[0m\u001b[38;2;102;217;239mprintf\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116m%s8\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m       \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mesc_c\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m           \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;124;120;101m#\u001b[0m\u001b[3;38;2;124;120;101m cursor restore\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255mDECSC\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m   \u001b[0m\u001b[38;2;102;217;239mprintf\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116m%s7\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m       \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mesc_c\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m           \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;124;120;101m#\u001b[0m\u001b[3;38;2;124;120;101m cursor save\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255mDECSTBM\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239mprintf\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116m%s[%s;%sr\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mesc_c\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m2\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m3\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;124;120;101m#\u001b[0m\u001b[3;38;2;124;120;101m scroll region\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255mDECTCEM\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239mprintf\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116m%s[?25%s\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m  \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mesc_c\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m2\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m      \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;124;120;101m#\u001b[0m\u001b[3;38;2;124;120;101m cursor visible\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255mED\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;255;255;255m0\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;255;255;255m2\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239mprintf\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116m%s[%sJ\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mesc_c\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\u001b[38;2;249;38;114m#\u001b[0m\u001b[38;2;230;219;116mED\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;124;120;101m#\u001b[0m\u001b[3;38;2;124;120;101m clear screen\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255mEL\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;255;255;255m0\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;255;255;255m2\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239mprintf\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116m%s[%sK\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mesc_c\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\u001b[38;2;249;38;114m#\u001b[0m\u001b[38;2;230;219;116mEL\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;124;120;101m#\u001b[0m\u001b[3;38;2;124;120;101m clear line\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255mIL\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m      \u001b[0m\u001b[38;2;102;217;239mprintf\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116m%s[%sL\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mesc_c\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m2\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m      \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;124;120;101m#\u001b[0m\u001b[3;38;2;124;120;101m insert line\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255mSGR\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m     \u001b[0m\u001b[38;2;102;217;239mprintf\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116m%s[%s;%sm\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mesc_c\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m2\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m3\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;124;120;101m#\u001b[0m\u001b[3;38;2;124;120;101m colors\u001b[0m\n\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[3;38;2;124;120;101m#\u001b[0m\u001b[3;38;2;124;120;101m xterm (since 1988, supported widely)\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255mscreen_alt\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239mprintf\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116m%s[?1049%s\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mesc_c\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m2\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;124;120;101m#\u001b[0m\u001b[3;38;2;124;120;101m alternate buffer\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;249;38;114mesac\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;166;226;46mterm_setup\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mstty\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m(\u001b[0m\u001b[38;2;255;255;255mstty\u001b[0m\u001b[3;38;2;253;151;31m -\u001b[0m\u001b[3;38;2;253;151;31mg\u001b[0m\u001b[38;2;230;219;116m)\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mstty\u001b[0m\u001b[3;38;2;253;151;31m -\u001b[0m\u001b[3;38;2;253;151;31micanon\u001b[0m\u001b[3;38;2;253;151;31m -\u001b[0m\u001b[3;38;2;253;151;31mecho\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mesc\u001b[0m\u001b[38;2;255;255;255m screen_alt h\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mesc\u001b[0m\u001b[38;2;255;255;255m DECAWM l\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mesc\u001b[0m\u001b[38;2;255;255;255m DECTCEM l\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mesc\u001b[0m\u001b[38;2;255;255;255m ED2\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mesc\u001b[0m\u001b[38;2;255;255;255m DECSTBM 1 \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m((\u001b[0m\u001b[38;2;230;219;116mLINES \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;230;219;116m))\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;166;226;46mterm_reset\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mesc\u001b[0m\u001b[38;2;255;255;255m DECAWM h     \u001b[0m\u001b[38;2;249;38;114m>&\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mesc\u001b[0m\u001b[38;2;255;255;255m DECTCEM h    \u001b[0m\u001b[38;2;249;38;114m>&\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mesc\u001b[0m\u001b[38;2;255;255;255m ED2          \u001b[0m\u001b[38;2;249;38;114m>&\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mesc\u001b[0m\u001b[38;2;255;255;255m DECSTBM      \u001b[0m\u001b[38;2;249;38;114m>&\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mesc\u001b[0m\u001b[38;2;255;255;255m screen_alt l \u001b[0m\u001b[38;2;249;38;114m>&\u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mstty\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mstty\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[3;38;2;124;120;101m#\u001b[0m\u001b[3;38;2;124;120;101m needed for cd-on-exit\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;102;217;239mprintf\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116m%s\\n\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mPWD\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m>&\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;166;226;46mterm_resize\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[3;38;2;124;120;101m#\u001b[0m\u001b[3;38;2;124;120;101m false-positive, behavior intentional, globbing is disabled.\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[3;38;2;124;120;101m#\u001b[0m\u001b[3;38;2;124;120;101m shellcheck disable=2046\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;102;217;239mset\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mf\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;102;217;239mset\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m+\u001b[0m\u001b[3;38;2;253;151;31mf\u001b[0m\u001b[38;2;249;38;114m --\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255mstty\u001b[0m\u001b[38;2;255;255;255m size\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mLINES\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mCOLUMNS\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m2\u001b[0m\n\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[3;38;2;124;120;101m#\u001b[0m\u001b[3;38;2;124;120;101m space for status_line\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mbottom\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m((\u001b[0m\u001b[38;2;230;219;116mLINES \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;230;219;116m))\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;166;226;46mterm_scroll_down\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m((\u001b[0m\u001b[38;2;255;255;255my \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m#\u001b[0m\u001b[38;2;255;255;255m))\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;255;255;255m0\u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;255;255;255m9\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;249;38;114mesac\u001b[0m\n\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255my\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m((\u001b[0m\u001b[38;2;230;219;116my \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;230;219;116m))\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255my2\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m((\u001b[0m\u001b[38;2;230;219;116my2 \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;230;219;116m bottom \u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;230;219;116m y2 \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;230;219;116m bottom\u001b[0m\u001b[38;2;230;219;116m))\u001b[0m\n\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mline_print\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m((\u001b[0m\u001b[38;2;230;219;116my \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;230;219;116m))\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;102;217;239mprintf\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116m\\n\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mline_print\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255my\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mstatus_line\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m#\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;166;226;46mterm_scroll_up\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255my\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255m-\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m0\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;249;38;114mesac\u001b[0m\n\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255my\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m((\u001b[0m\u001b[38;2;230;219;116my \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;230;219;116m))\u001b[0m\n\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mline_print\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m((\u001b[0m\u001b[38;2;230;219;116my \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;230;219;116m))\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255my2\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mesc\u001b[0m\u001b[38;2;255;255;255m IL\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mesc\u001b[0m\u001b[38;2;255;255;255m CUU\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255my2\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m((\u001b[0m\u001b[38;2;230;219;116my2 \u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;230;219;116m y2 \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;230;219;116m))\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;249;38;114mesac\u001b[0m\n\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mline_print\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255my\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mstatus_line\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m#\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;166;226;46mcmd_run\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mstty\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mstty\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mesc\u001b[0m\u001b[38;2;255;255;255m DECTCEM h\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mesc\u001b[0m\u001b[38;2;255;255;255m DECSTBM\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mesc\u001b[0m\u001b[38;2;255;255;255m ED2\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m||\u001b[0m\u001b[38;2;102;217;239m:\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mesc\u001b[0m\u001b[38;2;255;255;255m DECSTBM 1 \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m((\u001b[0m\u001b[38;2;230;219;116mLINES \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;230;219;116m))\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mesc\u001b[0m\u001b[38;2;255;255;255m DECTCEM l\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mstty\u001b[0m\u001b[3;38;2;253;151;31m -\u001b[0m\u001b[3;38;2;253;151;31micanon\u001b[0m\u001b[3;38;2;253;151;31m -\u001b[0m\u001b[3;38;2;253;151;31mecho\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mhist\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m2\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;166;226;46mfile_escape\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mtmp\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255msafe\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\n\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[3;38;2;124;120;101m#\u001b[0m\u001b[3;38;2;124;120;101m loop over string char by char\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;249;38;114mwhile\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mc\u001b[0m\u001b[38;2;255;255;255m=\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[38;2;255;255;255mtmp\u001b[0m\u001b[38;2;249;38;114m%\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255mtmp\u001b[0m\u001b[38;2;249;38;114m#\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114mdo\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mc\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m          \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;255;255;255mcntrl\u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255msafe\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255msafe\u001b[0m\u001b[38;2;190;132;255m\\?\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m           \u001b[0m\u001b[38;2;255;255;255msafe\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255msafe\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mc\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;249;38;114mesac\u001b[0m\n\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255mtmp\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255mtmp\u001b[0m\u001b[38;2;249;38;114m#\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;249;38;114mdone\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;166;226;46mhist_search\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mhist\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m0\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mj\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\n\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;255;255;255m file do\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[38;2;255;255;255mPWD\u001b[0m\u001b[38;2;249;38;114m%%\u001b[0m\u001b[38;2;255;255;255m/\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\u001b[38;2;255;255;255m/\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mfile\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mold_pwd\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255my\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mj\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255my2\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m((\u001b[0m\u001b[38;2;230;219;116mj \u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;230;219;116m bottom \u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;230;219;116m mid \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;230;219;116m j\u001b[0m\u001b[38;2;230;219;116m))\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mcur\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mfile\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;249;38;114mesac\u001b[0m\n\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255mj\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m((\u001b[0m\u001b[38;2;230;219;116mj \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;230;219;116m))\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;249;38;114mdone\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;166;226;46mlist_print\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mesc\u001b[0m\u001b[38;2;255;255;255m ED2\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mesc\u001b[0m\u001b[38;2;255;255;255m CUP\u001b[0m\n\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mi\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mend\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m((\u001b[0m\u001b[38;2;230;219;116mbottom \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;230;219;116m))\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mmid\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m((\u001b[0m\u001b[38;2;230;219;116mbottom \u001b[0m\u001b[38;2;249;38;114m/\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;230;219;116m bottom \u001b[0m\u001b[38;2;249;38;114m/\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\u001b[38;2;230;219;116m))\u001b[0m\n\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m#\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31me\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m]\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m||\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239mset\u001b[0m\u001b[38;2;249;38;114m --\u001b[0m\u001b[38;2;255;255;255m empty\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;249;38;114mesac\u001b[0m\n\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mhist\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255m2\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;124;120;101m#\u001b[0m\u001b[3;38;2;124;120;101m redraw after cmd run\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;102;217;239mshift\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m((\u001b[0m\u001b[38;2;230;219;116my \u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;230;219;116m y2 \u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;230;219;116m y \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;230;219;116m y2 \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;230;219;116m))\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;124;120;101m#\u001b[0m\u001b[3;38;2;124;120;101m redraw after go-to-parent\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;255;255;255mhist_search\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;102;217;239mshift\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m((\u001b[0m\u001b[38;2;230;219;116my \u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;230;219;116m bottom \u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;230;219;116m y \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;230;219;116m mid \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;230;219;116m))\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;124;120;101m#\u001b[0m\u001b[3;38;2;124;120;101m everything else\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;102;217;239mshift\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m((\u001b[0m\u001b[38;2;230;219;116my \u001b[0m\u001b[38;2;249;38;114m>=\u001b[0m\u001b[38;2;230;219;116m bottom \u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;230;219;116m y \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;230;219;116m bottom \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\u001b[38;2;230;219;116m))\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;249;38;114mesac\u001b[0m\n\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;255;255;255m file do\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mi\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255my2\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mesc\u001b[0m\u001b[38;2;255;255;255m SGR 0 7\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;249;38;114mesac\u001b[0m\n\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m((\u001b[0m\u001b[38;2;255;255;255mi \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;255;255;255m end\u001b[0m\u001b[38;2;255;255;255m))\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;255;255;255m-\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;255;255;255mline_format\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mfile\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;255;255;255mesc\u001b[0m\u001b[38;2;255;255;255m CUD\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;249;38;114mesac\u001b[0m\n\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255mi\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m((\u001b[0m\u001b[38;2;230;219;116mi \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;230;219;116m))\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;249;38;114mdone\u001b[0m\n\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mesc\u001b[0m\u001b[38;2;255;255;255m CUP \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m((\u001b[0m\u001b[38;2;230;219;116my \u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;230;219;116m y2 \u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;230;219;116m y2 \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;230;219;116m y\u001b[0m\u001b[38;2;230;219;116m))\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;166;226;46mredraw\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mlist_print\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mstatus_line\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m#\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;166;226;46mstatus_line\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mesc\u001b[0m\u001b[38;2;255;255;255m DECSC\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mesc\u001b[0m\u001b[38;2;255;255;255m CUP \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mLINES\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mUSER\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255mroot\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mesc\u001b[0m\u001b[38;2;255;255;255m SGR 31 7\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m           \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mesc\u001b[0m\u001b[38;2;255;255;255m SGR 34 7\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;249;38;114mesac\u001b[0m\n\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;102;217;239mprintf\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116m%*s\\r%s \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mCOLUMNS\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m(\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255my\u001b[0m\u001b[38;2;230;219;116m/\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\u001b[38;2;230;219;116m)\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mltype\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239mprintf\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;255;255;255ms\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mPWD\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m         \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239mprintf\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;255;255;255ms\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mltype\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;249;38;114mesac\u001b[0m\n\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mesc\u001b[0m\u001b[38;2;255;255;255m SGR 0 0\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mesc\u001b[0m\u001b[38;2;255;255;255m DECRC\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;166;226;46mprompt\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mesc\u001b[0m\u001b[38;2;255;255;255m DECSC\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mesc\u001b[0m\u001b[38;2;255;255;255m CUP \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mLINES\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;102;217;239mprintf\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;255;255;255ms\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mesc\u001b[0m\u001b[38;2;255;255;255m DECTCEM h\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mesc\u001b[0m\u001b[38;2;255;255;255m EL0\u001b[0m\n\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m2\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255mr\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;255;255;255mstty\u001b[0m\u001b[38;2;255;255;255m icanon echo\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;102;217;239mread\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31mr\u001b[0m\u001b[38;2;255;255;255m ans\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m||\u001b[0m\u001b[38;2;102;217;239m:\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;255;255;255mstty\u001b[0m\u001b[3;38;2;253;151;31m -\u001b[0m\u001b[3;38;2;253;151;31micanon\u001b[0m\u001b[3;38;2;253;151;31m -\u001b[0m\u001b[3;38;2;253;151;31mecho\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;249;38;114mesac\u001b[0m\n\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mesc\u001b[0m\u001b[38;2;255;255;255m DECRC\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mesc\u001b[0m\u001b[38;2;255;255;255m DECTCEM l\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mstatus_line\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m(\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255my\u001b[0m\u001b[38;2;230;219;116m/\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m#\u001b[0m\u001b[38;2;230;219;116m) \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mPWD\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;166;226;46mline_print\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255moffset\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\n\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255moffset\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255my\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mesc\u001b[0m\u001b[38;2;255;255;255m SGR 0 7\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;249;38;114mesac\u001b[0m\n\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;102;217;239mshift\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255moffset\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255moffset\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255my\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mcur\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;249;38;114mesac\u001b[0m\n\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mline_format\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;166;226;46mline_format\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mfile_escape\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;102;217;239m[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31md\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m]\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mesc\u001b[0m\u001b[38;2;255;255;255m SGR 1 31\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;102;217;239mprintf\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m%\u001b[0m\u001b[38;2;255;255;255ms\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255msafe\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;102;217;239m[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31md\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m]\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239mprintf\u001b[0m\u001b[38;2;255;255;255m /\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mesc\u001b[0m\u001b[38;2;255;255;255m SGR 0 0\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mesc\u001b[0m\u001b[38;2;255;255;255m EL0\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;102;217;239mprintf\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116m\\r\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;166;226;46mmain\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;102;217;239mset\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31me\u001b[0m\n\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255m-h\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m--help\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;102;217;239mprintf\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116mshfm -[hv] <starting dir>\\n\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;102;217;239mexit\u001b[0m\u001b[38;2;255;255;255m 0\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255m-v\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m--version\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;102;217;239mprintf\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116mshfm 0.4.2\\n\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;102;217;239mexit\u001b[0m\u001b[38;2;255;255;255m 0\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;102;217;239mcd\u001b[0m\u001b[38;2;249;38;114m --\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\u001b[38;2;249;38;114m:-\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mPWD\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;249;38;114mesac\u001b[0m\n\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mesc_c\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m(\u001b[0m\u001b[38;2;102;217;239mprintf\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116m\\033\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116m)\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mbs_char\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m(\u001b[0m\u001b[38;2;102;217;239mprintf\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116m\\177\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116m)\u001b[0m\n\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;102;217;239mset\u001b[0m\u001b[38;2;249;38;114m --\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mcur\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\n\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mterm_resize\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mterm_setup\u001b[0m\n\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;102;217;239mtrap\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116mterm_reset\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m  EXIT INT\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;102;217;239mtrap\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116mterm_resize; term_setup; y=1 y2=1; redraw \"$@\"\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m WINCH\u001b[0m\n\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255my\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255my2\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;255;255;255mredraw\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;249;38;114mwhile\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mkey\u001b[0m\u001b[38;2;255;255;255m=\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m(\u001b[0m\u001b[38;2;255;255;255mdd\u001b[0m\u001b[38;2;255;255;255m ibs=1 count=1 \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;255;255;255m/dev/null\u001b[0m\u001b[38;2;255;255;255m)\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114mdo\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mkey\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[38;2;255;255;255mesc\u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;255;255;255m0\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;255;255;255mk\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255mA2\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;255;255;255mterm_scroll_up\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;255;255;255mj\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255mB2\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;255;255;255mterm_scroll_down\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;255;255;255ml\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255mC2\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mesc\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;124;120;101m#\u001b[0m\u001b[3;38;2;124;120;101m ARROW RIGHT\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31md\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mcur\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m]\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m&&\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239mcd\u001b[0m\u001b[38;2;249;38;114m --\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mcur\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;255;255;255m/dev/null \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m>&\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;255;255;255m                    \u001b[0m\u001b[38;2;102;217;239mset\u001b[0m\u001b[38;2;249;38;114m --\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\n\u001b[38;2;255;255;255m                    \u001b[0m\u001b[38;2;255;255;255my\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255my2\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mcur\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mltype\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\n\u001b[38;2;255;255;255m                    \u001b[0m\u001b[38;2;255;255;255mredraw\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;249;38;114melif\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m[\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;253;151;31m-\u001b[0m\u001b[3;38;2;253;151;31me\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mcur\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239m]\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;255;255;255m                    \u001b[0m\u001b[38;2;255;255;255mcmd_run\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255mSHFM_OPENER\u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255mEDITOR\u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;230;219;116mvi\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mcur\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m                    \u001b[0m\u001b[38;2;255;255;255mredraw\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;249;38;114mfi\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;255;255;255mh\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255mD2\u001b[0m\u001b[38;2;249;38;114m|\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mbs_char\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[3;38;2;124;120;101m#\u001b[0m\u001b[3;38;2;124;120;101m ARROW LEFT\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;255;255;255mold_pwd\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mPWD\u001b[0m\n\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mltype\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\n\u001b[38;2;255;255;255m                    \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239mcd\u001b[0m\u001b[38;2;255;255;255m ..\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m||\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114mcontinue\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m                     \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mltype\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;249;38;114mesac\u001b[0m\n\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;102;217;239mset\u001b[0m\u001b[38;2;249;38;114m --\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;255;255;255my\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255my2\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mcur\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mhist\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;255;255;255mredraw\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;255;255;255mg\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255my\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\n\u001b[38;2;255;255;255m                    \u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114mcontinue\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;249;38;114mesac\u001b[0m\n\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;255;255;255my\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255my2\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mcur\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;255;255;255mredraw\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;255;255;255mG\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;255;255;255my\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m#\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;255;255;255my2\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m((\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m#\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;249;38;114m<\u001b[0m\u001b[38;2;230;219;116m bottom \u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m#\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;230;219;116m bottom\u001b[0m\u001b[38;2;230;219;116m))\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;255;255;255mredraw\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;255;255;255m.\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m{\u001b[0m\u001b[38;2;255;255;255mhidden\u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\u001b[38;2;255;255;255m}\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\n\u001b[38;2;255;255;255m                    \u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mhidden\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m0\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239mset\u001b[0m\u001b[38;2;249;38;114m --\u001b[0m\u001b[38;2;255;255;255m .\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m                    \u001b[0m\u001b[38;2;255;255;255m0\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mhidden\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;249;38;114m;\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239mset\u001b[0m\u001b[38;2;249;38;114m --\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;249;38;114mesac\u001b[0m\n\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;255;255;255my\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255my2\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mcur\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;255;255;255mredraw\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;255;255;255m:\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;255;255;255mprompt\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mcd: \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m r\u001b[0m\n\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[3;38;2;124;120;101m#\u001b[0m\u001b[3;38;2;124;120;101m false positive, behavior intentional\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[3;38;2;124;120;101m#\u001b[0m\u001b[3;38;2;124;120;101m shellcheck disable=2088\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mans\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\n\u001b[38;2;255;255;255m                    \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116m~\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m   \u001b[0m\u001b[38;2;255;255;255mans\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mHOME\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m                    \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116m~/\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mans\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mHOME\u001b[0m\u001b[38;2;230;219;116m/\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255mans\u001b[0m\u001b[38;2;249;38;114m#\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m~/\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;249;38;114mesac\u001b[0m\n\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;102;217;239mcd\u001b[0m\u001b[38;2;249;38;114m --\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255mans\u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m0\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;255;255;255m/dev/null \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m>&\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m||\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114mcontinue\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;102;217;239mset\u001b[0m\u001b[38;2;249;38;114m --\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;255;255;255my\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255my2\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mcur\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;255;255;255mredraw\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;255;255;255m/\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;255;255;255mprompt\u001b[0m\u001b[38;2;255;255;255m / r\u001b[0m\n\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[3;38;2;124;120;101m#\u001b[0m\u001b[3;38;2;124;120;101m word splitting and globbing intentional\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[3;38;2;124;120;101m#\u001b[0m\u001b[3;38;2;124;120;101m shellcheck disable=2086\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;102;217;239mset\u001b[0m\u001b[38;2;249;38;114m --\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mans\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\n\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;249;38;114mcase\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m#\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\n\u001b[38;2;255;255;255m                    \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mans\u001b[0m\u001b[38;2;230;219;116m*1\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239mset\u001b[0m\u001b[38;2;249;38;114m --\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116mno results\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;249;38;114mesac\u001b[0m\n\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;255;255;255my\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255my2\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mcur\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mltype\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116msearch \u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mPWD\u001b[0m\u001b[38;2;230;219;116m/\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mans\u001b[0m\u001b[38;2;230;219;116m*\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;255;255;255mredraw\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;255;255;255mstatus_line\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m#\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;255;255;255m-\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;102;217;239mcd\u001b[0m\u001b[38;2;249;38;114m --\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mOLDPWD\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;255;255;255m/dev/null \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;249;38;114m>&\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;249;38;114m||\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114mcontinue\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;102;217;239mset\u001b[0m\u001b[38;2;249;38;114m --\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;255;255;255my\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255my2\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mcur\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;255;255;255mredraw\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;190;132;255m\\~\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;102;217;239mcd\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m||\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114mcontinue\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;102;217;239mset\u001b[0m\u001b[38;2;249;38;114m --\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;255;255;255my\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255my2\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mcur\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;255;255;255mredraw\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;190;132;255m\\!\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;249;38;114mexport\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mSHFM_LEVEL\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;255;255;255mSHFM_LEVEL\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m((\u001b[0m\u001b[38;2;230;219;116mSHFM_LEVEL \u001b[0m\u001b[38;2;249;38;114m+\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;230;219;116m))\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;255;255;255mcmd_run\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;230;219;116m{\u001b[0m\u001b[38;2;255;255;255mSHELL\u001b[0m\u001b[38;2;249;38;114m:=\u001b[0m\u001b[38;2;230;219;116m/bin/sh\u001b[0m\u001b[38;2;230;219;116m}\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;255;255;255mredraw\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;190;132;255m\\?\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;102;217;239mset\u001b[0m\u001b[38;2;249;38;114m --\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116mj - down\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m                       \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116mk - up\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m                       \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116ml - open file or directory\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m                       \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116mh - go up level\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m                       \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116mg - go to top\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m                       \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116mG - go to bottom\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m                       \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116mq - quit\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m                       \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116m: - cd to <input>\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m                       \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116m/ - search current directory <input>*\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m                       \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116m- - go to last directory\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m                       \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116m~ - go home\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m                       \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116m! - spawn shell\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m                       \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116m. - toggle hidden files\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\\\u001b[0m\n\u001b[38;2;255;255;255m                       \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116m? - show keybinds\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\n\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;255;255;255my\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255my2\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mcur\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m1\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mltype\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116mkeybinds\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;255;255;255mredraw\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m                \u001b[0m\u001b[38;2;255;255;255mstatus_line\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m#\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;255;255;255mq\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;102;217;239mexit\u001b[0m\u001b[38;2;255;255;255m 0\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[3;38;2;124;120;101m#\u001b[0m\u001b[3;38;2;124;120;101m handle keys which emit escape sequences\u001b[0m\n\u001b[38;2;255;255;255m            \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255mesc_c\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mesc\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m                 \u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;230;219;116m[1\u001b[0m\u001b[38;2;255;255;255m'\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mesc\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m2\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m                    \u001b[0m\u001b[38;2;249;38;114m*\u001b[0m\u001b[38;2;249;38;114m)\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255mesc\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m0\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m;;\u001b[0m\n\u001b[38;2;255;255;255m        \u001b[0m\u001b[38;2;249;38;114mesac\u001b[0m\n\u001b[38;2;255;255;255m    \u001b[0m\u001b[38;2;249;38;114mdone\u001b[0m\n\u001b[38;2;255;255;255m}\u001b[0m\n\n\u001b[38;2;255;255;255mmain\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m$\u001b[0m\u001b[38;2;255;255;255m@\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;249;38;114m>\u001b[0m\u001b[38;2;255;255;255m/dev/tty\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/debsources/sources.list",
    "content": "\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m newer versions of the distribution.\u001b[0m\n\n\u001b[38;2;190;132;255mdeb\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;166;226;46mhttps://deb.debian.org/debian\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mbookworm\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mmain\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mnon-free-firmware\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94mdeb-src https://deb.debian.org/debian bookworm main non-free-firmware\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m# Major bug fix updates produced after the final release of the\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m# distribution.\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m deb-src http://lt.archive.ubuntu.com/ubuntu/ xenial-updates main restricted\u001b[0m\n\n\u001b[38;2;190;132;255mdeb\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;166;226;46mhttps://security.debian.org/debian-security\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mbookworm-security\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mmain\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mnon-free-firmware\u001b[0m\n\u001b[38;2;190;132;255mdeb-src\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;166;226;46mhttps://security.debian.org/debian-security\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mbookworm-security\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mmain\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mnon-free-firmware\u001b[0m\n\n\u001b[38;2;190;132;255mdeb\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;166;226;46mhttps://deb.debian.org/debian\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mbookworm-updates\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mmain\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mnon-free-firmware\u001b[0m\n\u001b[38;2;190;132;255mdeb-src\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;166;226;46mhttps://deb.debian.org/debian\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mbookworm-updates\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mmain\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mnon-free-firmware\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/fish_history/fish_history",
    "content": "\u001b[38;2;248;248;242m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mcmd\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mecho \"hello world\"\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mwhen\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1656950812\u001b[0m\n\u001b[38;2;248;248;242m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mcmd\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mls /tmp\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mwhen\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1656950818\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mpaths\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m/tmp\u001b[0m\n\u001b[38;2;248;248;242m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mcmd\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mcp .local/share/fish/fish_history .\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mwhen\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1656950833\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mpaths\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m.local/share/fish/fish_history\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;248;248;242m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m.\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/gnuplot/test.gp",
    "content": "\u001b[38;2;249;38;114mset\u001b[0m\u001b[38;2;249;38;114m \u001b[0m\u001b[38;2;249;38;114mterminal\u001b[0m\u001b[38;2;249;38;114m pngcairo enhanced\u001b[0m\n\u001b[38;2;249;38;114mset\u001b[0m\u001b[38;2;249;38;114m \u001b[0m\u001b[38;2;249;38;114moutput\u001b[0m\u001b[38;2;249;38;114m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m/tmp/polynomial.png\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\n\n\u001b[38;2;249;38;114mset\u001b[0m\u001b[38;2;249;38;114m \u001b[0m\u001b[38;2;249;38;114mgrid\u001b[0m\n\n\u001b[38;2;249;38;114mset\u001b[0m\u001b[38;2;249;38;114m \u001b[0m\u001b[38;2;249;38;114mxrange\u001b[0m\u001b[38;2;249;38;114m \u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;190;132;255m-5\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\n\u001b[38;2;249;38;114mset\u001b[0m\u001b[38;2;249;38;114m \u001b[0m\u001b[38;2;249;38;114myrange\u001b[0m\u001b[38;2;249;38;114m \u001b[0m\u001b[38;2;249;38;114m[\u001b[0m\u001b[38;2;190;132;255m-5\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;190;132;255m10\u001b[0m\u001b[38;2;249;38;114m]\u001b[0m\n\n\u001b[38;2;249;38;114mset\u001b[0m\u001b[38;2;249;38;114m \u001b[0m\u001b[38;2;249;38;114msamples\u001b[0m\u001b[38;2;249;38;114m \u001b[0m\u001b[38;2;190;132;255m10000\u001b[0m\n\n\u001b[38;2;249;38;114mset\u001b[0m\u001b[38;2;249;38;114m \u001b[0m\u001b[38;2;249;38;114mkey\u001b[0m\u001b[38;2;249;38;114m \u001b[0m\u001b[38;2;190;132;255mbottom\u001b[0m\u001b[38;2;249;38;114m \u001b[0m\u001b[38;2;190;132;255mright\u001b[0m\n\n\u001b[38;2;255;255;255mf\u001b[0m\u001b[38;2;248;248;242m(x) = \u001b[0m\u001b[38;2;190;132;255m1.0\u001b[0m\u001b[38;2;248;248;242m / \u001b[0m\u001b[38;2;190;132;255m14.0\u001b[0m\u001b[38;2;248;248;242m * ((x+\u001b[0m\u001b[38;2;190;132;255m4\u001b[0m\u001b[38;2;248;248;242m) * (x+\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m) * (x\u001b[0m\u001b[38;2;190;132;255m-1\u001b[0m\u001b[38;2;248;248;242m) * (x\u001b[0m\u001b[38;2;190;132;255m-3\u001b[0m\u001b[38;2;248;248;242m)) + \u001b[0m\u001b[38;2;190;132;255m0.5\u001b[0m\n\n\u001b[38;2;249;38;114mplot\u001b[0m\u001b[38;2;248;248;242m \\\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;255;255;255mf\u001b[0m\u001b[38;2;248;248;242m(x) \u001b[0m\u001b[38;2;190;132;255mtitle\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mpolynomial of degree 4\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m \\\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mwith\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mlines\u001b[0m\u001b[38;2;248;248;242m \\\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;190;132;255mlinewidth\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m \\\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;190;132;255mlinetype\u001b[0m\u001b[38;2;248;248;242m rgb \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;230;219;116m#0077ff\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/http-request-response/example.http",
    "content": "\u001b[38;2;249;38;114mPOST\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m/\u001b[0m\u001b[38;2;248;248;242mfoo\u001b[0m\u001b[38;2;248;248;242m/\u001b[0m\u001b[38;2;248;248;242mbar\u001b[0m\u001b[38;2;248;248;242m?\u001b[0m\u001b[3;38;2;253;151;31mid\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m4\u001b[0m\u001b[38;2;249;38;114m&\u001b[0m\u001b[3;38;2;253;151;31mx\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116my\u001b[0m\u001b[38;2;190;132;255m%\u001b[0m\u001b[38;2;190;132;255m20\u001b[0m\u001b[38;2;230;219;116mz\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mHTTP/1.1\u001b[0m\n\u001b[38;2;249;38;114mX-Forwarded-For\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;230;219;116m 127.0.0.1\u001b[0m\n\u001b[38;2;249;38;114mContent-Length\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m124\u001b[0m\n\u001b[38;2;249;38;114mCache-Control\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;230;219;116m no-cache\u001b[0m\n\u001b[38;2;249;38;114mX-Forwarded-Proto\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;230;219;116m https\u001b[0m\n\u001b[38;2;249;38;114mContent-Type\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mapplication/json\u001b[0m\u001b[38;2;230;219;116m;\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[3;38;2;253;151;31mcharset\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116mutf-8\u001b[0m\n\u001b[38;2;249;38;114mHost\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;230;219;116m example.com\u001b[0m\n\u001b[38;2;249;38;114mAccept\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;230;219;116m */*\u001b[0m\u001b[38;2;230;219;116m;\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[3;38;2;253;151;31mq\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116m0.5\u001b[0m\u001b[38;2;230;219;116m,\u001b[0m\u001b[38;2;230;219;116m application/xml\u001b[0m\n\u001b[38;2;249;38;114mAccept-Encoding\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;230;219;116m gzip\u001b[0m\n\n\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;253;151;31mid\u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mblahblahblahblah\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;253;151;31mobject\u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mevent\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;253;151;31mapi_version\u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m2020-03-02\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;253;151;31mcreated\u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m1626790174\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;253;151;31mdata\u001b[0m\u001b[38;2;253;151;31m\"\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\n\u001b[38;2;190;132;255mHTTP/1.1\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m200\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mOK\u001b[0m\n\u001b[38;2;249;38;114mServer\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;230;219;116m nginx\u001b[0m\n\u001b[38;2;249;38;114mDate\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;230;219;116m Fri\u001b[0m\u001b[38;2;230;219;116m,\u001b[0m\u001b[38;2;230;219;116m 23 Jul 2021 10:15:12 GMT\u001b[0m\n\u001b[38;2;249;38;114mContent-Type\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mtext/html\u001b[0m\u001b[38;2;230;219;116m;\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[3;38;2;253;151;31mcharset\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116mutf-8\u001b[0m\n\u001b[38;2;249;38;114mTransfer-Encoding\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;230;219;116m chunked\u001b[0m\n\u001b[38;2;249;38;114mConnection\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;230;219;116m keep-alive\u001b[0m\n\u001b[38;2;249;38;114mVary\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;230;219;116m Accept-Encoding\u001b[0m\n\u001b[38;2;249;38;114mCache-Control\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;230;219;116m private\u001b[0m\u001b[38;2;230;219;116m;\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[3;38;2;253;151;31mmax-age\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;190;132;255m0\u001b[0m\n\u001b[38;2;249;38;114mX-Frame-Options\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;230;219;116m DENY\u001b[0m\n\u001b[38;2;249;38;114mX-Content-Type-Options\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;230;219;116m nosniff\u001b[0m\n\u001b[38;2;249;38;114mX-XSS-Protection\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;230;219;116m 1\u001b[0m\u001b[38;2;230;219;116m;\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[3;38;2;253;151;31mmode\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;230;219;116mblock\u001b[0m\n\u001b[38;2;249;38;114mReferrer-Policy\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;230;219;116m origin\u001b[0m\n\u001b[38;2;249;38;114mStrict-Transport-Security\u001b[0m\u001b[38;2;230;219;116m:\u001b[0m\u001b[38;2;230;219;116m \u001b[0m\u001b[3;38;2;253;151;31mmax-age\u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;190;132;255m31556900\u001b[0m\n\n\u001b[38;2;255;255;255m<!\u001b[0m\u001b[38;2;249;38;114mDOCTYPE\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mhtml\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mhtml\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mhead\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mmeta\u001b[0m\u001b[38;2;166;226;46m \u001b[0m\u001b[38;2;166;226;46mcharset\u001b[0m\u001b[38;2;166;226;46m=\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;230;219;116mutf-8\u001b[0m\u001b[38;2;255;255;255m\"\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mtitle\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\u001b[38;2;248;248;242mHello World\u001b[0m\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mtitle\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mhead\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;255;255;255m<\u001b[0m\u001b[38;2;249;38;114mbody\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\n\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mbody\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n\u001b[38;2;255;255;255m</\u001b[0m\u001b[38;2;249;38;114mhtml\u001b[0m\u001b[38;2;255;255;255m>\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/jsonnet/stdlib.jsonnet",
    "content": "\u001b[38;2;249;38;114mlocal\u001b[0m\u001b[38;2;248;248;242m html = \u001b[0m\u001b[3;38;2;102;217;239mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'html.libsonnet'\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;249;38;114mlocal\u001b[0m\u001b[38;2;248;248;242m jekyll = \u001b[0m\u001b[3;38;2;102;217;239mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'jekyll.libsonnet'\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;249;38;114mlocal\u001b[0m\u001b[38;2;248;248;242m content = \u001b[0m\u001b[3;38;2;102;217;239mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'stdlib-content.jsonnet'\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;249;38;114mlocal\u001b[0m\n\u001b[38;2;248;248;242m  h1 = html.h1,\u001b[0m\n\u001b[38;2;248;248;242m  p = html.p;\u001b[0m\n\n\u001b[38;2;249;38;114mlocal\u001b[0m\u001b[38;2;248;248;242m manifestJsonSingleLine(val) = \u001b[0m\u001b[38;2;102;217;239mstd.strReplace\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239mstd.manifestJsonEx\u001b[0m\u001b[38;2;248;248;242m(val, \u001b[0m\u001b[38;2;230;219;116m''\u001b[0m\u001b[38;2;248;248;242m), \u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;190;132;255m\\n\u001b[0m\u001b[38;2;230;219;116m'\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m' '\u001b[0m\u001b[38;2;248;248;242m);\u001b[0m\n\n\u001b[38;2;249;38;114mlocal\u001b[0m\u001b[38;2;248;248;242m exampleDoc(ex) =\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mlocal\u001b[0m\u001b[38;2;248;248;242m exRep =\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mstd.isString\u001b[0m\u001b[38;2;248;248;242m(ex) \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m      ex\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;248;248;242m      html.spaceless([html.code({}, ex.input), \u001b[0m\u001b[38;2;230;219;116m' yields '\u001b[0m\u001b[38;2;248;248;242m, html.code({}, manifestJsonSingleLine(ex.output))])\u001b[0m\n\u001b[38;2;248;248;242m  ;\u001b[0m\n\u001b[38;2;248;248;242m  html.p({}, html.spaceless([\u001b[0m\u001b[38;2;230;219;116m'Example: '\u001b[0m\u001b[38;2;248;248;242m, exRep, \u001b[0m\u001b[38;2;230;219;116m'.'\u001b[0m\u001b[38;2;248;248;242m]))\u001b[0m\n\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;249;38;114mlocal\u001b[0m\u001b[38;2;248;248;242m hgroup(body) = html.div({ \u001b[0m\u001b[38;2;166;226;46mclass:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'hgroup'\u001b[0m\u001b[38;2;248;248;242m }, body);\u001b[0m\n\u001b[38;2;249;38;114mlocal\u001b[0m\u001b[38;2;248;248;242m hgroup_inline(body) = html.div({ \u001b[0m\u001b[38;2;166;226;46mclass:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'hgroup-inline'\u001b[0m\u001b[38;2;248;248;242m }, [body, \u001b[0m\u001b[38;2;230;219;116m'<div style=\"clear: both\"></div>'\u001b[0m\u001b[38;2;248;248;242m]);\u001b[0m\n\u001b[38;2;249;38;114mlocal\u001b[0m\u001b[38;2;248;248;242m panel(body) = html.div({ \u001b[0m\u001b[38;2;166;226;46mclass:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'panel'\u001b[0m\u001b[38;2;248;248;242m }, body);\u001b[0m\n\n\u001b[38;2;249;38;114mlocal\u001b[0m\u001b[38;2;248;248;242m in_panel(body) = hgroup(hgroup_inline(panel(body)));\u001b[0m\n\n\u001b[38;2;249;38;114mlocal\u001b[0m\u001b[38;2;248;248;242m fieldParams(f) =\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mstd.objectHas\u001b[0m\u001b[38;2;248;248;242m(f, \u001b[0m\u001b[38;2;230;219;116m'params'\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m'('\u001b[0m\u001b[38;2;248;248;242m + \u001b[0m\u001b[38;2;102;217;239mstd.join\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;230;219;116m', '\u001b[0m\u001b[38;2;248;248;242m, f.params) + \u001b[0m\u001b[38;2;230;219;116m')'\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m''\u001b[0m\n\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;249;38;114mlocal\u001b[0m\u001b[38;2;248;248;242m fieldDescription(f) =\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mstd.isString\u001b[0m\u001b[38;2;248;248;242m(f.description) \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m    html.p({}, f.description)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;248;248;242m    f.description\u001b[0m\n\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;249;38;114mlocal\u001b[0m\u001b[38;2;248;248;242m fieldDoc(f, prefix) =\u001b[0m\n\u001b[38;2;248;248;242m  [\u001b[0m\n\u001b[38;2;248;248;242m    in_panel(html.h4({ \u001b[0m\u001b[38;2;166;226;46mid:\u001b[0m\u001b[38;2;248;248;242m f.name }, prefix + \u001b[0m\u001b[38;2;230;219;116m'.'\u001b[0m\u001b[38;2;248;248;242m + f.name + fieldParams(f))),\u001b[0m\n\u001b[38;2;248;248;242m    in_panel([\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mstd.objectHas\u001b[0m\u001b[38;2;248;248;242m(f, \u001b[0m\u001b[38;2;230;219;116m'availableSince'\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\n\u001b[38;2;248;248;242m        html.p(\u001b[0m\n\u001b[38;2;248;248;242m          {},\u001b[0m\n\u001b[38;2;248;248;242m          html.em(\u001b[0m\n\u001b[38;2;248;248;242m            {},\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m f.availableSince == \u001b[0m\u001b[38;2;230;219;116m'upcoming'\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\n\u001b[38;2;248;248;242m              \u001b[0m\u001b[38;2;230;219;116m'Available in upcoming release.'\u001b[0m\n\u001b[38;2;248;248;242m            \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\n\u001b[38;2;248;248;242m              \u001b[0m\u001b[38;2;230;219;116m'Available since version '\u001b[0m\u001b[38;2;248;248;242m + f.availableSince + \u001b[0m\u001b[38;2;230;219;116m'.'\u001b[0m\n\u001b[38;2;248;248;242m          )\u001b[0m\n\u001b[38;2;248;248;242m        )\u001b[0m\n\u001b[38;2;248;248;242m      ),\u001b[0m\n\u001b[38;2;248;248;242m      fieldDescription(f),\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mstd.objectHas\u001b[0m\u001b[38;2;248;248;242m(f, \u001b[0m\u001b[38;2;230;219;116m'examples'\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\u001b[38;2;248;248;242m [\u001b[0m\n\u001b[38;2;248;248;242m        exampleDoc(ex)\u001b[0m\n\u001b[38;2;248;248;242m        \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m ex \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m f.examples\u001b[0m\n\u001b[38;2;248;248;242m      ] \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m [],\u001b[0m\n\u001b[38;2;248;248;242m    ]),\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m''\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  ];\u001b[0m\n\n\u001b[38;2;249;38;114mlocal\u001b[0m\u001b[38;2;248;248;242m group(group_spec, prefix) =\u001b[0m\n\u001b[38;2;248;248;242m  [\u001b[0m\n\u001b[38;2;248;248;242m    in_panel(html.h3({ \u001b[0m\u001b[38;2;166;226;46mid:\u001b[0m\u001b[38;2;248;248;242m group_spec.id }, group_spec.name)),\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mstd.objectHas\u001b[0m\u001b[38;2;248;248;242m(group_spec, \u001b[0m\u001b[38;2;230;219;116m'intro'\u001b[0m\u001b[38;2;248;248;242m) \u001b[0m\u001b[38;2;249;38;114mthen\u001b[0m\u001b[38;2;248;248;242m in_panel(group_spec.intro),\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m''\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    [fieldDoc(f, prefix) \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m f \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m group_spec.fields],\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;230;219;116m''\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  ];\u001b[0m\n\n\u001b[38;2;249;38;114mlocal\u001b[0m\u001b[38;2;248;248;242m stdlibPage = [\u001b[0m\n\u001b[38;2;248;248;242m  in_panel(html.h1({\u001b[0m\u001b[38;2;166;226;46mid:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'standard_library'\u001b[0m\u001b[38;2;248;248;242m}, \u001b[0m\u001b[38;2;230;219;116m'Standard Library'\u001b[0m\u001b[38;2;248;248;242m)),\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116m''\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  in_panel(content.intro),\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;230;219;116m''\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  [group(g, content.prefix) \u001b[0m\u001b[38;2;249;38;114mfor\u001b[0m\u001b[38;2;248;248;242m g \u001b[0m\u001b[38;2;249;38;114min\u001b[0m\u001b[38;2;248;248;242m content.groups],\u001b[0m\n\u001b[38;2;248;248;242m];\u001b[0m\n\n\u001b[38;2;249;38;114mlocal\u001b[0m\u001b[38;2;248;248;242m stdlibFrontMatter = {\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mlayout:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'default'\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mtitle:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m'Standard Library'\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m};\u001b[0m\n\n\u001b[38;2;248;248;242mjekyll.renderWithFrontMatter(stdlibFrontMatter, stdlibPage)\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/nginx/nginx.conf",
    "content": "\u001b[38;2;117;113;94m#user  nobody;\u001b[0m\n\u001b[38;2;249;38;114mworker_processes\u001b[0m\u001b[38;2;255;255;255m  \u001b[0m\u001b[38;2;230;219;116m1\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;117;113;94m#pid        logs/nginx.pid;\u001b[0m\n\n\u001b[38;2;249;38;114mload_module\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m\"/usr/local/libexec/nginx/ngx_http_xslt_filter_module.so\"\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;249;38;114mload_module\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m\"/usr/local/libexec/nginx/ngx_rtmp_module.so\"\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\n\u001b[3;38;2;102;217;239mevents\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mworker_connections\u001b[0m\u001b[38;2;255;255;255m  \u001b[0m\u001b[38;2;230;219;116m1024\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[3;38;2;102;217;239mhttp\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114minclude\u001b[0m\u001b[38;2;255;255;255m       mime.types;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mdefault_type\u001b[0m\u001b[38;2;255;255;255m  application/octet-stream;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114msendfile\u001b[0m\u001b[38;2;255;255;255m       \u001b[0m\u001b[38;2;190;132;255m on\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mkeepalive_timeout\u001b[0m\u001b[38;2;255;255;255m  \u001b[0m\u001b[38;2;230;219;116m65\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mgzip\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;190;132;255m on\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mgzip_disable\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m\"msie6\"\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114minclude\u001b[0m\u001b[38;2;255;255;255m /usr/local/etc/nginx/sites.d/*;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[38;2;249;38;114mrtmp\u001b[0m\u001b[38;2;255;255;255m {\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mserver\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mlisten\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m1935\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mmax_message\u001b[0m\u001b[38;2;255;255;255m 10M;\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mapplication\u001b[0m\u001b[38;2;255;255;255m wnob {\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mlive\u001b[0m\u001b[38;2;255;255;255m on;\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mrecord\u001b[0m\u001b[38;2;255;255;255m off;\u001b[0m\n\u001b[38;2;248;248;242m    }\u001b[0m\n\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mapplication\u001b[0m\u001b[38;2;255;255;255m strim {\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mlive\u001b[0m\u001b[38;2;255;255;255m on;\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mhls\u001b[0m\u001b[38;2;255;255;255m on;\u001b[0m\n\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mhls_path\u001b[0m\u001b[38;2;255;255;255m /usr/local/www/hls/;\u001b[0m\n\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mhls_variant\u001b[0m\u001b[38;2;255;255;255m _low BANDWIDTH=250000;\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mhls_variant\u001b[0m\u001b[38;2;255;255;255m _mid BANDWIDTH=500000;\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mhls_variant\u001b[0m\u001b[38;2;255;255;255m _high BANDWIDTH=1000000;\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mhls_variant\u001b[0m\u001b[38;2;255;255;255m _hd720 BANDWIDTH=1500000;\u001b[0m\n\u001b[38;2;248;248;242m      \u001b[0m\u001b[38;2;249;38;114mhls_variant\u001b[0m\u001b[38;2;255;255;255m _src BANDWIDTH=2000000;\u001b[0m\n\u001b[38;2;248;248;242m    }\u001b[0m\n\u001b[38;2;248;248;242m  }\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[3;38;2;102;217;239mserver\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mlisten\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m443\u001b[0m\u001b[38;2;255;255;255m ssl;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mserver_name\u001b[0m\u001b[38;2;255;255;255m host.example.com\u001b[0m\n\u001b[38;2;255;255;255m  root /usr/local/www/host.example.com/;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114merror_page\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m404\u001b[0m\u001b[38;2;255;255;255m /404.html;\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mindex\u001b[0m\u001b[38;2;255;255;255m index.html;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mautoindex\u001b[0m\u001b[38;2;190;132;255m on\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mautoindex_localtime\u001b[0m\u001b[38;2;190;132;255m off\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mautoindex_format\u001b[0m\u001b[38;2;255;255;255m xml;\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mlocation\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m/ \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mxslt_stylesheet\u001b[0m\u001b[38;2;255;255;255m /usr/local/www/host.example.com/index.xslt;\u001b[0m\n\u001b[38;2;248;248;242m  }\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mlocation\u001b[0m\u001b[38;2;248;248;242m ~ \u001b[0m\u001b[38;2;246;170;17m/\\..* \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239mreturn\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m404\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m  }\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mlocation\u001b[0m\u001b[38;2;248;248;242m ~ \u001b[0m\u001b[38;2;246;170;17m/.+/ \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mxslt_stylesheet\u001b[0m\u001b[38;2;255;255;255m /usr/local/www/host.example.com/project.xslt;\u001b[0m\n\u001b[38;2;248;248;242m  }\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mlocation\u001b[0m\u001b[38;2;248;248;242m ~ \u001b[0m\u001b[38;2;246;170;17m/.*\\.xslt/ \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239mreturn\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m404\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m  }\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mlocation\u001b[0m\u001b[38;2;248;248;242m ~ \u001b[0m\u001b[38;2;246;170;17m\\.thumb\\.png$ \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114merror_page\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m404\u001b[0m\u001b[38;2;255;255;255m /404.thumb.png;\u001b[0m\n\u001b[38;2;248;248;242m  }\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mssl_certificate\u001b[0m\u001b[38;2;255;255;255m /usr/local/etc/letsencrypt/live/host.example.com/fullchain.pem;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m# managed by Certbot\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mssl_certificate_key\u001b[0m\u001b[38;2;255;255;255m /usr/local/etc/letsencrypt/live/host.example.com/privkey.pem;\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;117;113;94m# managed by Certbot\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114minclude\u001b[0m\u001b[38;2;255;255;255m /usr/local/etc/letsencrypt/options-ssl-nginx.conf;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mssl_dhparam\u001b[0m\u001b[38;2;255;255;255m /usr/local/etc/letsencrypt/ssl-dhparams.pem;\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114madd_header\u001b[0m\u001b[38;2;255;255;255m Strict-Transport-Security \u001b[0m\u001b[38;2;230;219;116m\"max-age=31536000\"\u001b[0m\u001b[38;2;255;255;255m always;\u001b[0m\n\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[3;38;2;102;217;239mserver\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mlisten\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m80\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mserver_name\u001b[0m\u001b[38;2;255;255;255m host.example.com;\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;255;255;255m$host\u001b[0m\u001b[38;2;248;248;242m = host.example.com) \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239mreturn\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m301\u001b[0m\u001b[38;2;255;255;255m https://\u001b[0m\u001b[38;2;255;255;255m$host\u001b[0m\u001b[38;2;255;255;255m$request_uri\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m  }\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239mreturn\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m404\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[3;38;2;102;217;239mserver\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mlisten\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m443\u001b[0m\u001b[38;2;255;255;255m ssl;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mserver_name\u001b[0m\u001b[38;2;255;255;255m other.example.com;\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mssl_certificate\u001b[0m\u001b[38;2;255;255;255m /usr/local/etc/letsencrypt/live/other.example.com/fullchain.pem;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mssl_certificate_key\u001b[0m\u001b[38;2;255;255;255m /usr/local/etc/letsencrypt/live/other.example.com/privkey.pem;\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114minclude\u001b[0m\u001b[38;2;255;255;255m /usr/local/etc/letsencrypt/options-ssl-nginx.conf;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mssl_dhparam\u001b[0m\u001b[38;2;255;255;255m /usr/local/etc/letsencrypt/ssl-dhparams.pem;\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114madd_header\u001b[0m\u001b[38;2;255;255;255m Strict-Transport-Security \u001b[0m\u001b[38;2;230;219;116m\"max-age=31536000\"\u001b[0m\u001b[38;2;255;255;255m always;\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114maccess_log\u001b[0m\u001b[38;2;255;255;255m /home/otherapp/logs/access.log;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114merror_log\u001b[0m\u001b[38;2;255;255;255m /home/otherapp/logs/error.log;\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mclient_max_body_size\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;190;132;255m5M\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mlocation\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m/ \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mroot\u001b[0m\u001b[38;2;255;255;255m /home/otherapp/app/static;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mindex\u001b[0m\u001b[38;2;255;255;255m man.txt;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mtry_files\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;255;255;255m$uri\u001b[0m\u001b[38;2;255;255;255m @proxy;\u001b[0m\n\u001b[38;2;248;248;242m  }\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;102;217;239mlocation\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46m@proxy \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mproxy_set_header\u001b[0m\u001b[38;2;255;255;255m Host \u001b[0m\u001b[38;2;255;255;255m$http_host\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mproxy_set_header\u001b[0m\u001b[38;2;255;255;255m X-Forwarded-Host \u001b[0m\u001b[38;2;255;255;255m$host\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mproxy_set_header\u001b[0m\u001b[38;2;255;255;255m X-Real-IP \u001b[0m\u001b[38;2;255;255;255m$remote_addr\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mproxy_set_header\u001b[0m\u001b[38;2;255;255;255m X-Forwarded-For \u001b[0m\u001b[38;2;255;255;255m$proxy_add_x_forwarded_for\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mproxy_pass\u001b[0m\u001b[38;2;255;255;255m http://unix:/var/run/otherapp/sock:;\u001b[0m\n\u001b[38;2;248;248;242m  }\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n\n\u001b[3;38;2;102;217;239mserver\u001b[0m\u001b[38;2;248;248;242m {\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mlisten\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m80\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mserver_name\u001b[0m\u001b[38;2;255;255;255m other.example.com;\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m (\u001b[0m\u001b[38;2;255;255;255m$host\u001b[0m\u001b[38;2;248;248;242m = other.example.com) \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239mreturn\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m301\u001b[0m\u001b[38;2;255;255;255m https://\u001b[0m\u001b[38;2;255;255;255m$host\u001b[0m\u001b[38;2;255;255;255m$request_uri\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m  }\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239mreturn\u001b[0m\u001b[38;2;255;255;255m \u001b[0m\u001b[38;2;230;219;116m404\u001b[0m\u001b[38;2;255;255;255m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/nim/main.nim",
    "content": "\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m json\u001b[0m\n\n\u001b[38;2;249;38;114mconst\u001b[0m\n\u001b[38;2;248;248;242m  message = \u001b[0m\u001b[38;2;230;219;116m\"hello world\"\u001b[0m\n\u001b[38;2;248;248;242m  multiLine = \u001b[0m\u001b[38;2;230;219;116m\"\"\"\u001b[0m\n\u001b[38;2;230;219;116m    foo\u001b[0m\n\u001b[38;2;230;219;116m    bar\u001b[0m\n\u001b[38;2;230;219;116m  \"\"\"\u001b[0m\n\u001b[38;2;248;248;242m  numbers = @[\u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m2\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;190;132;255m3\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\n\u001b[38;2;249;38;114mtype\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mOptions\u001b[0m\u001b[38;2;248;248;242m = \u001b[0m\u001b[38;2;249;38;114menum\u001b[0m\n\u001b[38;2;248;248;242m  A,\u001b[0m\n\u001b[38;2;248;248;242m  B,\u001b[0m\n\u001b[38;2;248;248;242m  C\u001b[0m\n\n\u001b[38;2;117;113;94m## \u001b[0m\u001b[38;2;117;113;94mTop-level comment\u001b[0m\n\u001b[38;2;249;38;114mtype\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;166;226;46mSomeStruct\u001b[0m\u001b[38;2;248;248;242m* = \u001b[0m\u001b[38;2;249;38;114mref\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mobject\u001b[0m\n\u001b[38;2;248;248;242m    value*: \u001b[0m\u001b[3;38;2;102;217;239mstring\u001b[0m\n\n\u001b[3;38;2;102;217;239mproc\u001b[0m\u001b[38;2;248;248;242m someFunc*(): \u001b[0m\u001b[3;38;2;102;217;239mstring\u001b[0m\u001b[38;2;248;248;242m =\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m## \u001b[0m\u001b[38;2;117;113;94mFunction docs\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m##\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;117;113;94m## \u001b[0m\u001b[38;2;117;113;94mMore docs\u001b[0m\n\u001b[38;2;248;248;242m  result = message\u001b[0m\n\n\u001b[3;38;2;102;217;239mproc\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239msomeOtherFunc\u001b[0m\u001b[38;2;248;248;242m(startingValue: \u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m): (\u001b[0m\u001b[3;38;2;102;217;239mstring\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m) =\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mvar\u001b[0m\u001b[38;2;248;248;242m num = startingValue\u001b[0m\n\u001b[38;2;248;248;242m  num += \u001b[0m\u001b[38;2;190;132;255m1\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m num > \u001b[0m\u001b[38;2;190;132;255m10\u001b[0m\u001b[38;2;248;248;242m * \u001b[0m\u001b[38;2;190;132;255m10\u001b[0m\u001b[38;2;248;248;242m * \u001b[0m\u001b[38;2;190;132;255m10\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mecho\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"Encountered an error\"\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;249;38;114mraise\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mnewException\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;166;226;46mValueError\u001b[0m\u001b[38;2;248;248;242m, \u001b[0m\u001b[38;2;230;219;116m\"Value was over 1000\"\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m  (\u001b[0m\u001b[38;2;230;219;116m\"Fizz\"\u001b[0m\u001b[38;2;248;248;242m, num)\u001b[0m\n\n\u001b[3;38;2;102;217;239mproc\u001b[0m\u001b[38;2;248;248;242m `+=\u001b[0m\u001b[38;2;102;217;239m`\u001b[0m\u001b[38;2;248;248;242m(a: \u001b[0m\u001b[38;2;249;38;114mvar\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;166;226;46mSomeStruct\u001b[0m\u001b[38;2;248;248;242m, b: \u001b[0m\u001b[3;38;2;166;226;46mSomeStruct\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mstring\u001b[0m\u001b[38;2;248;248;242m =\u001b[0m\n\u001b[38;2;248;248;242m  a.value.\u001b[0m\u001b[38;2;102;217;239madd\u001b[0m\u001b[38;2;248;248;242m(b.value)\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mreturn\u001b[0m\u001b[38;2;248;248;242m a.value\u001b[0m\n\n\u001b[38;2;249;38;114mecho\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239msomeFunc\u001b[0m\u001b[38;2;248;248;242m()\u001b[0m\n\u001b[38;2;249;38;114mecho\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;102;217;239msomeOtherFunc\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;190;132;255m123\u001b[0m\u001b[38;2;248;248;242m))\u001b[0m\n\u001b[38;2;249;38;114mdiscard\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239msomeFunc\u001b[0m\u001b[38;2;248;248;242m()\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/nim/test.nimble",
    "content": "\u001b[38;2;248;248;242mversion = \u001b[0m\u001b[38;2;230;219;116m\"0.1.0\"\u001b[0m\n\u001b[38;2;248;248;242mauthor = \u001b[0m\u001b[38;2;230;219;116m\"creator_name\"\u001b[0m\n\u001b[38;2;248;248;242mdescription = \u001b[0m\u001b[38;2;230;219;116m\"Tests nimble syntax highlighting\"\u001b[0m\n\u001b[38;2;248;248;242mlicense = \u001b[0m\u001b[38;2;230;219;116m\"custom\"\u001b[0m\n\n\u001b[38;2;248;248;242mbin = @[\u001b[0m\u001b[38;2;230;219;116m\"test\"\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\u001b[38;2;248;248;242msrcdir = \u001b[0m\u001b[38;2;230;219;116m\"src\"\u001b[0m\n\u001b[38;2;248;248;242minstallExt = @[\u001b[0m\u001b[38;2;230;219;116m\"nim\"\u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\n\n\u001b[38;2;117;113;94m# \u001b[0m\u001b[38;2;117;113;94mDependencies\u001b[0m\n\n\u001b[38;2;102;217;239mrequires\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"nim >= 1.6.2\"\u001b[0m\n\n\u001b[38;2;249;38;114mwhen\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mdefined\u001b[0m\u001b[38;2;248;248;242m(nimdistros)\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mimport\u001b[0m\u001b[38;2;248;248;242m distros\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114mif\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mdetectOs\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;166;226;46mUbuntu\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239mforeignDep\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"external_lib\"\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;249;38;114melse\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239mforeignDep\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"other_lib\"\u001b[0m\n\n\u001b[38;2;102;217;239mtask\u001b[0m\u001b[38;2;248;248;242m test, \u001b[0m\u001b[38;2;230;219;116m\"Runs a task called 'test'\"\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;102;217;239mwithDir\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"tests\"\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[38;2;102;217;239mexec\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"nim c -r tester\"\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/nix/test.nix",
    "content": "\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mnixpkgs\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m<nixpkgs>\u001b[0m\n\u001b[38;2;249;38;114m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mnixpkgs'\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;102;217;239mimport\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mnixpkgs\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m}\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mwith\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mnixpkgs'\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;117;113;94m# some comment\u001b[0m\n\u001b[3;38;2;253;151;31mstdenv\u001b[0m\u001b[38;2;249;38;114m.\u001b[0m\u001b[3;38;2;253;151;31mmkDerivation\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114mrec\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m{\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mpname\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116mtest\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mversion\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;230;219;116m0.2.3\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mname\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[3;38;2;228;46;112m${\u001b[0m\u001b[3;38;2;253;151;31mpname\u001b[0m\u001b[3;38;2;228;46;112m}\u001b[0m\u001b[38;2;230;219;116m-\u001b[0m\u001b[3;38;2;228;46;112m${\u001b[0m\u001b[3;38;2;253;151;31mversion\u001b[0m\u001b[3;38;2;228;46;112m}\u001b[0m\u001b[38;2;230;219;116m\"\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;166;226;46mbuildInputs\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m=\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m[\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;253;151;31mgzip\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;253;151;31mbzip2\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;253;151;31mpython27\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m]\u001b[0m\u001b[38;2;248;248;242m;\u001b[0m\n\u001b[38;2;248;248;242m}\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/orgmode/test.org",
    "content": "\u001b[38;2;253;151;31m*\u001b[0m\u001b[38;2;253;151;31m This is header\u001b[0m\n\u001b[38;2;253;151;31m**\u001b[0m\u001b[38;2;253;151;31m sub header\u001b[0m\n\u001b[38;2;253;151;31m***\u001b[0m\u001b[38;2;253;151;31m sub sub header\u001b[0m\n\u001b[38;2;253;151;31m****\u001b[0m\u001b[38;2;253;151;31m sub sub sub header\u001b[0m\n\n\u001b[38;2;253;151;31m*\u001b[0m\u001b[38;2;253;151;31m Table representation\u001b[0m\n\u001b[38;2;248;248;242m| Name    | Age |\u001b[0m\n\u001b[38;2;248;248;242m|---------+-----|\u001b[0m\n\u001b[38;2;248;248;242m| Milli   |  23 |\u001b[0m\n\u001b[38;2;248;248;242m| Vanilli |  22 |\u001b[0m\n\n\u001b[38;2;253;151;31m*\u001b[0m\u001b[38;2;253;151;31m Spreadsheets\u001b[0m\n\u001b[38;2;248;248;242m| n | n + 2 | n ^ 2 |\u001b[0m\n\u001b[38;2;248;248;242m|---+-------+-------|\u001b[0m\n\u001b[38;2;248;248;242m| 1 |     3 |     1 |\u001b[0m\n\u001b[38;2;248;248;242m| 2 |     4 |     4 |\u001b[0m\n\u001b[38;2;248;248;242m| 3 |     5 |     9 |\u001b[0m\n\u001b[38;2;248;248;242m#+\u001b[0m\u001b[38;2;249;38;114mTBLFM\u001b[0m\u001b[38;2;248;248;242m: \u001b[0m\u001b[38;2;230;219;116m$2=$1+2::$3=$1*$1\u001b[0m\n\n\u001b[38;2;253;151;31m*\u001b[0m\u001b[38;2;253;151;31m Source Code\u001b[0m\n\n\u001b[38;2;248;248;242m#+\u001b[0m\u001b[38;2;249;38;114mBEGIN_SRC\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255mrust\u001b[0m\n\u001b[38;2;174;129;255m  # recursive fibonacci\u001b[0m\n\u001b[38;2;174;129;255m  fn fib(n: u32) -> u32 {\u001b[0m\n\u001b[38;2;174;129;255m    match n {\u001b[0m\n\u001b[38;2;174;129;255m      0 | 1 => 1,\u001b[0m\n\u001b[38;2;174;129;255m      _ => fib(n - 1) + fib(n - 2),\u001b[0m\n\u001b[38;2;174;129;255m    }\u001b[0m\n\u001b[38;2;174;129;255m  }\u001b[0m\n\u001b[38;2;248;248;242m#+\u001b[0m\u001b[38;2;249;38;114mEND_SRC\u001b[0m\n\n\u001b[38;2;253;151;31m*\u001b[0m\u001b[38;2;253;151;31m ToDo and Checkboxes Example\u001b[0m\n\u001b[38;2;253;151;31m**\u001b[0m\u001b[38;2;253;151;31m \u001b[0m\u001b[38;2;249;38;114mDONE\u001b[0m\u001b[38;2;253;151;31m Write source example\u001b[0m\n\u001b[38;2;253;151;31m**\u001b[0m\u001b[38;2;253;151;31m \u001b[0m\u001b[38;2;249;38;114mTODO\u001b[0m\u001b[38;2;253;151;31m Generate highlighted example [1/3]\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m[X]\u001b[0m\u001b[38;2;248;248;242m run update script\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m[-]\u001b[0m\u001b[38;2;248;248;242m get code review\u001b[0m\n\u001b[38;2;248;248;242m   \u001b[0m\u001b[38;2;249;38;114m-\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m[ ]\u001b[0m\u001b[38;2;248;248;242m merge into master\u001b[0m\n\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/reStructuredText/reference.rst",
    "content": "\u001b[38;2;253;151;31m=====\u001b[0m\n\u001b[38;2;248;248;242mTitle\u001b[0m\n\u001b[38;2;253;151;31m=====\u001b[0m\n\n\u001b[38;2;248;248;242mSubtitle\u001b[0m\n\u001b[38;2;253;151;31m--------\u001b[0m\n\u001b[38;2;248;248;242mTitles are underlined (or over-\u001b[0m\n\u001b[38;2;248;248;242mand underlined) with a printing\u001b[0m\n\u001b[38;2;248;248;242mnonalphanumeric 7-bit ASCII\u001b[0m\n\u001b[38;2;248;248;242mcharacter. Recommended choices\u001b[0m\n\u001b[38;2;248;248;242mare \"\u001b[0m\u001b[38;2;248;248;242m``\u001b[0m\u001b[38;2;248;248;242m= - ` : ' \" ~ ^ _ * + # < >\u001b[0m\u001b[38;2;248;248;242m``\u001b[0m\u001b[38;2;248;248;242m\".\u001b[0m\n\u001b[38;2;248;248;242mThe underline/overline must be at\u001b[0m\n\u001b[38;2;248;248;242mleast as long as the title text.\u001b[0m\n\n\u001b[38;2;248;248;242mA lone top-level (sub)section\u001b[0m\n\u001b[38;2;248;248;242mis lifted up to be the document's\u001b[0m\n\u001b[38;2;248;248;242m(sub)title.\u001b[0m\n\n\u001b[38;2;248;248;242mInline syntaxes\u001b[0m\n\u001b[38;2;253;151;31m---------------\u001b[0m\n\n\u001b[3;38;2;228;46;112m*\u001b[0m\u001b[3;38;2;228;46;112memphasis\u001b[0m\u001b[3;38;2;228;46;112m*\u001b[0m\u001b[38;2;248;248;242m\t\u001b[0m\n\u001b[1;38;2;249;38;114m**\u001b[0m\u001b[1;38;2;249;38;114mstrong emphasis\u001b[0m\u001b[1;38;2;249;38;114m**\u001b[0m\n\u001b[38;2;248;248;242m`\u001b[0m\u001b[38;2;248;248;242minterpreted text\u001b[0m\u001b[38;2;248;248;242m`\u001b[0m\n\u001b[38;2;248;248;242m``\u001b[0m\u001b[38;2;248;248;242minline literal\u001b[0m\u001b[38;2;248;248;242m``\u001b[0m\n\u001b[38;2;248;248;242mhttp://docutils.sf.net/\u001b[0m\n\n\u001b[38;2;248;248;242mBullet lists\u001b[0m\n\u001b[38;2;253;151;31m------------\u001b[0m\n\n\u001b[38;2;248;248;242m- This is item 1\u001b[0m\n\u001b[38;2;248;248;242m- This is item 2\u001b[0m\n\n\u001b[38;2;248;248;242m- Bullets are \"-\", \"*\" or \"+\".\u001b[0m\n\u001b[38;2;248;248;242m  Continuing text must be aligned\u001b[0m\n\u001b[38;2;248;248;242m  after the bullet and whitespace.\u001b[0m\n\n\u001b[38;2;248;248;242mNote that a blank line is required\u001b[0m\n\u001b[38;2;248;248;242mbefore the first item and after the\u001b[0m\n\u001b[38;2;248;248;242mlast, but is optional between items.\u001b[0m\n\n\u001b[38;2;248;248;242mEnumerated lists\u001b[0m\n\u001b[38;2;253;151;31m----------------\u001b[0m\n\u001b[38;2;248;248;242m3. This is the first item\u001b[0m\n\u001b[38;2;248;248;242m4. This is the second item\u001b[0m\n\u001b[38;2;248;248;242m5. Enumerators are arabic numbers,\u001b[0m\n\u001b[38;2;248;248;242m   single letters, or roman numerals\u001b[0m\n\u001b[38;2;248;248;242m6. List items should be sequentially\u001b[0m\n\u001b[38;2;248;248;242m   numbered, but need not start at 1\u001b[0m\n\u001b[38;2;248;248;242m   (although not all formatters will\u001b[0m\n\u001b[38;2;248;248;242m   honour the first index).\u001b[0m\n\u001b[38;2;248;248;242m#. This item is auto-enumerated\u001b[0m\n\n\u001b[38;2;248;248;242mDefinition lists\u001b[0m\n\u001b[38;2;253;151;31m----------------\u001b[0m\n\n\u001b[38;2;248;248;242mwhat\u001b[0m\n\u001b[38;2;248;248;242m  Definition lists associate a term with\u001b[0m\n\u001b[38;2;248;248;242m  a definition.\u001b[0m\n\n\u001b[38;2;248;248;242mhow\u001b[0m\n\u001b[38;2;248;248;242m  The term is a one-line phrase, and the\u001b[0m\n\u001b[38;2;248;248;242m  definition is one or more paragraphs or\u001b[0m\n\u001b[38;2;248;248;242m  body elements, indented relative to the\u001b[0m\n\u001b[38;2;248;248;242m  term. Blank lines are not allowed\u001b[0m\n\u001b[38;2;248;248;242m  between term and definition.\u001b[0m\n\n\u001b[38;2;248;248;242mField lists\u001b[0m\n\u001b[38;2;253;151;31m-----------\u001b[0m\n\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;249;38;114mAuthors\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\n\u001b[38;2;248;248;242m    Tony J. (Tibs) Ibbs,\u001b[0m\n\u001b[38;2;248;248;242m    David Goodger\u001b[0m\n\u001b[38;2;248;248;242m    (and sundry other good-natured folks)\u001b[0m\n\n\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;249;38;114mVersion\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m 1.0 of 2001/08/08\u001b[0m\n\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;249;38;114mDedication\u001b[0m\u001b[38;2;249;38;114m:\u001b[0m\u001b[38;2;248;248;242m To my father.\u001b[0m\n\n\u001b[38;2;248;248;242mOptions lists\u001b[0m\n\u001b[38;2;253;151;31m-------------\u001b[0m\n\u001b[38;2;248;248;242m-a            command-line option \"a\"\u001b[0m\n\u001b[38;2;248;248;242m-b file       options can have arguments\u001b[0m\n\u001b[38;2;248;248;242m              and long descriptions\u001b[0m\n\u001b[38;2;248;248;242m--long        options can be long also\u001b[0m\n\u001b[38;2;248;248;242m--input=file  long options can also have\u001b[0m\n\u001b[38;2;248;248;242m              arguments\u001b[0m\n\u001b[38;2;248;248;242m/V            DOS/VMS-style options too\u001b[0m\n\n\u001b[38;2;248;248;242mLiteral Blocks\u001b[0m\n\u001b[38;2;253;151;31m--------------\u001b[0m\n\n\u001b[38;2;248;248;242mA paragraph containing only two colons\u001b[0m\n\u001b[38;2;248;248;242mindicates that the following indented\u001b[0m\n\u001b[38;2;248;248;242mor quoted text is a literal block.\u001b[0m\n\n\u001b[38;2;248;248;242m::\u001b[0m\n\n\u001b[38;2;248;248;242m  Whitespace, newlines, blank lines, and\u001b[0m\n\u001b[38;2;248;248;242m  all kinds of markup (like *this* or\u001b[0m\n\u001b[38;2;248;248;242m  \\this) is preserved by literal blocks.\u001b[0m\n\n\u001b[38;2;248;248;242m  The paragraph containing only '::'\u001b[0m\n\u001b[38;2;248;248;242m  will be omitted from the result.\u001b[0m\n\n\u001b[38;2;248;248;242mThe ``\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242m`` may be tacked onto the very\u001b[0m\n\u001b[38;2;248;248;242mend of any paragraph. The ``\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242m`` will be\u001b[0m\n\u001b[38;2;248;248;242momitted if it is preceded by whitespace.\u001b[0m\n\u001b[38;2;248;248;242mThe ``\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242m`` will be converted to a single\u001b[0m\n\u001b[38;2;248;248;242mcolon if preceded by text, like this\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\n\n\u001b[38;2;248;248;242m  It's very convenient to use this form.\u001b[0m\n\n\u001b[38;2;248;248;242mLiteral blocks end when text returns to\u001b[0m\n\u001b[38;2;248;248;242mthe preceding paragraph's indentation.\u001b[0m\n\u001b[38;2;248;248;242mThis means that something like this\u001b[0m\n\u001b[38;2;248;248;242mis possible\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\n\n\u001b[38;2;248;248;242m      We start here\u001b[0m\n\u001b[38;2;248;248;242m    and continue here\u001b[0m\n\u001b[38;2;248;248;242m  and end here.\u001b[0m\n\n\u001b[38;2;248;248;242mPer-line quoting can also be used on\u001b[0m\n\u001b[38;2;248;248;242munindented literal blocks\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\n\n\u001b[38;2;248;248;242m> Useful for quotes from email and\u001b[0m\n\u001b[38;2;248;248;242m> for Haskell literate programming.\u001b[0m\n\n\u001b[38;2;248;248;242mLine blocks\u001b[0m\n\u001b[38;2;253;151;31m-----------\u001b[0m\n\n\u001b[38;2;248;248;242mA paragraph containing only two colons\u001b[0m\n\u001b[38;2;248;248;242mindicates that the following indented\u001b[0m\n\u001b[38;2;248;248;242mor quoted text is a literal block.\u001b[0m\n\n\u001b[38;2;248;248;242m::\u001b[0m\n\n\u001b[38;2;248;248;242m  Whitespace, newlines, blank lines, and\u001b[0m\n\u001b[38;2;248;248;242m  all kinds of markup (like *this* or\u001b[0m\n\u001b[38;2;248;248;242m  \\this) is preserved by literal blocks.\u001b[0m\n\n\u001b[38;2;248;248;242m  The paragraph containing only '::'\u001b[0m\n\u001b[38;2;248;248;242m  will be omitted from the result.\u001b[0m\n\n\u001b[38;2;248;248;242mThe ``\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242m`` may be tacked onto the very\u001b[0m\n\u001b[38;2;248;248;242mend of any paragraph. The ``\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242m`` will be\u001b[0m\n\u001b[38;2;248;248;242momitted if it is preceded by whitespace.\u001b[0m\n\u001b[38;2;248;248;242mThe ``\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242m`` will be converted to a single\u001b[0m\n\u001b[38;2;248;248;242mcolon if preceded by text, like this\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\n\n\u001b[38;2;248;248;242m  It's very convenient to use this form.\u001b[0m\n\n\u001b[38;2;248;248;242mLiteral blocks end when text returns to\u001b[0m\n\u001b[38;2;248;248;242mthe preceding paragraph's indentation.\u001b[0m\n\u001b[38;2;248;248;242mThis means that something like this\u001b[0m\n\u001b[38;2;248;248;242mis possible\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\n\n\u001b[38;2;248;248;242m      We start here\u001b[0m\n\u001b[38;2;248;248;242m    and continue here\u001b[0m\n\u001b[38;2;248;248;242m  and end here.\u001b[0m\n\n\u001b[38;2;248;248;242mPer-line quoting can also be used on\u001b[0m\n\u001b[38;2;248;248;242munindented literal blocks\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\n\n\u001b[38;2;248;248;242m> Useful for quotes from email and\u001b[0m\n\u001b[38;2;248;248;242m> for Haskell literate programming.\u001b[0m\n\n\u001b[38;2;248;248;242mBlock quotes\u001b[0m\n\u001b[38;2;253;151;31m------------\u001b[0m\n\n\u001b[38;2;248;248;242mBlock quotes are just:\u001b[0m\n\u001b[38;2;248;248;242m    Indented paragraphs,\u001b[0m\n\n\u001b[38;2;248;248;242m        and they may nest.\u001b[0m\n\n\u001b[38;2;248;248;242mDoctest blocks\u001b[0m\n\u001b[38;2;253;151;31m--------------\u001b[0m\n\u001b[38;2;248;248;242mDoctest blocks are interactive\u001b[0m\n\u001b[38;2;248;248;242mPython sessions. They begin with\u001b[0m\n\u001b[38;2;248;248;242m\"\u001b[0m\u001b[38;2;248;248;242m``\u001b[0m\u001b[38;2;248;248;242m>>>\u001b[0m\u001b[38;2;248;248;242m``\u001b[0m\u001b[38;2;248;248;242m\" and end with a blank line.\u001b[0m\n\n\u001b[38;2;248;248;242m>>> print \"This is a doctest block.\"\u001b[0m\n\u001b[38;2;248;248;242mThis is a doctest block.\u001b[0m\n\n\u001b[38;2;248;248;242mTables\u001b[0m\n\u001b[38;2;253;151;31m------\u001b[0m\n\n\u001b[38;2;248;248;242mGrid table:\u001b[0m\n\n\u001b[38;2;248;248;242m+------------+------------+-----------+\u001b[0m\n\u001b[4;38;2;166;226;46m|\u001b[0m\u001b[4;38;2;166;226;46m Header 1   |\u001b[0m\u001b[38;2;248;248;242m Header 2   \u001b[0m\u001b[4;38;2;166;226;46m|\u001b[0m\u001b[4;38;2;166;226;46m Header 3  |\u001b[0m\n\u001b[38;2;248;248;242m+============+============+===========+\u001b[0m\n\u001b[4;38;2;166;226;46m|\u001b[0m\u001b[4;38;2;166;226;46m body row 1 |\u001b[0m\u001b[38;2;248;248;242m column 2   \u001b[0m\u001b[4;38;2;166;226;46m|\u001b[0m\u001b[4;38;2;166;226;46m column 3  |\u001b[0m\n\u001b[38;2;248;248;242m+------------+------------+-----------+\u001b[0m\n\u001b[4;38;2;166;226;46m|\u001b[0m\u001b[4;38;2;166;226;46m body row 2 |\u001b[0m\u001b[38;2;248;248;242m Cells may span columns.|\u001b[0m\n\u001b[38;2;248;248;242m+------------+------------+-----------+\u001b[0m\n\u001b[4;38;2;166;226;46m|\u001b[0m\u001b[4;38;2;166;226;46m body row 3 |\u001b[0m\u001b[38;2;248;248;242m Cells may  \u001b[0m\u001b[4;38;2;166;226;46m|\u001b[0m\u001b[4;38;2;166;226;46m - Cells   |\u001b[0m\n\u001b[38;2;248;248;242m+------------+\u001b[0m\u001b[38;2;248;248;242m span rows. \u001b[0m\u001b[4;38;2;166;226;46m|\u001b[0m\u001b[4;38;2;166;226;46m - contain |\u001b[0m\n\u001b[4;38;2;166;226;46m|\u001b[0m\u001b[4;38;2;166;226;46m body row 4 |\u001b[0m\u001b[38;2;248;248;242m            \u001b[0m\u001b[4;38;2;166;226;46m|\u001b[0m\u001b[4;38;2;166;226;46m - blocks. |\u001b[0m\n\u001b[38;2;248;248;242m+------------+------------+-----------+\u001b[0m\n\n\u001b[38;2;248;248;242mSimple table:\u001b[0m\n\n\u001b[38;2;248;248;242m=====  =====  ======\u001b[0m\n\u001b[38;2;248;248;242m   Inputs     Output\u001b[0m\n\u001b[38;2;248;248;242m------------  ------\u001b[0m\n\u001b[38;2;248;248;242m  A      B    A or B\u001b[0m\n\u001b[38;2;248;248;242m=====  =====  ======\u001b[0m\n\u001b[38;2;248;248;242mFalse  False  False\u001b[0m\n\u001b[38;2;248;248;242mTrue   False  True\u001b[0m\n\u001b[38;2;248;248;242mFalse  True   True\u001b[0m\n\u001b[38;2;248;248;242mTrue   True   True\u001b[0m\n\u001b[38;2;248;248;242m=====  =====  ======\u001b[0m\n\n\u001b[38;2;248;248;242mTransitions\u001b[0m\n\u001b[38;2;253;151;31m-----------\u001b[0m\n\n\u001b[38;2;248;248;242mA transition marker is a horizontal line\u001b[0m\n\u001b[38;2;248;248;242mof 4 or more repeated punctuation\u001b[0m\n\u001b[38;2;248;248;242mcharacters.\u001b[0m\n\n\u001b[38;2;253;151;31m------------\u001b[0m\n\n\u001b[38;2;248;248;242mA transition should not begin or end a\u001b[0m\n\u001b[38;2;248;248;242msection or document, nor should two\u001b[0m\n\u001b[38;2;248;248;242mtransitions be immediately adjacent.\u001b[0m\n\n\u001b[38;2;248;248;242mFootnotes\u001b[0m\n\u001b[38;2;253;151;31m---------\u001b[0m\n\n\u001b[38;2;248;248;242mFootnote references, like \u001b[0m\u001b[38;2;190;132;255m[\u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;190;132;255m]\u001b[0m\u001b[38;2;248;248;242m_\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242mNote that footnotes may get\u001b[0m\n\u001b[38;2;248;248;242mrearranged, e.g., to the bottom of\u001b[0m\n\u001b[38;2;248;248;242mthe \"page\".\u001b[0m\n\u001b[38;2;248;248;242m..\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m[\u001b[0m\u001b[38;2;190;132;255m5\u001b[0m\u001b[38;2;190;132;255m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mA numerical footnote. Note there's no colon after the ``]``.\u001b[0m\n\n\u001b[38;2;248;248;242mAutonumbered footnotes are\u001b[0m\n\u001b[38;2;248;248;242mpossible, like using \u001b[0m\u001b[38;2;190;132;255m[#\u001b[0m\u001b[38;2;190;132;255m]\u001b[0m\u001b[38;2;248;248;242m_\u001b[0m\u001b[38;2;248;248;242m and \u001b[0m\u001b[38;2;190;132;255m[#\u001b[0m\u001b[38;2;190;132;255m]\u001b[0m\u001b[38;2;248;248;242m_\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m..\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m[\u001b[0m\u001b[38;2;190;132;255m#\u001b[0m\u001b[38;2;190;132;255m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mThis is the first one.\u001b[0m\n\u001b[38;2;248;248;242m..\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m[\u001b[0m\u001b[38;2;190;132;255m#\u001b[0m\u001b[38;2;190;132;255m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mThis is the second one.\u001b[0m\n\n\u001b[38;2;248;248;242mThey may be assigned 'autonumber\u001b[0m\n\u001b[38;2;248;248;242mlabels' - for instance,\u001b[0m\n\u001b[38;2;190;132;255m[#\u001b[0m\u001b[38;2;190;132;255mfourth\u001b[0m\u001b[38;2;190;132;255m]\u001b[0m\u001b[38;2;248;248;242m_\u001b[0m\u001b[38;2;248;248;242m and \u001b[0m\u001b[38;2;190;132;255m[#\u001b[0m\u001b[38;2;190;132;255mthird\u001b[0m\u001b[38;2;190;132;255m]\u001b[0m\u001b[38;2;248;248;242m_\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\n\u001b[38;2;248;248;242m..\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m[\u001b[0m\u001b[38;2;190;132;255m#\u001b[0m\u001b[38;2;190;132;255mthird\u001b[0m\u001b[38;2;190;132;255m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116ma.k.a. third_\u001b[0m\n\n\u001b[38;2;248;248;242m..\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m[\u001b[0m\u001b[38;2;190;132;255m#\u001b[0m\u001b[38;2;190;132;255mfourth\u001b[0m\u001b[38;2;190;132;255m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116ma.k.a. fourth_\u001b[0m\n\n\u001b[38;2;248;248;242mAuto-symbol footnotes are also\u001b[0m\n\u001b[38;2;248;248;242mpossible, like this: \u001b[0m\u001b[38;2;190;132;255m[\u001b[0m\u001b[38;2;190;132;255m*\u001b[0m\u001b[38;2;190;132;255m]\u001b[0m\u001b[38;2;248;248;242m_\u001b[0m\u001b[38;2;248;248;242m and \u001b[0m\u001b[38;2;190;132;255m[\u001b[0m\u001b[38;2;190;132;255m*\u001b[0m\u001b[38;2;190;132;255m]\u001b[0m\u001b[38;2;248;248;242m_\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m..\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m[\u001b[0m\u001b[38;2;190;132;255m*\u001b[0m\u001b[38;2;190;132;255m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mThis is the first one.\u001b[0m\n\u001b[38;2;248;248;242m..\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m[\u001b[0m\u001b[38;2;190;132;255m*\u001b[0m\u001b[38;2;190;132;255m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mThis is the second one.\u001b[0m\n\n\u001b[38;2;248;248;242mCitations\u001b[0m\n\u001b[38;2;253;151;31m---------\u001b[0m\n\n\u001b[38;2;248;248;242mCitation references, like \u001b[0m\u001b[38;2;190;132;255m[\u001b[0m\u001b[38;2;190;132;255mCIT2002\u001b[0m\u001b[38;2;190;132;255m]\u001b[0m\u001b[38;2;248;248;242m_\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242mNote that citations may get\u001b[0m\n\u001b[38;2;248;248;242mrearranged, e.g., to the bottom of\u001b[0m\n\u001b[38;2;248;248;242mthe \"page\".\u001b[0m\n\n\u001b[38;2;248;248;242m..\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m[\u001b[0m\u001b[38;2;190;132;255mCIT2002\u001b[0m\u001b[38;2;190;132;255m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mA citation (as often used in journals).\u001b[0m\n\n\u001b[38;2;248;248;242mCitation labels contain alphanumerics,\u001b[0m\n\u001b[38;2;248;248;242munderlines, hyphens and fullstops.\u001b[0m\n\u001b[38;2;248;248;242mCase is not significant.\u001b[0m\n\n\u001b[38;2;248;248;242mGiven a citation like \u001b[0m\u001b[38;2;190;132;255m[\u001b[0m\u001b[38;2;190;132;255mthis\u001b[0m\u001b[38;2;190;132;255m]\u001b[0m\u001b[38;2;248;248;242m_\u001b[0m\u001b[38;2;248;248;242m, one\u001b[0m\n\u001b[38;2;248;248;242mcan also refer to it like \u001b[0m\u001b[38;2;230;219;116mthis\u001b[0m\u001b[38;2;248;248;242m_\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\n\u001b[38;2;248;248;242m..\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;190;132;255m[\u001b[0m\u001b[38;2;190;132;255mthis\u001b[0m\u001b[38;2;190;132;255m]\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mhere.\u001b[0m\n\n\u001b[38;2;248;248;242mHyperlink Targets\u001b[0m\n\u001b[38;2;253;151;31m-----------------\u001b[0m\n\n\u001b[38;2;248;248;242mExternal hyperlinks, like \u001b[0m\u001b[38;2;230;219;116mPython\u001b[0m\u001b[38;2;248;248;242m_\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m..\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m_\u001b[0m\u001b[38;2;230;219;116mPython\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;166;226;46mhttp://www.python.org/\u001b[0m\n\n\u001b[38;2;248;248;242mExternal hyperlinks, like `Python\u001b[0m\n\u001b[38;2;248;248;242m<http://www.python.org/>`_.\u001b[0m\n\n\u001b[38;2;248;248;242mInternal crossreferences, like \u001b[0m\u001b[38;2;230;219;116mexample\u001b[0m\u001b[38;2;248;248;242m_\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m..\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m_\u001b[0m\u001b[38;2;230;219;116mexample\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\n\n\u001b[38;2;248;248;242mThis is an example crossreference target.\u001b[0m\n\n\u001b[38;2;230;219;116mPython\u001b[0m\u001b[38;2;248;248;242m_\u001b[0m\u001b[38;2;248;248;242m is `my favourite\u001b[0m\n\u001b[38;2;248;248;242mprogramming language`\u001b[0m\u001b[38;2;230;219;116m_\u001b[0m\u001b[38;2;248;248;242m_\u001b[0m\u001b[38;2;248;248;242m.\u001b[0m\n\u001b[38;2;248;248;242m..\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m_\u001b[0m\u001b[38;2;230;219;116mPython\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[4;38;2;166;226;46mhttp://www.python.org/\u001b[0m\n\n\u001b[38;2;230;219;116m_\u001b[0m\u001b[38;2;248;248;242m_\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;230;219;116mPython\u001b[0m\u001b[38;2;248;248;242m_\u001b[0m\n\n\u001b[38;2;248;248;242mTitles are targets, too\u001b[0m\n\u001b[38;2;253;151;31m=======================\u001b[0m\n\u001b[38;2;248;248;242mImplict references, like `Titles are\u001b[0m\n\u001b[38;2;248;248;242mtargets, too`_.\u001b[0m\n\n\u001b[38;2;248;248;242mDirectives\u001b[0m\n\u001b[38;2;253;151;31m----------\u001b[0m\n\n\u001b[38;2;248;248;242mFor instance:\u001b[0m\n\u001b[38;2;248;248;242m..\u001b[0m\u001b[38;2;248;248;242m image\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242m images/ball1.gif\u001b[0m\n\n\u001b[38;2;248;248;242mThe \u001b[0m\u001b[4;38;2;166;226;46m|\u001b[0m\u001b[4;38;2;166;226;46mbiohazard|\u001b[0m\u001b[38;2;248;248;242m symbol must be used on containers used to dispose of medical waste.\u001b[0m\n\u001b[38;2;248;248;242m.. |biohazard| image\u001b[0m\u001b[38;2;248;248;242m::\u001b[0m\u001b[38;2;248;248;242m biohazard.png\u001b[0m\n\n\u001b[38;2;248;248;242mComments\u001b[0m\n\u001b[38;2;253;151;31m--------\u001b[0m\n\n\u001b[38;2;117;113;94m..\u001b[0m\u001b[38;2;117;113;94m This text will not be shown\u001b[0m\n\u001b[38;2;117;113;94m   (but, for instance, in HTML might be\u001b[0m\n\u001b[38;2;117;113;94m   rendered as an HTML comment)\u001b[0m\n\n\u001b[38;2;248;248;242mAn \"empty comment\" does not\u001b[0m\n\u001b[38;2;248;248;242mconsume following blocks.\u001b[0m\n\u001b[38;2;248;248;242m(An empty comment is \"..\" with\u001b[0m\n\u001b[38;2;248;248;242mblank lines before and after.)\u001b[0m\n\u001b[38;2;117;113;94m..\u001b[0m\n\n\u001b[38;2;117;113;94m        So this block is not \"lost\",\u001b[0m\n\u001b[38;2;117;113;94m        despite its indentation.\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/resolv.conf/resolv.conf",
    "content": "\u001b[38;2;117;113;94m# A comment\u001b[0m\n\u001b[38;2;249;38;114mdomain\u001b[0m\u001b[38;2;248;248;242m example.com\u001b[0m\n\u001b[38;2;249;38;114mnameserver\u001b[0m\u001b[38;2;248;248;242m 192.168.123.123\u001b[0m\n\u001b[38;2;249;38;114mnameserver\u001b[0m\u001b[38;2;248;248;242m aa00::aaaa:0000:1234:abcd\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/highlighted/varlink/org.varlink.certification.varlink",
    "content": "\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Interface to test varlink implementations against.\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m First you write a varlink client calling:\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Start, Test01, Test02, …, Test09, End\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m The return value of the previous call should be the argument of the next call.\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Then you test this client against well known servers like python or rust from\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m https://github.com/varlink/\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Next you write a varlink server providing the same service as the well known ones.\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m Now run your client against it and run well known clients like python or rust\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m from https://github.com/varlink/ against your server. If all works out, then\u001b[0m\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m your new language bindings should be varlink certified.\u001b[0m\n\u001b[3;38;2;102;217;239minterface\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46morg.varlink.certification\u001b[0m\n\n\u001b[3;38;2;102;217;239mtype\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mInterface\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;253;151;31mfoo\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;249;38;114m[]\u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;249;38;114m[string]\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mfoo\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mbar\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mbaz\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;253;151;31manon\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mfoo\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mbool\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mbar\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mbool\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[3;38;2;102;217;239mtype\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mMyType\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;253;151;31mobject\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mobject\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;253;151;31menum\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mone\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mtwo\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mthree\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;253;151;31mstruct\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mfirst\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31msecond\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mstring\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;253;151;31marray\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m[]\u001b[0m\u001b[3;38;2;102;217;239mstring\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;253;151;31mdictionary\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m[string]\u001b[0m\u001b[3;38;2;102;217;239mstring\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;253;151;31mstringset\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m[string]\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;253;151;31mnullable\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[3;38;2;102;217;239mstring\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;253;151;31mnullable_array_struct\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m?\u001b[0m\u001b[38;2;249;38;114m[]\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mfirst\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31msecond\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mstring\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;253;151;31minterface\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mInterface\u001b[0m\n\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[3;38;2;102;217;239mmethod\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mStart\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-> \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mclient_id\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mstring\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[3;38;2;102;217;239mmethod\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTest01\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mclient_id\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mstring\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-> \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mbool\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mbool\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[3;38;2;102;217;239mmethod\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTest02\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mclient_id\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mstring\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mbool\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mbool\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-> \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mint\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[3;38;2;102;217;239mmethod\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTest03\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mclient_id\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mstring\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mint\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-> \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mfloat\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mfloat\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[3;38;2;102;217;239mmethod\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTest04\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mclient_id\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mstring\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mfloat\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mfloat\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-> \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mstring\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mstring\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[3;38;2;102;217;239mmethod\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTest05\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mclient_id\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mstring\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mstring\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mstring\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-> \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;253;151;31mbool\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mbool\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;253;151;31mint\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;253;151;31mfloat\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mfloat\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;253;151;31mstring\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mstring\u001b[0m\n\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[3;38;2;102;217;239mmethod\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTest06\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;253;151;31mclient_id\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mstring\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;253;151;31mbool\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mbool\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;253;151;31mint\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;253;151;31mfloat\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mfloat\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;253;151;31mstring\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mstring\u001b[0m\n\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-> \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;253;151;31mstruct\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;253;151;31mbool\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mbool\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;253;151;31mint\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;253;151;31mfloat\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mfloat\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;253;151;31mstring\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mstring\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[3;38;2;102;217;239mmethod\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTest07\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;253;151;31mclient_id\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mstring\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[3;38;2;253;151;31mstruct\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;253;151;31mbool\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mbool\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;253;151;31mint\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mint\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;253;151;31mfloat\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mfloat\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\n\u001b[38;2;248;248;242m    \u001b[0m\u001b[3;38;2;253;151;31mstring\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mstring\u001b[0m\n\u001b[38;2;248;248;242m  \u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-> \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mmap\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m[string]\u001b[0m\u001b[3;38;2;102;217;239mstring\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[3;38;2;102;217;239mmethod\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTest08\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mclient_id\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mstring\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mmap\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m[string]\u001b[0m\u001b[3;38;2;102;217;239mstring\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-> \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mset\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m[string]\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[3;38;2;102;217;239mmethod\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTest09\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mclient_id\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mstring\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mset\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m[string]\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-> \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mmytype\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mMyType\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m returns more than one reply with \"continues\"\u001b[0m\n\u001b[3;38;2;102;217;239mmethod\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTest10\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mclient_id\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mstring\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mmytype\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mMyType\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-> \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mstring\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mstring\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[38;2;117;113;94m#\u001b[0m\u001b[38;2;117;113;94m must be called as \"oneway\"\u001b[0m\n\u001b[3;38;2;102;217;239mmethod\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mTest11\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mclient_id\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mstring\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mlast_more_replies\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m[]\u001b[0m\u001b[3;38;2;102;217;239mstring\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-> \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[3;38;2;102;217;239mmethod\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mEnd\u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mclient_id\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mstring\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;249;38;114m-> \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mall_ok\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mbool\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\n\u001b[3;38;2;102;217;239merror\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mClientIdError\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n\u001b[3;38;2;102;217;239merror\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;166;226;46mCertificationError\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[38;2;248;248;242m(\u001b[0m\u001b[3;38;2;253;151;31mwants\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mobject\u001b[0m\u001b[38;2;248;248;242m,\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;253;151;31mgot\u001b[0m\u001b[38;2;248;248;242m:\u001b[0m\u001b[38;2;248;248;242m \u001b[0m\u001b[3;38;2;102;217;239mobject\u001b[0m\u001b[38;2;248;248;242m)\u001b[0m\n"
  },
  {
    "path": "tests/syntax-tests/regression_test.sh",
    "content": "#!/usr/bin/env bash\n\nset -eou pipefail\n\nscript_directory=\"$( cd \"$( dirname \"${BASH_SOURCE[0]}\" )\" >/dev/null 2>&1 && pwd )\"\n\noutput_directory=$(mktemp -d)\n\n\"$script_directory\"/create_highlighted_versions.py --output=\"$output_directory\"\n\necho\n\n\"$script_directory\"/compare_highlighted_versions.py \\\n    \"$script_directory/highlighted\" \\\n    \"$output_directory\"\n"
  },
  {
    "path": "tests/syntax-tests/source/ARM Assembly/test.S",
    "content": ".data\n\n.balign 4\nred: .word 0\ngreen: .word 0\nblue: .word 0\n\n.text\n.global grayscale\n.func grayscale\n\ngrayscale:\nassign:\n  /* some comment */\n  ldr ip, addr_red\n  str r3, [ip]\n  ldr ip, addr_green\n  ldmfd r13!, {r3}\n  str r3, [ip]\n  ldr ip, addr_blue\n  ldmfd r13!, {r3}\n  str r3, [ip]\n  stmfd r13!, {r4-r8}\n  ldr ip, addr_red\n  ldr r3, [ip]\n  ldr ip, addr_green\n  ldr r4, [ip]\n  ldr ip, addr_blue\n  ldr r5, [ip] /* another comment */\ngrayscale_loop:\n  ldrb r6, [r1]\n  mul r6, r3, r6\n  add r1, r1, #1\n  ldrb r7, [r1]\n  mul r7, r4, r7\n  add r1, r1, #1\n  ldrb r8, [r1]\n  mul r8, r5, r8\n  add r1, r1, #1\n  add r6, r6, r7\n  add r6, r6, r8\n  asr r6, r6, #8\n  str r6, [r2]\n  add r2, r2, #1\n  sub r0, r0, #1\n  cmp r0, #0\n  bne grayscale_loop\n  ldmfd r13!, {r4-r8}\n  stmfd r13!, {r0-r1}\n  bx lr\n\naddr_red: .word red\naddr_green: .word green\naddr_blue: .word blue\n\n"
  },
  {
    "path": "tests/syntax-tests/source/ASP/test.asp",
    "content": "<html>\n<body>\n<!-- #include file =\"headers\\header.inc\" -->\n\n<%\nFor i = 0 To 5\nResponse.Write(\"The number is \" & i & \"<br />\")\nNext\n%>\n\n<%\nResponse.Write(\"Hello World!\")\n%>\n\n<%\nDim x(2,2)\nx(0,0)=\"Volvo\"\nx(0,1)=\"BMW\"\nx(0,2)=\"Ford\"\nx(1,0)=\"Apple\"\nx(1,1)=\"Orange\"\nx(1,2)=\"Banana\"\nx(2,0)=\"Coke\"\nx(2,1)=\"Pepsi\"\nx(2,2)=\"Sprite\"\nfor i=0 to 2\nresponse.write(\"<p>\")\nfor j=0 to 2\nresponse.write(x(i,j) & \"<br />\")\nnext\nresponse.write(\"</p>\")\nnext\n%>\n\n</body>\n</html>\n"
  },
  {
    "path": "tests/syntax-tests/source/AWK/quicksort.awk",
    "content": "# quicksort.awk --- Quicksort algorithm, with user-supplied\n#                   comparison function\n#\n# Arnold Robbins, arnold@skeeve.com, Public Domain\n# January 2009\n\n\n# quicksort --- C.A.R. Hoare's quicksort algorithm. See Wikipedia\n#               or almost any algorithms or computer science text.\n#\n# Adapted from K&R-II, page 110\n\nfunction quicksort(data, left, right, less_than,    i, last)\n{\n    if (left >= right)  # do nothing if array contains fewer\n        return          # than two elements\n\n    quicksort_swap(data, left, int((left + right) / 2))\n    last = left\n    for (i = left + 1; i <= right; i++)\n        if (@less_than(data[i], data[left]))\n            quicksort_swap(data, ++last, i)\n    quicksort_swap(data, left, last)\n    quicksort(data, left, last - 1, less_than)\n    quicksort(data, last + 1, right, less_than)\n}\n\n# quicksort_swap --- helper function for quicksort, should really be inline\n\nfunction quicksort_swap(data, i, j,      temp)\n{\n    temp = data[i]\n    data[i] = data[j]\n    data[j] = temp\n}\n"
  },
  {
    "path": "tests/syntax-tests/source/ActionScript/test.as",
    "content": "import flash.events.*;\nimport flash.events.MouseEvent;\n\npackage TestSyntax {\n    public class TestSyntax  extends flash.display.Sprite {\n\n        public static const TEST_CONSTANT:Number = 33.333;\n\n        var testAttribute:int = 1;\n\n        public namespace TestNamespace;\n        TestNamespace function Method2():void { }\n\n        /**\n         * Multi-line comment\n         */\n        override public function set x(value:Number):void\n        {\n            super.x = Math.round(value);\n        }\n\n        /**\n         * Actual multi-line comment\n         * Takes up multiple lines\n         */\n        override public function set y(value:Number):void\n        {\n            super.y = 0;\n        }\n\n        public function testFunction() {\n            var test:String = 'hello';\n\n            // arrays\n            var testArray:Array = [\"a\", \"b\", \"c\", \"d\"];\n            for (var i:uint = 0; i < testArray.length; i++)\n                trace(testArray[i]);\n\n            // objects\n            var testObject:Object = {foo: 20, bar: 40};\n            for (var key:String in testObject) {\n                trace(testObject[key]);\n            }\n            for each (var objectValue:int in testObject) {\n                trace(objectValue);\n            }\n\n            // dynamic variables\n            var testDynamic:*;\n            testDynamic = 75;\n            testDynamic = \"Seventy-five\";\n\n            // regex\n            var testRegExp:RegExp = /foo-\\d+/i;\n\n            // XML\n            var testXML:XML =\n<employee>\n  <firstName>Harold</firstName>\n  <lastName>Webster</lastName>\n</employee>;\n        }\n\n        private function anotherFunc(a:int, arg2:uint, arg3:Function, ... args) {\n\n        }\n\n        [Embed(source=\"sound1.mp3\")] public var soundCls:Class;\n        public function SoundAssetExample()\n        {\n            var mySound:SoundAsset = new soundCls() as SoundAsset;\n            var sndChannel:SoundChannel = mySound.play();\n        }\n    }\n}\n"
  },
  {
    "path": "tests/syntax-tests/source/Ada/LICENSE.md",
    "content": "The files `click.adb`, `click.ads` and `click.gpr` have been added from https://github.com/dkm/click under the following license:\n\nMIT License\n\nCopyright (c) 2022 Marc Poulhiès <dkm@kataplop.net>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "tests/syntax-tests/source/Ada/click.adb",
    "content": "with Chests.Ring_Buffers;\nwith USB.Device.HID.Keyboard;\n\npackage body Click is\n   ----------------\n   --  DEBOUNCE  --\n   ----------------\n\n   --  Ideally, in a separate package.\n\n   --  should be [], but not fixed yet in GCC 11.\n   Current_Status : Key_Matrix := [others => [others => False]];\n   New_Status : Key_Matrix := [others => [others => False]];\n   Since : Natural := 0;\n   --   Nb_Bounce : Natural := 5;\n\n   function Update (NewS : Key_Matrix) return Boolean is\n   begin\n      --  The new state is the same as the current stable state => Do nothing.\n      if Current_Status = NewS then\n         Since := 0;\n         return False;\n      end if;\n\n      if New_Status /= NewS then\n         --  The new state differs from the previous\n         --  new state (bouncing) => reset\n         New_Status := NewS;\n         Since := 1;\n      else\n         --  The new state hasn't changed since last\n         --  update => towards stabilization.\n         Since := Since + 1;\n      end if;\n\n      if Since > Nb_Bounce then\n         declare\n            Tmp : constant Key_Matrix := Current_Status;\n         begin\n            --  New state has been stable enough.\n            --  Latch it and notifies caller.\n            Current_Status := New_Status;\n            New_Status := Tmp;\n            Since := 0;\n         end;\n\n         return True;\n      else\n         --  Not there yet\n         return False;\n      end if;\n   end Update;\n\n   procedure Get_Matrix;\n   --  Could use := []; but GNAT 12 has a bug (fixed in upcoming 13)\n   Read_Status : Key_Matrix := [others => [others => False]];\n\n   function Get_Events return Events is\n      Num_Evt : Natural := 0;\n      New_S : Key_Matrix renames Read_Status;\n   begin\n      Get_Matrix;\n      if Update (New_S) then\n         for I in Current_Status'Range (1) loop\n            for J in Current_Status'Range (2) loop\n               if (not New_Status (I, J) and then Current_Status (I, J))\n                 or else (New_Status (I, J) and then not Current_Status (I, J))\n               then\n                  Num_Evt := Num_Evt + 1;\n               end if;\n            end loop;\n         end loop;\n\n         declare\n            Evts : Events (Natural range 1 .. Num_Evt);\n            Cursor : Natural range 1 .. Num_Evt + 1 := 1;\n         begin\n            for I in Current_Status'Range (1) loop\n               for J in Current_Status'Range (2) loop\n                  if not New_Status (I, J)\n                    and then Current_Status (I, J)\n                  then\n                     --  Pressing I, J\n                     Evts (Cursor) := [\n                                       Evt => Press,\n                                       Col => I,\n                                       Row => J\n                                      ];\n                     Cursor := Cursor + 1;\n                  elsif New_Status (I, J)\n                    and then not Current_Status (I, J)\n                  then\n                     --  Release I, J\n                     Evts (Cursor) := [\n                                       Evt => Release,\n                                       Col => I,\n                                       Row => J\n                                      ];\n                     Cursor := Cursor + 1;\n                  end if;\n               end loop;\n            end loop;\n            return Evts;\n         end;\n      end if;\n\n      return [];\n   end Get_Events;\n\n   procedure Get_Matrix  is -- return Key_Matrix is\n   begin\n      for Row in Keys.Rows'Range loop\n         Keys.Rows (Row).Clear;\n\n         for Col in Keys.Cols'Range loop\n            Read_Status (Col, Row) := not Keys.Cols (Col).Set;\n         end loop;\n         Keys.Rows (Row).Set;\n      end loop;\n   end Get_Matrix;\n\n   --  End of DEBOUNCE\n\n   --------------\n   --  Layout  --\n   --------------\n\n   package Events_Ring_Buffers is new Chests.Ring_Buffers\n     (Element_Type => Event,\n      Capacity     => 16);\n\n   Queued_Events : Events_Ring_Buffers.Ring_Buffer;\n\n   type Statet is (Normal_Key, Layer_Mod, None);\n   type State is record\n      Typ : Statet;\n      Code : Key_Code_T;\n      Layer_Value : Natural;\n      --  Col : ColR;\n      --  Row : RowR;\n   end record;\n\n   type State_Array is array (ColR, RowR) of State;\n   States : State_Array := [others => [others => (Typ => None, Code => No, Layer_Value => 0)]];\n\n   function Kw (Code : Key_Code_T) return Action is\n   begin\n      return (T => Key, C => Code, L => 0);\n   end Kw;\n\n   function Lw (V : Natural) return Action is\n   begin\n      return (T => Layer, C => No, L => V);\n   end Lw;\n\n   --  FIXME: hardcoded max number of events\n   subtype Events_Range is Natural range 0 .. 60;\n   type Array_Of_Reg_Events is array (Events_Range) of Event;\n\n   Stamp : Natural := 0;\n\n   procedure Register_Events (L : Layout; Es : Events) is\n   begin\n      Stamp := Stamp + 1;\n\n      Log (\"Reg events: \" & Stamp'Image);\n      Log (Es'Length'Image);\n      for E of Es loop\n         declare\n         begin\n            if Events_Ring_Buffers.Is_Full (Queued_Events) then\n               raise Program_Error;\n            end if;\n\n            Events_Ring_Buffers.Append (Queued_Events, E);\n         end;\n         --         Log (\"Reg'ed events:\" &  Events_Mark'Image);\n         Log (\"Reg'ed events:\" &  Events_Ring_Buffers.Length (Queued_Events)'Image);\n      end loop;\n   end Register_Events;\n\n   procedure Release (Col: Colr; Row: Rowr) is\n   begin\n      if States (Col, Row).Typ = None then\n         raise Program_Error;\n      end if;\n      States (Col, Row) := (Typ => None, Code => No, Layer_Value => 0);\n   end Release;\n\n   function Get_Current_Layer return Natural is\n      L : Natural := 0;\n   begin\n      for S of States loop\n         if S.Typ = Layer_Mod then\n            L := L + S.Layer_Value;\n         end if;\n      end loop;\n\n      return L;\n   end Get_Current_Layer;\n\n   --  Tick the event.\n   --  Returns TRUE if it needs to stay in the queued events\n   --  FALSE if the event has been consumed.\n\n   function Tick (L: Layout; E : in out Event) return Boolean is\n      Current_Layer : Natural := Get_Current_Layer;\n      A : Action renames L (Current_Layer, E.Row, E.Col);\n   begin\n      case E.Evt is\n         when Press =>\n            case A.T is\n               when Key =>\n                  States (E.Col, E.Row) :=\n                    (Typ => Normal_Key,\n                     Code => A.C,\n                     Layer_Value => 0);\n               when Layer =>\n                  States (E.Col, E.Row) := (Typ => Layer_Mod, Layer_Value => A.L, Code => No);\n               when others =>\n                  raise Program_Error;\n            end case;\n\n         when Release =>\n            Release (E.Col, E.Row);\n      end case;\n      return False;\n   end Tick;\n\n   Last_Was_Empty_Log : Boolean := False;\n\n   procedure Tick (L : Layout) is\n   begin\n      for I in 1 .. Events_Ring_Buffers.Length(Queued_Events) loop\n         declare\n            E : Event := Events_Ring_Buffers.Last_Element (Queued_Events);\n         begin\n            Events_Ring_Buffers.Delete_Last (Queued_Events);\n            if Tick (L, E) then\n               Events_Ring_Buffers.Prepend (Queued_Events, E);\n            end if;\n         end;\n      end loop;\n      if not Last_Was_Empty_Log or else Events_Ring_Buffers.Length(Queued_Events) /= 0 then\n         Log (\"End Tick layout, events: \" & Events_Ring_Buffers.Length(Queued_Events)'Image);\n         Last_Was_Empty_Log := Events_Ring_Buffers.Length(Queued_Events) = 0;\n      end if;\n   end Tick;\n\n   function Get_Key_Codes return Key_Codes_T is\n      Codes : Key_Codes_T (0 .. 10);\n      Wm: Natural := 0;\n   begin\n      for S of States loop\n         if S.Typ = Normal_Key and then\n            (S.Code < LCtrl or else S.Code > RGui)\n         then\n            Codes (Wm) := S.Code;\n            Wm := Wm + 1;\n         end if;\n      end loop;\n\n      if Wm = 0 then\n         return [];\n      else\n         return Codes (0 .. Wm - 1);\n      end if;\n   end Get_Key_Codes;\n\n   function Get_Modifiers return Key_Modifiers is\n      use USB.Device.HID.Keyboard;\n      KM : Key_Modifiers (1..8);\n      I : Natural := 0;\n   begin\n      for S of States loop\n         if S.Typ = Normal_Key then\n            I := I + 1;\n            case S.Code is\n              when LCtrl =>\n                 KM(I) := Ctrl_Left;\n              when RCtrl =>\n                 KM(I) := Ctrl_Right;\n              when LShift =>\n                 KM(I) := Shift_Left;\n              when RShift =>\n                 KM(I) := Shift_Right;\n              when LAlt =>\n                 KM(I) := Alt_Left;\n              when RAlt =>\n                 KM(I) := Alt_Right;\n              when LGui =>\n                 KM(I) := Meta_Left;\n              when RGui =>\n                 KM(I) := Meta_Right;\n              when others =>\n                 I := I - 1;\n            end case;\n         end if;\n      end loop;\n      return KM (1..I);\n   end Get_Modifiers;\n\n   procedure Init is\n   begin\n      Events_Ring_Buffers.Clear (Queued_Events);\n   end Init;\n\nend Click;\n"
  },
  {
    "path": "tests/syntax-tests/source/Ada/click.ads",
    "content": "with HAL.GPIO;\nwith USB.Device.HID.Keyboard;\n\ngeneric\n   Nb_Bounce : Natural;\n   type ColR is (<>);\n   type RowR is (<>);\n\n   type GPIOP is new HAL.GPIO.GPIO_Point with private;\n\n   type Cols_T is array (ColR) of GPIOP;\n   type Rows_T is array (RowR) of GPIOP;\n\n   Cols : Cols_T;\n   Rows : Rows_T;\n   Num_Layers : Natural;\n\n   with procedure Log (S : String; L :  Integer := 1; Deindent : Integer := 0);\npackage Click is\n\n   type Keys_T is record\n      Cols : Cols_T;\n      Rows : Rows_T;\n   end record;\n\n   Keys : Keys_T :=\n     (Rows => Rows, Cols => Cols);\n\n   type Key_Matrix is array (ColR, RowR) of Boolean;\n\n   --------------------------\n   --  Events & Debouncing --\n   --------------------------\n\n   MaxEvents : constant Positive := 20;\n\n   type EventT is (Press, Release);\n   type Event is record\n      Evt : EventT;\n      Col : ColR;\n      Row : RowR;\n   end record;\n\n   type Events is array (Natural range <>) of Event;\n\n   function Get_Events return Events;\n   function Update (NewS : Key_Matrix) return Boolean;\n\n   -------------\n   --  Layout --\n   -------------\n   ---------------\n   --  Keycodes --\n   ---------------\n\n   --  Keycodes copy/pasted from the excelent Keyberon Rust firmware:\n   --  https://github.com/TeXitoi/keyberon/\n\n   type Key_Code_T is\n     (\n      --   The \"no\" key, a placeholder to express nothing.\n      No, --  = 0x00,\n          --  / Error if too much keys are pressed at\n          --  the same time.\n      ErrorRollOver,\n      --  / The POST fail error.\n      PostFail,\n      --  / An undefined error occured.\n      ErrorUndefined,\n      --  / `a` and `A`.\n      A,\n      B,\n      C,\n      D,\n      E,\n      F,\n      G,\n      H,\n      I,\n      J,\n      K,\n      L,\n      M, --  0x10\n      N,\n      O,\n      P,\n      Q,\n      R,\n      S,\n      T,\n      U,\n      V,\n      W,\n      X,\n      Y,\n      Z,\n      --   `1` and `!`.\n      Kb1,\n      --   `2` and `@`.\n      Kb2,\n      --   `3` and `#`.\n      Kb3, --  0x20\n      --  / `4` and `$`.\n      Kb4,\n      --   `5` and `%`.\n      Kb5,\n      --   `6` and `^`.\n      Kb6,\n      --   `7` and `&`.\n      Kb7,\n      --   `8` and `*`.\n      Kb8,\n      --   `9` and `(`.\n      Kb9,\n      --   `0` and `)`.\n      Kb0,\n      Enter,\n      Escape,\n      BSpace,\n      Tab,\n      Space,\n      --   `-` and `_`.\n      Minus,\n      --   `=` and `+`.\n      Equal,\n      --   `[` and `{`.\n      LBracket,\n      --   `]` and `}`.\n      RBracket, --  0x30\n      --  / `\\` and `|`.\n      Bslash,\n      --   Non-US `#` and `~` (Typically near the Enter key).\n      NonUsHash,\n      --   `;` and `:`.\n      SColon,\n      --   `'` and `\"`.\n      Quote,\n      --  How to have ` as code?\n      --   \\` and `~`.\n      Grave,\n      --   `,` and `<`.\n      Comma,\n      --   `.` and `>`.\n      Dot,\n      --   `/` and `?`.\n      Slash,\n      CapsLock,\n      F1,\n      F2,\n      F3,\n      F4,\n      F5,\n      F6,\n      F7, --  0x40\n      F8,\n      F9,\n      F10,\n      F11,\n      F12,\n      PScreen,\n      ScrollLock,\n      Pause,\n      Insert,\n      Home,\n      PgUp,\n      Delete,\n      Endd,\n      PgDown,\n      Right,\n      Left, --  0x50\n      Down,\n      Up,\n      NumLock,\n      --   Keypad `/`\n      KpSlash,\n      --   Keypad `*`\n      KpAsterisk,\n      --   Keypad `-`.\n      KpMinus,\n      --   Keypad `+`.\n      KpPlus,\n      --   Keypad enter.\n      KpEnter,\n      --   Keypad 1.\n      Kp1,\n      Kp2,\n      Kp3,\n      Kp4,\n      Kp5,\n      Kp6,\n      Kp7,\n      Kp8, --  0x60\n      Kp9,\n      Kp0,\n      KpDot,\n      --   Non-US `\\` and `|` (Typically near the Left-Shift key)\n      NonUsBslash,\n      Application, --  0x65\n      --  / not a key, used for errors\n      Power,\n      --   Keypad `=`.\n      KpEqual,\n      F13,\n      F14,\n      F15,\n      F16,\n      F17,\n      F18,\n      F19,\n      F20,\n      F21, --  0x70\n      F22,\n      F23,\n      F24,\n      Execute,\n      Help,\n      Menu,\n      Selectt,\n      Stop,\n      Again,\n      Undo,\n      Cut,\n      Copy,\n      Paste,\n      Find,\n      Mute,\n      VolUp, --  0x80\n      VolDown,\n      --   Deprecated.\n      LockingCapsLock,\n      --   Deprecated.\n      LockingNumLock,\n      --   Deprecated.\n      LockingScrollLock,\n      --  / Keypad `,`, also used for the\n      --  brazilian keypad period (.) key.\n      KpComma,\n      --   Used on AS/400 keyboard\n      KpEqualSign,\n      Intl1,\n      Intl2,\n      Intl3,\n      Intl4,\n      Intl5,\n      Intl6,\n      Intl7,\n      Intl8,\n      Intl9,\n      Lang1, --  0x90\n      Lang2,\n      Lang3,\n      Lang4,\n      Lang5,\n      Lang6,\n      Lang7,\n      Lang8,\n      Lang9,\n      AltErase,\n      SysReq,\n      Cancel,\n      Clear,\n      Prior,\n      Returnn,\n      Separator,\n      Outt, --  0xA0\n      Oper,\n      ClearAgain,\n      CrSel,\n      ExSel,\n\n      --  According to QMK, 0xA5-0xDF are not\n      --  usable on modern keyboards\n\n      --  Modifiers\n      --   Left Control.\n      LCtrl, --  = 0xE0,\n      --  / Left Shift.\n      LShift,\n      --   Left Alt.\n      LAlt,\n      --   Left GUI (the Windows key).\n      LGui,\n      --   Right Control.\n      RCtrl,\n      --   Right Shift.\n      RShift,\n      --   Right Alt (or Alt Gr). \n      RAlt,\n      --   Right GUI (the Windows key).\n      RGui, --  0xE7\n\n      --  Unofficial\n      MediaPlayPause, --   0xE8,\n      MediaStopCD,\n      MediaPreviousSong,\n      MediaNextSong,\n      MediaEjectCD,\n      MediaVolUp,\n      MediaVolDown,\n      MediaMute,\n      MediaWWW, --  0xF0\n      MediaBack,\n      MediaForward,\n      MediaStop,\n      MediaFind,\n      MediaScrollUp,\n      MediaScrollDown,\n      MediaEdit,\n      MediaSleep,\n      MediaCoffee,\n      MediaRefresh,\n      MediaCalc --  0xFB\n     );\n\n   type Action_Type is (Key, No_Op, Trans, Layer, Multiple_Actions);\n\n   --   Should be a discriminated type\n   type Action is record\n      T : Action_Type; --  hould be the discriminant\n      C : Key_Code_T;\n      L : Natural;\n   end record;\n\n   function Kw (Code : Key_Code_T) return Action;\n   function Lw (V : Natural) return Action;\n\n   type Key_Modifiers is array (Natural range <>) of USB.Device.HID.Keyboard.Modifiers;\n\n   type Key_Codes_T is array (Natural range <>) of Key_Code_T;\n\n   subtype Ac is Action;\n   type Layout is array (0 .. Num_Layers - 1, RowR, ColR) of Action;\n   procedure Register_Events (L : Layout; Es : Events);\n   procedure Tick (L : Layout);\n\n   function Get_Key_Codes return Key_Codes_T;\n   function Get_Modifiers return Key_Modifiers;\n   procedure Init;\nend Click;\n"
  },
  {
    "path": "tests/syntax-tests/source/Ada/click.gpr",
    "content": "with \"config/click_config.gpr\";\nproject Click is\n\n   for Library_Name use \"Click\";\n   for Library_Version use Project'Library_Name & \".so.\" & Click_Config.Crate_Version;\n\n   for Source_Dirs use (\"src/\", \"config/\");\n   for Object_Dir use \"obj/\" & Click_Config.Build_Profile;\n   for Create_Missing_Dirs use \"True\";\n   for Library_Dir use \"lib\";\n\n   type Library_Type_Type is (\"relocatable\", \"static\", \"static-pic\");\n   Library_Type : Library_Type_Type :=\n     external (\"CLICK_LIBRARY_TYPE\", external (\"LIBRARY_TYPE\", \"static\"));\n   for Library_Kind use Library_Type;\n\n   package Compiler is\n      for Default_Switches (\"Ada\") use Click_Config.Ada_Compiler_Switches & (\"-gnatX\", \"-gnat2022\");\n   end Compiler;\n\n   package Binder is\n      for Switches (\"Ada\") use (\"-Es\"); --  Symbolic traceback\n   end Binder;\n\n   package Install is\n      for Artifacts (\".\") use (\"share\");\n   end Install;\n\nend Click;\n"
  },
  {
    "path": "tests/syntax-tests/source/Apache/httpd.conf",
    "content": "# This is a comment\n#\nServerRoot \"\"\nListen 80\nLoadModule mpm_event_module /usr/lib/apache2/modules/mod_mpm_event.so\n<IfModule unixd_module>\nUser daemon\nGroup daemon\n</IfModule>\nServerAdmin you@example.com\n<Directory />\n    AllowOverride none\n    Require all denied\n</Directory>\nDocumentRoot \"/usr/share/apache2/default-site/htdocs\"\n<Directory \"/usr/share/apache2/default-site/htdocs\">\n    Options Indexes FollowSymLinks\n    AllowOverride None\n    Require all granted\n</Directory>\n<Files \".ht*\">\n    Require all denied\n</Files>\nErrorLog \"/var/log/apache2/error_log\"\nLogLevel warn\n<IfModule log_config_module>\n    LogFormat \"%h %l %u %t \\\"%r\\\" %>s %b \\\"%{Referer}i\\\" \\\"%{User-Agent}i\\\"\" combined\n    CustomLog \"/var/log/apache2/access_log\" common\n</IfModule>\n\n<IfModule alias_module>\n    ScriptAlias /cgi-bin/ \"/usr/lib/cgi-bin/\"\n</IfModule>\n\n<IfModule mime_module>\n    TypesConfig /etc/apache2/mime.types\n    AddType application/x-compress .Z\n    AddOutputFilter INCLUDES .shtml\n</IfModule>\n<IfModule proxy_html_module>\nInclude /etc/apache2/extra/proxy-html.conf\n</IfModule>\n"
  },
  {
    "path": "tests/syntax-tests/source/AppleScript/test.applescript",
    "content": "-- This is a comment\n\nproperty defaultClientName : \"Mary Smith\"\n\non greetClient(nameOfClient)\n    display dialog (\"Hello \" & nameOfClient & \"!\")\nend greetClient\n\n\nscript testGreet\n    greetClient(defaultClientName)\nend script\n\nrun testGreet\ngreetClient(\"Joe Jones\")\n\nset myList to {1, \"what\", 3}\nset beginning of myList to 0\nset end of myList to \"four\"\n\nmyList\n\ntell application \"TextEdit\"\n    paragraph 1 of document 1\nend tell\n"
  },
  {
    "path": "tests/syntax-tests/source/AsciiDoc/test.adoc",
    "content": "= This is the document title\nAuthor McAuthorson <author@author.org>\n\n== Table of Content\n\n:toc:\n\n== Paragraphs\n\n[.lead]\nThis text will be styled as a lead paragraph with a larger font.\n\nThis is a normal paragraph.\n\n This is a literal paragraph that is offset by one space, \n it will be rendered in a fixed-width font.\n\nNOTE: This is an admonition paragraph\n\nTIP: This is another admonition paragraph\n\n== Formatted text\n\n*bold text*\n\n_italic text_\n\n*_bold italic text_*\n\n`monospace text`\n\n`*bold monospace*`\n\n`_italic monospace_`\n\n`*_bold and italic monospace_*`\n\nThe following word is #highlighted#\n\nThe following words are [.small]#small print#\n\nThe following word is [.underline]#underlined#\n\nThe following word is [.line-through]#line-through#\n\nThe following word is [.big]#big#\n\nThe following word is printed in ^superscript^\n\nThe following word is printed in ~sub-script~\n\n== Include\n\ninclude::not_existing.adoc[]\n\n== Breaks\nHere we have a +\nline break.\n\nBelow is a horizontal rule.\n\n'''\n\nAnd below here is a page break.\n\n<<<\n\n== Lists\n\n* This is\n* an unordered\n* list\n** with nested\n*** elements\n\n'''\n\n- This is also an\n- unordered\n- list\n\n'''\n\n. And this is\n. an ordered\n. list\n.. with nested\n... elements\n\n'''\n\n//* [*] checked\n* [x] also checked\n* [ ] not checked\n*     normal list item\n\n'''\n\n[qanda]\nWhat is this?::\n  This is a Q&A\nAnd what is this?:: Also a Q&A\n\n== Links\nThe following link will be created automatically: https://asciidoctor.org\n\n.An image caption\nimage::not_existing.jpg[alt text]\n\n.A video caption\nvideo::not_existing.mp4[alt text]\n\n== Source Code\nThe following word is `monospace`.\n\n....\nThis is a literal block\nwhere linebreaks are rendered\n....\n\n.example.java\n[source,java]\n----\npublic class Example { // <1>\n    private static boolean isExample = true; // <2>\n}\n----\n<1> This is a callout\n<2> This is another callout\n\n== Misc\n\n.A sidebar\n****\nThis will be rendered like a sidebar\n****\n\n____\nThis is a random blockquote\n____\n\n[quote, Albert Einstein, 'Scientist']\n____\nThis is not actually something Einstein said\n____\n\n// here we have a single line comment\n\n////\nand this is a\nmultiline comment\n////\n\n.A Table\n[%header]\n|===\n|Header Column 1 |Header Column 2 |And the last header column\n|Cell in col1\n|Cell in col2\n|Cell in col3\n\n|Cell in col1, row2\n|Cell in col2, row2\n|Cell in col3, row2\n|===\n\n.A Table from CSV\n[%header, format=csv]\n|===\nheader col1, header col2, header col3\nThis,is the first, row\nThis, is the second, row\n|===\n"
  },
  {
    "path": "tests/syntax-tests/source/Assembly (x86_64)/test.nasm",
    "content": "global enlight\n\nsection .data\n  red dq 0 ; some comment\n  green dq 0\n  blue dq 0\n  data dq 0\n  N dd 0\n  M dd 0\n  change dd 0\n  delta db 0\n\nsection .text\nenlight:\n  call assign_arguments\n  call set_data\n  call make_deltas\n  ret\n\nassign_arguments:\n  mov qword[red], rdi\n  mov qword[green], rsi\n  mov qword[blue], rdx\n  mov dword[N], ecx\n  mov dword[M], r8d\n  mov dword[change], r9d\n  mov al, byte[rsp + 16]\n  mov byte[delta], al\n  ret\n\nset_data:\n  mov eax, dword[change]\n  cmp eax, 1\n  jne not_1\n  mov rax, qword[red]\n  mov qword[data], rax\n  ret\nnot_1:\n  cmp eax, 2\n  jne not_2\n  mov rax, qword[green]\n  mov qword[data], rax\n  ret\nnot_2:\n  mov rax, qword[blue]\n  mov qword[data], rax\n  ret\n\n\nmake_deltas:\n  mov ecx, dword[N]\n  mov eax, dword[M]\n  imul ecx, eax\nloop_start:\n  call make_delta\n  loop loop_start\n  ret\n\nmake_delta:\n  mov rax, qword[data]\n  add rax, rcx\n  dec rax\n  mov dl, byte[delta]\n  cmp dl, 0\n  jl substracting\nadding:\n  add dl, byte[rax]\n  jc adding_overflow\n  mov byte[rax], dl\n  ret\nadding_overflow:\n  mov byte[rax], 255 \n  ret\nsubstracting:\n  mov r9b, dl\n  mov dl, 0\n  sub dl, r9b\n  mov r8b, byte[rax]\n  sub r8b, dl\n  jc substracting_overflow\n  mov byte[rax], r8b\n  ret\n; another comment\nsubstracting_overflow:\n  mov byte[rax], 0\n  ret\n"
  },
  {
    "path": "tests/syntax-tests/source/Bash/batgrep.sh",
    "content": "#!/usr/bin/env bash\n# -----------------------------------------------------------------------------\n# bat-extras | Copyright (C) 2020 eth-p and contributors | MIT License\n#\n# Repository: https://github.com/eth-p/bat-extras\n# Issues:     https://github.com/eth-p/bat-extras/issues\n# -----------------------------------------------------------------------------\nprintc(){\nprintf \"$(sed \"$_PRINTC_PATTERN\" <<<\"$1\")\" \"${@:2}\"\n}\nprintc_init(){\ncase \"$1\" in\ntrue)_PRINTC_PATTERN=\"$_PRINTC_PATTERN_ANSI\";;\nfalse)_PRINTC_PATTERN=\"$_PRINTC_PATTERN_PLAIN\";;\n\"[DEFINE]\"){\n_PRINTC_PATTERN_ANSI=\"\"\n_PRINTC_PATTERN_PLAIN=\"\"\nlocal name\nlocal ansi\nwhile read -r name ansi;do\nif [[ -z $name && -z $ansi ]]||[[ ${name:0:1} == \"#\" ]];then\ncontinue\nfi\nansi=\"${ansi/\\\\/\\\\\\\\}\"\n_PRINTC_PATTERN_PLAIN=\"${_PRINTC_PATTERN_PLAIN}s/%{$name}//g;\"\n_PRINTC_PATTERN_ANSI=\"${_PRINTC_PATTERN_ANSI}s/%{$name}/$ansi/g;\"\ndone\nif [ -t 1 ];then\n_PRINTC_PATTERN=\"$_PRINTC_PATTERN_ANSI\"\nelse\n_PRINTC_PATTERN=\"$_PRINTC_PATTERN_PLAIN\"\nfi\n}\nesac\n}\nprint_warning(){\nprintc \"%{YELLOW}[%s warning]%{CLEAR}: $1%{CLEAR}\\n\" \"batgrep\" \"${@:2}\" 1>&2\n}\nprint_error(){\nprintc \"%{RED}[%s error]%{CLEAR}: $1%{CLEAR}\\n\" \"batgrep\" \"${@:2}\" 1>&2\n}\nprintc_init \"[DEFINE]\" <<END\n\tCLEAR\t\\x1B[0m\n\tRED\t\t\\x1B[31m\n\tGREEN\t\\x1B[32m\n\tYELLOW\t\\x1B[33m\n\tBLUE\t\\x1B[34m\n\tMAGENTA\t\\x1B[35m\n\tCYAN\t\\x1B[36m\n\n\tDEFAULT \\x1B[39m\n\tDIM\t\t\\x1B[2m\nEND\nis_pager_less(){\n[[ \"$(pager_name)\" == \"less\" ]]\nreturn $?\n}\nis_pager_disabled(){\n[[ -z \"$(pager_name)\" ]]\nreturn $?\n}\npager_name(){\n_detect_pager 1>&2\necho \"$_SCRIPT_PAGER_NAME\"\n}\npager_version(){\n_detect_pager 1>&2\necho \"$_SCRIPT_PAGER_VERSION\"\n}\npager_exec(){\nif [[ -n $SCRIPT_PAGER_CMD ]];then\n\"$@\"|pager_display\nreturn $?\nelse\n\"$@\"\nreturn $?\nfi\n}\npager_display(){\nif [[ -n $SCRIPT_PAGER_CMD ]];then\nif [[ -n $SCRIPT_PAGER_ARGS ]];then\n\"${SCRIPT_PAGER_CMD[@]}\" \"${SCRIPT_PAGER_ARGS[@]}\"\nreturn $?\nelse\n\"${SCRIPT_PAGER_CMD[@]}\"\nreturn $?\nfi\nelse\ncat\nreturn $?\nfi\n}\n_detect_pager(){\nif [[ $_SCRIPT_PAGER_DETECTED == \"true\" ]];then return;fi\n_SCRIPT_PAGER_DETECTED=true\nif [[ -z ${SCRIPT_PAGER_CMD[0]} ]];then\n_SCRIPT_PAGER_VERSION=0\n_SCRIPT_PAGER_NAME=\"\"\nreturn\nfi\nlocal output\nlocal output1\noutput=\"$(\"${SCRIPT_PAGER_CMD[0]}\" --version 2>&1)\"\noutput1=\"$(head -n 1 <<<\"$output\")\"\nif [[ $output1 =~ ^less[[:blank:]]([[:digit:]]+) ]];then\n_SCRIPT_PAGER_VERSION=\"${BASH_REMATCH[1]}\"\n_SCRIPT_PAGER_NAME=\"less\"\nelse\n_SCRIPT_PAGER_VERSION=0\n_SCRIPT_PAGER_NAME=\"$(basename \"${SCRIPT_PAGER_CMD[0]}\")\"\nfi\n}\n_configure_pager(){\nSCRIPT_PAGER_CMD=($PAGER)\nSCRIPT_PAGER_ARGS=()\nif [[ -n ${BAT_PAGER+x} ]];then\nSCRIPT_PAGER_CMD=($BAT_PAGER)\nSCRIPT_PAGER_ARGS=()\nreturn\nfi\nif is_pager_less;then\nSCRIPT_PAGER_CMD=(\"${SCRIPT_PAGER_CMD[0]}\" -R --quit-if-one-screen)\nif [[ \"$(pager_version)\" -lt 500 ]];then\nSCRIPT_PAGER_CMD+=(--no-init)\nfi\nfi\n}\nif [[ -t 1 ]];then\n_configure_pager\nelse\nSCRIPT_PAGER_CMD=()\nSCRIPT_PAGER_ARGS=()\nfi\nSHIFTOPT_HOOKS=()\nsetargs(){\n_ARGV=(\"$@\")\n_ARGV_LAST=\"$((${#_ARGV[@]}-1))\"\n_ARGV_INDEX=0\n}\nshiftopt(){\n[[ $_ARGV_INDEX -gt $_ARGV_LAST ]]&&return 1\nOPT=\"${_ARGV[$_ARGV_INDEX]}\"\nunset OPT_VAL\nif [[ $OPT =~ ^--[a-zA-Z0-9_-]+=.* ]];then\nOPT_VAL=\"${OPT#*=}\"\nOPT=\"${OPT%%=*}\"\nfi\n((_ARGV_INDEX++))\nlocal hook\nfor hook in \"${SHIFTOPT_HOOKS[@]}\";do\nif \"$hook\";then\nshiftopt\nreturn $?\nfi\ndone\nreturn 0\n}\nshiftval(){\nif [[ -n ${OPT_VAL+x} ]];then\nreturn 0\nfi\nif [[ $OPT =~ ^-[[:alpha:]][[:digit:]]{1,}$ ]];then\nOPT_VAL=\"${OPT:2}\"\nreturn\nfi\nOPT_VAL=\"${_ARGV[$_ARGV_INDEX]}\"\n((_ARGV_INDEX++))\nif [[ $OPT_VAL =~ -.* ]];then\nprintc \"%{RED}%s: '%s' requires a value%{CLEAR}\\n\" \"batgrep\" \"$ARG\"\nexit 1\nfi\n}\nsetargs \"$@\"\nhook_color(){\nSHIFTOPT_HOOKS+=(\"__shiftopt_hook__color\")\n__shiftopt_hook__color(){\ncase \"$OPT\" in\n--no-color)OPT_COLOR=false;;\n--color){\ncase \"$OPT_VAL\" in\n\"\")OPT_COLOR=true;;\nalways|true)OPT_COLOR=true;;\nnever|false)OPT_COLOR=false;;\nauto)return 0;;\n*)printc \"%{RED}%s: '--color' expects value of 'auto', 'always', or 'never'%{CLEAR}\\n\" \"batgrep\"\nexit 1\nesac\n};;\n*)return 1\nesac\nprintc_init \"$OPT_COLOR\"\nreturn 0\n}\nif [[ -z $OPT_COLOR ]];then\nif [[ -t 1 ]];then\nOPT_COLOR=true\nelse\nOPT_COLOR=false\nfi\nprintc_init \"$OPT_COLOR\"\nfi\n}\nhook_pager(){\nSHIFTOPT_HOOKS+=(\"__shiftopt_hook__pager\")\n__shiftopt_hook__pager(){\ncase \"$OPT\" in\n\\\n--no-pager)shiftval\nSCRIPT_PAGER_CMD=''\n;;\n--paging){\nshiftval\ncase \"$OPT_VAL\" in\nauto):;;\nalways):;;\nnever)SCRIPT_PAGER_CMD='';;\n*)printc \"%{RED}%s: '--paging' expects value of 'auto', 'always', or 'never'%{CLEAR}\\n\" \"batgrep\"\nexit 1\nesac\n};;\n\\\n--pager){\nshiftval\n{\nSCRIPT_PAGER_CMD=($OPT_VAL)\nPAGER_ARGS=()\n}\n};;\n*)return 1\nesac\n}\n}\nhook_version(){\nSHIFTOPT_HOOKS+=(\"__shiftopt_hook__version\")\n__shiftopt_hook__version(){\nif [[ $OPT == \"--version\" ]];then\nprintf \"%s %s\\n\\n%s\\n%s\\n\" \\\n\"batgrep\" \\\n\"2020.10.04\" \\\n\"Copyright (C) 2019-2020 eth-p | MIT License\" \\\n\"https://github.com/eth-p/bat-extras\"\nexit 0\nfi\nreturn 1\n}\n}\nterm_width(){\nlocal width=\"$({ stty size 2>/dev/null||echo \"22 80\";}|cut -d ' ' -f2)\"\nif [[ $width -ne 0 ]];then\necho \"$width\"\nelse\necho \"80\"\nfi\nreturn 0\n}\nhook_width(){\nSHIFTOPT_HOOKS+=(\"__shiftopt_hook__width\")\n__shiftopt_hook__width(){\ncase \"$OPT\" in\n--terminal-width)shiftval\nOPT_TERMINAL_WIDTH=\"$OPT_VAL\"\n;;\n*)return 1\nesac\nreturn 0\n}\nOPT_TERMINAL_WIDTH=\"$(term_width)\"\n}\nbat_version(){\n\"bat\" --version|cut -d ' ' -f 2\nreturn\n}\nversion_compare(){\nlocal version=\"$1\"\nlocal compare=\"$3\"\nif ! [[ $version =~ \\.$ ]];then\nversion=\"$version.\"\nfi\nif ! [[ $compare =~ \\.$ ]];then\ncompare=\"$compare.\"\nfi\nversion_compare__recurse \"$version\" \"$2\" \"$compare\"\nreturn $?\n}\nversion_compare__recurse(){\nlocal version=\"$1\"\nlocal operator=\"$2\"\nlocal compare=\"$3\"\nlocal v_major=\"${version%%.*}\"\nlocal c_major=\"${compare%%.*}\"\nlocal v_minor=\"${version#*.}\"\nlocal c_minor=\"${compare#*.}\"\nif [[ -z $v_minor && -z $c_minor ]];then\n[ \"$v_major\" $operator \"$c_major\" ]\nreturn $?\nfi\nif [[ -z $v_minor ]];then\nv_minor=\"0.\"\nfi\nif [[ -z $c_minor ]];then\nc_minor=\"0.\"\nfi\ncase \"$operator\" in\n-eq)[[ $v_major -ne $c_major ]]&&return 1;;\n-ne)[[ $v_major -ne $c_major ]]&&return 0;;\n-ge|-gt)[[ $v_major -lt $c_major ]]&&return 1\n[[ $v_major -gt $c_major ]]&&return 0\n;;\n-le|-lt)[[ $v_major -gt $c_major ]]&&return 1\n[[ $v_major -lt $c_major ]]&&return 0\nesac\nversion_compare__recurse \"$v_minor\" \"$operator\" \"$c_minor\"\n}\nhook_color\nhook_pager\nhook_version\nhook_width\nRG_ARGS=()\nBAT_ARGS=()\nPATTERN=\"\"\nFILES=()\nOPT_CASE_SENSITIVITY=''\nOPT_CONTEXT_BEFORE=2\nOPT_CONTEXT_AFTER=2\nOPT_FOLLOW=true\nOPT_SNIP=\"\"\nOPT_HIGHLIGHT=true\nOPT_SEARCH_PATTERN=false\nOPT_FIXED_STRINGS=false\nBAT_STYLE=\"header,numbers\"\nif version_compare \"$(bat_version)\" -gt \"0.12\";then\nOPT_SNIP=\",snip\"\nfi\nif [[ -n $RIPGREP_CONFIG_PATH && -e $RIPGREP_CONFIG_PATH ]];then\nfor arg in $(cat \"$RIPGREP_CONFIG_PATH\");do\ncase \"$arg\" in\n--context=*)val=\"${arg:10}\"\nOPT_CONTEXT_BEFORE=\"$val\"\nOPT_CONTEXT_AFTER=\"$val\"\n;;\n--before-context=*)val=\"${arg:17}\"\nOPT_CONTEXT_BEFORE=\"$val\"\n;;\n--after-context=*)val=\"${arg:16}\"\nOPT_CONTEXT_AFTER=\"$val\"\n;;\n-C*)val=\"${arg:2}\"\nOPT_CONTEXT_BEFORE=\"$val\"\nOPT_CONTEXT_AFTER=\"$val\"\n;;\n-B*)val=\"${arg:2}\"\nOPT_CONTEXT_BEFORE=\"$val\"\n;;\n-A*)val=\"${arg:2}\"\nOPT_CONTEXT_AFTER=\"$val\"\nesac\ndone\nfi\nwhile shiftopt;do\ncase \"$OPT\" in\n\\\n-i|--ignore-case)OPT_CASE_SENSITIVITY=\"--ignore-case\";;\n-s|--case-sensitive)OPT_CASE_SENSITIVITY=\"--case-sensitive\";;\n-S|--smart-case)OPT_CASE_SENSITIVITY=\"--smart-case\";;\n-A*|--after-context)shiftval\nOPT_CONTEXT_AFTER=\"$OPT_VAL\"\n;;\n-B*|--before-context)shiftval\nOPT_CONTEXT_BEFORE=\"$OPT_VAL\"\n;;\n-C*|--context)shiftval\nOPT_CONTEXT_BEFORE=\"$OPT_VAL\"\nOPT_CONTEXT_AFTER=\"$OPT_VAL\"\n;;\n-F|--fixed-strings)OPT_FIXED_STRINGS=true\nRG_ARGS+=(\"$OPT\")\n;;\n-U|--multiline|\\\n-P|--pcre2|\\\n-z|--search-zip|\\\n-w|--word-regexp|\\\n--one-file-system|\\\n--multiline-dotall|\\\n--ignore|--no-ignore|\\\n--crlf|--no-crlf|\\\n--hidden|--no-hidden)RG_ARGS+=(\"$OPT\")\n;;\n-E|--encoding|\\\n-g|--glob|\\\n-t|--type|\\\n-T|--type-not|\\\n-m|--max-count|\\\n--max-depth|\\\n--iglob|\\\n--ignore-file)shiftval\nRG_ARGS+=(\"$OPT\" \"$OPT_VAL\")\n;;\n\\\n\\\n\\\n--no-follow)OPT_FOLLOW=false;;\n--no-snip)OPT_SNIP=\"\";;\n--no-highlight)OPT_HIGHLIGHT=false;;\n-p|--search-pattern)OPT_SEARCH_PATTERN=true;;\n--no-search-pattern)OPT_SEARCH_PATTERN=false;;\n\\\n--rg:*){\nif [[ ${OPT:5:1} == \"-\" ]];then\nRG_ARGS+=(\"${OPT:5}\")\nelse\nRG_ARGS+=(\"--${OPT:5}\")\nfi\nif [[ -n $OPT_VAL ]];then\nRG_ARGS+=(\"$OPT_VAL\")\nfi\n};;\n\\\n-*){\nprintc \"%{RED}%s: unknown option '%s'%{CLEAR}\\n\" \"batgrep\" \"$OPT\" 1>&2\nexit 1\n};;\n\\\n*){\nif [ -z \"$PATTERN\" ];then\nPATTERN=\"$OPT\"\nelse\nFILES+=(\"$OPT\")\nfi\n}\nesac\ndone\nif [[ -z $PATTERN ]];then\nprint_error \"no pattern provided\"\nexit 1\nfi\nSEP=\"$(printc \"%{DIM}%${OPT_TERMINAL_WIDTH}s%{CLEAR}\"|sed \"s/ /─/g\")\"\nif [[ -n $OPT_CASE_SENSITIVITY ]];then\nRG_ARGS+=(\"$OPT_CASE_SENSITIVITY\")\nfi\nif \"$OPT_FOLLOW\";then\nRG_ARGS+=(\"--follow\")\nfi\nif \"$OPT_COLOR\";then\nBAT_ARGS+=(\"--color=always\")\nelse\nBAT_ARGS+=(\"--color=never\")\nfi\nif [[ $OPT_CONTEXT_BEFORE -eq 0 && $OPT_CONTEXT_AFTER -eq 0 ]];then\nOPT_SNIP=\"\"\nOPT_HIGHLIGHT=false\nfi\nif \"$OPT_SEARCH_PATTERN\";then\nif is_pager_less;then\nif \"$OPT_FIXED_STRINGS\";then\nSCRIPT_PAGER_ARGS+=(-p $'\\x12'\"$PATTERN\")\nelse\nSCRIPT_PAGER_ARGS+=(-p \"$PATTERN\")\nfi\nelif is_pager_disabled;then\nprint_error \"%s %s %s\" \\\n\"The -p/--search-pattern option requires a pager, but\" \\\n'the pager was explicitly disabled by $BAT_PAGER or the' \\\n\"--paging option.\"\nexit 1\nelse\nprint_error \"Unsupported pager '%s' for option -p/--search-pattern\" \\\n\"$(pager_name)\"\nexit 1\nfi\nfi\nmain(){\nFOUND_FILES=()\nFOUND=0\nFIRST_PRINT=true\nLAST_LR=()\nLAST_LH=()\nLAST_FILE=''\ndo_print(){\n[[ -z $LAST_FILE ]]&&return 0\n\"$FIRST_PRINT\"&&echo \"$SEP\"\nFIRST_PRINT=false\n\"bat\" \"${BAT_ARGS[@]}\" \\\n\"${LAST_LR[@]}\" \\\n\"${LAST_LH[@]}\" \\\n--style=\"$BAT_STYLE$OPT_SNIP\" \\\n--paging=never \\\n--terminal-width=\"$OPT_TERMINAL_WIDTH\" \\\n\"$LAST_FILE\"\necho \"$SEP\"\n}\nwhile IFS=':' read -r file line column text;do\n((FOUND++))\nif [[ $LAST_FILE != \"$file\" ]];then\ndo_print\nLAST_FILE=\"$file\"\nLAST_LR=()\nLAST_LH=()\nfi\nline_start=$((line-OPT_CONTEXT_BEFORE))\nline_end=$((line+OPT_CONTEXT_AFTER))\n[[ $line_start -gt 0 ]]||line_start=''\nLAST_LR+=(\"--line-range=$line_start:$line_end\")\n[[ $OPT_HIGHLIGHT == \"true\" ]]&&LAST_LH+=(\"--highlight-line=$line\")\ndone < <(rg --with-filename --vimgrep \"${RG_ARGS[@]}\" --context=0 --no-context-separator --sort path \"$PATTERN\" \"${FILES[@]}\")\ndo_print\nif [[ $FOUND -eq 0 ]];then\nexit 2\nfi\n}\npager_exec main\nexit $?\n"
  },
  {
    "path": "tests/syntax-tests/source/Bash/korn_shell.wrong_ext",
    "content": "#!/bin/ksh\n#\n# https://www.qnx.com/developers/docs/6.4.0/neutrino/user_guide/scripts.html\n# tfind:\n# script to look for strings in various files and dump to less\n\ncase $# in\n1)\n    find . -name '*.[ch]' | xargs grep $1 | less\n    exit 0   # good status\nesac\n\necho \"Use tfind stuff_to_find                               \"\necho \"      where : stuff_to_find = search string           \"\necho \"                                                      \"\necho \"e.g. tfind console_state looks through all files in   \"    \necho \"     the current directory and below and displays all \"\necho \"     instances of console_state.\"\nexit 1    # bad status\n"
  },
  {
    "path": "tests/syntax-tests/source/Bash/simple.sh",
    "content": "#!/usr/bin/env bash\nfunction incompatible_function() {\n\t:\n}\n\ncompatible_function() {\n\tif ! [ \"$1\" == \"yes\" ]\n\tthen\n\t\treturn 3;:;\n\tfi\n\t\n\t(\n\t\texec 3>&1\n\t\techo \"finished! $@? $*.\" >&3 \\\n\t\t\t| cat | bat - | cat\n\t\texit 4\n\t) || exit $?\n}\n\nif command -v bat &> /dev/null; then\n\tvar=1\n\tprintf \"%s...\\n\" \"$(echo some text)\"\n\twhile true; do\n\t\techo $var\n\n\t\tif { [[ \"$var\" -eq 1 && ( true || false ) ]] || false 2>&1 1> /dev/null; } &> /dev/null; then\n\t\t\tvar=\"$(cat <<< \"two\")\"\n\t\t\tcontinue 1\n\t\tfi\n\n\t\tcase \"$var\" in\n\t\t\t\"two\") var=\"three\" ;;\n\t\t\tthree) var=\"four\" ;;\n\t\t\tfo*r)\n\t\t\t\tvar=five\n\t\t\t\t;;\n\n\t\t\t\"fi\"ve)\n\t\t\t\tvar=\"$(\n\t\t\t\t\tcat       << END\nsix > $var\nEND\n\t\t\t\t)\"\n\t\t\t\t;;\n\n\t\t\t$'six\\n' | *six*)\n\t\t\t\techo \"?\"\n\t\t\t\tseven=seven\n\t\t\t\twhile read -r line\n\t\t\t\tdo\n\t\t\t\t\tvar=\"$line\"\n\t\t\t\tdone << \"HEREDOC\"\n1\n2\n$seven\nHEREDOC\n\t\t\t\t;;\n\n\t\t\t*'sev'*)\n\t\t\t\texport var=eight\n\t\t\t\tunset var\n\t\t\t\t;;\n\n\t\t\t'')\n\t\t\t\t{ incompatible_function && false; } || compatible_function \"yes\"\n\t\t\t\tbreak\n\t\t\t\t;;\n\t\tesac\n\n\t\tcontinue\n\tdone\nfi\n"
  },
  {
    "path": "tests/syntax-tests/source/BatTestCustomAssets/NoColorsUnlessCustomAssetsAreUsed.battestcustomassets",
    "content": "custom assets : 0\nare           : the best\n"
  },
  {
    "path": "tests/syntax-tests/source/Batch/LICENSE.md",
    "content": "The `build.bat` file has been added from https://github.com/Leandros/ClangOnWindows/blob/master/build.bat under the following license: \n\nThis is free and unencumbered software released into the public domain.\n\nAnyone is free to copy, modify, publish, use, compile, sell, or\ndistribute this software, either in source code form or as a compiled\nbinary, for any purpose, commercial or non-commercial, and by any\nmeans.\n\nIn jurisdictions that recognize copyright laws, the author or authors\nof this software dedicate any and all copyright interest in the\nsoftware to the public domain. We make this dedication for the benefit\nof the public at large and to the detriment of our heirs and\nsuccessors. We intend this dedication to be an overt act of\nrelinquishment in perpetuity of all present and future rights to this\nsoftware under copyright law.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR\nOTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,\nARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\nOTHER DEALINGS IN THE SOFTWARE.\n\nFor more information, please refer to <http://unlicense.org>"
  },
  {
    "path": "tests/syntax-tests/source/Batch/build.bat",
    "content": "@echo off\n\n\n:: Change to your LLVM installation\nset \"LLVMPath=C:\\Program Files\\LLVM\"\n:: Change to your Visual Studio 2017 installation\nset \"VSPath=C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\"\nset \"VSVersion=14.10.25017\"\n:: Change to your Windows Kit version & installation\nset \"WinSDKVersion=10.0.15063.0\"\nset \"WinSDKPath=C:\\Program Files (x86)\\Windows Kits\\10\"\n:: Change this to your resulting exe\nset \"OUTPUT=test.exe\"\n\n\n:: Setup\nset \"VSBasePath=%VSPath%\\VC\\Tools\\MSVC\\%VSVersion%\"\nset \"PATH=%PATH%;%LLVMPath%\\bin;%VSBasePath%\\bin\\HostX64\\x64\"\n\n:: Compiler Flags\nset CFLAGS= ^\n -std=c++14 -Wall -Wextra\n\nset CPPFLAGS= ^\n  -I \"%VSBasePath%\\include\" ^\n  -I \"%WinSDKPath%\\Include\\%WinSDKVersion%\\shared\" ^\n  -I \"%WinSDKPath%\\Include\\%WinSDKVersion%\\ucrt\" ^\n  -I \"%WinSDKPath%\\Include\\%WinSDKVersion%\\um\"\n\n\n:: Linker Libs\nset LDFLAGS= ^\n -machine:x64 ^\n -nodefaultlib ^\n -subsystem:console\n\nset LDLIBS= ^\n -libpath:\"%VSBasePath%\\lib\\x64\" ^\n -libpath:\"%WinSDKPath%\\Lib\\%WinSDKVersion%\\ucrt\\x64\" ^\n -libpath:\"%WinSDKPath%\\Lib\\%WinSDKVersion%\\um\\x64\" ^\n libucrt.lib libvcruntime.lib libcmt.lib libcpmt.lib ^\n legacy_stdio_definitions.lib oldnames.lib ^\n legacy_stdio_wide_specifiers.lib ^\n kernel32.lib User32.lib\n\n\n:: Compiling\n@echo on\n@for %%f in (*.cc) do (\n    clang++.exe \"%%~f\" -o \"%%~nf.o\" -c %CFLAGS%\n)\n\n:: Linking\n@set \"LINK_FILES=\"\n@for %%f in (*.o) do (\n    @set \"LINK_FILES=%LINK_FILES% %%~f\"\n)\n\nlld-link.exe %LINK_FILES% -out:\"%OUTPUT%\" %LDFLAGS% %LDLIBS%\n"
  },
  {
    "path": "tests/syntax-tests/source/BibTeX/test.bib",
    "content": "@book{knuth1997art,\n  title={The art of computer programming},\n  author={Knuth, Donald Ervin},\n  volume={3},\n  year={1997},\n  publisher={Pearson Education}\n}\n\n@article{egholm1993pna,\n  title={PNA hybridizes to complementary oligonucleotides obeying the Watson--Crick hydrogen-bonding rules},\n  author={Egholm, Michael and Buchardt, Ole and Christensen, Leif and Behrens, Carsten and Freier, Susan M and Driver, David A and Berg, Rolf H and Kim, Seog K and Norden, Bengt and Nielsen, Peter E},\n  journal={Nature},\n  volume={365},\n  number={6446},\n  pages={566--568},\n  year={1993},\n  publisher={Springer}\n}\n"
  },
  {
    "path": "tests/syntax-tests/source/C/test.c",
    "content": "#include <stdio.h>\n#include <stdlib.h>\n#include <stdbool.h>\n\nvoid test_function()\n{\n#define TEST\n#ifdef TEST\n    printf(\"TEST is defined\\n\");\n#endif\n}\n\nstruct Node\n{\n    int val;\n    struct Node *next;\n};\n\nint main(int argc, char **argv)\n{\n    /* This C program was written to help bat\n     * with its syntax highlighting tests\n     */\n\n    // Calling test function\n    test_function();\n    struct Node *head = NULL;\n    head = (struct Node *)malloc(sizeof(struct Node *));\n    head->val = -1;\n    if (head->val == 1 * -1)\n    {\n        head->val = 10;\n    }\n    else\n    {\n        head->val = argc;\n    }\n    int t = head->val, count = 0;\n    free(head);\n    while (t--)\n    {\n        count++;\n    }\n    for (int i = t; i < count; ++i)\n    {\n        do\n        {\n            --count;\n        } while (false);\n    }\n    enum chars\n    {\n        M,\n        I,\n        T,\n        H,\n        L\n    };\n    char *string = \"string\";\n    printf(\"true is #define true %d\\n\", true);\n    return 0;\n}\n"
  },
  {
    "path": "tests/syntax-tests/source/C-Sharp/Stack.cs",
    "content": "namespace StackImplementation\n{\n    internal class Stack<T>\n    {\n        private int _top;\n        private const int Capacity = 4;\n        private readonly T[] _stack = new T[Capacity];\n\n        public Stack()\n        {\n            _top = -1;\n        }\n\n        private bool IsEmpty()\n        {\n            return _top < 0;\n        }\n        private bool IsFull()\n        {\n            return _top == Capacity - 1;\n        }\n\n        public void Peek()\n        {\n            System.Console.WriteLine(!IsEmpty() ? $\"The topmost element is: {_stack[_top]}\" : \"The stack is empty.\");\n        }\n\n        public T Pop()\n        {\n            return !IsEmpty() ? _stack[_top--] : default;\n        }\n\n        public void Push(T element)\n        {\n            if (!IsFull())\n            {\n                _stack[++_top] = element;\n            }\n            else\n            {\n                System.Console.WriteLine(\"Cannot push - the stack is full.\");\n            }\n        }\n\n        public override string ToString()\n        {\n            if (IsEmpty())\n            {\n                return \"The stack is empty.\";\n            }\n\n            var depiction = \"\";\n\n            for (var index = 0; index < _top; index++)\n            {\n                depiction += _stack[index].ToString() + ' ';\n            }\n\n            depiction += _stack[_top].ToString();\n\n            return $\"Stack: [{depiction}]\";\n        }\n    }\n}\n"
  },
  {
    "path": "tests/syntax-tests/source/CFML/test.cfml",
    "content": "<head> \n<title>Add New Employees</title> \n</head> \n<body> \n<h1>Add New Employees</h1> \n<!--- Action page code for the form at the bottom of this page. ---> \n<!--- Establish parameters for first time through ---> \n<cfparam name=\"Form.firstname\" default=\"\"> \n<cfparam name=\"Form.lastname\" default=\"\"> \n<cfparam name=\"Form.email\" default=\"\"> \n<cfparam name=\"Form.phone\" default=\"\"> \n<cfparam name=\"Form.department\" default=\"\"> \n<!--- If at least the firstname form field is passed, create \na structure named employee and add values. ---> \n<cfif #Form.firstname# eq \"\"> \n<p>Please fill out the form.</p> \n<cfelse> \n<cfoutput> \n<cfscript> \nemployee=StructNew(); \nemployee.firstname = Form.firstname; \nemployee.lastname = Form.lastname; \nemployee.email = Form.email; \nemployee.phone = Form.phone; \nemployee.department = Form.department; \n</cfscript> \n<!--- Display results of creating the structure. ---> \nFirst name is #StructFind(employee, \"firstname\")#<br> \nLast name is #StructFind(employee, \"lastname\")#<br> \nEMail is #StructFind(employee, \"email\")#<br> \nPhone is #StructFind(employee, \"phone\")#<br> \nDepartment is #StructFind(employee, \"department\")#<br> \n</cfoutput> \n<!--- Call the custom tag that adds employees. ---> \n<cf_addemployee empinfo=\"#employee#\"> \n</cfif> \n<!--- The form for adding the new employee information ---> \n<hr> \n<form action=\"newemployee.cfm\" method=\"Post\"> \nFirst Name:&nbsp; \n<input name=\"firstname\" type=\"text\" hspace=\"30\" maxlength=\"30\"><br> \nLast Name:&nbsp; \n<input name=\"lastname\" type=\"text\" hspace=\"30\" maxlength=\"30\"><br> \nEMail:&nbsp; \n<input name=\"email\" type=\"text\" hspace=\"30\" maxlength=\"30\"><br> \nPhone:&nbsp; \n<input name=\"phone\" type=\"text\" hspace=\"20\" maxlength=\"20\"><br> \nDepartment:&nbsp; \n<input name=\"department\" type=\"text\" hspace=\"30\" maxlength=\"30\"><br> \n<input type=\"Submit\" value=\"OK\"> \n</form> \n<br> \n</body> \n</html>\n"
  },
  {
    "path": "tests/syntax-tests/source/CMake/CMakeLists.txt",
    "content": "# This is a file for testing syntax highlighting.\ncmake_minimum_required(VERSION 3.13)\nproject(hello-bat VERSION 0.0.1 LANGUAGES C)\n\nset(SOURCE_DIR \"${CMAKE_CURRENT_SOURCE_DIR}/src/\")\nfile(GLOB_RECURSE SOURCES \"${SOURCE_DIR}/*.c\")\n\nadd_executable(hello-bat SOURCES)\n\nfind_package(assimp CONFIG)\ntarget_link_libraries(hello-bat assimp)\n\noption(\"ENABLE_TESTS\" OFF)\nif(ENABLE_TESTS)\n  add_subdirectory(\"${CMAKE_CURRENT_SOURCE_DIR}/tests/\")\nendif()\n"
  },
  {
    "path": "tests/syntax-tests/source/COBOL/payroll.cbl",
    "content": "IDENTIFICATION DIVISION.\nPROGRAM-ID. PAYROLL-CALC.\n\nDATA DIVISION.\nWORKING-STORAGE SECTION.\n    01 EMPLOYEE-DETAILS.\n        05 EMPLOYEE-NAME      PIC X(30).\n        05 HOURS-WORKED       PIC 99V9.\n        05 HOURLY-RATE        PIC 99V99.\n    01 PAY-CALCULATIONS.\n        05 GROSS-PAY          PIC 9(5)V99.\n        05 OVERTIME-HOURS     PIC 99V9.\n        05 OVERTIME-PAY       PIC 9(5)V99.\n        05 TAX-RATE           PIC V99 VALUE 0.10.\n        05 TAX-AMOUNT         PIC 9(5)V99.\n        05 NET-PAY            PIC 9(5)V99.\n\nPROCEDURE DIVISION.\nMAIN-LOGIC.\n    DISPLAY \"--- COBOL Payroll Calculator ---\".\n\n    DISPLAY \"Enter Employee Name: \".\n    ACCEPT EMPLOYEE-NAME.\n\n    DISPLAY \"Enter Hours Worked (e.g., 40.5): \".\n    ACCEPT HOURS-WORKED.\n\n    DISPLAY \"Enter Hourly Rate (e.g., 15.75): \".\n    ACCEPT HOURLY-RATE.\n\n    PERFORM CALCULATE-GROSS-PAY.\n    PERFORM CALCULATE-TAX.\n    PERFORM CALCULATE-NET-PAY.\n    PERFORM DISPLAY-RESULTS.\n\n    STOP RUN.\n\nCALCULATE-GROSS-PAY.\n    IF HOURS-WORKED > 40 THEN\n        COMPUTE OVERTIME-HOURS = HOURS-WORKED - 40\n        COMPUTE OVERTIME-PAY = OVERTIME-HOURS * HOURLY-RATE * 1.5\n        COMPUTE GROSS-PAY = (40 * HOURLY-RATE) + OVERTIME-PAY\n    ELSE\n        COMPUTE GROSS-PAY = HOURS-WORKED * HOURLY-RATE\n    END-IF.\n\nCALCULATE-TAX.\n    COMPUTE TAX-AMOUNT = GROSS-PAY * TAX-RATE.\n\nCALCULATE-NET-PAY.\n    COMPUTE NET-PAY = GROSS-PAY - TAX-AMOUNT.\n\nDISPLAY-RESULTS.\n    DISPLAY \"----------------------------------\".\n    DISPLAY \"Employee Name: \" EMPLOYEE-NAME.\n    DISPLAY \"Hours Worked:  \" HOURS-WORKED.\n    DISPLAY \"Hourly Rate:   \" HOURLY-RATE.\n    DISPLAY \"Gross Pay:     \" GROSS-PAY.\n    DISPLAY \"Tax (10%):     \" TAX-AMOUNT.\n    DISPLAY \"Net Pay:       \" NET-PAY.\n    DISPLAY \"----------------------------------\"."
  },
  {
    "path": "tests/syntax-tests/source/COBOL/test.cbl",
    "content": "IDENTIFICATION DIVISION.\nPROGRAM-ID. PAYROLL-CALC.\n\nDATA DIVISION.\nWORKING-STORAGE SECTION.\n    01 EMPLOYEE-DETAILS.\n        05 EMPLOYEE-NAME      PIC X(30).\n        05 HOURS-WORKED       PIC 99V9.\n        05 HOURLY-RATE        PIC 99V99.\n    01 PAY-CALCULATIONS.\n        05 GROSS-PAY          PIC 9(5)V99.\n        05 OVERTIME-HOURS     PIC 99V9.\n        05 OVERTIME-PAY       PIC 9(5)V99.\n        05 TAX-RATE           PIC V99 VALUE 0.10.\n        05 TAX-AMOUNT         PIC 9(5)V99.\n        05 NET-PAY            PIC 9(5)V99.\n\nPROCEDURE DIVISION.\nMAIN-LOGIC.\n    DISPLAY \"--- COBOL Payroll Calculator ---\".\n\n    DISPLAY \"Enter Employee Name: \".\n    ACCEPT EMPLOYEE-NAME.\n\n    DISPLAY \"Enter Hours Worked (e.g., 40.5): \".\n    ACCEPT HOURS-WORKED.\n\n    DISPLAY \"Enter Hourly Rate (e.g., 15.75): \".\n    ACCEPT HOURLY-RATE.\n\n    PERFORM CALCULATE-GROSS-PAY.\n    PERFORM CALCULATE-TAX.\n    PERFORM CALCULATE-NET-PAY.\n    PERFORM DISPLAY-RESULTS.\n\n    STOP RUN.\n\nCALCULATE-GROSS-PAY.\n    IF HOURS-WORKED > 40 THEN\n        COMPUTE OVERTIME-HOURS = HOURS-WORKED - 40\n        COMPUTE OVERTIME-PAY = OVERTIME-HOURS * HOURLY-RATE * 1.5\n        COMPUTE GROSS-PAY = (40 * HOURLY-RATE) + OVERTIME-PAY\n    ELSE\n        COMPUTE GROSS-PAY = HOURS-WORKED * HOURLY-RATE\n    END-IF.\n\nCALCULATE-TAX.\n    COMPUTE TAX-AMOUNT = GROSS-PAY * TAX-RATE.\n\nCALCULATE-NET-PAY.\n    COMPUTE NET-PAY = GROSS-PAY - TAX-AMOUNT.\n\nDISPLAY-RESULTS.\n    DISPLAY \"----------------------------------\".\n    DISPLAY \"Employee Name: \" EMPLOYEE-NAME.\n    DISPLAY \"Hours Worked:  \" HOURS-WORKED.\n    DISPLAY \"Hourly Rate:   \" HOURLY-RATE.\n    DISPLAY \"Gross Pay:     \" GROSS-PAY.\n    DISPLAY \"Tax (10%):     \" TAX-AMOUNT.\n    DISPLAY \"Net Pay:       \" NET-PAY.\n    DISPLAY \"----------------------------------\"."
  },
  {
    "path": "tests/syntax-tests/source/CSS/style.css",
    "content": "/*Scrolling*/\nhtml { scroll-behavior: smooth; }\n\n/*Header text*/\n.jumbotron {\n    background-image: linear-gradient(90deg, #849EB5, #30394A);\n    padding-bottom: 20px;\n    padding-top: 20px;\n    text-shadow: 0px 2px 4px #000000;\n}\n\n.container {\n    margin-top: -25px;\n}\n\n/*Background related*/\nbody {\n    background: #161616;\n}\n\n/*Text related CSS*/\nh4 {\n    font-size: 70px;\n    color: #FFFFFF;\n    font-family: News Cycle, serif;\n}\n\nh3 {\n    color: #e5e5e5;\n}\n\np {\n    font-size: 17px;\n    font-family: News Cycle, serif;\n    color: #DEDEDE;\n}\n\np2 {\n    font-size: 24px;\n    color: #DEDEDE;\n    font-family: News Cycle, serif;\n}\n\ndate {\n    font-family: News Cycle, serif;\n    font-style: italic;\n    font-size: 17px;\n    color: #DEDEDE;\n}\n\njobtitle {\n    font-size: 17px;\n    font-weight: bold;\n    font-family: News Cycle, serif;\n    color: #DEDEDE;\n}\n\njobtilenolink {\n    font-size: 17px;\n    font-weight: bold;\n    font-family: News Cycle, serif;\n    color: #DEDEDE;\n}\n\nli {\n    font-family: News Cycle, serif;\n    color: #DEDEDE;\n}\n\n\n\na {\n    color: #4A8ECC;\n}\n\np a:visited {\n    color: #4A8ECC;\n}\n\n.href {\n    color: #4A8ECC;\n}\n\na:visited {\n    color: #4A8ECC;\n}\n\np a:hover {\n    color: #4FB1F4;\n}\n\na:hover {\n    color: #4FB1F4;\n}\n\njobtitle:hover {\n    color: #4FB1F4;\n}\n\n/*Section*/\nsection {\n    background-color: #1B1B1B;\n    padding: 20px;\n    margin: -5px;\n    margin-bottom: 30px;\n    box-shadow: 0px 2px 4px rgba(0,0,0,0.3);\n}\n\n\n/*Icon related*/\n.icon {\n    position: relative;\n    top: 3px;\n    right: 5px;\n}\n"
  },
  {
    "path": "tests/syntax-tests/source/CSV/LICENSE.md",
    "content": "The `comma_in_quotes.csv` file\" has been added from https://github.com/maxogden/csv-spectrum under the following license:\n\nBSD 2-Clause License\n\nCopyright (c) [year], [fullname]\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this\n   list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright notice,\n   this list of conditions and the following disclaimer in the documentation\n   and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "tests/syntax-tests/source/CSV/comma-delimited.csv",
    "content": "foo,bar,baz,this|that,test,colors,cycle\n1.2,1.7,2.5,blah;cool,test,colors,cycle\n\n"
  },
  {
    "path": "tests/syntax-tests/source/CSV/comma_in_quotes.csv",
    "content": "first,last,address,city,zip\nJohn,Doe,120 any st.,\"Anytown, WW\",08123\na,b\n1,\"ha \n\"\"ha\"\" \nha\",120 any st.,\"Anytown, WW\",08123\n3,4,120 any st.,\"Anytown, WW\",08123\n"
  },
  {
    "path": "tests/syntax-tests/source/CSV/decimals_comma_decimal_point_pipe_delimited.csv",
    "content": "foo|bar|baz\n1,2|1,7|2,7\n1,5|8,5|-5,5\n"
  },
  {
    "path": "tests/syntax-tests/source/CSV/decimals_comma_decimal_point_semicolon_delimited.csv",
    "content": "foo;bar;baz\n1,2;1,7;2,7\n1,5;8,5;-5,5\n"
  },
  {
    "path": "tests/syntax-tests/source/CSV/simple.tsv",
    "content": "foo\tbar\tbaz|;,\ttest\thello world\ttsv\n1,2\t1,7\t2,7\ta b c\t\"hello\tagain\"\ttsv\n\";|,\"\t;|,\tbaz\ttest\t\"hello world\"\ttsv\n"
  },
  {
    "path": "tests/syntax-tests/source/Cabal/LICENSE.md",
    "content": "The `semantic.cabal` file has been added from https://github.com/github/semantic under the following license:\n\n```text\nMIT License\n\nCopyright (c) 2015-2019 GitHub\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"
  },
  {
    "path": "tests/syntax-tests/source/Cabal/semantic.cabal",
    "content": "cabal-version:       2.4\n\nname:                semantic\nversion:             0.11.0.1\nsynopsis:            Framework and executable for analyzing and diffing untrusted code.\ndescription:         Semantic is a library for parsing, analyzing, and comparing source code across many languages.\nhomepage:            http://github.com/github/semantic#readme\nbug-reports:         https://github.com/github/semantic/issues\nlicense:             MIT\nlicense-file:        LICENSE\nauthor:              The Semantic authors\nmaintainer:          opensource+semantic@github.com\ncopyright:           (c) 2015-2020 GitHub, Inc.\ncategory:            Language\nbuild-type:          Simple\nstability:           alpha\nextra-source-files:  README.md\n\ntested-with:         GHC == 8.10.1\n\nflag release\n  description: Build with optimizations on (for CI or deployment builds)\n  default:     False\n\n-- GHC extensions shared between targets\ncommon haskell\n  default-language:    Haskell2010\n  default-extensions:  StrictData\n  ghc-options:\n    -Weverything\n    -Wno-missing-local-signatures\n    -Wno-missing-import-lists\n    -Wno-implicit-prelude\n    -Wno-safe\n    -Wno-unsafe\n    -Wno-name-shadowing\n    -Wno-monomorphism-restriction\n    -Wno-missed-specialisations\n    -Wno-all-missed-specialisations\n    -Wno-star-is-type\n  cpp-options:\n    -DBAZEL_BUILD=0\n  if (impl(ghc >= 8.8))\n    ghc-options: -Wno-missing-deriving-strategies\n  if (impl(ghc >= 8.10))\n    ghc-options:\n      -Wno-missing-safe-haskell-mode\n      -Wno-prepositive-qualified-module\n\ncommon executable-flags\n  ghc-options:         -threaded -rtsopts \"-with-rtsopts=-N -A4m -n2m\"\n\nlibrary\n  import:              haskell\n  hs-source-dirs:      src\n  exposed-modules:     Control.Carrier.Parse.Measured\n                     , Control.Carrier.Parse.Simple\n                     -- Effects\n                     , Control.Effect.Parse\n                     , Control.Effect.Sum.Project\n                     , Control.Effect.Timeout\n                     -- General datatype definitions & generic algorithms\n                     , Data.Blob\n                     , Data.Blob.IO\n                     , Data.Duration\n                     , Data.Edit\n                     , Data.Error\n                     , Data.Flag\n                     , Data.Graph.Algebraic\n                     , Data.Handle\n                     , Data.Maybe.Exts\n                     , Data.Semigroup.App\n                     -- Parser glue\n                     , Parsing.Parser\n                     , Parsing.TreeSitter\n                     -- API\n                     , Semantic.Api\n                     , Semantic.Api.Bridge\n                     , Semantic.Api.StackGraph\n                     , Semantic.Api.Symbols\n                     , Semantic.Api.Terms\n                     , Semantic.CLI\n                     , Semantic.Config\n                     , Semantic.Env\n                     , Semantic.IO\n                     , Semantic.Task\n                     , Semantic.Task.Files\n                     , Semantic.Telemetry\n                     , Semantic.Telemetry.AsyncQueue\n                     , Semantic.Telemetry.Error\n                     , Semantic.Telemetry.Log\n                     , Semantic.Telemetry.Stat\n                     , Semantic.Util\n                     , Semantic.Util.Pretty\n                     , Semantic.Version\n                     -- Serialization\n                     , Serializing.Format\n                     , Serializing.SExpression.Precise\n                     -- Custom Prelude\n  autogen-modules:     Paths_semantic\n  other-modules:       Paths_semantic\n  -- Except in case of vendored dependencies, these deps should be expressed\n  -- as caret-operator bounds relative to a version in Stackage.\n  -- These are currently pinned to lts-13.13.\n  build-depends:\n    , aeson ^>= 1.4.2.0\n    , algebraic-graphs ^>= 0.3\n    , ansi-terminal >= 0.8.2 && <1\n    , async ^>= 2.2.1\n    , base >= 4.13 && < 5\n    , bytestring ^>= 0.10.8.2\n    , containers ^>= 0.6.0.1\n    , directory-tree ^>= 0.12.1\n    , filepath ^>= 1.4.2.1\n    , fused-effects ^>= 1.1\n    , ghc-prim >= 0.5 && < 0.7\n    , hostname ^>= 1.0\n    , hscolour ^>= 1.24.4\n    , lens >= 4.17 && < 4.20\n    , network ^>= 2.8.0.0\n    , network-uri ^>= 2.6.1.0\n    , optparse-applicative >= 0.14.3 && < 0.16\n    , pathtype ^>= 0.8.1\n    , pretty-show ^>= 1.9.5\n    , proto-lens >= 0.5 && < 0.8\n    , semantic-analysis ^>= 0\n    , semantic-ast\n    , semantic-codeql ^>= 0\n    , semantic-go ^>= 0\n    , semantic-java ^>= 0\n    , semantic-json ^>= 0\n    , semantic-php ^>= 0\n    , semantic-proto ^>= 0\n    , semantic-python ^>= 0\n    , semantic-ruby ^>= 0\n    , semantic-scope-graph ^>= 0\n    , semantic-source ^>= 0.1.0.1\n    , semantic-tags ^>= 0\n    , semantic-tsx ^>= 0\n    , semantic-typescript ^>= 0\n    , semilattices ^>= 0.0.0.3\n    , split ^>= 0.2.3.3\n    , stm-chans ^>= 3.0.0.4\n    , text ^>= 1.2.3.2\n    , time >= 1.8.0.2 && < 1.10\n    , tree-sitter ^>= 0.9.0.1\n    , tree-sitter-go ^>= 0.5.0.0\n    , tree-sitter-java ^>= 0.7.0.0\n    , tree-sitter-json ^>= 0.7.0.0\n    , tree-sitter-php ^>= 0.5.0.0\n    , tree-sitter-python ^>= 0.9.0.1\n    , tree-sitter-ql ^>= 0.1.0.1\n    , tree-sitter-ruby ^>= 0.5.0.0\n    , tree-sitter-tsx ^>= 0.5.0.0\n    , tree-sitter-typescript ^>= 0.5.0.0\n    , unix ^>= 2.7.2.2\n\nexecutable semantic\n  import:              haskell, executable-flags\n  hs-source-dirs:      app\n  main-is:             Main.hs\n  build-depends:\n    , base\n    , semantic\n\ntest-suite test\n  import:              haskell, executable-flags\n  type:                exitcode-stdio-1.0\n  hs-source-dirs:      test\n  main-is:             Spec.hs\n  other-modules:       Data.Graph.Spec\n                     , Data.Language.Spec\n                     , Data.Semigroup.App.Spec\n                     , Integration.Spec\n                     , Semantic.Spec\n                     , Semantic.CLI.Spec\n                     , Semantic.IO.Spec\n                     , Semantic.Stat.Spec\n                     , Tags.Spec\n                     , SpecHelpers\n                     , Generators\n                     , Properties\n  build-depends:\n    , algebraic-graphs ^>= 0.3\n    , base >= 4.13 && < 5\n    , bytestring ^>= 0.10.8.2\n    , fused-effects\n    , Glob ^>= 0.10.0\n    , hedgehog ^>= 1\n    , hspec >= 2.6 && <3\n    , hspec-expectations ^>= 0.8.2\n    , network ^>= 2.8.0.0\n    , pathtype ^>= 0.8.1\n    , semantic\n    , semantic-analysis\n    , semantic-ast\n    , semantic-proto\n    , semantic-source ^>= 0.1.0.1\n    , semantic-tags\n    , semilattices\n    , tasty ^>= 1.2.3\n    , tasty-golden ^>= 2.3.2\n    , tasty-hedgehog ^>= 1.0.0.1\n    , tasty-hspec ^>= 1.1.5.1\n    , tasty-hunit ^>= 0.10.0.2\n\ntest-suite parse-examples\n  import:              haskell, executable-flags\n  type:                exitcode-stdio-1.0\n  hs-source-dirs:      test\n  main-is:             Examples.hs\n  build-depends:\n    , async ^>= 2.2.1\n    , base\n    , fused-effects ^>= 1.1\n    , Glob\n    , lens >= 4.17 && < 4.20\n    , pathtype ^>= 0.8.1\n    , process ^>= 1.6.3.0\n    , semantic\n    , semantic-analysis ^>= 0\n    , semantic-ast\n    , semantic-proto ^>= 0\n    , tasty\n    , tasty-hunit\n    , text ^>= 1.2.3.2\n\nbenchmark benchmarks\n  import:              haskell, executable-flags\n  hs-source-dirs:      bench\n  type:                exitcode-stdio-1.0\n  main-is:             Main.hs\n  other-modules:       Tagging\n  ghc-options:         -static\n  build-depends:\n    , base\n    , fused-effects ^>= 1.1\n    , gauge ^>= 0.2.5\n    , Glob\n    , pathtype ^>= 0.8.1\n    , semantic\n    , semantic-analysis ^>= 0\n    , semantic-proto\n\nsource-repository head\n  type:     git\n  location: https://github.com/github/semantic\n"
  },
  {
    "path": "tests/syntax-tests/source/Clojure/test.clj",
    "content": "(ns clojure-sample.core\n    (:gen-class))\n  \n  (require '[clj-time.core :as t])\n  (require '[clj-time.format :as f])\n  \n  ;; Product record\n  (defrecord Product [id name available price])\n  \n  ;; Positional constructor\n  (def product1 (->Product \"1\" \"T-Shirt 1\" true 15.00))\n  \n  ;; Map constructor\n  (def product2 (map->Product\n                 {:id \"2\"\n                  :name \"T-Shirt 2\"\n                  :available true\n                  :price 20.00}))\n  \n  ;; Nested\n  (def product3 {:id \"1\"\n                 :name \"Product 1\"\n                 :available true\n                 :sellers [{:id \"1\"\n                            :name \"Seller 1\"\n                            :stock 3},\n                           {:id 2\n                            :name \"Seller 2\"\n                            :stock 5}]})\n  \n  ;; Set\n  (def categories #{\"shirts\" \"shoes\" \"belts\"})\n  \n  ;; List\n  (def wishlist '(1 2))\n  \n  ;; Recursion\n  (defn factorial [value] (cond\n                            (<= value 1) 1\n                            :else (* value (factorial (- value 1)))))\n  \n  (def basic-formatter (f/formatter \"YYYY-MM-dd hh:mm:ss\"))\n  (defn now [] (f/unparse basic-formatter (t/now)))\n  (defn log\n    ([] (println (now) \"No message\"))\n    ([message] (println (now)  message)))\n  \n  (defn -main\n    [& args]\n    (println (:id product1))\n    (println (:name product2))\n    (println (:name (get (:sellers product3) 0)))\n    (println (first categories))\n    (println wishlist)\n    (println (factorial 5))\n    (log)\n    (log \"Message\"))\n  \n"
  },
  {
    "path": "tests/syntax-tests/source/CoffeeScript/LICENSE.md",
    "content": "The `coffeescript.coffee` file has been added from https://github.com/jashkenas/coffeescript under the following license:\n\n```text\nCopyright (c) 2009-2018 Jeremy Ashkenas\n\nPermission is hereby granted, free of charge, to any person\nobtaining a copy of this software and associated documentation\nfiles (the \"Software\"), to deal in the Software without\nrestriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following\nconditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\nOF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\nHOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\nOTHER DEALINGS IN THE SOFTWARE.\n```\n"
  },
  {
    "path": "tests/syntax-tests/source/CoffeeScript/coffeescript.coffee",
    "content": "# CoffeeScript can be used both on the server, as a command-line compiler based\n# on Node.js/V8, or to run CoffeeScript directly in the browser. This module\n# contains the main entry functions for tokenizing, parsing, and compiling\n# source CoffeeScript into JavaScript.\n\n{Lexer}       = require './lexer'\n{parser}      = require './parser'\nhelpers       = require './helpers'\nSourceMap     = require './sourcemap'\n# Require `package.json`, which is two levels above this file, as this file is\n# evaluated from `lib/coffeescript`.\npackageJson   = require '../../package.json'\n\n# The current CoffeeScript version number.\nexports.VERSION = packageJson.version\n\nexports.FILE_EXTENSIONS = FILE_EXTENSIONS = ['.coffee', '.litcoffee', '.coffee.md']\n\n# Expose helpers for testing.\nexports.helpers = helpers\n\n# Function that allows for btoa in both nodejs and the browser.\nbase64encode = (src) -> switch\n  when typeof Buffer is 'function'\n    Buffer.from(src).toString('base64')\n  when typeof btoa is 'function'\n    # The contents of a `<script>` block are encoded via UTF-16, so if any extended\n    # characters are used in the block, btoa will fail as it maxes out at UTF-8.\n    # See https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding#The_Unicode_Problem\n    # for the gory details, and for the solution implemented here.\n    btoa encodeURIComponent(src).replace /%([0-9A-F]{2})/g, (match, p1) ->\n      String.fromCharCode '0x' + p1\n  else\n    throw new Error('Unable to base64 encode inline sourcemap.')\n\n# Function wrapper to add source file information to SyntaxErrors thrown by the\n# lexer/parser/compiler.\nwithPrettyErrors = (fn) ->\n  (code, options = {}) ->\n    try\n      fn.call @, code, options\n    catch err\n      throw err if typeof code isnt 'string' # Support `CoffeeScript.nodes(tokens)`.\n      throw helpers.updateSyntaxError err, code, options.filename\n\n# For each compiled file, save its source in memory in case we need to\n# recompile it later. We might need to recompile if the first compilation\n# didn’t create a source map (faster) but something went wrong and we need\n# a stack trace. Assuming that most of the time, code isn’t throwing\n# exceptions, it’s probably more efficient to compile twice only when we\n# need a stack trace, rather than always generating a source map even when\n# it’s not likely to be used. Save in form of `filename`: [`(source)`]\nsources = {}\n# Also save source maps if generated, in form of `(source)`: [`(source map)`].\nsourceMaps = {}\n\n# This is exported to enable an external module to implement caching of\n# compilation results. When the compiled js source is loaded from cache, the\n# original coffee code should be added with this method in order to enable the\n# Error.prepareStackTrace below to correctly adjust the stack trace for the\n# corresponding file (the source map will be generated on demand).\nexports.registerCompiled = registerCompiled = (filename, source, sourcemap) ->\n\n  sources[filename] ?= []\n  sources[filename].push source\n\n  if sourcemap?\n    sourceMaps[filename] ?= []\n    sourceMaps[filename].push sourcemap\n\n# Compile CoffeeScript code to JavaScript, using the Coffee/Jison compiler.\n#\n# If `options.sourceMap` is specified, then `options.filename` must also be\n# specified. All options that can be passed to `SourceMap#generate` may also\n# be passed here.\n#\n# This returns a javascript string, unless `options.sourceMap` is passed,\n# in which case this returns a `{js, v3SourceMap, sourceMap}`\n# object, where sourceMap is a sourcemap.coffee#SourceMap object, handy for\n# doing programmatic lookups.\nexports.compile = compile = withPrettyErrors (code, options = {}) ->\n  # Clone `options`, to avoid mutating the `options` object passed in.\n  options = Object.assign {}, options\n  # Always generate a source map if no filename is passed in, since without a\n  # a filename we have no way to retrieve this source later in the event that\n  # we need to recompile it to get a source map for `prepareStackTrace`.\n  generateSourceMap = options.sourceMap or options.inlineMap or not options.filename?\n  filename = options.filename or '<anonymous>'\n\n  checkShebangLine filename, code\n\n  map = new SourceMap if generateSourceMap\n\n  tokens = lexer.tokenize code, options\n\n  # Pass a list of referenced variables, so that generated variables won’t get\n  # the same name.\n  options.referencedVars = (\n    token[1] for token in tokens when token[0] is 'IDENTIFIER'\n  )\n\n  # Check for import or export; if found, force bare mode.\n  unless options.bare? and options.bare is yes\n    for token in tokens\n      if token[0] in ['IMPORT', 'EXPORT']\n        options.bare = yes\n        break\n\n  nodes = parser.parse tokens\n  # If all that was requested was a POJO representation of the nodes, e.g.\n  # the abstract syntax tree (AST), we can stop now and just return that\n  # (after fixing the location data for the root/`File`»`Program` node,\n  # which might’ve gotten misaligned from the original source due to the\n  # `clean` function in the lexer).\n  if options.ast\n    nodes.allCommentTokens = helpers.extractAllCommentTokens tokens\n    sourceCodeNumberOfLines = (code.match(/\\r?\\n/g) or '').length + 1\n    sourceCodeLastLine = /.*$/.exec(code)[0] # `.*` matches all but line break characters.\n    ast = nodes.ast options\n    range = [0, code.length]\n    ast.start = ast.program.start = range[0]\n    ast.end = ast.program.end = range[1]\n    ast.range = ast.program.range = range\n    ast.loc.start = ast.program.loc.start = {line: 1, column: 0}\n    ast.loc.end.line = ast.program.loc.end.line = sourceCodeNumberOfLines\n    ast.loc.end.column = ast.program.loc.end.column = sourceCodeLastLine.length\n    ast.tokens = tokens\n    return ast\n\n  fragments = nodes.compileToFragments options\n\n  currentLine = 0\n  currentLine += 1 if options.header\n  currentLine += 1 if options.shiftLine\n  currentColumn = 0\n  js = \"\"\n  for fragment in fragments\n    # Update the sourcemap with data from each fragment.\n    if generateSourceMap\n      # Do not include empty, whitespace, or semicolon-only fragments.\n      if fragment.locationData and not /^[;\\s]*$/.test fragment.code\n        map.add(\n          [fragment.locationData.first_line, fragment.locationData.first_column]\n          [currentLine, currentColumn]\n          {noReplace: true})\n      newLines = helpers.count fragment.code, \"\\n\"\n      currentLine += newLines\n      if newLines\n        currentColumn = fragment.code.length - (fragment.code.lastIndexOf(\"\\n\") + 1)\n      else\n        currentColumn += fragment.code.length\n\n    # Copy the code from each fragment into the final JavaScript.\n    js += fragment.code\n\n  if options.header\n    header = \"Generated by CoffeeScript #{@VERSION}\"\n    js = \"// #{header}\\n#{js}\"\n\n  if generateSourceMap\n    v3SourceMap = map.generate options, code\n\n  if options.transpile\n    if typeof options.transpile isnt 'object'\n      # This only happens if run via the Node API and `transpile` is set to\n      # something other than an object.\n      throw new Error 'The transpile option must be given an object with options to pass to Babel'\n\n    # Get the reference to Babel that we have been passed if this compiler\n    # is run via the CLI or Node API.\n    transpiler = options.transpile.transpile\n    delete options.transpile.transpile\n\n    transpilerOptions = Object.assign {}, options.transpile\n\n    # See https://github.com/babel/babel/issues/827#issuecomment-77573107:\n    # Babel can take a v3 source map object as input in `inputSourceMap`\n    # and it will return an *updated* v3 source map object in its output.\n    if v3SourceMap and not transpilerOptions.inputSourceMap?\n      transpilerOptions.inputSourceMap = v3SourceMap\n    transpilerOutput = transpiler js, transpilerOptions\n    js = transpilerOutput.code\n    if v3SourceMap and transpilerOutput.map\n      v3SourceMap = transpilerOutput.map\n\n  if options.inlineMap\n    encoded = base64encode JSON.stringify v3SourceMap\n    sourceMapDataURI = \"//# sourceMappingURL=data:application/json;base64,#{encoded}\"\n    sourceURL = \"//# sourceURL=#{options.filename ? 'coffeescript'}\"\n    js = \"#{js}\\n#{sourceMapDataURI}\\n#{sourceURL}\"\n\n  registerCompiled filename, code, map\n\n  if options.sourceMap\n    {\n      js\n      sourceMap: map\n      v3SourceMap: JSON.stringify v3SourceMap, null, 2\n    }\n  else\n    js\n\n# Tokenize a string of CoffeeScript code, and return the array of tokens.\nexports.tokens = withPrettyErrors (code, options) ->\n  lexer.tokenize code, options\n\n# Parse a string of CoffeeScript code or an array of lexed tokens, and\n# return the AST. You can then compile it by calling `.compile()` on the root,\n# or traverse it by using `.traverseChildren()` with a callback.\nexports.nodes = withPrettyErrors (source, options) ->\n  source = lexer.tokenize source, options if typeof source is 'string'\n  parser.parse source\n\n# This file used to export these methods; leave stubs that throw warnings\n# instead. These methods have been moved into `index.coffee` to provide\n# separate entrypoints for Node and non-Node environments, so that static\n# analysis tools don’t choke on Node packages when compiling for a non-Node\n# environment.\nexports.run = exports.eval = exports.register = ->\n  throw new Error 'require index.coffee, not this file'\n\n# Instantiate a Lexer for our use here.\nlexer = new Lexer\n\n# The real Lexer produces a generic stream of tokens. This object provides a\n# thin wrapper around it, compatible with the Jison API. We can then pass it\n# directly as a “Jison lexer.”\nparser.lexer =\n  yylloc:\n    range: []\n  options:\n    ranges: yes\n  lex: ->\n    token = parser.tokens[@pos++]\n    if token\n      [tag, @yytext, @yylloc] = token\n      parser.errorToken = token.origin or token\n      @yylineno = @yylloc.first_line\n    else\n      tag = ''\n    tag\n  setInput: (tokens) ->\n    parser.tokens = tokens\n    @pos = 0\n  upcomingInput: -> ''\n\n# Make all the AST nodes visible to the parser.\nparser.yy = require './nodes'\n\n# Override Jison's default error handling function.\nparser.yy.parseError = (message, {token}) ->\n  # Disregard Jison's message, it contains redundant line number information.\n  # Disregard the token, we take its value directly from the lexer in case\n  # the error is caused by a generated token which might refer to its origin.\n  {errorToken, tokens} = parser\n  [errorTag, errorText, errorLoc] = errorToken\n\n  errorText = switch\n    when errorToken is tokens[tokens.length - 1]\n      'end of input'\n    when errorTag in ['INDENT', 'OUTDENT']\n      'indentation'\n    when errorTag in ['IDENTIFIER', 'NUMBER', 'INFINITY', 'STRING', 'STRING_START', 'REGEX', 'REGEX_START']\n      errorTag.replace(/_START$/, '').toLowerCase()\n    else\n      helpers.nameWhitespaceCharacter errorText\n\n  # The second argument has a `loc` property, which should have the location\n  # data for this token. Unfortunately, Jison seems to send an outdated `loc`\n  # (from the previous token), so we take the location information directly\n  # from the lexer.\n  helpers.throwSyntaxError \"unexpected #{errorText}\", errorLoc\n\n# Based on http://v8.googlecode.com/svn/branches/bleeding_edge/src/messages.js\n# Modified to handle sourceMap\nformatSourcePosition = (frame, getSourceMapping) ->\n  filename = undefined\n  fileLocation = ''\n\n  if frame.isNative()\n    fileLocation = \"native\"\n  else\n    if frame.isEval()\n      filename = frame.getScriptNameOrSourceURL()\n      fileLocation = \"#{frame.getEvalOrigin()}, \" unless filename\n    else\n      filename = frame.getFileName()\n\n    filename or= \"<anonymous>\"\n\n    line = frame.getLineNumber()\n    column = frame.getColumnNumber()\n\n    # Check for a sourceMap position\n    source = getSourceMapping filename, line, column\n    fileLocation =\n      if source\n        \"#{filename}:#{source[0]}:#{source[1]}\"\n      else\n        \"#{filename}:#{line}:#{column}\"\n\n  functionName = frame.getFunctionName()\n  isConstructor = frame.isConstructor()\n  isMethodCall = not (frame.isToplevel() or isConstructor)\n\n  if isMethodCall\n    methodName = frame.getMethodName()\n    typeName = frame.getTypeName()\n\n    if functionName\n      tp = as = ''\n      if typeName and functionName.indexOf typeName\n        tp = \"#{typeName}.\"\n      if methodName and functionName.indexOf(\".#{methodName}\") isnt functionName.length - methodName.length - 1\n        as = \" [as #{methodName}]\"\n\n      \"#{tp}#{functionName}#{as} (#{fileLocation})\"\n    else\n      \"#{typeName}.#{methodName or '<anonymous>'} (#{fileLocation})\"\n  else if isConstructor\n    \"new #{functionName or '<anonymous>'} (#{fileLocation})\"\n  else if functionName\n    \"#{functionName} (#{fileLocation})\"\n  else\n    fileLocation\n\ngetSourceMap = (filename, line, column) ->\n  # Skip files that we didn’t compile, like Node system files that appear in\n  # the stack trace, as they never have source maps.\n  return null unless filename is '<anonymous>' or filename.slice(filename.lastIndexOf('.')) in FILE_EXTENSIONS\n\n  if filename isnt '<anonymous>' and sourceMaps[filename]?\n    return sourceMaps[filename][sourceMaps[filename].length - 1]\n  # CoffeeScript compiled in a browser or via `CoffeeScript.compile` or `.run`\n  # may get compiled with `options.filename` that’s missing, which becomes\n  # `<anonymous>`; but the runtime might request the stack trace with the\n  # filename of the script file. See if we have a source map cached under\n  # `<anonymous>` that matches the error.\n  else if sourceMaps['<anonymous>']?\n    # Work backwards from the most recent anonymous source maps, until we find\n    # one that works. This isn’t foolproof; there is a chance that multiple\n    # source maps will have line/column pairs that match. But we have no other\n    # way to match them. `frame.getFunction().toString()` doesn’t always work,\n    # and it’s not foolproof either.\n    for map in sourceMaps['<anonymous>'] by -1\n      sourceLocation = map.sourceLocation [line - 1, column - 1]\n      return map if sourceLocation?[0]? and sourceLocation[1]?\n\n  # If all else fails, recompile this source to get a source map. We need the\n  # previous section (for `<anonymous>`) despite this option, because after it\n  # gets compiled we will still need to look it up from\n  # `sourceMaps['<anonymous>']` in order to find and return it. That’s why we\n  # start searching from the end in the previous block, because most of the\n  # time the source map we want is the last one.\n  if sources[filename]?\n    answer = compile sources[filename][sources[filename].length - 1],\n      filename: filename\n      sourceMap: yes\n      literate: helpers.isLiterate filename\n    answer.sourceMap\n  else\n    null\n\n# Based on [michaelficarra/CoffeeScriptRedux](http://goo.gl/ZTx1p)\n# NodeJS / V8 have no support for transforming positions in stack traces using\n# sourceMap, so we must monkey-patch Error to display CoffeeScript source\n# positions.\nError.prepareStackTrace = (err, stack) ->\n  getSourceMapping = (filename, line, column) ->\n    sourceMap = getSourceMap filename, line, column\n    answer = sourceMap.sourceLocation [line - 1, column - 1] if sourceMap?\n    if answer? then [answer[0] + 1, answer[1] + 1] else null\n\n  frames = for frame in stack\n    break if frame.getFunction() is exports.run\n    \"    at #{formatSourcePosition frame, getSourceMapping}\"\n\n  \"#{err.toString()}\\n#{frames.join '\\n'}\\n\"\n\ncheckShebangLine = (file, input) ->\n  firstLine = input.split(/$/m)[0]\n  rest = firstLine?.match(/^#!\\s*([^\\s]+\\s*)(.*)/)\n  args = rest?[2]?.split(/\\s/).filter (s) -> s isnt ''\n  if args?.length > 1\n    console.error '''\n      The script to be run begins with a shebang line with more than one\n      argument. This script will fail on platforms such as Linux which only\n      allow a single argument.\n    '''\n    console.error \"The shebang line was: '#{firstLine}' in file '#{file}'\"\n    console.error \"The arguments were: #{JSON.stringify args}\"\n"
  },
  {
    "path": "tests/syntax-tests/source/Cpp/test.cpp",
    "content": "#include <bits/stdc++.h> // includes most of the useful libraries\n#include \"mainwindow.h\"\n\nusing namespace std;\n\n/* This C program was submitted to help bat\n * with its syntax highlighting tests\n */\n\nbool test_function(int x, int y)\n{\n    return (x == y || x + y == x * y);\n}\n\nMainWindow::MainWindow(QWidget *parent)\n    : QMainWindow(parent), ui(new Ui::MainWindow)\n{\n    ui->setupUi(this);\n    resize(560, 420);\n    // Image menu\n    connect(ui->actionOpen, &QAction::triggered, this, &MainWindow::open);\n    MainWindow::~MainWindow()\n    {\n        delete ui;\n    }\n    int y = ui->graphicsView->size().height() - image.height();\n    int x = ui->graphicsView->size().width() - image.width();\n\n    void MainWindow::showImage()\n    {\n        // Reset scale\n        ui->graphicsView->resetMatrix();\n\n        statusBar()->showMessage(QString(\"%1 %2x%3px %4 kB\").arg(file.fileName()).arg(image.width()).arg(image.height()).arg(QFile(currentFile).size() / 1000.0));\n    }\n}\n\nint main()\n{\n    int tc;\n    cin >> tc;\n    while (tc--) // for each test case\n    {\n        int n;\n        cin >> n; // take n\n        vector<pair<int, string>> v;\n\n        int a[n], b[n];\n\n        for (int i = 0; i < n; i++)\n            cin >> a[i]; // take arrays\n        for (int i = 0; i < n; i++)\n            cin >> b[i];\n\n        priority_queue<int> pq; // inbuilt data structure - max heap (available in the bits/stdc++)\n\n        for (int i = 0; i < n; i++)\n            pq.push(a[i]); // push elements into heap\n\n        for (int i = 0; i < n; i++) // for each element in B\n        {\n            int top_ele = pq.top();  // max element in heap\n            pq.pop();                // deletion\n            pq.push(top_ele ^ b[i]); // push after operation\n        }\n\n        for (int i = n - 1; i >= 0; i--) // restore A in ascending order\n        {\n            a[i] = pq.top();\n            pq.pop();\n        }\n\n        for (int i = 0; i < n; i++)\n            cout << a[i] << \" \"; // print A\n\n        cout << endl;\n    }\n    return 0;\n}\n"
  },
  {
    "path": "tests/syntax-tests/source/CpuInfo/test.cpuinfo",
    "content": "processor    : 0\nmodel name    : ARMv7 Processor rev 3 (v7l)\nBogoMIPS    : 270.00\nFeatures    : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32\nCPU implementer    : 0x41\nCPU architecture: 7\nCPU variant    : 0x0\nCPU part    : 0xd08\nCPU revision    : 3\n\nprocessor    : 1\nmodel name    : ARMv7 Processor rev 3 (v7l)\nBogoMIPS    : 270.00\nFeatures    : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32\nCPU implementer    : 0x41\nCPU architecture: 7\nCPU variant    : 0x0\nCPU part    : 0xd08\nCPU revision    : 3\n\nprocessor    : 2\nmodel name    : ARMv7 Processor rev 3 (v7l)\nBogoMIPS    : 270.00\nFeatures    : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32\nCPU implementer    : 0x41\nCPU architecture: 7\nCPU variant    : 0x0\nCPU part    : 0xd08\nCPU revision    : 3\n\nprocessor    : 3\nmodel name    : ARMv7 Processor rev 3 (v7l)\nBogoMIPS    : 270.00\nFeatures    : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32\nCPU implementer    : 0x41\nCPU architecture: 7\nCPU variant    : 0x0\nCPU part    : 0xd08\nCPU revision    : 3\n\nHardware    : BCM2711\nRevision    : b03111\nSerial        : 1000000095fd9fc5\nModel        : Raspberry Pi 4 Model B Rev 1.1\n\n"
  },
  {
    "path": "tests/syntax-tests/source/Crontab/crontab.tab",
    "content": "0 2 * * * /bin/sh backup.sh\n*/10 * * * * /home/maverick/check-disk-space\n0 5,17 * * * /scripts/script.sh\n0 2 * * sun  [ $(date +%d) -le 07 ] && /script/script.sh\n@daily /scripts/script.sh\n@reboot /scripts/script.sh\n\nMAIL=bob\n"
  },
  {
    "path": "tests/syntax-tests/source/Crystal/test.cr",
    "content": "# An example file to test Crystal syntax highlighting in bat\nmy_var : Nil = nil\nmy_var_also : Int32 = 42\nmy_other_var = 4.0\nanother_float = 4.0_f32\nanother_float_2 = 4e10\nanother_float_3 = -0.5\nbig_one = 1_000_000.111_111e-4\nternary = 1 > 2 : 3 ? 4\nmy_symbol = :ThisOne?\nmy_other_symbol = :No_That_One!\nplus = :+\nminus = :-\nmy_string : String = \"this string right here, with an interpolated value of #{my_var_also}\"\nmy_array : Array(Int32) = [1,2,3,4]\nmy_tuple : Tuple(Int32, Int32, Int32, Int32) = {1,2,3,4}\nmy_named_tuple : NamedTuple(one: Int32, two: Int32) = {\"one\": 1, \"two\": 2}\nmy_hash : Hash(String, Int32) = {\"one\" => 1, \"two\" => 2}\nmy_proc : Proc(Int32, Int32) = ->(x : Int32){ x * x}\nmy_other_proc : Proc(String) = ->{ \"Wow, neat!\" }\nputs my_string\nputs(my_string)\n\nenum Colors\n  Red\n  Green\n  Blue\nend\n\nclass Greeter\n  @instance_field = Colors::Red\n  @@class_field = Colors::Green\n\n  def initialize(@name = \"world\")\n  end\n\n  def greet \n    puts \"Hello, #{@name}\"\n  end\n\n  def render_greeting : String\n    \"Hello, #{@name}\"\n  end\n\n  def with_greeting\n    yield render_greeting\n  end\n\n  def is_color_default?\n    @instance_field == @@class_field\n  end\n\n  def self.greet_static(name : String) : Unit\n    puts \"Hello, #{name}\"\n  end\nend\n\ngreeter = Greeter.new(\"bat\")\ngreeter.with_greeting do |greeting|\n  puts greeting\nend\n\nputs <<-EOF\n  this is a heredoc and it has a value in it of #{greeter.render_greeting}!\nEOF\n\n# This is a command:\n`echo yay!`\n$?.success?\n\nmy_color = Colors::Red\n\nputs \n  case my_color\n  when Colors::Red, .red?\n    \"Red\"\n  when Colors::Green, .green?\n    \"Green\"\n  when Colors::Blue, .blue?\n    \"Blue\"\n  else\n    \"I dunno, man. Chartreuse? Maroon?\"\n  end\n\nclass MyGenericClass(T)\n  def initialize(@wrapped_value : T)\n  end\n\n  def get\n    return @wrapped_value\n  end\nend\n\n\ndef do_stuff_with_range(r : Range(Int|String))\n  return if r.empty?\n  return unless !(r.empty?)\n  r.each do |item|\n    if /e/.match(item.to_s)\n      puts \"#{item} contains the letter e!\"\n    elsif item.to_s.empty?\n      break\n    else\n      next # this is unnecessary, but whatever\n    end\n  end\nend\n\n\nmacro print_range(range)\n  {% for i in range %}\n    puts {{i.id}}\n  {% end %}\nend\n\nprint_range(1..3)\nprint_range(1...3)\n"
  },
  {
    "path": "tests/syntax-tests/source/D/test.d",
    "content": "// selective import\nimport std.stdio : writeln, writefln;\n// non-selective import\nimport std.algorithm;\n\n/* a multiline comment\n*\n* this function is safe because it doesn't use pointer arithmetic\n*/\nint the_ultimate_answer() @safe {\n\t// assert1on\n\tassert(1 != 2);\n        // now we can safely return our answer\t\n\treturn 42;\n}\n\nvoid main()\n{\n    // function call with string literal\n    writeln(\"Hello World!\");\n\n    // an int array declaration\n    int[] arr1 = [1, 2, 3];\n    // an immutable double\n    immutable double pi = 3.14;\n    // a mutable double\n    double d1 = pi;\n    // a pointer\n    double* dp1 = &d1;\n    // another pointer to the same thingy\n    auto a1 = &d1;\n    // a constant bool\n    const bool b1 = true;\n    if (b1) {\n\t    // another function call \n\t    writefln(\"%s\\n%s\\n%s\\n\", arr1, d1, the_ultimate_answer());\n    }\n    else if (!b1) {\n\t    writeln(\"this seems wrong\");\n    }\n    else {\n\t    writeln(\"I'm giving up, this is too crazy for me\");\n    }\n}\n"
  },
  {
    "path": "tests/syntax-tests/source/Dart/inner_comment.dart",
    "content": "return Object(\n  Object(\n    // Not highlighted as a comment\n  )\n)\n"
  },
  {
    "path": "tests/syntax-tests/source/Dart/test.dart",
    "content": "/* array sorting alogorithm */\nint partition(List list, int low, int high) {\n  if (list == null || list.length == 0) return 0;\n  int pivot = list[high];\n  int i = low - 1;\n\n  void swap(List list, int i, int j) {\n    int temp = list[i];\n    list[i] = list[j];\n    list[j] = temp;\n  }\n\n  for (int j = low; j < high; j++) {\n    if (list[j] <= pivot) {\n      i++;\n      swap(list, i, j);\n    }\n    swap(list, i + 1, high);\n    return i + 1;\n  }\n}\n\nvoid quickSort(List list, int low, int high) {\n  if (low < high) {\n    int pi = partition(list, low, high);\n    quickSort(list, low, pi - 1);\n    quickSort(list, pi + 1, high);\n  }\n}\n\nvoid merge(List list, int leftIndex, int middleIndex, int rightIndex) {\n  int leftSize = middleIndex - leftIndex + 1;\n  int rightSize = rightIndex - middleIndex;\n\n  List leftList = new List(leftSize);\n  List rightList = new List(rightSize);\n\n  for (int i = 0; i < leftSize; i++) leftList[i] = list[leftIndex + i];\n  for (int j = 0; j < rightSize; j++) rightList[j] = list[middleIndex + j + 1];\n\n  int i = 0, j = 0;\n  int k = leftIndex;\n\n  while (i < leftSize && j < rightSize) {\n    if (leftList[i] <= rightList[j]) {\n      list[k] = leftList[i];\n      i++;\n    } else {\n      list[k] = rightList[j];\n      j++;\n    }\n    k++;\n  }\n\n  while (i < leftSize) {\n    list[k] = leftList[i];\n    i++;\n    k++;\n  }\n\n  while (j < rightSize) {\n    list[k] = rightList[j];\n    j++;\n    k++;\n  }\n}\n\nvoid mergeSort(List list, int leftIndex, int rightIndex) {\n  if (leftIndex < rightIndex) {\n    int middleIndex = (rightIndex + leftIndex) ~/ 2;\n\n    mergeSort(list, leftIndex, middleIndex);\n    mergeSort(list, middleIndex + 1, rightIndex);\n\n    merge(list, leftIndex, middleIndex, rightIndex);\n  }\n}\n\n/* variables */\nvar name = 'Voyager I';\nvar year = 1977;\nvar antennaDiameter = 3.7;\nvar flybyObjects = ['Jupiter', 'Saturn', 'Uranus', 'Neptune'];\nvar image = {\n  'tags': ['saturn'],\n  'url': '//path/to/saturn.jpg'\n};\n\n/*classes */\nclass Spacecraft {\n  String name;\n  DateTime launchDate;\n  Spacecraft(this.name, this.launchDate) {}\n\n  // Named constructor that forwards to the default one.\n  Spacecraft.unlaunched(String name) : this(name, null);\n\n  int get launchYear => launchDate?.year;\n\n  void describe() {\n    print('Spacecraft: $name');\n    if (launchDate != null) {\n      int years = DateTime.now().difference(launchDate).inDays ~/ 365;\n      print('Launched: $launchYear ($years years ago)');\n    } else {\n      print('Unlaunched');\n    }\n  }\n}\n\n/* Mixins */\nclass PilotedCraft extends Spacecraft with Piloted {\n  // ···\n}\n\n/* Interfaces and abstract classes */\nclass MockSpaceship implements Spacecraft {\n  // ···\n}\n\n/* async */\nFuture<void> printWithDelay(String message) {\n  return Future.delayed(const Duration(seconds: 2)).then((_) {\n    print(message);\n  });\n}\n\nStream<String> report(Spacecraft craft, Iterable<String> objects) async* {\n  for (var object in objects) {\n    await Future.delayed(const Duration(seconds: 2));\n    yield '${craft.name} flies by $object';\n  }\n}\n"
  },
  {
    "path": "tests/syntax-tests/source/Diff/82e7786e747b1fcfac1f963ae6415a22ec9caae1.diff",
    "content": "diff --git a/CHANGELOG.md b/CHANGELOG.md\nindex ced88213..973eba9a 100644\n--- a/CHANGELOG.md\n+++ b/CHANGELOG.md\n@@ -2,6 +2,11 @@\n \n \n ## Features\n+\n+- Add a new `--diff` option that can be used to only show lines surrounding\n+  Git changes, i.e. added, removed or modified lines. The amount of additional\n+  context can be controlled with `--diff-context=N`. See #23 and #940\n+\n ## Bugfixes\n ## Other\n ## `bat` as a library\ndiff --git a/src/bin/bat/app.rs b/src/bin/bat/app.rs\nindex e5221455..f0f519ea 100644\n--- a/src/bin/bat/app.rs\n+++ b/src/bin/bat/app.rs\n@@ -15,7 +15,7 @@ use console::Term;\n \n use bat::{\n     assets::HighlightingAssets,\n-    config::Config,\n+    config::{Config, VisibleLines},\n     error::*,\n     input::Input,\n     line_range::{HighlightedLineRanges, LineRange, LineRanges},\n@@ -196,13 +196,23 @@ impl App {\n                     }\n                 })\n                 .unwrap_or_else(|| String::from(HighlightingAssets::default_theme())),\n-            line_ranges: self\n-                .matches\n-                .values_of(\"line-range\")\n-                .map(|vs| vs.map(LineRange::from).collect())\n-                .transpose()?\n-                .map(LineRanges::from)\n-                .unwrap_or_default(),\n+            visible_lines: if self.matches.is_present(\"diff\") {\n+                VisibleLines::DiffContext(\n+                    self.matches\n+                        .value_of(\"diff-context\")\n+                        .and_then(|t| t.parse().ok())\n+                        .unwrap_or(2),\n+                )\n+            } else {\n+                VisibleLines::Ranges(\n+                    self.matches\n+                        .values_of(\"line-range\")\n+                        .map(|vs| vs.map(LineRange::from).collect())\n+                        .transpose()?\n+                        .map(LineRanges::from)\n+                        .unwrap_or_default(),\n+                )\n+            },\n             style_components,\n             syntax_mapping,\n             pager: self.matches.value_of(\"pager\"),\ndiff --git a/src/bin/bat/clap_app.rs b/src/bin/bat/clap_app.rs\nindex c7344991..85edefde 100644\n--- a/src/bin/bat/clap_app.rs\n+++ b/src/bin/bat/clap_app.rs\n@@ -105,6 +105,34 @@ pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> {\n                             data to bat from STDIN when bat does not otherwise know \\\n                             the filename.\"),\n         )\n+        .arg(\n+            Arg::with_name(\"diff\")\n+                .long(\"diff\")\n+                .help(\"Only show lines that have been added/removed/modified.\")\n+                .long_help(\n+                    \"Only show lines that have been added/removed/modified with respect \\\n+                     to the Git index. Use --diff-context=N to control how much context you want to see.\",\n+                ),\n+        )\n+        .arg(\n+            Arg::with_name(\"diff-context\")\n+                .long(\"diff-context\")\n+                .overrides_with(\"diff-context\")\n+                .takes_value(true)\n+                .value_name(\"N\")\n+                .validator(\n+                    |n| {\n+                        n.parse::<usize>()\n+                            .map_err(|_| \"must be a number\")\n+                            .map(|_| ()) // Convert to Result<(), &str>\n+                            .map_err(|e| e.to_string())\n+                    }, // Convert to Result<(), String>\n+                )\n+                .hidden_short_help(true)\n+                .long_help(\n+                    \"Include N lines of context around added/removed/modified lines when using '--diff'.\",\n+                ),\n+        )\n         .arg(\n             Arg::with_name(\"tabs\")\n                 .long(\"tabs\")\n@@ -339,6 +367,7 @@ pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> {\n                 .takes_value(true)\n                 .number_of_values(1)\n                 .value_name(\"N:M\")\n+                .conflicts_with(\"diff\")\n                 .help(\"Only print the lines from N to M.\")\n                 .long_help(\n                     \"Only print the specified range of lines for each file. \\\ndiff --git a/src/config.rs b/src/config.rs\nindex d5df9910..3c24b77f 100644\n--- a/src/config.rs\n+++ b/src/config.rs\n@@ -5,6 +5,32 @@ use crate::style::StyleComponents;\n use crate::syntax_mapping::SyntaxMapping;\n use crate::wrapping::WrappingMode;\n \n+#[derive(Debug, Clone)]\n+pub enum VisibleLines {\n+    /// Show all lines which are included in the line ranges\n+    Ranges(LineRanges),\n+\n+    #[cfg(feature = \"git\")]\n+    /// Only show lines surrounding added/deleted/modified lines\n+    DiffContext(usize),\n+}\n+\n+impl VisibleLines {\n+    pub fn diff_context(&self) -> bool {\n+        match self {\n+            Self::Ranges(_) => false,\n+            #[cfg(feature = \"git\")]\n+            Self::DiffContext(_) => true,\n+        }\n+    }\n+}\n+\n+impl Default for VisibleLines {\n+    fn default() -> Self {\n+        VisibleLines::Ranges(LineRanges::default())\n+    }\n+}\n+\n #[derive(Debug, Clone, Default)]\n pub struct Config<'a> {\n     /// The explicitly configured language, if any\n@@ -39,8 +65,8 @@ pub struct Config<'a> {\n     #[cfg(feature = \"paging\")]\n     pub paging_mode: PagingMode,\n \n-    /// Specifies the lines that should be printed\n-    pub line_ranges: LineRanges,\n+    /// Specifies which lines should be printed\n+    pub visible_lines: VisibleLines,\n \n     /// The syntax highlighting theme\n     pub theme: String,\n@@ -62,10 +88,7 @@ pub struct Config<'a> {\n fn default_config_should_include_all_lines() {\n     use crate::line_range::RangeCheckResult;\n \n-    assert_eq!(\n-        Config::default().line_ranges.check(17),\n-        RangeCheckResult::InRange\n-    );\n+    assert_eq!(LineRanges::default().check(17), RangeCheckResult::InRange);\n }\n \n #[test]\ndiff --git a/src/controller.rs b/src/controller.rs\nindex 09c6ec2a..f636d5fd 100644\n--- a/src/controller.rs\n+++ b/src/controller.rs\n@@ -1,9 +1,13 @@\n use std::io::{self, Write};\n \n use crate::assets::HighlightingAssets;\n-use crate::config::Config;\n+use crate::config::{Config, VisibleLines};\n+#[cfg(feature = \"git\")]\n+use crate::diff::{get_git_diff, LineChanges};\n use crate::error::*;\n use crate::input::{Input, InputReader, OpenedInput};\n+#[cfg(feature = \"git\")]\n+use crate::line_range::LineRange;\n use crate::line_range::{LineRanges, RangeCheckResult};\n use crate::output::OutputType;\n #[cfg(feature = \"paging\")]\n@@ -68,6 +72,32 @@ impl<'b> Controller<'b> {\n                     no_errors = false;\n                 }\n                 Ok(mut opened_input) => {\n+                    #[cfg(feature = \"git\")]\n+                    let line_changes = if self.config.visible_lines.diff_context()\n+                        || (!self.config.loop_through && self.config.style_components.changes())\n+                    {\n+                        if let crate::input::OpenedInputKind::OrdinaryFile(ref path) =\n+                            opened_input.kind\n+                        {\n+                            let diff = get_git_diff(path);\n+\n+                            if self.config.visible_lines.diff_context()\n+                                && diff\n+                                    .as_ref()\n+                                    .map(|changes| changes.is_empty())\n+                                    .unwrap_or(false)\n+                            {\n+                                continue;\n+                            }\n+\n+                            diff\n+                        } else {\n+                            None\n+                        }\n+                    } else {\n+                        None\n+                    };\n+\n                     let mut printer: Box<dyn Printer> = if self.config.loop_through {\n                         Box::new(SimplePrinter::new())\n                     } else {\n@@ -75,10 +105,18 @@ impl<'b> Controller<'b> {\n                             &self.config,\n                             &self.assets,\n                             &mut opened_input,\n+                            #[cfg(feature = \"git\")]\n+                            &line_changes,\n                         ))\n                     };\n \n-                    let result = self.print_file(&mut *printer, writer, &mut opened_input);\n+                    let result = self.print_file(\n+                        &mut *printer,\n+                        writer,\n+                        &mut opened_input,\n+                        #[cfg(feature = \"git\")]\n+                        &line_changes,\n+                    );\n \n                     if let Err(error) = result {\n                         handle_error(&error);\n@@ -96,13 +134,31 @@ impl<'b> Controller<'b> {\n         printer: &mut dyn Printer,\n         writer: &mut dyn Write,\n         input: &mut OpenedInput,\n+        #[cfg(feature = \"git\")] line_changes: &Option<LineChanges>,\n     ) -> Result<()> {\n         if !input.reader.first_line.is_empty() || self.config.style_components.header() {\n             printer.print_header(writer, input)?;\n         }\n \n         if !input.reader.first_line.is_empty() {\n-            self.print_file_ranges(printer, writer, &mut input.reader, &self.config.line_ranges)?;\n+            let line_ranges = match self.config.visible_lines {\n+                VisibleLines::Ranges(ref line_ranges) => line_ranges.clone(),\n+                #[cfg(feature = \"git\")]\n+                VisibleLines::DiffContext(context) => {\n+                    let mut line_ranges: Vec<LineRange> = vec![];\n+\n+                    if let Some(line_changes) = line_changes {\n+                        for line in line_changes.keys() {\n+                            let line = *line as usize;\n+                            line_ranges.push(LineRange::new(line - context, line + context));\n+                        }\n+                    }\n+\n+                    LineRanges::from(line_ranges)\n+                }\n+            };\n+\n+            self.print_file_ranges(printer, writer, &mut input.reader, &line_ranges)?;\n         }\n         printer.print_footer(writer, input)?;\n \ndiff --git a/src/pretty_printer.rs b/src/pretty_printer.rs\nindex 0c78ea90..13bd5dbc 100644\n--- a/src/pretty_printer.rs\n+++ b/src/pretty_printer.rs\n@@ -6,7 +6,7 @@ use syntect::parsing::SyntaxReference;\n \n use crate::{\n     assets::HighlightingAssets,\n-    config::Config,\n+    config::{Config, VisibleLines},\n     controller::Controller,\n     error::Result,\n     input::Input,\n@@ -205,7 +205,7 @@ impl<'a> PrettyPrinter<'a> {\n \n     /// Specify the lines that should be printed (default: all)\n     pub fn line_ranges(&mut self, ranges: LineRanges) -> &mut Self {\n-        self.config.line_ranges = ranges;\n+        self.config.visible_lines = VisibleLines::Ranges(ranges);\n         self\n     }\n \ndiff --git a/src/printer.rs b/src/printer.rs\nindex 5eed437e..2b245cfd 100644\n--- a/src/printer.rs\n+++ b/src/printer.rs\n@@ -24,7 +24,7 @@ use crate::config::Config;\n use crate::decorations::LineChangesDecoration;\n use crate::decorations::{Decoration, GridBorderDecoration, LineNumberDecoration};\n #[cfg(feature = \"git\")]\n-use crate::diff::{get_git_diff, LineChanges};\n+use crate::diff::LineChanges;\n use crate::error::*;\n use crate::input::OpenedInput;\n use crate::line_range::RangeCheckResult;\n@@ -90,7 +90,7 @@ pub(crate) struct InteractivePrinter<'a> {\n     ansi_prefix_sgr: String,\n     content_type: Option<ContentType>,\n     #[cfg(feature = \"git\")]\n-    pub line_changes: Option<LineChanges>,\n+    pub line_changes: &'a Option<LineChanges>,\n     highlighter: Option<HighlightLines<'a>>,\n     syntax_set: &'a SyntaxSet,\n     background_color_highlight: Option<Color>,\n@@ -101,6 +101,7 @@ impl<'a> InteractivePrinter<'a> {\n         config: &'a Config,\n         assets: &'a HighlightingAssets,\n         input: &mut OpenedInput,\n+        #[cfg(feature = \"git\")] line_changes: &'a Option<LineChanges>,\n     ) -> Self {\n         let theme = assets.get_theme(&config.theme);\n \n@@ -145,9 +146,6 @@ impl<'a> InteractivePrinter<'a> {\n             panel_width = 0;\n         }\n \n-        #[cfg(feature = \"git\")]\n-        let mut line_changes = None;\n-\n         let highlighter = if input\n             .reader\n             .content_type\n@@ -155,18 +153,6 @@ impl<'a> InteractivePrinter<'a> {\n         {\n             None\n         } else {\n-            // Get the Git modifications\n-            #[cfg(feature = \"git\")]\n-            {\n-                use crate::input::OpenedInputKind;\n-\n-                if config.style_components.changes() {\n-                    if let OpenedInputKind::OrdinaryFile(ref path) = input.kind {\n-                        line_changes = get_git_diff(path);\n-                    }\n-                }\n-            }\n-\n             // Determine the type of syntax for highlighting\n             let syntax = assets.get_syntax(config.language, input, &config.syntax_mapping);\n             Some(HighlightLines::new(syntax, theme))\n"
  },
  {
    "path": "tests/syntax-tests/source/Dockerfile/Dockerfile",
    "content": "ARG architecture=amd64\nFROM $architecture/centos:7\nLABEL com.example.version=\"0.2.1-beta\"\nARG architecture\n\nENV INTERESTING_PATH /usr/bin/interesting-software\n\n\nCOPY entrypoint.sh /usr/bin/entrypoint.sh\n\nRUN if [ \"$architecture\" = \"i386\" ]; then echo \"Building i386 docker image\" && \\\n    linux32 yum update -y && linux32 yum install -y mysql ; \\\n    else yum update -y && yum install -y mysql\n\nEXPOSE 80/tcp\n\nVOLUME [/var/lib/mysql/data]\n\nENTRYPOINT [\"/usr/bin/entrypoint.sh\"]\n"
  },
  {
    "path": "tests/syntax-tests/source/DotENV/LICENSE.md",
    "content": "The `.env.test` file has been added from https://github.com/zaynali53/DotENV under the following license:\n\nThe MIT License (MIT)\n\nCopyright (c) 2016 Zayn Ali\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "tests/syntax-tests/source/Elixir/LICENSE.md",
    "content": "MIT License\n\nCopyright (c) 2020 José Eduardo\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "tests/syntax-tests/source/Elixir/command.ex",
    "content": "defmodule Charlex.Command do\n  @callback usage() :: [String.t()]\n\n  @callback description() :: String.t()\n\n  @callback parse_args(args :: String.t()) :: any()\n\n  @callback run(context :: Map.t(), args :: [String.t()] | any()) :: String.t() | any()\n\n  @optional_callbacks usage: 0, description: 0, parse_args: 1\n\n  defmacro __using__(_opts) do\n    quote do\n      @behaviour unquote(__MODULE__)\n\n      @impl true\n      def usage, do: \"This command is without usage, will add it soon\"\n\n      @impl true\n      def description, do: \"This command is without description, will add it soon\"\n\n      @impl true\n      def run(_context, _args), do: :ok\n\n      @impl true\n      def parse_args(args), do: args |> String.split() |> Kernel.tl()\n\n      defoverridable parse_args: 1, description: 0, run: 2, usage: 0\n    end\n  end\nend\n"
  },
  {
    "path": "tests/syntax-tests/source/Elm/LICENSE.md",
    "content": "The `test.elm` file has been added from [https://elm-lang.org/examples/triangle] under the following license:\n\nCopyright (c) 2012-present Evan Czaplicki\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n\n    * Neither the name of Evan Czaplicki nor the names of other\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "tests/syntax-tests/source/Elm/test.elm",
    "content": "-- elm install elm-explorations/linear-algebra\n-- elm install elm-explorations/webgl\n\n\nimport Browser\nimport Browser.Events as E\nimport Html exposing (Html)\nimport Html.Attributes exposing (width, height, style)\nimport Math.Matrix4 as Mat4 exposing (Mat4)\nimport Math.Vector3 as Vec3 exposing (Vec3, vec3)\nimport WebGL\n\n\n\n-- MAIN\n\n\nmain =\n  Browser.element\n    { init = init\n    , view = view\n    , update = update\n    , subscriptions = subscriptions\n    }\n\n\n\n-- MODEL\n\n\ntype alias Model =\n  Float\n\n\ninit : () -> (Model, Cmd Msg)\ninit () =\n  ( 0, Cmd.none )\n\n\n\n-- UPDATE\n\n\ntype Msg\n  = TimeDelta Float\n\n\nupdate : Msg -> Model -> (Model, Cmd Msg)\nupdate msg currentTime =\n  case msg of\n    TimeDelta delta ->\n      ( delta + currentTime, Cmd.none )\n\n\n\n-- SUBSCRIPTIONS\n\n\nsubscriptions : Model -> Sub Msg\nsubscriptions _ =\n  E.onAnimationFrameDelta TimeDelta\n\n\n\n-- VIEW\n\n\nview : Model -> Html msg\nview t =\n  WebGL.toHtml\n    [ width 400, height 400, style \"display\" \"block\"\n    ]\n    [ WebGL.entity vertexShader fragmentShader mesh { perspective = perspective (t / 1000) }\n    ]\n\n\nperspective : Float -> Mat4\nperspective t =\n  Mat4.mul\n    (Mat4.makePerspective 45 1 0.01 100)\n    (Mat4.makeLookAt (vec3 (4 * cos t) 0 (4 * sin t)) (vec3 0 0 0) (vec3 0 1 0))\n\n\n\n-- MESH\n\n\ntype alias Vertex =\n  { position : Vec3\n  , color : Vec3\n  }\n\n\nmesh : WebGL.Mesh Vertex\nmesh =\n  WebGL.triangles\n    [ ( Vertex (vec3 0 0 0) (vec3 1 0 0)\n      , Vertex (vec3 1 1 0) (vec3 0 1 0)\n      , Vertex (vec3 1 -1 0) (vec3 0 0 1)\n      )\n    ]\n\n\n\n-- SHADERS\n\n\ntype alias Uniforms =\n  { perspective : Mat4\n  }\n\n\nvertexShader : WebGL.Shader Vertex Uniforms { vcolor : Vec3 }\nvertexShader =\n    [glsl|\n        attribute vec3 position;\n        attribute vec3 color;\n        uniform mat4 perspective;\n        varying vec3 vcolor;\n\n        void main () {\n            gl_Position = perspective * vec4(position, 1.0);\n            vcolor = color;\n        }\n    |]\n\n\nfragmentShader : WebGL.Shader {} Uniforms { vcolor : Vec3 }\nfragmentShader =\n    [glsl|\n        precision mediump float;\n        varying vec3 vcolor;\n\n        void main () {\n            gl_FragColor = vec4(vcolor, 1.0);\n        }\n    |]\n"
  },
  {
    "path": "tests/syntax-tests/source/Email/test.eml",
    "content": "Return-Path: <user@example.com>\nReceived: from mail.example ([1.1.1.1])\n\tby mail.example with LMTP\n\tid 123\n\t(envelope-from <user@example.com>)\n\tfor <a@b>; Sun, 13 Oct 2019 13:53:24 +0000\nFrom: \"User, Test\" <user@example.com>\nTo: \"User2, Test\" <user2@example.com>\nSubject:\nDate: Sun, 13 Oct 2019 13:53:08 +0000\nAccept-Language: de-DE, en-US\nContent-Language: de-DE\nX-MS-Has-Attach: yes\nMIME-Version: 1.0\n\nTest\n"
  },
  {
    "path": "tests/syntax-tests/source/Erlang/bat_erlang.erl",
    "content": "-module(bat_erlang).\n\n-export([main/0]).\n\n-record(test, {\n    name :: list(),\n    data :: binary()\n}).\n\n-define(TESTMACRO, \"testmacro\").\n\n-spec main() -> ok.\nmain() ->\n    %% Handling Lists and Numbers\n    List = [1, 2, 3, 4, $6, 2#00111],\n    _Sum = lists:sum(List),\n    _ = [(N * N) + N / N - N || N <- List, N > 2],\n    [_Head, _SecondHead | _Tail] = List,\n    _ = [1, atom, [list], <<\"binary\">>, {tuple, tuple}, #{map => key}, #test{name = \"record\"}],\n\n    %% Handling Binaries \n    BinHelloWorld = <<\"Hello World\">>,\n    <<X || <<X:1/binary>> <= BinHelloWorld >>,\n    <<0,0,0,0,0,0,0,151>> = <<151:64/signed-integer>>,\n\n    %% Handling Boolean and Atoms\n    true = true andalso true,\n    true = false orelse true,\n    _ = true =:= true,\n    _ = false =/= true,\n    _ = 'HELLO' /= hello,\n    _ = hello == world,\n\n    %% Handling Maps and Records\n    TestMap = #{a => 1, b => 2, c => 3},\n    #{a := _Value, c := _} = TestMap,\n    _ = TestMap#{d => 4},\n    Record = #test{name = ?TESTMACRO},\n    _ = Record#test.name,\n\n    %% Conditionals\n    case TestMap of\n        #{b := B} ->\n            B;\n        _ ->\n            ok\n    end,\n    if\n        erlang:is_map(TestMap) ->\n            map;\n        true ->\n            test_function(1)\n    end,\n\n    %% Messaging\n    Self = erlang:self(),\n    Self ! hello_world,\n    receive\n        hello_world ->\n            ok;\n        _ ->\n            io:format(\"unknown message\")\n    after 1000 ->\n        timeout\n    end,\n    ok.\n\ntest_function(N) when erlang:is_integer(N) -> integer;\ntest_function([_|_]) -> list;\ntest_function(<<_/binary>>) ->  binary;\ntest_function(_) ->\n    undefined.\n"
  },
  {
    "path": "tests/syntax-tests/source/EtcGroup/test.group",
    "content": "root:x:0:root\nsys:x:3:bin\nmem:x:8:\nftp:x:11:\nmail:x:12:\nlog:x:19:\nsmmsp:x:25:\nproc:x:26:polkitd\ngames:x:50:\nlock:x:54:\nnetwork:x:90:\nfloppy:x:94:\nscanner:x:96:\npower:x:98:\nadm:x:999:daemon\nwheel:x:998:username\nkmem:x:997:\ntty:x:5:\nutmp:x:996:\naudio:x:995:mpd,username\ndisk:x:994:\ninput:x:993:\nkvm:x:992:\nlp:x:991:\noptical:x:990:username\nrender:x:989:\nstorage:x:988:username\nuucp:x:987:\nvideo:x:986:username\nusers:x:985:\nsystemd-journal:x:984:\nrfkill:x:983:\nbin:x:1:daemon\ndaemon:x:2:bin\nhttp:x:33:\nnobody:x:65534:\ndbus:x:81:\nsystemd-journal-remote:x:982:\nsystemd-network:x:981:\nsystemd-resolve:x:980:\nsystemd-timesync:x:979:\nsystemd-coredump:x:978:\nuuidd:x:68:\nusername:x:1000:\ngit:x:977:\navahi:x:976:\ncolord:x:975:\npolkitd:x:102:\nmpd:x:45:\nrtkit:x:133:\ntransmission:x:169:\nwireshark:x:150:username\nlightdm:x:974:\ngeoclue:x:973:\nusbmux:x:140:\ndhcpcd:x:972:\nbrlapi:x:971:\ngdm:x:120:\nlibvirt:x:970:\nflatpak:x:969:\ngluster:x:968:\nrpc:x:32:\ntor:x:43:\nrslsync:x:967:\ndocker:x:966:username\nsambashare:x:1002:username\nnamed:x:40:\n"
  },
  {
    "path": "tests/syntax-tests/source/F#/LICENSE.md",
    "content": "The `string.fs` file has been added from https://github.com/dotnet/fsharp under the following license:\n\n```text\nThe MIT License (MIT)\n\nCopyright (c) Microsoft Corporation.\nAll rights reserved.\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```\n"
  },
  {
    "path": "tests/syntax-tests/source/F#/string.fs",
    "content": "// Copyright (c) Microsoft Corporation.  All Rights Reserved.  See License.txt in the project root for license information.\n\nnamespace Microsoft.FSharp.Core\n\n    open System\n    open System.Text\n    open Microsoft.FSharp.Core.LanguagePrimitives.IntrinsicOperators\n    open Microsoft.FSharp.Core.Operators\n    open Microsoft.FSharp.Core.Operators.Checked\n    open Microsoft.FSharp.Collections\n    open Microsoft.FSharp.Primitives.Basics\n\n    [<CompilationRepresentation(CompilationRepresentationFlags.ModuleSuffix)>]\n    [<RequireQualifiedAccess>]\n    module String =\n        [<Literal>]\n        /// LOH threshold is calculated from Internal.Utilities.Library.LOH_SIZE_THRESHOLD_BYTES,\n        /// and is equal to 80_000 / sizeof<char>\n        let LOH_CHAR_THRESHOLD = 40_000\n\n        [<CompiledName(\"Length\")>]\n        let length (str:string) = if isNull str then 0 else str.Length\n\n        [<CompiledName(\"Concat\")>]\n        let concat sep (strings : seq<string>) =  \n\n            let concatArray sep (strings: string []) =\n                match length sep with\n                | 0 -> String.Concat strings\n                // following line should be used when this overload becomes part of .NET Standard (it's only in .NET Core)\n                //| 1 -> String.Join(sep.[0], strings, 0, strings.Length)\n                | _ -> String.Join(sep, strings, 0, strings.Length)\n\n            match strings with\n            | :? array<string> as arr -> \n                concatArray sep arr\n\n            | :? list<string> as lst -> \n                lst \n                |> List.toArray \n                |> concatArray sep\n\n            | _ ->\n                String.Join(sep, strings)\n\n        [<CompiledName(\"Iterate\")>]\n        let iter (action : (char -> unit)) (str:string) =\n            if not (String.IsNullOrEmpty str) then\n                for i = 0 to str.Length - 1 do\n                    action str.[i] \n\n        [<CompiledName(\"IterateIndexed\")>]\n        let iteri action (str:string) =\n            if not (String.IsNullOrEmpty str) then\n                let f = OptimizedClosures.FSharpFunc<_,_,_>.Adapt(action)\n                for i = 0 to str.Length - 1 do\n                    f.Invoke(i, str.[i]) \n\n        [<CompiledName(\"Map\")>]\n        let map (mapping: char -> char) (str:string) =\n            if String.IsNullOrEmpty str then\n                String.Empty\n            else\n                let result = str.ToCharArray()\n                let mutable i = 0\n                for c in result do\n                    result.[i] <- mapping c\n                    i <- i + 1\n\n                new String(result)\n\n        [<CompiledName(\"MapIndexed\")>]\n        let mapi (mapping: int -> char -> char) (str:string) =\n            let len = length str\n            if len = 0 then \n                String.Empty\n            else\n                let result = str.ToCharArray()\n                let f = OptimizedClosures.FSharpFunc<_,_,_>.Adapt(mapping)\n\n                let mutable i = 0\n                while i < len do\n                    result.[i] <- f.Invoke(i, result.[i])\n                    i <- i + 1\n\n                new String(result)\n\n        [<CompiledName(\"Filter\")>]\n        let filter (predicate: char -> bool) (str:string) =\n            let len = length str\n\n            if len = 0 then \n                String.Empty\n\n            elif len > LOH_CHAR_THRESHOLD then\n                // By using SB here, which is twice slower than the optimized path, we prevent LOH allocations \n                // and 'stop the world' collections if the filtering results in smaller strings.\n                // We also don't pre-allocate SB here, to allow for less mem pressure when filter result is small.\n                let res = StringBuilder()\n                str |> iter (fun c -> if predicate c then res.Append c |> ignore)\n                res.ToString()\n\n            else\n                // Must do it this way, since array.fs is not yet in scope, but this is safe\n                let target = Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked len\n                let mutable i = 0\n                for c in str do\n                    if predicate c then \n                        target.[i] <- c\n                        i <- i + 1\n\n                String(target, 0, i)\n\n        [<CompiledName(\"Collect\")>]\n        let collect (mapping: char -> string) (str:string) =\n            if String.IsNullOrEmpty str then\n                String.Empty\n            else\n                let res = StringBuilder str.Length\n                str |> iter (fun c -> res.Append(mapping c) |> ignore)\n                res.ToString()\n\n        [<CompiledName(\"Initialize\")>]\n        let init (count:int) (initializer: int-> string) =\n            if count < 0 then invalidArgInputMustBeNonNegative \"count\" count\n            let res = StringBuilder count\n            for i = 0 to count - 1 do \n               res.Append(initializer i) |> ignore\n            res.ToString()\n\n        [<CompiledName(\"Replicate\")>]\n        let replicate (count:int) (str:string) =\n            if count < 0 then invalidArgInputMustBeNonNegative \"count\" count\n\n            let len = length str\n            if len = 0 || count = 0 then \n                String.Empty\n\n            elif len = 1 then\n                new String(str.[0], count)\n\n            elif count <= 4 then\n                match count with\n                | 1 -> str\n                | 2 -> String.Concat(str, str)\n                | 3 -> String.Concat(str, str, str)\n                | _ -> String.Concat(str, str, str, str)\n\n            else\n                // Using the primitive, because array.fs is not yet in scope. It's safe: both len and count are positive.\n                let target = Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked (len * count)\n                let source = str.ToCharArray()\n\n                // O(log(n)) performance loop:\n                // Copy first string, then keep copying what we already copied \n                // (i.e., doubling it) until we reach or pass the halfway point\n                Array.Copy(source, 0, target, 0, len)\n                let mutable i = len\n                while i * 2 < target.Length do\n                    Array.Copy(target, 0, target, i, i)\n                    i <- i * 2\n\n                // finally, copy the remain half, or less-then half\n                Array.Copy(target, 0, target, i, target.Length - i)\n                new String(target)\n\n\n        [<CompiledName(\"ForAll\")>]\n        let forall predicate (str:string) =\n            if String.IsNullOrEmpty str then\n                true\n            else\n                let rec check i = (i >= str.Length) || (predicate str.[i] && check (i+1)) \n                check 0\n\n        [<CompiledName(\"Exists\")>]\n        let exists predicate (str:string) =\n            if String.IsNullOrEmpty str then\n                false\n            else\n                let rec check i = (i < str.Length) && (predicate str.[i] || check (i+1)) \n                check 0  \n"
  },
  {
    "path": "tests/syntax-tests/source/Fish/test.fish",
    "content": "set fish_greeting \"\"\n\nbegin\n    set --local AUTOJUMP_PATH $XDG_CONFIG_HOME/fish/functions/autojump.fish\n    if test -e $AUTOJUMP_PATH\n        source $AUTOJUMP_PATH\n    end\nend\n\nfish_vi_key_bindings\n\n\nfunction fish_prompt\n    set_color brblack\n    echo -n \"[\"(date \"+%H:%M\")\"] \"\n    set_color blue\n    echo -n (hostname)\n    if [ $PWD != $HOME ]\n        set_color brblack\n        echo -n ':'\n        set_color yellow\n        echo -n (basename $PWD)\n    end\n    set_color green\n    printf '%s ' (__fish_git_prompt)\n    set_color red\n    echo -n '| '\n    set_color normal\nend\n\nfunction fish_greeting\n    echo\n    echo -e (uname -ro | awk '{print \" \\\\\\\\e[1mOS: \\\\\\\\e[0;32m\"$0\"\\\\\\\\e[0m\"}')\n    echo -e (uptime -p | sed 's/^up //' | awk '{print \" \\\\\\\\e[1mUptime: \\\\\\\\e[0;32m\"$0\"\\\\\\\\e[0m\"}')\n    echo -e (uname -n | awk '{print \" \\\\\\\\e[1mHostname: \\\\\\\\e[0;32m\"$0\"\\\\\\\\e[0m\"}')\n    echo -e \" \\\\e[1mDisk usage:\\\\e[0m\"\n    echo\n    echo -ne (\\\n        df -l -h | grep -E 'dev/(xvda|sd|mapper)' | \\\n        awk '{printf \"\\\\\\\\t%s\\\\\\\\t%4s / %4s  %s\\\\\\\\n\\n\", $6, $3, $2, $5}' | \\\n        sed -e 's/^\\(.*\\([8][5-9]\\|[9][0-9]\\)%.*\\)$/\\\\\\\\e[0;31m\\1\\\\\\\\e[0m/' -e 's/^\\(.*\\([7][5-9]\\|[8][0-4]\\)%.*\\)$/\\\\\\\\e[0;33m\\1\\\\\\\\e[0m/' | \\\n        paste -sd ''\\\n    )\n    echo\n\n    echo -e \" \\\\e[1mNetwork:\\\\e[0m\"\n    echo\n    # http://tdt.rocks/linux_network_interface_naming.html\n    echo -ne (\\\n        ip addr show up scope global | \\\n            grep -E ': <|inet' | \\\n            sed \\\n                -e 's/^[[:digit:]]\\+: //' \\\n                -e 's/: <.*//' \\\n                -e 's/.*inet[[:digit:]]* //' \\\n                -e 's/\\/.*//'| \\\n            awk 'BEGIN {i=\"\"} /\\.|:/ {print i\" \"$0\"\\\\\\n\"; next} // {i = $0}' | \\\n            sort | \\\n            column -t -R1 | \\\n            # public addresses are underlined for visibility \\\n            sed 's/ \\([^ ]\\+\\)$/ \\\\\\e[4m\\1/' | \\\n            # private addresses are not \\\n            sed 's/m\\(\\(10\\.\\|172\\.\\(1[6-9]\\|2[0-9]\\|3[01]\\)\\|192\\.168\\.\\).*\\)/m\\\\\\e[24m\\1/' | \\\n            # unknown interfaces are cyan \\\n            sed 's/^\\( *[^ ]\\+\\)/\\\\\\e[36m\\1/' | \\\n            # ethernet interfaces are normal \\\n            sed 's/\\(\\(en\\|em\\|eth\\)[^ ]* .*\\)/\\\\\\e[39m\\1/' | \\\n            # wireless interfaces are purple \\\n            sed 's/\\(wl[^ ]* .*\\)/\\\\\\e[35m\\1/' | \\\n            # wwan interfaces are yellow \\\n            sed 's/\\(ww[^ ]* .*\\).*/\\\\\\e[33m\\1/' | \\\n            sed 's/$/\\\\\\e[0m/' | \\\n            sed 's/^/\\t/' \\\n        )\n    echo\n    set_color normal\nend\n"
  },
  {
    "path": "tests/syntax-tests/source/Fortran (Fixed Form)/LICENSE.md",
    "content": "The `quicksort_real_F77.F` file has been added from https://github.com/jasonanema/Quicksort_Fortran77 under the following license:\n\n```text\nMIT License\n\nCopyright (c) 2019 Jason Anema\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"
  },
  {
    "path": "tests/syntax-tests/source/Fortran (Fixed Form)/quicksort_real_F77.F",
    "content": "C  Fortran 77 implementation of a quicksort algorithm for arrays with\nC  real entries.\nC  ----------\nC  June 2019 \nC  Jason Allen Anema, Ph.D.\nC  Division of Statistical Genomics\nC  Department of Genetics\nC  Washington University School of Medicine in St. Louis\nC \nC  This work is partially supported NIH grant AG023746\nC  ----------\nC  Insertion sort is used for short arrays, as quicksort is slower on\nC  these.\nC  \nC  Hoare partition scheme is used (sweeping left and right), as it does\nC  three times fewer swaps on average that the Lamuto partition scheme.\nC  In conjunction with this, tripartite partition is performed\nC  concurrently (solving the \"Dutch National Flag problem\"). This avoids \nC  horrible runtimes on highly repetitive arrays. For example, without  \nC  this, an array of random zeros and ones would have a runtime of\nC  O(N^2), but now has a runtime of O(N). The runtime for this algorthm\nC  on arrays with k highly repetitive entries is now O(kN).\nC    \nC  For medium length (sub)arrays, pivots are choosen using\nC  Median-of-Three, and those three items are sorted. For longer (sub)arrays\nC  the pseudomedian of nine (Median of medians). This avoids O(N^2) runtime on\nC  nonrandom inputs such as increasing and decreasing sequences. \nC\nC  See Louis Bentley, Jon & McIlroy, Douglas. (1993). Engineering a Sort Function.\nC  Softw., Pract. Exper.. 23. 1249-1265. 10.1002/spe.4380231105 for details. \nC\nC  The ordering on elements of the array are defined by a comparison\nC  function,compar, that is a user-supplied INTEGER*2 function of the form\nC           compar(a,b) which returns:\nC              -1 if a precedes b\nC              +1 if b precedes a\nC              0 is a and b are considered equivalent\nC  and thus defines a total ordering.\nC  \nC  If one would like to use the standard order on integers, the\nC  compar function could be written in a file \"compint.F\" as:\nC  ----------------------------------------------------------------\nC      INTEGER*2 FUNCTION compint(a,b)\nC      INTEGER a, b\nC      if(a.lt.b)then\nC         compint = -1\nC      elseif(a.gt.b)then\nC         compint = +1\nC      else\nC         compint = 0\nC      endif\nC      END\nC  ----------------------------------------------------------------\nC  Then in your program, call quicksort with:\nC      call quicksort_real_F77(array, n, compint)\nC\nC  The maximal length of an array in this implementation is (2^31-1),\nC  but can be changed to allow for length up to (2^63-1) by changing the\nC  data types of the relevant variables and constants. If you wish to \nC  sort longer arrays, of length N, you'll need to customize variable \nC  and constant types and set mstack to be at least (2*log_2(N)+2). \nC\nC  ----------------------------------------------------------------\nC  Copyright 2019 Jason Allen Anema\nC  \nC  Permission is hereby granted, free of charge, to any person obtaining\nC  a copy of this software and associated documentation files (the \"Software\"),\nC  to deal in the Software without restriction, including without limitation the\nC  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\nC  sell copies of the Software, and to permit persons to whom the Software is\nC  furnished to do so, subject to the following conditions:\nC\nC  The above copyright notice and this permission notice shall be included\nC  in all copies or substantial portions of the Software.\nC\nC  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nC  OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nC  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\nC  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nC  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nC  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\nC  IN THE SOFTWARE.\nC  -------------------------------------------------------------------\nC\n      SUBROUTINE quicksort_real_F77(array,n,compar)\n      INTEGER n, maxins, maxmid, mstack\n      REAL array(n)\n      PARAMETER (maxins = 7, maxmid = 40, mstack = 128)\nC        maxins: maximal size of (sub)arrays to be sorted with\nC           insertion sort.\nC        maxmid: maximal size of (sub)arrays that will be quicksorted with\nC           Median-of-Three pivots.\nC        mstack: maximal size of required auxiliary storage (a stack), plus 2 \nC           extra spots, which tracks the starts and ends of yet unsorted \nC           subarrays. mstack = 130 is large enough to handle arrays up to \nC           length 2^63-1. This maximal size follows from\nC           processing smaller arrays first and pigeonhole principal.\nC \n      INTEGER  a, d, i, j, k, s, lo, mid, hi, tstack, bstack(mstack)\nC        a, d, i, j, k, s: indices\nC        lo, mid, and hi: their natural location in a (sub)array\nC        tstack:  equal to twice the number of additional subarrays still \nC          needing to be sorted\nC        bstack: stack of the endpoints of unsorted subarrays\n      INTEGER pm1, pm2, pm3, pm4, pm5, pm6, pm7, pm8, pm9\nC        for pseudomedian of nine positions in (sub)arrays\n      REAL piv, temp\nC        piv is to store the pivot's value\nC    \n      EXTERNAL compar\n      INTEGER*2 compar\nC        compar is a user-supplied INTEGER*2 function of the form\nC           compar(a,b) which returns:\nC              -1 if a precedes b\nC              +1 if b precedes a\nC              0 is a and b are considered equivalent\nC           and thus defines a total ordering. \n      tstack = 0\n      lo = 1 \n      hi = n\nC\nC  Insertion sort subarrays of size maxins or less\n 1    if(hi-lo+1.le.maxins)then\n         do 10, i = lo + 1, hi, 1\n            temp = array(i)\n            do 11 j = i - 1, lo, -1\n               if(compar(array(j), temp).le.0)goto 2\n               array(j+1)=array(j)\n 11         continue\n            j = lo - 1\n 2          array(j+1) = temp\n 10      continue\n         if(tstack.eq.0)return\nC  Pop the bstack, and start new partitioning\n         hi = bstack(tstack)\n         lo = bstack(tstack-1)\n         tstack = tstack - 2\n      else\nC  Use Median-of-Three as choice of pivot (median of lo, middle, hi)\nC  and reorder those elements appropriately when subarrays are medium\nC  length (between maxins and maxmid)\n         mid = lo +  (hi-lo)/2\n         if(hi-lo.le.maxmid)then\n            if(compar(array(mid), array(lo)).eq.-1)then\n               temp = array(lo)\n               array(lo) = array(mid)\n               array(mid) = temp\n            endif\n            if(compar(array(hi), array(lo)).eq.-1)then\n               temp = array(hi)\n               array(hi) = array(lo)\n               array(lo) = temp\n            endif\n            if(compar(array(hi), array(mid)).eq.-1)then\n               temp = array(hi)\n               array(hi) = array(mid)\n               array(mid) = temp\n            endif\nC  Use pseudomedian of nine (Median of medians) as choice of pivot when \nC  subarrays are longer than maxmid. Note that doing it this way requires only 12\nC  comparisons for finding the pivot.\n         elseif(hi-lo+1.gt.maxmid)then\n            pm1 = lo\n            pm5 = lo + (hi-lo)/2\n            pm9 = hi\n            pm3 = lo + (pm5-lo)/2\n            pm7 = pm5 + (hi-pm5)/2\n            pm2 = lo + (pm3-lo)/2\n            pm4 = pm3 + (pm5-pm3)/2\n            pm6 = pm5 + (pm7-pm5)/2\n            pm8 = pm7 + (pm9-pm7)/2\nC  Median and sorting for pm1, pm2, pm3\n            if(compar(array(pm2), array(pm1)).eq.-1)then\n               temp = array(pm1)\n               array(pm1) = array(pm2)\n               array(pm2) = temp\n            endif\n            if(compar(array(pm3), array(pm1)).eq.-1)then\n               temp = array(pm3)\n               array(pm3) = array(pm1)\n               array(pm1) = temp\n            endif\n            if(compar(array(pm3), array(pm2)).eq.-1)then\n               temp = array(pm3)\n               array(pm3) = array(pm2)\n               array(pm2) = temp\n            endif\nC  Median and sorting for pm4, pm5, pm6\n            if(compar(array(pm5), array(pm4)).eq.-1)then\n               temp = array(pm4)\n               array(pm4) = array(pm5)\n               array(pm5) = temp\n            endif\n            if(compar(array(pm6), array(pm4)).eq.-1)then\n               temp = array(pm6)\n               array(pm6) = array(pm4)\n               array(pm4) = temp\n            endif\n            if(compar(array(pm6), array(pm5)).eq.-1)then\n               temp = array(pm6)\n               array(pm6) = array(pm5)\n               array(pm5) = temp\n            endif\nC  Median and sorting for pm7, pm8, pm9\n            if(compar(array(pm8), array(pm7)).eq.-1)then\n               temp = array(pm7)\n               array(pm7) = array(pm8)\n               array(pm8) = temp\n            endif\n            if(compar(array(pm9), array(pm7)).eq.-1)then\n               temp = array(pm9)\n               array(pm9) = array(pm7)\n               array(pm7) = temp\n            endif\n            if(compar(array(pm9), array(pm8)).eq.-1)then\n               temp = array(pm9)\n               array(pm9) = array(pm8)\n               array(pm8) = temp\n            endif\nC Median of the medians (which are now pm2, pm5, pm8)\n            if(compar(array(pm5), array(pm2)).eq.-1)then\n               temp = array(pm2)\n               array(pm2) = array(pm5)\n               array(pm5) = temp\n            endif\n            if(compar(array(pm8), array(pm2)).eq.-1)then\n               temp = array(pm8)\n               array(pm8) = array(pm2)\n               array(pm2) = temp\n            endif\n            if(compar(array(pm8), array(pm5)).eq.-1)then\n               temp = array(pm8)\n               array(pm8) = array(pm5)\n               array(pm5) = temp\n            endif\n         endif\nC  Pivot assigned for medium and long length subarrays.\nC  Note that pm5 = mid\n             piv = array(mid)\nC  Initialize pointers for partitioning\n            i = lo-1\n            j = hi+1\nC  Initialize counts of repeat values of pivot.\n            a = 0\n            d = 0\nC  Beginning of outer loop for placing pivot.\n 3       continue\nC  Scan up to find an element > piv.\n            i = i + 1\nC  Check if pointers crossed.\n         if(j.lt.i)goto 5\nC  Check if i pointer hit hi boundary.\n         if(i.eq.hi)goto 4\nC      \n         if(compar(array(i), piv).eq.-1)goto 3\nC Check for copies of pivot from scanning right. \n         if(compar(array(i), piv).eq.0)then\n             array(i) = array(lo+a)\n             array(lo+a) = piv\n             a = a + 1\n             goto 3 \n         endif\nC  Beginning of innerloop for placing pivot.\n 4       continue\nC  Scan down to find an element < piv.\n            j = j - 1\nC  Check if pointers crossed.\n         if(j.lt.i)goto 5\n         if(compar(array(j), piv).eq.1)goto 4\nC  Check for copies of pivot from scanning left. \n         if(compar(array(j), piv).eq.0)then\n            array(j) = array(hi-d)\n            array(hi-d) = piv\n            d = d + 1\n            goto 4      \n         endif\nC Check if pointers crossed.\n         if(j.lt.i)goto 5\nC  Exchange elements\n         temp = array(i)\n         array(i) = array(j)\n         array(j) = temp\nC  End of outermost loop for placing pivot.\n         goto 3\nC  Insert all copies of pivot in appropriate place\n 5       s = MIN(a, j-lo-a+1)\n         DO 6 k = 1, s\n            array(lo-1+k) = array(i-k)\n            array(i-k) = piv\n 6       CONTINUE\n         s = MIN(d, hi-j-d)\n         DO 7 k = 1, s\n            array(hi+1-k) = array(j+k)\n            array(j+k) = piv\n 7       CONTINUE\nC  Increase effective stack size\n         tstack = tstack + 2 \nC  Push pointers to larger subarray on stack for later processing,\nC  process smaller subarray immediately. \n         if(tstack.gt.mstack) THEN\n           WRITE(*,*)'Stack size is too small in quicksort fortran code quicksort_real_F77.F' \n           WRITE(*,*)'Are you sure you want to sort an array this long?'\n           WRITE(*,*)'Your array has more than 2^63-1  entries?'\n           WRITE(*,*)'If so, set mstack parameter to be at least:'\n           WRITE(*,*)'2*ceiling(log_2(N))+2, for N = length of array,'\n           WRITE(*,*)'and recompile this subroutine.'\n           RETURN \n         endif\n         if(hi-j-d-1.ge.j-a-lo)then\n            bstack(tstack) = hi\n            bstack(tstack-1) = MIN(j+d+1, hi)\n            hi=MAX(j-a,lo)\n         else\n            bstack(tstack)=MAX(j-a,lo)\n            bstack(tstack-1)=lo\n            lo=MIN(j+d+1,hi)\n         endif\nC\nC     end of outermost if statement \n      endif\n      goto 1\nC     END of subroutine quicksort\n      END\n"
  },
  {
    "path": "tests/syntax-tests/source/Fortran (Modern)/LICENSE.md",
    "content": "The `test_savetxt.f90` file has been added from https://github.com/fortran-lang/stdlib under the following license:\n\n```text\nMIT License\n\nCopyright (c) 2019 Fortran stdlib developers\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"
  },
  {
    "path": "tests/syntax-tests/source/Fortran (Modern)/test_savetxt.f90",
    "content": "program test_savetxt\nuse stdlib_kinds, only: int32, sp, dp\nuse stdlib_io, only: loadtxt, savetxt\nuse stdlib_error, only: check\nimplicit none\n\ncharacter(:), allocatable :: outpath\n\noutpath = get_outpath() // \"/tmp.dat\"\n\ncall test_iint32(outpath)\ncall test_rsp(outpath)\ncall test_rdp(outpath)\ncall test_csp(outpath)\ncall test_cdp(outpath)\n\ncontains\n\n    function get_outpath() result(outpath)\n    integer :: ierr\n    character(256) :: argv\n    character(:), allocatable :: outpath\n\n    call get_command_argument(1, argv, status=ierr)\n    if (ierr==0) then\n        outpath = trim(argv)\n    else\n        outpath = '.'\n    endif\n    end function get_outpath\n\n    subroutine test_iint32(outpath)\n    character(*), intent(in) :: outpath\n    integer(int32) :: d(3, 2), e(2, 3)\n    integer(int32), allocatable :: d2(:, :)\n    d = reshape([1, 2, 3, 4, 5, 6], [3, 2])\n    call savetxt(outpath, d)\n    call loadtxt(outpath, d2)\n    call check(all(shape(d2) == [3, 2]))\n    call check(all(abs(d-d2) == 0))\n\n    e = reshape([1, 2, 3, 4, 5, 6], [2, 3])\n    call savetxt(outpath, e)\n    call loadtxt(outpath, d2)\n    call check(all(shape(d2) == [2, 3]))\n    call check(all(abs(e-d2) == 0))\n    end subroutine\n\n\n    subroutine test_rsp(outpath)\n    character(*), intent(in) :: outpath\n    real(sp) :: d(3, 2), e(2, 3)\n    real(sp), allocatable :: d2(:, :)\n    d = reshape([1, 2, 3, 4, 5, 6], [3, 2])\n    call savetxt(outpath, d)\n    call loadtxt(outpath, d2)\n    call check(all(shape(d2) == [3, 2]))\n    call check(all(abs(d-d2) < epsilon(1._sp)))\n\n    e = reshape([1, 2, 3, 4, 5, 6], [2, 3])\n    call savetxt(outpath, e)\n    call loadtxt(outpath, d2)\n    call check(all(shape(d2) == [2, 3]))\n    call check(all(abs(e-d2) < epsilon(1._sp)))\n    end subroutine test_rsp\n\n\n    subroutine test_rdp(outpath)\n    character(*), intent(in) :: outpath\n    real(dp) :: d(3, 2), e(2, 3)\n    real(dp), allocatable :: d2(:, :)\n    d = reshape([1, 2, 3, 4, 5, 6], [3, 2])\n    call savetxt(outpath, d)\n    call loadtxt(outpath, d2)\n    call check(all(shape(d2) == [3, 2]))\n    call check(all(abs(d-d2) < epsilon(1._dp)))\n\n    e = reshape([1, 2, 3, 4, 5, 6], [2, 3])\n    call savetxt(outpath, e)\n    call loadtxt(outpath, d2)\n    call check(all(shape(d2) == [2, 3]))\n    call check(all(abs(e-d2) < epsilon(1._dp)))\n    end subroutine test_rdp\n\n    subroutine test_csp(outpath)\n    character(*), intent(in) :: outpath\n    complex(sp) :: d(3, 2), e(2, 3)\n    complex(sp), allocatable :: d2(:, :)\n    d = cmplx(1, 1,kind=sp)* reshape([1, 2, 3, 4, 5, 6], [3, 2])\n    call savetxt(outpath, d)\n    call loadtxt(outpath, d2)\n    call check(all(shape(d2) == [3, 2]))\n    call check(all(abs(d-d2) < epsilon(1._sp)))\n\n    e = cmplx(1, 1,kind=sp)* reshape([1, 2, 3, 4, 5, 6], [2, 3])\n    call savetxt(outpath, e)\n    call loadtxt(outpath, d2)\n    call check(all(shape(d2) == [2, 3]))\n    call check(all(abs(e-d2) < epsilon(1._sp)))\n    end subroutine test_csp\n\n    subroutine test_cdp(outpath)\n    character(*), intent(in) :: outpath\n    complex(dp) :: d(3, 2), e(2, 3)\n    complex(dp), allocatable :: d2(:, :)\n    d = cmplx(1._dp, 1._dp,kind=dp)* reshape([1, 2, 3, 4, 5, 6], [3, 2])\n    call savetxt(outpath, d)\n    call loadtxt(outpath, d2)\n    call check(all(shape(d2) == [3, 2]))\n    call check(all(abs(d-d2) < epsilon(1._dp)))\n\n    e = cmplx(1, 1,kind=dp)* reshape([1, 2, 3, 4, 5, 6], [2, 3])\n    call savetxt(outpath, e)\n    call loadtxt(outpath, d2)\n    call check(all(shape(d2) == [2, 3]))\n    call check(all(abs(e-d2) < epsilon(1._dp)))\n    end subroutine test_cdp\n\nend program test_savetxt\n"
  },
  {
    "path": "tests/syntax-tests/source/Fortran Namelist/test.namelist",
    "content": "&TEST\nFOO=0,\nBAR=1.0,\nBAZ='Hello, World!'\n/\n"
  },
  {
    "path": "tests/syntax-tests/source/Fstab/fstab",
    "content": "# Static information about the filesystems.\n# See fstab(5) for details.\n\n# <file system> <dir> <type> <options> <dump> <pass>\n\nUUID=9e6faddf-31ab-3f3e-9b50-2ad4fbc2ea8b\t/         \text4      \trw,relatime,data=ordered\t0 0\nUUID=9e6faddf-31ab-3f3e-9b50-2ad4fbc2ea8b\t/         \text4      \trw,relatime,data=ordered\t1 1\nUUID=62F8-2047      \t/boot     \tvfat      \trw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro\t2 2\n"
  },
  {
    "path": "tests/syntax-tests/source/GDScript/test.gd",
    "content": "extends Node\n\nsignal custom_signal(param)\n\nconst PI = 3.14159\n\nvar untyped_var = \"Hello, World!\"\nvar typed_int: int = 42\nvar typed_float: float = 3.14\nvar typed_string: String = \"GDScript Test\"\nvar typed_array: Array = [1, 2, 3, 4]\nvar typed_dict: Dictionary = {\"key\": \"value\", \"number\": 100}\n\nonready var label = $Label\n\nfunc say_hello() -> void:\n\tprint(\"Hello from GDScript!\")\n\nfunc add_numbers(a: int, b: int = 10) -> int:\n\treturn a + b\n\nfunc process_value(value: int) -> String:\n\tif value < 0:\n\t\treturn \"Negative\"\n\telif value == 0:\n\t\treturn \"Zero\"\n\telse:\n\t\treturn \"Positive\"\n\nfunc sum_array(arr: Array) -> int:\n\tvar total: int = 0\n\tfor num in arr:\n\t\ttotal += num\n\treturn total\n\nfunc describe_number(num: int) -> String:\n\tmatch num:\n\t\t0:\n\t\t\treturn \"Zero\"\n\t\t1, 2, 3:\n\t\t\treturn \"Small number\"\n\t\t_:\n\t\t\treturn \"Large number\"\n\nfunc long_description() -> String:\n\treturn \"\"\"This is a test file for GDScript.\nIt covers variables, functions, control structures, loops, signals, inner classes,\nmultiline strings, arrays, and dictionaries.\"\"\"\n\nclass InnerExample:\n\tvar inner_value: int = 99\n\tfunc show_value() -> void:\n\t\tprint(\"Inner value is:\", inner_value)\n\nfunc test_inner_class() -> void:\n\tvar inner = InnerExample.new()\n\tinner.show_value()\n\nfunc trigger_signal() -> void:\n\temit_signal(\"custom_signal\", \"TestParam\")\n\nfunc _ready() -> void:\n\tsay_hello()\n\tvar result_add = add_numbers(5)\n\tprint(\"Add result:\", result_add)\n\tprint(\"Process value for -5:\", process_value(-5))\n\tprint(\"Sum of array [10, 20, 30]:\", sum_array([10, 20, 30]))\n\tprint(\"Description for 2:\", describe_number(2))\n\tprint(\"Long description:\\n\", long_description())\n\ttest_inner_class()\n\ttrigger_signal()\n"
  },
  {
    "path": "tests/syntax-tests/source/GLSL/test.glsl",
    "content": "#version 330 core\n\n#ifdef TEST\nlayout (location = 0) in vec4 vertex;\n#else\nlayout (location = 6) in vec4 vertex;\n#endif\n\nout vec2 p_textureVertex;\n\n/*\n * This stores offsets\n */\nstruct Data\n{\n    double offsetX;\n    double offsetY;\n}\n\nuniform mat4 projectionMatrix;\nuniform bool test;\nuniform Data data;\n\ndouble calc()\n{\n    if (test)\n    {\n        return 1.0;\n    }\n    else\n    {\n        return 0.0;\n    }\n}\n\nvoid main()\n{\n    // This GLSL code serves the purpose of bat syntax highlighting tests\n    double x = data.offsetX + calc();\n    gl_Position = projectionMatrix * vec4(vertex.xy, data.offsetX, data.offsetY);\n    p_textureVertex = vertex.zw;\n}\n"
  },
  {
    "path": "tests/syntax-tests/source/Git Attributes/example.gitattributes",
    "content": "#\n# Comment\n\n[attr]binary -diff -merge -text\n\n*          text=auto\n*.c        diff=c\n*.cc       text diff=cpp\n*.o        binary\n*.bat      text eol=crlf\n*.lock     text -diff\n*.*ignore  text\n*.patch    -text\n\n.gitattributes linguist-language=gitattributes\n.gitkeep       export-ignore\n"
  },
  {
    "path": "tests/syntax-tests/source/Git Config/LICENSE.md",
    "content": "The `test.gitconfig` file has been added from https://github.com/sharkdp/bat/pull/1336#issuecomment-715905807. Its \"free to use\"."
  },
  {
    "path": "tests/syntax-tests/source/Git Config/text.gitconfig",
    "content": "[alias]\n\tbr = branch\n\tbranch = branch -a\n\tc = clone --recursive\n\tci = commit\n\tcl = clone\n\tco = checkout\n\tcontributors = shortlog --summary --numbered\n\tlg = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)'\n\tremote = remote -v\n\tst = status\n\ttag = tag -l\n[apply]\n\twhitespace = fix\n[color]\n\tui = true\n[color \"branch\"]\n\tcurrent = yellow\n\tlocal = yellow\n\tremote = green\n[color \"diff\"]\n\tcommit = yellow bold\n\tfrag = magenta bold\n\tmeta = yellow\n\tnew = green bold\n\told = red bold\n\twhitespace = red reverse\n[color \"diff-highlight\"]\n\tnewHighlight = green bold 22\n\tnewNormal = green bold\n\toldHighlight = red bold 52\n\toldNormal = red bold\n[color \"status\"]\n\tadded = green\n\tchanged = yellow\n\tuntracked = cyan\n[commit]\n\tgpgsign = true\n[core]\n\teditor = /usr/bin/vim\n\t# global exclude\n\texcludesfile = /home/frank/.config/git/ignore\n\tpager = delta\n\t; broken on old machines\n\tuntrackedCache = true\n[credential]\n\thelper = store\n[delta]\n\tfeatures = line-numbers decorations\n\tmax-line-length = 1024\n\twhitespace-error-style = 22 reverse\n[delta \"decorations\"]\n\tcommit-decoration-style = bold yellow box ul\n\tfile-decoration-style = none\n\tfile-style = bold yellow\n\tsyntax-theme = gruvbox\n[diff]\n\tsubmodule = diff\n\talgorithm = histogram\n\trenames = copies\n[difftool]\n\tprompt = false\n[difftool \"wrapper\"]\n\tbinary = true\n\tcmd = git-difftool-wrapper \\\"$LOCAL\\\" \\\"$REMOTE\\\"\n[diff \"pdfconv\"]\n\ttextconv = pdftohtml -stdout\n[fetch]\n\tnegotiationAlgorithm = skipping\n\tparallel = 0\n[help]\n\tautocorrect = 1\n[index]\n\tversion = 4\n[interactive]\n\tdiffFilter = delta --color-only\n[merge]\n\tlog = true\n[protocol]\n\tversion = 2\n[pull]\n\trebase = true\n[push]\n\tdefault = current\n\trecurseSubmodules = on-demand\n[rebase]\n\tautoStash = true\n[rerere]\n\tautoUpdate = true\n\tenabled = true\n[sequence]\n\teditor = interactive-rebase-tool\n[submodule]\n\tfetchJobs = 0\n[tag]\n\tgpgSign = true\n\tsort = -version:refname\n[url \"git@gist.github.com:\"]\n\tinsteadOf = gist:\n\tpushInsteadOf = https://gist.github.com/\n[url \"git@github.com:\"]\n\tinsteadOf = gh:\n\tpushInsteadOf = https://github.com/\n[user]\n\temail = f.nord@example.com\n\tname = Frank Nord\n\tsigningkey = AAAAAAAAAAAAAAAA\n"
  },
  {
    "path": "tests/syntax-tests/source/Git Ignore/LICENSE.md",
    "content": "The `.gitignore` file has been added from https://github.com/rust-lang/rust/blob/master/.gitignore under the following license:\n\nShort version for non-lawyers:\n\nThe Rust Project is dual-licensed under Apache 2.0 and MIT\nterms.\n\n\nLonger version:\n\nCopyrights in the Rust project are retained by their contributors. No\ncopyright assignment is required to contribute to the Rust project.\n\nSome files include explicit copyright notices and/or license notices.\nFor full authorship information, see the version control history or\nhttps://thanks.rust-lang.org\n\nExcept as otherwise noted (below and/or in individual files), Rust is\nlicensed under the Apache License, Version 2.0 <LICENSE-APACHE> or\n<http://www.apache.org/licenses/LICENSE-2.0> or the MIT license\n<LICENSE-MIT> or <http://opensource.org/licenses/MIT>, at your option.\n\n\nThe Rust Project includes packages written by third parties.\nThe following third party packages are included, and carry\ntheir own copyright notices and license terms:\n\n* LLVM. Code for this package is found in src/llvm-project.\n\n    Copyright (c) 2003-2013 University of Illinois at\n    Urbana-Champaign.  All rights reserved.\n\n    Developed by:\n\n        LLVM Team\n\n        University of Illinois at Urbana-Champaign\n\n        http://llvm.org\n\n    Permission is hereby granted, free of charge, to any\n    person obtaining a copy of this software and associated\n    documentation files (the \"Software\"), to deal with the\n    Software without restriction, including without\n    limitation the rights to use, copy, modify, merge,\n    publish, distribute, sublicense, and/or sell copies of\n    the Software, and to permit persons to whom the Software\n    is furnished to do so, subject to the following\n    conditions:\n\n        * Redistributions of source code must retain the\n          above copyright notice, this list of conditions\n          and the following disclaimers.\n\n        * Redistributions in binary form must reproduce the\n          above copyright notice, this list of conditions\n          and the following disclaimers in the documentation\n          and/or other materials provided with the\n          distribution.\n\n        * Neither the names of the LLVM Team, University of\n          Illinois at Urbana-Champaign, nor the names of its\n          contributors may be used to endorse or promote\n          products derived from this Software without\n          specific prior written permission.\n\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\n    ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\n    TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n    PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT\n    SHALL THE CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE\n    FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n    ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT\n    OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n    OTHER DEALINGS WITH THE SOFTWARE.\n\n* Additional libraries included in LLVM carry separate\n  BSD-compatible licenses. See src/llvm-project/llvm/LICENSE.TXT\n  for details.\n\n* compiler-rt, in src/compiler-rt is dual licensed under\n  LLVM's license and MIT:\n\n    Copyright (c) 2009-2014 by the contributors listed in\n    CREDITS.TXT\n\n    All rights reserved.\n\n    Developed by:\n\n        LLVM Team\n\n        University of Illinois at Urbana-Champaign\n\n        http://llvm.org\n\n    Permission is hereby granted, free of charge, to any\n    person obtaining a copy of this software and associated\n    documentation files (the \"Software\"), to deal with the\n    Software without restriction, including without\n    limitation the rights to use, copy, modify, merge,\n    publish, distribute, sublicense, and/or sell copies of\n    the Software, and to permit persons to whom the Software\n    is furnished to do so, subject to the following\n    conditions:\n\n        * Redistributions of source code must retain the\n          above copyright notice, this list of conditions\n          and the following disclaimers.\n\n        * Redistributions in binary form must reproduce the\n          above copyright notice, this list of conditions\n          and the following disclaimers in the documentation\n          and/or other materials provided with the\n          distribution.\n\n        * Neither the names of the LLVM Team, University of\n          Illinois at Urbana-Champaign, nor the names of its\n          contributors may be used to endorse or promote\n          products derived from this Software without\n          specific prior written permission.\n\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\n    ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\n    TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n    PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT\n    SHALL THE CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE\n    FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n    ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT\n    OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n    OTHER DEALINGS WITH THE SOFTWARE.\n\n    ========================================================\n\n    Copyright (c) 2009-2014 by the contributors listed in\n    CREDITS.TXT\n\n    Permission is hereby granted, free of charge, to any\n    person obtaining a copy of this software and associated\n    documentation files (the \"Software\"), to deal in the\n    Software without restriction, including without\n    limitation the rights to use, copy, modify, merge,\n    publish, distribute, sublicense, and/or sell copies of\n    the Software, and to permit persons to whom the Software\n    is furnished to do so, subject to the following\n    conditions:\n\n    The above copyright notice and this permission notice\n    shall be included in all copies or substantial portions\n    of the Software.\n\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\n    ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\n    TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n    PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\n    SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n    CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n    OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\n    IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n    DEALINGS IN THE SOFTWARE.\n\n* Portions of the FFI code for interacting with the native ABI\n  is derived from the Clay programming language, which carries\n  the following license.\n\n    Copyright (C) 2008-2010 Tachyon Technologies.\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with\n    or without modification, are permitted provided that the\n    following conditions are met:\n\n    1. Redistributions of source code must retain the above\n       copyright notice, this list of conditions and the\n       following disclaimer.\n\n    2. Redistributions in binary form must reproduce the\n       above copyright notice, this list of conditions and\n       the following disclaimer in the documentation and/or\n       other materials provided with the distribution.\n\n    THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR\n    IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n    PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    DEVELOPERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n    INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF\n    USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n    NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE\n    USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\n    OF SUCH DAMAGE.\n\n* libbacktrace, under src/libbacktrace:\n\n    Copyright (C) 2012-2014 Free Software Foundation, Inc.\n    Written by Ian Lance Taylor, Google.\n\n    Redistribution and use in source and binary forms, with\n    or without modification, are permitted provided that the\n    following conditions are met:\n\n        (1) Redistributions of source code must retain the\n        above copyright notice, this list of conditions and\n        the following disclaimer.\n\n        (2) Redistributions in binary form must reproduce\n        the above copyright notice, this list of conditions\n        and the following disclaimer in the documentation\n        and/or other materials provided with the\n        distribution.\n\n        (3) The name of the author may not be used to\n        endorse or promote products derived from this\n        software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND\n    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY\n    AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN\n    NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,\n    INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF\n    USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n    NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE\n    USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\n    OF SUCH DAMAGE.  */\n\n"
  },
  {
    "path": "tests/syntax-tests/source/Git Ignore/test.gitignore",
    "content": "*~\n.#*\n.DS_Store\n.cproject\n.hg/\n.hgignore\n.idea\n*.iml\n__pycache__/\n*.py[cod]\n*$py.class\n.project\n.settings/\n.valgrindrc\n.vscode\n.favorites.json\n/Makefile\n/build/\n/config.toml\n/dist/\n/dl/\n/doc/\n/inst/\n/llvm/\n/mingw-build/\n# Created by default with `src/ci/docker/run.sh`:\n/obj/\n/unicode-downloads\n/target\n# Generated by compiletest for incremental:\n/tmp/\ntags\ntags.*\nTAGS\nTAGS.*\n\\#*\n\\#*\\#\nconfig.mk\nconfig.stamp\nSession.vim\n.cargo\n!/src/test/run-make/thumb-none-qemu/example/.cargo\nno_llvm_build\n"
  },
  {
    "path": "tests/syntax-tests/source/Go/LICENSE.md",
    "content": "The `main.go` file has been added from https://github.com/golang/example under\nthe following license:\n\n\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"
  },
  {
    "path": "tests/syntax-tests/source/Go/go.mod",
    "content": "module hugeparam\n\ngo 1.25.1\n\nrequire golang.org/x/tools v0.37.0\n"
  },
  {
    "path": "tests/syntax-tests/source/Go/go.sum",
    "content": "golang.org/x/mod v0.28.0 h1:gQBtGhjxykdjY9YhZpSlZIsbnaE2+PgjfLWUQTnoZ1U=\ngolang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI=\ngolang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=\ngolang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=\ngolang.org/x/tools v0.37.0 h1:DVSRzp7FwePZW356yEAChSdNcQo6Nsp+fex1SUW09lE=\ngolang.org/x/tools v0.37.0/go.mod h1:MBN5QPQtLMHVdvsbtarmTNukZDdgwdwlO5qGacAzF0w=\n"
  },
  {
    "path": "tests/syntax-tests/source/Go/main.go",
    "content": "// The hugeparam command identifies by-value parameters that are larger than n bytes.\n//\n// Example:\n//\t$ ./hugeparams encoding/xml\npackage main\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"go/ast\"\n\t\"go/token\"\n\t\"go/types\"\n\t\"log\"\n\n\t\"golang.org/x/tools/go/loader\"\n)\n\n//!+\nvar bytesFlag = flag.Int(\"bytes\", 48, \"maximum parameter size in bytes\")\n\nvar sizeof = (&types.StdSizes{8, 8}).Sizeof // the sizeof function\n\nfunc PrintHugeParams(fset *token.FileSet, info *types.Info, files []*ast.File) {\n\tcheckTuple := func(descr string, tuple *types.Tuple) {\n\t\tfor i := 0; i < tuple.Len(); i++ {\n\t\t\tv := tuple.At(i)\n\t\t\tif sz := sizeof(v.Type()); sz > int64(*bytesFlag) {\n\t\t\t\tfmt.Printf(\"%s: %q %s: %s = %d bytes\\n\",\n\t\t\t\t\tfset.Position(v.Pos()),\n\t\t\t\t\tv.Name(), descr, v.Type(), sz)\n\t\t\t}\n\t\t}\n\t}\n\tcheckSig := func(sig *types.Signature) {\n\t\tcheckTuple(\"parameter\", sig.Params())\n\t\tcheckTuple(\"result\", sig.Results())\n\t}\n\tfor _, file := range files {\n\t\tast.Inspect(file, func(n ast.Node) bool {\n\t\t\tswitch n := n.(type) {\n\t\t\tcase *ast.FuncDecl:\n\t\t\t\tcheckSig(info.Defs[n.Name].Type().(*types.Signature))\n\t\t\tcase *ast.FuncLit:\n\t\t\t\tcheckSig(info.Types[n.Type].Type.(*types.Signature))\n\t\t\t}\n\t\t\treturn true\n\t\t})\n\t}\n}\n\n//!-\n\nfunc main() {\n\tflag.Parse()\n\n\t// The loader loads a complete Go program from source code.\n\tvar conf loader.Config\n\t_, err := conf.FromArgs(flag.Args(), false)\n\tif err != nil {\n\t\tlog.Fatal(err) // command syntax error\n\t}\n\tlprog, err := conf.Load()\n\tif err != nil {\n\t\tlog.Fatal(err) // load error\n\t}\n\n\tfor _, info := range lprog.InitialPackages() {\n\t\tPrintHugeParams(lprog.Fset, &info.Info, info.Files)\n\t}\n}\n\n/*\n//!+output\n% ./hugeparam encoding/xml\n/go/src/encoding/xml/marshal.go:167:50: \"start\" parameter: encoding/xml.StartElement = 56 bytes\n/go/src/encoding/xml/marshal.go:734:97: \"\" result: encoding/xml.StartElement = 56 bytes\n/go/src/encoding/xml/marshal.go:761:51: \"start\" parameter: encoding/xml.StartElement = 56 bytes\n/go/src/encoding/xml/marshal.go:781:68: \"start\" parameter: encoding/xml.StartElement = 56 bytes\n/go/src/encoding/xml/xml.go:72:30: \"\" result: encoding/xml.StartElement = 56 bytes\n//!-output\n*/\n"
  },
  {
    "path": "tests/syntax-tests/source/GraphQL/test.graphql",
    "content": "# Token::\n#   Punctuator\n#   Name\n#   IntValue\n#   FloatValue\n#   StringValue\n\n# Punctuator:: one of\n#   !\t$\t(\t)\t...\t:\t=\t@\t[\t]\t{\t|\t}\n\n# Name::\n#   /[_A-Za-z][_0-9A-Za-z]*/\n\n# Document :\n#   Definition (list)\n\n# Definition :\n#    ExecutableDefinition\n#    TypeSystemDefinition\n#    TypeSystemExtension\n\n# ExecutableDefinition :\n#   FragmentDefinition\n#   OperationDefintion\n\n# FragmentDefinition\n\ntype someType {\n  id: ID\n}\n\nfragment subsriberFields on someType {\n  id\n  name\n  fooInt(int: 1234, negInt: -56789, zero: 0)\n  fooFloat(\n    float: 1.1\n    floatExp: 1.4e10\n    floatExpSign1: 1.4e+10\n    floatExpSign2: 1.5e-40\n    floatExpBigE: 1.5E10\n  )\n  fooBool(x: true, y: false)\n  fooString(str: \"hello\", strUni: \"\\u2116\", strEscWs: \"\\t\")\n  fooLongStr(\n    lStr: \"\"\"\n    Hello Reader,\n        This is a long string block.\n    Best,\n    Writer\n    \"\"\"\n  )\n  fooNull(nullThing: null)\n  fooList(numList: [1, 2, 3], strList: [\"a\", \"b\", \"c\"])\n  fooObj(someObj: { str: \"hi\", int: 2 })\n}\n\n# OperationDefintion\n\nquery _A1 {\n  getThings(strArg: \"string\") {\n    id # commas here are ignored but valid\n    name\n  }\n}\n\nquery _A2($x: String) {\n  someFn(episode: $x) {\n    name\n  }\n}\n\nmutation B1 {\n  changeThings(intArg: 123) {\n    parent {\n      nestedField1\n      nestedField2\n    }\n  }\n}\n\nsubscription C1_Hello {\n  subsribePlease(floatArg: 1.4) {\n    id\n    ...subsriberFields\n  }\n}\n\n# TypeSystemDefinition :\n#   SchemaDefinition\n#   TypeDefinition\n\nschema {\n  query: Query\n  mutation: Mutation\n}\n\ntype Query {\n  \"\"\"\n  Can provide documentation this way.\n  \"\"\"\n  scalars: Scalars\n  someList: SomeLists\n  fooBar: FooBar\n}\n\ninterface Thing {\n  id: ID!\n}\n\ntype Scalars implements Thing {\n  id: ID!\n  int: Int!\n  float: Float!\n  str: String! @deprecated(reason: \"Need to test a directive\")\n  bool: Boolean\n  type: StringTypes\n}\n\ntype SomeLists {\n  ints: [Int!]!\n}\n\ntype Foo {\n  fooVal: String\n}\n\ntype Bar {\n  barVal: String\n}\n\nunion FooBar = Foo | Bar\n\nenum StringTypes {\n  ONE\n  TWO\n}\n\ninput Xyz {\n  id: ID!\n}\n\ntype Mutation {\n  createXyz(input: xyz!): Xyz!\n}\n"
  },
  {
    "path": "tests/syntax-tests/source/Graphviz DOT/LICENSE.md",
    "content": "The files `test_digraph.dot` and `test_graph.dot` are modified versions the files from https://github.com/scriptum/graphviz-examples/tree/a7762875efa32f90f6f1a37d866b2c26d362202a under the following license:\n\nThe MIT License (MIT)\n\nCopyright (c) 2014 Pavel Roschin\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject 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, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."
  },
  {
    "path": "tests/syntax-tests/source/Graphviz DOT/test_digraph.dot",
    "content": "digraph {\n\tlabel = <Label <font color='red'><b>formating</b></font>,<br/> test <font point-size='20'>is</font> done<br/> here <i>now.</i>>;\n\n\tnode [shape=box]\n\trankdir=LR\n\tmargin=0.1\n\ta->b\n\n\t// http://www.graphviz.org/doc/info/colors.html\n\t// note: style=filled!\n\tnode [shape=box colorscheme=paired12 style=filled]\n\tmargin=0.1\n\ta2[fillcolor=1]\n\tb2[fillcolor=3]\n\ta2->b2->x2\n\n\t// http://www.graphviz.org/doc/info/colors.html\n\t// note: style=filled!\n\tnode [shape=box colorscheme=paired12 style=filled]\n\trankdir=LR\n\tmargin=0.1\n\tc1[fillcolor=1]\n\tc2[fillcolor=2]\n\tc3[fillcolor=3]\n\tc4[fillcolor=4]\n\tc5[fillcolor=5]\n\tc6[fillcolor=6]\n\tc7[fillcolor=7]\n\tc8[fillcolor=8]\n\tc9[fillcolor=9]\n\tc10[fillcolor=10]\n\tc11[fillcolor=11]\n\tc12[fillcolor=12]\n\tc->{c1 c3 c5 c7 c9 c11}\n\tc1->c2\n\tc3->c4\n\tc5->c6\n\tc7->c8\n\tc9->c10\n\tc11->c12\n}\n"
  },
  {
    "path": "tests/syntax-tests/source/Graphviz DOT/test_graph.dot",
    "content": "graph {\n\ta--b\n}\n"
  },
  {
    "path": "tests/syntax-tests/source/Groff/LICENSE.md",
    "content": "The `rustdoc.1` file has been added from https://github.com/rust-lang/rust/blob/a75e74df89230bc429a550e29d5c566de5f95deb/src/doc/man/rustdoc.1 under the following license:\n\n```text\nShort version for non-lawyers:\n\nThe Rust Project is dual-licensed under Apache 2.0 and MIT\nterms.\n\n\nLonger version:\n\nCopyrights in the Rust project are retained by their contributors. No\ncopyright assignment is required to contribute to the Rust project.\n\nSome files include explicit copyright notices and/or license notices.\nFor full authorship information, see the version control history or\nhttps://thanks.rust-lang.org\n\nExcept as otherwise noted (below and/or in individual files), Rust is\nlicensed under the Apache License, Version 2.0 <LICENSE-APACHE> or\n<http://www.apache.org/licenses/LICENSE-2.0> or the MIT license\n<LICENSE-MIT> or <http://opensource.org/licenses/MIT>, at your option.\n\n\nThe Rust Project includes packages written by third parties.\nThe following third party packages are included, and carry\ntheir own copyright notices and license terms:\n\n* LLVM. Code for this package is found in src/llvm-project.\n\n    Copyright (c) 2003-2013 University of Illinois at\n    Urbana-Champaign.  All rights reserved.\n\n    Developed by:\n\n        LLVM Team\n\n        University of Illinois at Urbana-Champaign\n\n        http://llvm.org\n\n    Permission is hereby granted, free of charge, to any\n    person obtaining a copy of this software and associated\n    documentation files (the \"Software\"), to deal with the\n    Software without restriction, including without\n    limitation the rights to use, copy, modify, merge,\n    publish, distribute, sublicense, and/or sell copies of\n    the Software, and to permit persons to whom the Software\n    is furnished to do so, subject to the following\n    conditions:\n\n        * Redistributions of source code must retain the\n          above copyright notice, this list of conditions\n          and the following disclaimers.\n\n        * Redistributions in binary form must reproduce the\n          above copyright notice, this list of conditions\n          and the following disclaimers in the documentation\n          and/or other materials provided with the\n          distribution.\n\n        * Neither the names of the LLVM Team, University of\n          Illinois at Urbana-Champaign, nor the names of its\n          contributors may be used to endorse or promote\n          products derived from this Software without\n          specific prior written permission.\n\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\n    ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\n    TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n    PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT\n    SHALL THE CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE\n    FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n    ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT\n    OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n    OTHER DEALINGS WITH THE SOFTWARE.\n\n* Additional libraries included in LLVM carry separate\n  BSD-compatible licenses. See src/llvm-project/llvm/LICENSE.TXT\n  for details.\n\n* compiler-rt, in src/compiler-rt is dual licensed under\n  LLVM's license and MIT:\n\n    Copyright (c) 2009-2014 by the contributors listed in\n    CREDITS.TXT\n\n    All rights reserved.\n\n    Developed by:\n\n        LLVM Team\n\n        University of Illinois at Urbana-Champaign\n\n        http://llvm.org\n\n    Permission is hereby granted, free of charge, to any\n    person obtaining a copy of this software and associated\n    documentation files (the \"Software\"), to deal with the\n    Software without restriction, including without\n    limitation the rights to use, copy, modify, merge,\n    publish, distribute, sublicense, and/or sell copies of\n    the Software, and to permit persons to whom the Software\n    is furnished to do so, subject to the following\n    conditions:\n\n        * Redistributions of source code must retain the\n          above copyright notice, this list of conditions\n          and the following disclaimers.\n\n        * Redistributions in binary form must reproduce the\n          above copyright notice, this list of conditions\n          and the following disclaimers in the documentation\n          and/or other materials provided with the\n          distribution.\n\n        * Neither the names of the LLVM Team, University of\n          Illinois at Urbana-Champaign, nor the names of its\n          contributors may be used to endorse or promote\n          products derived from this Software without\n          specific prior written permission.\n\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\n    ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\n    TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n    PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT\n    SHALL THE CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE\n    FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n    ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT\n    OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n    OTHER DEALINGS WITH THE SOFTWARE.\n\n    ========================================================\n\n    Copyright (c) 2009-2014 by the contributors listed in\n    CREDITS.TXT\n\n    Permission is hereby granted, free of charge, to any\n    person obtaining a copy of this software and associated\n    documentation files (the \"Software\"), to deal in the\n    Software without restriction, including without\n    limitation the rights to use, copy, modify, merge,\n    publish, distribute, sublicense, and/or sell copies of\n    the Software, and to permit persons to whom the Software\n    is furnished to do so, subject to the following\n    conditions:\n\n    The above copyright notice and this permission notice\n    shall be included in all copies or substantial portions\n    of the Software.\n\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\n    ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\n    TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n    PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\n    SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n    CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n    OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\n    IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n    DEALINGS IN THE SOFTWARE.\n\n* Portions of the FFI code for interacting with the native ABI\n  is derived from the Clay programming language, which carries\n  the following license.\n\n    Copyright (C) 2008-2010 Tachyon Technologies.\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with\n    or without modification, are permitted provided that the\n    following conditions are met:\n\n    1. Redistributions of source code must retain the above\n       copyright notice, this list of conditions and the\n       following disclaimer.\n\n    2. Redistributions in binary form must reproduce the\n       above copyright notice, this list of conditions and\n       the following disclaimer in the documentation and/or\n       other materials provided with the distribution.\n\n    THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR\n    IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n    PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    DEVELOPERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n    INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF\n    USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n    NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE\n    USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\n    OF SUCH DAMAGE.\n\n* libbacktrace, under src/libbacktrace:\n\n    Copyright (C) 2012-2014 Free Software Foundation, Inc.\n    Written by Ian Lance Taylor, Google.\n\n    Redistribution and use in source and binary forms, with\n    or without modification, are permitted provided that the\n    following conditions are met:\n\n        (1) Redistributions of source code must retain the\n        above copyright notice, this list of conditions and\n        the following disclaimer.\n\n        (2) Redistributions in binary form must reproduce\n        the above copyright notice, this list of conditions\n        and the following disclaimer in the documentation\n        and/or other materials provided with the\n        distribution.\n\n        (3) The name of the author may not be used to\n        endorse or promote products derived from this\n        software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND\n    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY\n    AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN\n    NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,\n    INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF\n    USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n    NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE\n    USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\n    OF SUCH DAMAGE.  */\n```\n"
  },
  {
    "path": "tests/syntax-tests/source/Groff/rustdoc.1",
    "content": ".TH RUSTDOC \"1\" \"<INSERT DATE HERE>\" \"rustdoc <INSERT VERSION HERE>\" \"User Commands\"\n.SH NAME\nrustdoc \\- generate documentation from Rust source code\n.SH SYNOPSIS\n.B rustdoc\n[\\fIOPTIONS\\fR] \\fIINPUT\\fR\n\n.SH DESCRIPTION\nThis tool generates API reference documentation by extracting comments from\nsource code written in the Rust language, available at\n<\\fBhttps://www.rust-lang.org\\fR>. It accepts several input formats and\nprovides several output formats for the generated documentation.\n\n.SH OPTIONS\n\n.TP\n\\fB\\-r\\fR, \\fB\\-\\-input\\-format\\fR \\fIFORMAT\\fR\nrust\n.TP\n\\fB\\-w\\fR, \\fB\\-\\-output\\-format\\fR \\fIFORMAT\\fR\nhtml\n.TP\n\\fB\\-o\\fR, \\fB\\-\\-output\\fR \\fIOUTPUT\\fR,\nwhere to place the output (default: \\fIdoc/\\fR for html)\n.TP\n\\fB\\-\\-passes\\fR \\fILIST\\fR\nspace\\[hy]separated list of passes to run (default: '')\n.TP\n\\fB\\-\\-no\\-defaults\\fR\ndon't run the default passes\n.TP\n\\fB\\-\\-plugins\\fR \\fILIST\\fR\nspace-separated list of plugins to run (default: '')\n.TP\n\\fB\\-\\-plugin\\-path\\fR \\fIDIR\\fR\ndirectory to load plugins from (default: \\fI/tmp/rustdoc_ng/plugins\\fR)\n.TP\n\\fB\\-\\-target\\fR \\fITRIPLE\\fR\ntarget triple to document\n.TP\n\\fB\\-\\-crate\\-name\\fR \\fINAME\\fR\nspecify the name of this crate\n.TP\n\\fB\\-L\\fR, \\fB\\-\\-library\\-path\\fR \\fIDIR\\fR\ndirectory to add to crate search path\n.TP\n\\fB\\-\\-cfg\\fR \\fISPEC\\fR\npass a \\fI\\-\\-cfg\\fR to rustc\n.TP\n\\fB\\-\\-extern\\fR \\fIVAL\\fR\npass an \\fI\\-\\-extern\\fR to rustc\n.TP\n\\fB\\-\\-test\\fR\nrun code examples as tests\n.TP\n\\fB\\-\\-test\\-args\\fR \\fIARGS\\fR\npass arguments to the test runner\n.TP\n\\fB\\-\\-html\\-in\\-header\\fR \\fIFILE\\fR\nfile to add to <head>\n.TP\n\\fB\\-\\-html\\-before\\-content\\fR \\fIFILES\\fR\nfiles to include inline between <body> and the content of a rendered Markdown\nfile or generated documentation\n.TP\n\\fB\\-\\-markdown\\-before\\-content\\fR \\fIFILES\\fR\nfiles to include inline between <body> and the content of a rendered\nMarkdown file or generated documentation\n.TP\n\\fB\\-\\-html\\-after\\-content\\fR \\fIFILES\\fR\nfiles to include inline between the content and </body> of a rendered\nMarkdown file or generated documentation\n.TP\n\\fB\\-\\-markdown\\-after\\-content\\fR \\fIFILES\\fR\nfiles to include inline between the content and </body> of a rendered\nMarkdown file or generated documentation\n.TP\n\\fB\\-\\-markdown\\-css\\fR \\fIFILES\\fR\nCSS files to include via <link> in a rendered Markdown file Markdown file or\ngenerated documentation\n.TP\n\\fB\\-\\-markdown\\-playground\\-url\\fR \\fIURL\\fR\nURL to send code snippets to\n.TP\n\\fB\\-\\-markdown\\-no\\-toc\\fR\ndon't include table of contents\n.TP\n\\fB\\-h\\fR, \\fB\\-\\-extend\\-css\\fR\nto redefine some css rules with a given file to generate doc with your own theme\n.TP\n\\fB\\-V\\fR, \\fB\\-\\-version\\fR\nPrint rustdoc's version\n\n.SH \"OUTPUT FORMATS\"\n\nThe rustdoc tool can generate output in an HTML format.\n\nIf using an HTML format, then the specified output destination will be the root\ndirectory of an HTML structure for all the documentation.\nPages will be placed into this directory, and source files will also\npossibly be rendered into it as well.\n\n.SH \"EXAMPLES\"\n\nTo generate documentation for the source in the current directory:\n    $ rustdoc hello.rs\n\nList all available passes that rustdoc has, along with default passes:\n    $ rustdoc \\-\\-passes list\n\nThe generated HTML can be viewed with any standard web browser.\n\n.SH \"SEE ALSO\"\n\n.BR rustc (1)\n\n.SH \"BUGS\"\nSee <\\fBhttps://github.com/rust\\-lang/rust/issues\\fR>\nfor issues.\n\n.SH \"AUTHOR\"\nSee the version control history or <\\fBhttps://thanks.rust\\-lang.org\\fR>\n\n.SH \"COPYRIGHT\"\nThis work is dual\\[hy]licensed under Apache\\ 2.0 and MIT terms.\nSee \\fICOPYRIGHT\\fR file in the rust source distribution.\n"
  },
  {
    "path": "tests/syntax-tests/source/Groovy/test.groovy",
    "content": "interface Display {\n    String asText()\n}\n\ntrait Entity {\n    Integer id\n}\n\nclass Product implements Entity, Display {\n    public String name\n    public Boolean available\n    public Float price\n\n    private String key\n    protected String data\n\n    /**\n     * Creates a new product instance.\n     * @param id Product ID.\n     * @param name Product name.\n     * @param available Product availability.\n     * @param price Product price.\n     * @param key Product key.\n     * @param data Product internal data.\n     */\n    Product(id, name, available, price, key = \"key\", data = \"internal\") {\n        this.id = id\n        this.name = name\n        this.available = available\n        this.price = price\n        this.key = key\n        this.data = data\n    }\n\n    /**@\n     * Returns product data as text.\n     * @return Data string.\n     */\n    String asText() {\n        return \"\"\"ID [${id}] Name [${name}] Available [${available}] Price [${price}]\"\"\"\n    }\n}\n\n/* Creates a new product instance */\ndef product = new Product(1, \"T-Shirt\", true, 15.00)\n\nprintln(product.asText())\n\nproduct.available = false\nproduct.price = 0.0\n\n// Check values\nassert product.asText() == \"ID [1] Name [T-Shirt] Available [false] Price [0.0]\"\n\ndef factorial(Integer value) {\n    if (value <= 1) {\n        return 1\n    } else {\n        return value * factorial(value - 1)\n    }\n}\n\nassert factorial(5) == 120\n\nstatic String join(List<String> list, String separator) {\n    String data = \"\"\n\n    list.each { item ->\n        data += item + separator\n    }\n\n    data = data.substring(0, data.length() - 1)\n\n    return data\n}\n\nassert join([\"g\", \"r\", \"o\", \"o\", \"v\", \"y\"], \" \") == \"g r o o v y\"\n"
  },
  {
    "path": "tests/syntax-tests/source/HTML/test.html",
    "content": "<!DOCTYPE html SYSTEM \"about:legacy-compat\">\n<html>\n  <!-- Behold my erudite commentary -->\n  <head>\n    <title>Bat Syntax Test</title>\n    <meta charset=\"utf-8\"> \n    <script>\n      const x = 'world';\n      function logGreeting() {\n        console.log(`Hello, ${x}`);\n      }\n    </script>\n  </head>\n  <body>\n    <div>\n      <h1>Here find some simple tags</h1>\n      <br />\n      <p center style=\"color: rebeccapurple;\">\n        Lorem <strong>ipsum</strong> dolor sit amet consectetur adipisicing\n        elit. A quo, autem quaerat explicabo impedit mollitia amet molestiae\n        nulla cum architecto ducimus itaque sit blanditiis quasi animi optio ab\n        facilis nihil?\n      </p>\n      <p>\n        Here are some escaped characters: &amp; (ampersand), &agrave; (a with grave), &#8470; (numero sign).\n      </p>\n    </div>\n    <div>\n      <h1>This is a form that demonstrates loose attribute formatting</h1>\n      <form action=\"POST\">\n        <input\n          disabled\n          type=\"text\"\n          name=\"text input\"\n          id=\"specificTextInput\"\n          value=\"yes\"\n        />\n      </form>\n    </div>\n    <div>\n      <h1>A table with normal closing tags</h1>\n      <table>\n        <caption>\n          Pet Features\n        </caption>\n        <colgroup>\n          <col />\n          <col />\n          <col />\n        </colgroup>\n        <thead>\n          <tr>\n            <th>Feature</th>\n            <th>Cat</th>\n            <th>Dog</th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr>\n            <td>Tail</td>\n            <td>✔</td>\n            <td>✔</td>\n          </tr>\n          <tr>\n            <td>Eyes</td>\n            <td>✔</td>\n            <td>✔</td>\n          </tr>\n          <tr>\n            <td>Ears</td>\n            <td>✔</td>\n            <td>✔</td>\n          </tr>\n          <tr>\n            <td>Barking</td>\n            <td></td>\n            <td>✔</td>\n          </tr>\n          <tr>\n            <td>Litter Box</td>\n            <td>✔</td>\n            <td></td>\n          </tr>\n        </tbody>\n      </table>\n    </div>\n    <div>\n      <h1>A table without closing tags</h1>\n      <table>\n        <caption>Pet Features\n        <colgroup><col><col><col>\n        <thead>\n          <tr> <th>Feature    <th>Cat <th>Dog\n        <tbody>\n          <tr> <td>Tail       <td>✔   <td>✔\n          <tr> <td>Eyes       <td>✔   <td>✔\n          <tr> <td>Ears       <td>✔   <td>✔\n          <tr> <td>Barking    <td>    <td>✔\n          <tr> <td>Litter Box <td>✔   <td>\n        </tbody>\n      </table>\n    </div>\n    <div>\n      <h1>A math section with CDATA</h1>\n      <p>You can add a string to a number, but this stringifies the number:</p>\n      <math>\n        <ms><![CDATA[a / b]]></ms>\n        <mo>-</mo>\n        <mn>7</mn>\n        <mo>=</mo>\n        <ms><![CDATA[a / b - 7]]></ms>\n      </math>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "tests/syntax-tests/source/Haskell/test.hs",
    "content": "{-# LANGUAGE OverloadedStrings #-}\n\n-- simple parser for a Lisp-like syntax I wrote some time ago\n\nimport Data.Void (Void)\n\nimport Data.Text (Text)\nimport qualified Data.Text as T\n\nimport Text.Megaparsec.Char\nimport Text.Megaparsec.Error (errorBundlePretty)\nimport Text.Megaparsec hiding (State)\nimport qualified Text.Megaparsec.Char.Lexer as L\n\ndata LispVal\n  = Symbol Text\n  | List [LispVal]\n  | Number Integer\n  | String Text\n  | LispTrue\n  | LispFalse\n  | Nil\n  deriving (Show, Eq)\n\ntype Parser = Parsec Void Text\n\nreadStr :: Text -> Either String [LispVal]\nreadStr t =\n  case parse pLisp \"f\" t of\n    Right parsed -> Right parsed\n    Left err -> Left $ errorBundlePretty err\n{-# INLINABLE readStr #-}\n\nsc :: Parser ()\nsc = L.space space1 (L.skipLineComment \";\") empty\n{-# INLINABLE sc #-}\n\nlexeme :: Parser a -> Parser a\nlexeme = L.lexeme sc\n{-# INLINE lexeme #-}\n\nsymbol :: Text -> Parser Text\nsymbol = L.symbol sc\n{-# INLINE symbol #-}\n\nsymbol' :: Text -> Parser Text\nsymbol' = L.symbol' sc\n{-# INLINE symbol' #-}\n\npNil :: Parser LispVal\npNil = symbol' \"nil\" >> return Nil\n{-# INLINE pNil #-}\n\ninteger :: Parser Integer\ninteger = lexeme L.decimal\n{-# INLINE integer #-}\n\nlispSymbols :: Parser Char\nlispSymbols = oneOf (\"#$%&|*+-/:<=>?@^_~\" :: String)\n{-# INLINE lispSymbols #-}\n\npLispVal :: Parser LispVal\npLispVal = choice [pList, pNumber, pSymbol, pNil, pString]\n{-# INLINE pLispVal #-}\n\npSymbol :: Parser LispVal\npSymbol = (Symbol . T.pack <$> lexeme (some (letterChar <|> lispSymbols)))\n{-# INLINABLE pSymbol #-}\n\npList :: Parser LispVal\npList = List <$> between (symbol \"(\") (symbol \")\") (many pLispVal)\n{-# INLINABLE pList #-}\n\npLisp :: Parser [LispVal]\npLisp = some pLispVal\n{-# INLINE pLisp #-}\n\npNumber :: Parser LispVal\npNumber = Number <$> integer\n{-# INLINE pNumber #-}\n\npString :: Parser LispVal\npString = do\n  str <- char '\\\"' *> manyTill L.charLiteral (char '\\\"')\n  return $ String (T.pack str)\n{-# INLINABLE pString #-}\n"
  },
  {
    "path": "tests/syntax-tests/source/Hosts/hosts",
    "content": "#this is a comment in the hosts file\n127.0.0.1            localhost\n\n192.168.0.1          sample.test             #a comment\n192.160.0.200        try.sample.test try     #another comment\n216.58.223.238       google.com\n\n::1 localhost.try ip6-localhost\n"
  },
  {
    "path": "tests/syntax-tests/source/INI/test.inf",
    "content": "[section]\nkey=value\n# This file is just for testing that the INI syntax is registered to handle\n# the .inf file extension, it is not testing the syntax highlighting capabilities\n# of the INI syntax itself\n"
  },
  {
    "path": "tests/syntax-tests/source/INI/test.ini",
    "content": "[section]\nkey=value\nnumeric = 42\nquotes=\"this value is quoted\"\nquotes2=\"this is not a comment ;foo\"\ndifferent_quotes='these are other characters'\n\n[another one]\nfirst = value\n; comment on own line\n;another one\nsecond=value ; comment at the end of a line\nthird = value;another one\n# is this a comment? maybe.\n\n[section.with.dots]\n[section\\with\\backspaces]\n[section;with;semicola]\n"
  },
  {
    "path": "tests/syntax-tests/source/Idris2/LICENSE.md",
    "content": "The `test.idr` file has been added from https://github.com/buzden/sublime-syntax-idris2 under the following license:\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n"
  },
  {
    "path": "tests/syntax-tests/source/Idris2/test.idr",
    "content": "-- some code in Idris\nmodule XX.X'''\n\nimport Data.Nat\n\ndata X = A | B\n\nnamespace X\n  ||| Documentation\n  record Y where\n    [noHints]\n    constructor MkY'\n    field1 : Nat\n    {auto x : Nat}\n\nnamespace X' {\n  parameters (x : A (Maybe b))\n    x : Nat\n}\n\nu : ()\nu = ()\n\nk, w, u : Char\nk = '\\NUL'\nw = 'w'\n\nx = [1, 0, 3, \"sdf\\{d}\", 0xFF, 0o77, 0b10_1, 100_100]\n\nf : Int -> Int\nf = if x > 0 then x else 0 () SS `elem` S $ do\n  x <- a [1, 2, 3]\n  let ukuk = akak\n  rewrite $ Wow Wow Wow Wow.Wow b W (W)\n  pure $ f A B c D (EE) E\n\n(&&&) : Nat -> Nat -> Nat\nz &&& y = d + ?foo\n(&&&) x y = ?asfda\n\npublic export covering\n(.fun) : X a Y b => Nat -> Nat\nZ .fun = haha.fun haha .N\n(.fun) Z = ahah $ \\case\n  x@(x, y) => Prelude.Types.ahahah\n\n(.N) : Nat -> Nat\nZ .N = Z\n(.N) (S n) = (.N) n\n\nxx : Name\nxx = `{Full.Name}\n\ninfixr 0 ^^^, &&&\n\nxxx : ?\nxxx = case x of\n  Z => lalalaCamelCase\n  z => alalalCamelCase\n\nff : Nat -> TTImp\nff 0 = let x = 0 in val\nff _ = `(let x = 0 in ~val ^~^ ~(abc))\nff _ = f `(let x = 0 in ~val ^~^ ~(abc)) x\n\n%language ElabReflection\n%runElab X.sf ads\n\n%macro %inline\nfff : List Decl\nfff = `[\n  f : Nat -> Nat\n\n  f Z = haha %runElab %search @{%World}\n]\n\nprivate infixr 4 ^--^\n\n(^--^) : Nat -> Nat -> Nat\n(^--^) Z Z = Z\nx ^--^ y = x + y\n\nx : (y : Vect n (Maybe (Maybe (&&&) Nat))) ->\n    {x : Nat} -> {auto _ : Monoid a} ->\n    {default 4 xx : Nat} ->\n    {default (f x Y) xx' : Nat} ->\n    String\nx Z S = ?foo\nx y _ = \"a b \\{show $ let x = 0 in y} y >>= z\"\n\nmultiline : String\nmultiline = \"\"\"\n  A multiline string\\NUL\n  \"\"\"\n\nf' : Nat -> Nat\nf' = x' 4\n\nx : Char\nx = '\\BEL'\nx = '\\\\'\nx = '\\''\nx = '\\o755'\nx = 'a'\n\nxx : Int\nxx = 0o7_5_5\n"
  },
  {
    "path": "tests/syntax-tests/source/Ignored suffixes/test.rs.bak",
    "content": "// foo.bak (editor etc backup) should highlight same as foo\n"
  },
  {
    "path": "tests/syntax-tests/source/Ignored suffixes/test.rs.dpkg-dist",
    "content": "// foo.dpkg-dist (Debian dpkg backup) should highlight same as foo\n"
  },
  {
    "path": "tests/syntax-tests/source/Ignored suffixes/test.rs.dpkg-old",
    "content": "// foo.dpkg-old (Debian dpkg backup) should highlight same as foo\n"
  },
  {
    "path": "tests/syntax-tests/source/Ignored suffixes/test.rs.in",
    "content": "// foo.in (build system input) should highlight same as foo\n"
  },
  {
    "path": "tests/syntax-tests/source/Ignored suffixes/test.rs.in.in",
    "content": "// foo.in.in (build system input, doubly replaced) should highlight same as foo\n"
  },
  {
    "path": "tests/syntax-tests/source/Ignored suffixes/test.rs.old",
    "content": "// foo.old (editor etc backup) should highlight same as foo\n"
  },
  {
    "path": "tests/syntax-tests/source/Ignored suffixes/test.rs.orig",
    "content": "// foo.orig (editor, diff etc backup) should highlight same as foo\n"
  },
  {
    "path": "tests/syntax-tests/source/Ignored suffixes/test.rs.orig~",
    "content": "// foo.orig~ (backup of an editor, diff etc backup) should highlight same as foo\n"
  },
  {
    "path": "tests/syntax-tests/source/Ignored suffixes/test.rs.rpmnew",
    "content": "// foo.rpmnew (Red Hat rpm backup) should highlight same as foo\n"
  },
  {
    "path": "tests/syntax-tests/source/Ignored suffixes/test.rs.rpmorig",
    "content": "// foo.rpmorig (Red Hat rpm backup) should highlight same as foo\n"
  },
  {
    "path": "tests/syntax-tests/source/Ignored suffixes/test.rs.rpmsave",
    "content": "// foo.rpmsave (Red Hat rpm backup) should highlight same as foo\n"
  },
  {
    "path": "tests/syntax-tests/source/Ignored suffixes/test.rs.ucf-dist",
    "content": "// foo.ucf-dist (Debian ucf backup) should highlight same as foo\n"
  },
  {
    "path": "tests/syntax-tests/source/Ignored suffixes/test.rs.ucf-new",
    "content": "// foo.ucf-new (Debian ucf backup) should highlight same as foo\n"
  },
  {
    "path": "tests/syntax-tests/source/Ignored suffixes/test.rs.ucf-old",
    "content": "// foo.ucf-old (Debian ucf backup) should highlight same as foo\n"
  },
  {
    "path": "tests/syntax-tests/source/Ignored suffixes/test.rs~",
    "content": "// foo~ (editor backup) should highlight same as foo\n"
  },
  {
    "path": "tests/syntax-tests/source/Ignored suffixes/test.unknown~",
    "content": "// foo~ for unknown foo should not highlight\n"
  },
  {
    "path": "tests/syntax-tests/source/JQ/LICENSE.md",
    "content": "The `sample.jq` file was taken from [SublimeJQ] under the following license:\n\n[SublimeJQ]: https://github.com/zogwarg/SublimeJQ\n\nMIT License\n\nCopyright (c) 2017 Thomas Buick\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "tests/syntax-tests/source/JQ/sample.jq",
    "content": "import \"../imported-file\" ;\n\n# With Comments !\ndef weird($a; $b; $c):\n\t[ $a, $b, $c ] | transpose | reduce .[][] as $item (\n\t\t[];\n\t\t. + $item.property\n\t)\n;\n\n. | weird (.a; .b; .c) |\n\n(\n\nif (. | contains(\"never\") ) then\n\t\"Why yes\"\nelse\n\t12.23\nend\n\n) as $never |\n\n{\n\thello,\n\twhy: \"because\",\n\thello: ( weird | ascii_upcase ),\n\tformat_eg: ( . | @json \"My json string \\( . | this | part | just | white | ascii_upcase | transpose)\" ),\n\tnever: $never,\n\t\"literal_key\": literal_value,\n\t\"this\": 12.1e12,\n\t\"part\": \"almost\"\n\t\"like\": [\n\t\t12,\n\t\t2\n\t\t\"json\"\n\t\t{\n\t\t\t\"quite\": {\n\t\t\t\tsimilar: \"but not quite\"\n\t\t\t}\n\t\t}\n\t],\n} | (\n\t\n\t# And with very basic brace matching\n\t\n\t# Invalid End\n\t]\t\n\t\n\t# Other invalid ends\n\t( [ } ] )\n\n\t# A \"valid\" sequence\n\t( [  { key: () , other_key:( [ []  [[]] ]  ), gaga }  ] )\n\n\t# A \"invalid\" sequence\n\t( [  { key: () , other_key:( [ []  [[] ]  ), gaga }  ] )\n\n\t\"A string\\n whith escaped characters \\\" because we can\"\n)\n\n"
  },
  {
    "path": "tests/syntax-tests/source/JSON/example.ndjson",
    "content": "{\"some\":\"thing\"}\n{\"foo\":17,\"bar\":false,\"quux\":true}\n{\"may\":{\"include\":\"nested\",\"objects\":[\"and\",\"arrays\"]}}\n"
  },
  {
    "path": "tests/syntax-tests/source/JSON/test.json",
    "content": "[\n    {\n        \"name\": \"john\",\n        \"age\": 42,\n        \"isCustomer\": false,\n        \"children\": []\n    },\n    {\n        \"name\": \"james\",\n        \"age\": 35,\n        \"isCustomer\": true,\n        \"children\": [\n            {\n                \"name\": \"linus\",\n                \"age\": 4\n            },\n            {\n                \"name\": \"sandra\",\n                \"age\": 2\n            }\n        ]\n    },\n    {\n        \"name\": \"jessica\",\n        \"age\": null,\n        \"isCustomer\": false,\n        \"children\": []\n    }\n]\n"
  },
  {
    "path": "tests/syntax-tests/source/Java/test.java",
    "content": "import java.util.Scanner;\n\n/* This Java program was submitted to help bat\n * with its syntax highlighting tests\n */\n\npublic class Main\n{\n    public static void main(String[] arg)\n    {\n        Scanner st = new Scanner(System.in);\n        int t;\n        t = st.nextInt();\n        String tem;\n        tem = st.nextLine();\n        for(int zz=0;zz<t;zz++)\n        {\n            String str;\n            str = st.nextLine();\n            int n = str.length();\n            char ch;\n            for(int i=0;i<n;i++)\n            {\n                ch = str.charAt(i);\n                if(ch=='a')\n                System.out.print(\"n\");\n                else if(ch=='s')\n                System.out.print(\"i\");\n                else\n                System.out.print(ch);\n            }\n            System.out.println();\n        }\n        while(t!=0) {\n            // Decrement t\n            t -= 1;\n        }\n    }\n}\n"
  },
  {
    "path": "tests/syntax-tests/source/Java Server Page (JSP)/LICENSE.md",
    "content": "The `sessionDetail.jsp` file has been added from https://github.com/apache/tomcat under the following license:\n\n```text\n\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\n\nAPACHE TOMCAT SUBCOMPONENTS:\n\nApache Tomcat includes a number of subcomponents with separate copyright notices\nand license terms. Your use of these subcomponents is subject to the terms and\nconditions of the following licenses.\n\n\nFor the Eclipse JDT Core Batch Compiler (ecj-x.x.x.jar) component and the\nfollowing Jakarta EE Schemas:\n- jakartaee_9.xsd\n- jakarta_web-services_2_0.xsd\n- jakarta_web-services_client_2_0.xsd\n- jsp_3_0.xsd\n- web-app_5_0.xsd\n- web-commonn_5_0.xsd\n- web-fragment_5_0.xsd\n- web-jsptaglibrary_3_0.xsd\n\nEclipse Public License - v 2.0\n\n    THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE\n    PUBLIC LICENSE (\"AGREEMENT\"). ANY USE, REPRODUCTION OR DISTRIBUTION\n    OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.\n\n1. DEFINITIONS\n\n\"Contribution\" means:\n\n  a) in the case of the initial Contributor, the initial content\n     Distributed under this Agreement, and\n\n  b) in the case of each subsequent Contributor:\n     i) changes to the Program, and\n     ii) additions to the Program;\n  where such changes and/or additions to the Program originate from\n  and are Distributed by that particular Contributor. A Contribution\n  \"originates\" from a Contributor if it was added to the Program by\n  such Contributor itself or anyone acting on such Contributor's behalf.\n  Contributions do not include changes or additions to the Program that\n  are not Modified Works.\n\n\"Contributor\" means any person or entity that Distributes the Program.\n\n\"Licensed Patents\" mean patent claims licensable by a Contributor which\nare necessarily infringed by the use or sale of its Contribution alone\nor when combined with the Program.\n\n\"Program\" means the Contributions Distributed in accordance with this\nAgreement.\n\n\"Recipient\" means anyone who receives the Program under this Agreement\nor any Secondary License (as applicable), including Contributors.\n\n\"Derivative Works\" shall mean any work, whether in Source Code or other\nform, that is based on (or derived from) the Program and for which the\neditorial revisions, annotations, elaborations, or other modifications\nrepresent, as a whole, an original work of authorship.\n\n\"Modified Works\" shall mean any work in Source Code or other form that\nresults from an addition to, deletion from, or modification of the\ncontents of the Program, including, for purposes of clarity any new file\nin Source Code form that contains any contents of the Program. Modified\nWorks shall not include works that contain only declarations,\ninterfaces, types, classes, structures, or files of the Program solely\nin each case in order to link to, bind by name, or subclass the Program\nor Modified Works thereof.\n\n\"Distribute\" means the acts of a) distributing or b) making available\nin any manner that enables the transfer of a copy.\n\n\"Source Code\" means the form of a Program preferred for making\nmodifications, including but not limited to software source code,\ndocumentation source, and configuration files.\n\n\"Secondary License\" means either the GNU General Public License,\nVersion 2.0, or any later versions of that license, including any\nexceptions or additional permissions as identified by the initial\nContributor.\n\n2. GRANT OF RIGHTS\n\n  a) Subject to the terms of this Agreement, each Contributor hereby\n  grants Recipient a non-exclusive, worldwide, royalty-free copyright\n  license to reproduce, prepare Derivative Works of, publicly display,\n  publicly perform, Distribute and sublicense the Contribution of such\n  Contributor, if any, and such Derivative Works.\n\n  b) Subject to the terms of this Agreement, each Contributor hereby\n  grants Recipient a non-exclusive, worldwide, royalty-free patent\n  license under Licensed Patents to make, use, sell, offer to sell,\n  import and otherwise transfer the Contribution of such Contributor,\n  if any, in Source Code or other form. This patent license shall\n  apply to the combination of the Contribution and the Program if, at\n  the time the Contribution is added by the Contributor, such addition\n  of the Contribution causes such combination to be covered by the\n  Licensed Patents. The patent license shall not apply to any other\n  combinations which include the Contribution. No hardware per se is\n  licensed hereunder.\n\n  c) Recipient understands that although each Contributor grants the\n  licenses to its Contributions set forth herein, no assurances are\n  provided by any Contributor that the Program does not infringe the\n  patent or other intellectual property rights of any other entity.\n  Each Contributor disclaims any liability to Recipient for claims\n  brought by any other entity based on infringement of intellectual\n  property rights or otherwise. As a condition to exercising the\n  rights and licenses granted hereunder, each Recipient hereby\n  assumes sole responsibility to secure any other intellectual\n  property rights needed, if any. For example, if a third party\n  patent license is required to allow Recipient to Distribute the\n  Program, it is Recipient's responsibility to acquire that license\n  before distributing the Program.\n\n  d) Each Contributor represents that to its knowledge it has\n  sufficient copyright rights in its Contribution, if any, to grant\n  the copyright license set forth in this Agreement.\n\n  e) Notwithstanding the terms of any Secondary License, no\n  Contributor makes additional grants to any Recipient (other than\n  those set forth in this Agreement) as a result of such Recipient's\n  receipt of the Program under the terms of a Secondary License\n  (if permitted under the terms of Section 3).\n\n3. REQUIREMENTS\n\n3.1 If a Contributor Distributes the Program in any form, then:\n\n  a) the Program must also be made available as Source Code, in\n  accordance with section 3.2, and the Contributor must accompany\n  the Program with a statement that the Source Code for the Program\n  is available under this Agreement, and informs Recipients how to\n  obtain it in a reasonable manner on or through a medium customarily\n  used for software exchange; and\n\n  b) the Contributor may Distribute the Program under a license\n  different than this Agreement, provided that such license:\n     i) effectively disclaims on behalf of all other Contributors all\n     warranties and conditions, express and implied, including\n     warranties or conditions of title and non-infringement, and\n     implied warranties or conditions of merchantability and fitness\n     for a particular purpose;\n\n     ii) effectively excludes on behalf of all other Contributors all\n     liability for damages, including direct, indirect, special,\n     incidental and consequential damages, such as lost profits;\n\n     iii) does not attempt to limit or alter the recipients' rights\n     in the Source Code under section 3.2; and\n\n     iv) requires any subsequent distribution of the Program by any\n     party to be under a license that satisfies the requirements\n     of this section 3.\n\n3.2 When the Program is Distributed as Source Code:\n\n  a) it must be made available under this Agreement, or if the\n  Program (i) is combined with other material in a separate file or\n  files made available under a Secondary License, and (ii) the initial\n  Contributor attached to the Source Code the notice described in\n  Exhibit A of this Agreement, then the Program may be made available\n  under the terms of such Secondary Licenses, and\n\n  b) a copy of this Agreement must be included with each copy of\n  the Program.\n\n3.3 Contributors may not remove or alter any copyright, patent,\ntrademark, attribution notices, disclaimers of warranty, or limitations\nof liability (\"notices\") contained within the Program from any copy of\nthe Program which they Distribute, provided that Contributors may add\ntheir own appropriate notices.\n\n4. COMMERCIAL DISTRIBUTION\n\nCommercial distributors of software may accept certain responsibilities\nwith respect to end users, business partners and the like. While this\nlicense is intended to facilitate the commercial use of the Program,\nthe Contributor who includes the Program in a commercial product\noffering should do so in a manner which does not create potential\nliability for other Contributors. Therefore, if a Contributor includes\nthe Program in a commercial product offering, such Contributor\n(\"Commercial Contributor\") hereby agrees to defend and indemnify every\nother Contributor (\"Indemnified Contributor\") against any losses,\ndamages and costs (collectively \"Losses\") arising from claims, lawsuits\nand other legal actions brought by a third party against the Indemnified\nContributor to the extent caused by the acts or omissions of such\nCommercial Contributor in connection with its distribution of the Program\nin a commercial product offering. The obligations in this section do not\napply to any claims or Losses relating to any actual or alleged\nintellectual property infringement. In order to qualify, an Indemnified\nContributor must: a) promptly notify the Commercial Contributor in\nwriting of such claim, and b) allow the Commercial Contributor to control,\nand cooperate with the Commercial Contributor in, the defense and any\nrelated settlement negotiations. The Indemnified Contributor may\nparticipate in any such claim at its own expense.\n\nFor example, a Contributor might include the Program in a commercial\nproduct offering, Product X. That Contributor is then a Commercial\nContributor. If that Commercial Contributor then makes performance\nclaims, or offers warranties related to Product X, those performance\nclaims and warranties are such Commercial Contributor's responsibility\nalone. Under this section, the Commercial Contributor would have to\ndefend claims against the other Contributors related to those performance\nclaims and warranties, and if a court requires any other Contributor to\npay any damages as a result, the Commercial Contributor must pay\nthose damages.\n\n5. NO WARRANTY\n\nEXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT\nPERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN \"AS IS\"\nBASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR\nIMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF\nTITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR\nPURPOSE. Each Recipient is solely responsible for determining the\nappropriateness of using and distributing the Program and assumes all\nrisks associated with its exercise of rights under this Agreement,\nincluding but not limited to the risks and costs of program errors,\ncompliance with applicable laws, damage to or loss of data, programs\nor equipment, and unavailability or interruption of operations.\n\n6. DISCLAIMER OF LIABILITY\n\nEXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT\nPERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS\nSHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\nEXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST\nPROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE\nEXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGES.\n\n7. GENERAL\n\nIf any provision of this Agreement is invalid or unenforceable under\napplicable law, it shall not affect the validity or enforceability of\nthe remainder of the terms of this Agreement, and without further\naction by the parties hereto, such provision shall be reformed to the\nminimum extent necessary to make such provision valid and enforceable.\n\nIf Recipient institutes patent litigation against any entity\n(including a cross-claim or counterclaim in a lawsuit) alleging that the\nProgram itself (excluding combinations of the Program with other software\nor hardware) infringes such Recipient's patent(s), then such Recipient's\nrights granted under Section 2(b) shall terminate as of the date such\nlitigation is filed.\n\nAll Recipient's rights under this Agreement shall terminate if it\nfails to comply with any of the material terms or conditions of this\nAgreement and does not cure such failure in a reasonable period of\ntime after becoming aware of such noncompliance. If all Recipient's\nrights under this Agreement terminate, Recipient agrees to cease use\nand distribution of the Program as soon as reasonably practicable.\nHowever, Recipient's obligations under this Agreement and any licenses\ngranted by Recipient relating to the Program shall continue and survive.\n\nEveryone is permitted to copy and distribute copies of this Agreement,\nbut in order to avoid inconsistency the Agreement is copyrighted and\nmay only be modified in the following manner. The Agreement Steward\nreserves the right to publish new versions (including revisions) of\nthis Agreement from time to time. No one other than the Agreement\nSteward has the right to modify this Agreement. The Eclipse Foundation\nis the initial Agreement Steward. The Eclipse Foundation may assign the\nresponsibility to serve as the Agreement Steward to a suitable separate\nentity. Each new version of the Agreement will be given a distinguishing\nversion number. The Program (including Contributions) may always be\nDistributed subject to the version of the Agreement under which it was\nreceived. In addition, after a new version of the Agreement is published,\nContributor may elect to Distribute the Program (including its\nContributions) under the new version.\n\nExcept as expressly stated in Sections 2(a) and 2(b) above, Recipient\nreceives no rights or licenses to the intellectual property of any\nContributor under this Agreement, whether expressly, by implication,\nestoppel or otherwise. All rights in the Program not expressly granted\nunder this Agreement are reserved. Nothing in this Agreement is intended\nto be enforceable by any entity that is not a Contributor or Recipient.\nNo third-party beneficiary rights are created under this Agreement.\n\nExhibit A - Form of Secondary Licenses Notice\n\n\"This Source Code may also be made available under the following\nSecondary Licenses when the conditions for such availability set forth\nin the Eclipse Public License, v. 2.0 are satisfied: {name license(s),\nversion(s), and exceptions or additional permissions here}.\"\n\n  Simply including a copy of this Agreement, including this Exhibit A\n  is not sufficient to license the Source Code under Secondary Licenses.\n\n  If it is not possible or desirable to put the notice in a particular\n  file, then You may include the notice in a location (such as a LICENSE\n  file in a relevant directory) where a recipient would be likely to\n  look for such a notice.\n\n  You may add additional accurate notices of copyright ownership.\n\n\nFor the Windows Installer component:\n\n    * All NSIS source code, plug-ins, documentation, examples, header files and\n       graphics, with the exception of the compression modules and where\n       otherwise noted, are licensed under the zlib/libpng license.\n    * The zlib compression module for NSIS is licensed under the zlib/libpng\n       license.\n    * The bzip2 compression module for NSIS is licensed under the bzip2 license.\n    * The lzma compression module for NSIS is licensed under the Common Public\n       License version 1.0.\n\nzlib/libpng license\n\nThis software is provided 'as-is', without any express or implied warranty. In\nno event will the authors be held liable for any damages arising from the use of\nthis software.\n\nPermission is granted to anyone to use this software for any purpose, including\ncommercial applications, and to alter it and redistribute it freely, subject to\nthe following restrictions:\n\n   1. The origin of this software must not be misrepresented; you must not claim\n       that you wrote the original software. If you use this software in a\n       product, an acknowledgment in the product documentation would be\n       appreciated but is not required.\n   2. Altered source versions must be plainly marked as such, and must not be\n       misrepresented as being the original software.\n   3. This notice may not be removed or altered from any source distribution.\n\nbzip2 license\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n   1. Redistributions of source code must retain the above copyright notice,\n       this list of conditions and the following disclaimer.\n   2. The origin of this software must not be misrepresented; you must not claim\n       that you wrote the original software. If you use this software in a\n       product, an acknowledgment in the product documentation would be\n       appreciated but is not required.\n   3. Altered source versions must be plainly marked as such, and must not be\n       misrepresented as being the original software.\n   4. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS AND ANY EXPRESS OR IMPLIED\nWARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\nSHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\nEXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\nOF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING\nIN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\nOF SUCH DAMAGE.\n\nJulian Seward, Cambridge, UK.\n\njseward@acm.org\nCommon Public License version 1.0\n\nTHE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC\nLICENSE (\"AGREEMENT\"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM\nCONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.\n\n1. DEFINITIONS\n\n\"Contribution\" means:\n\na) in the case of the initial Contributor, the initial code and documentation\ndistributed under this Agreement, and b) in the case of each subsequent\nContributor:\n\ni) changes to the Program, and\n\nii) additions to the Program;\n\nwhere such changes and/or additions to the Program originate from and are\ndistributed by that particular Contributor. A Contribution 'originates' from a\nContributor if it was added to the Program by such Contributor itself or anyone\nacting on such Contributor's behalf. Contributions do not include additions to\nthe Program which: (i) are separate modules of software distributed in\nconjunction with the Program under their own license agreement, and (ii) are not\nderivative works of the Program.\n\n\"Contributor\" means any person or entity that distributes the Program.\n\n\"Licensed Patents \" mean patent claims licensable by a Contributor which are\nnecessarily infringed by the use or sale of its Contribution alone or when\ncombined with the Program.\n\n\"Program\" means the Contributions distributed in accordance with this Agreement.\n\n\"Recipient\" means anyone who receives the Program under this Agreement,\nincluding all Contributors.\n\n2. GRANT OF RIGHTS\n\na) Subject to the terms of this Agreement, each Contributor hereby grants\nRecipient a non-exclusive, worldwide, royalty-free copyright license to\nreproduce, prepare derivative works of, publicly display, publicly perform,\ndistribute and sublicense the Contribution of such Contributor, if any, and such\nderivative works, in source code and object code form.\n\nb) Subject to the terms of this Agreement, each Contributor hereby grants\nRecipient a non-exclusive, worldwide, royalty-free patent license under Licensed\nPatents to make, use, sell, offer to sell, import and otherwise transfer the\nContribution of such Contributor, if any, in source code and object code form.\nThis patent license shall apply to the combination of the Contribution and the\nProgram if, at the time the Contribution is added by the Contributor, such\naddition of the Contribution causes such combination to be covered by the\nLicensed Patents. The patent license shall not apply to any other combinations\nwhich include the Contribution. No hardware per se is licensed hereunder.\n\nc) Recipient understands that although each Contributor grants the licenses to\nits Contributions set forth herein, no assurances are provided by any\nContributor that the Program does not infringe the patent or other intellectual\nproperty rights of any other entity. Each Contributor disclaims any liability to\nRecipient for claims brought by any other entity based on infringement of\nintellectual property rights or otherwise. As a condition to exercising the\nrights and licenses granted hereunder, each Recipient hereby assumes sole\nresponsibility to secure any other intellectual property rights needed, if any.\nFor example, if a third party patent license is required to allow Recipient to\ndistribute the Program, it is Recipient's responsibility to acquire that license\nbefore distributing the Program.\n\nd) Each Contributor represents that to its knowledge it has sufficient copyright\nrights in its Contribution, if any, to grant the copyright license set forth in\nthis Agreement.\n\n3. REQUIREMENTS\n\nA Contributor may choose to distribute the Program in object code form under its\nown license agreement, provided that:\n\na) it complies with the terms and conditions of this Agreement; and\n\nb) its license agreement:\n\ni) effectively disclaims on behalf of all Contributors all warranties and\nconditions, express and implied, including warranties or conditions of title and\nnon-infringement, and implied warranties or conditions of merchantability and\nfitness for a particular purpose;\n\nii) effectively excludes on behalf of all Contributors all liability for\ndamages, including direct, indirect, special, incidental and consequential\ndamages, such as lost profits;\n\niii) states that any provisions which differ from this Agreement are offered by\nthat Contributor alone and not by any other party; and\n\niv) states that source code for the Program is available from such Contributor,\nand informs licensees how to obtain it in a reasonable manner on or through a\nmedium customarily used for software exchange.\n\nWhen the Program is made available in source code form:\n\na) it must be made available under this Agreement; and\n\nb) a copy of this Agreement must be included with each copy of the Program.\n\nContributors may not remove or alter any copyright notices contained within the\nProgram.\n\nEach Contributor must identify itself as the originator of its Contribution, if\nany, in a manner that reasonably allows subsequent Recipients to identify the\noriginator of the Contribution.\n\n4. COMMERCIAL DISTRIBUTION\n\nCommercial distributors of software may accept certain responsibilities with\nrespect to end users, business partners and the like. While this license is\nintended to facilitate the commercial use of the Program, the Contributor who\nincludes the Program in a commercial product offering should do so in a manner\nwhich does not create potential liability for other Contributors. Therefore, if\na Contributor includes the Program in a commercial product offering, such\nContributor (\"Commercial Contributor\") hereby agrees to defend and indemnify\nevery other Contributor (\"Indemnified Contributor\") against any losses, damages\nand costs (collectively \"Losses\") arising from claims, lawsuits and other legal\nactions brought by a third party against the Indemnified Contributor to the\nextent caused by the acts or omissions of such Commercial Contributor in\nconnection with its distribution of the Program in a commercial product\noffering. The obligations in this section do not apply to any claims or Losses\nrelating to any actual or alleged intellectual property infringement. In order\nto qualify, an Indemnified Contributor must: a) promptly notify the Commercial\nContributor in writing of such claim, and b) allow the Commercial Contributor to\ncontrol, and cooperate with the Commercial Contributor in, the defense and any\nrelated settlement negotiations. The Indemnified Contributor may participate in\nany such claim at its own expense.\n\nFor example, a Contributor might include the Program in a commercial product\noffering, Product X. That Contributor is then a Commercial Contributor. If that\nCommercial Contributor then makes performance claims, or offers warranties\nrelated to Product X, those performance claims and warranties are such\nCommercial Contributor's responsibility alone. Under this section, the\nCommercial Contributor would have to defend claims against the other\nContributors related to those performance claims and warranties, and if a court\nrequires any other Contributor to pay any damages as a result, the Commercial\nContributor must pay those damages.\n\n5. NO WARRANTY\n\nEXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN\n\"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR\nIMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,\nNON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each\nRecipient is solely responsible for determining the appropriateness of using and\ndistributing the Program and assumes all risks associated with its exercise of\nrights under this Agreement, including but not limited to the risks and costs of\nprogram errors, compliance with applicable laws, damage to or loss of data,\nprograms or equipment, and unavailability or interruption of operations.\n\n6. DISCLAIMER OF LIABILITY\n\nEXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY\nCONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST\nPROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\nSTRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\nOUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS\nGRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\n\n7. GENERAL\n\nIf any provision of this Agreement is invalid or unenforceable under applicable\nlaw, it shall not affect the validity or enforceability of the remainder of the\nterms of this Agreement, and without further action by the parties hereto, such\nprovision shall be reformed to the minimum extent necessary to make such\nprovision valid and enforceable.\n\nIf Recipient institutes patent litigation against a Contributor with respect to\na patent applicable to software (including a cross-claim or counterclaim in a\nlawsuit), then any patent licenses granted by that Contributor to such Recipient\nunder this Agreement shall terminate as of the date such litigation is filed. In\naddition, if Recipient institutes patent litigation against any entity\n(including a cross-claim or counterclaim in a lawsuit) alleging that the Program\nitself (excluding combinations of the Program with other software or hardware)\ninfringes such Recipient's patent(s), then such Recipient's rights granted under\nSection 2(b) shall terminate as of the date such litigation is filed.\n\nAll Recipient's rights under this Agreement shall terminate if it fails to\ncomply with any of the material terms or conditions of this Agreement and does\nnot cure such failure in a reasonable period of time after becoming aware of\nsuch noncompliance. If all Recipient's rights under this Agreement terminate,\nRecipient agrees to cease use and distribution of the Program as soon as\nreasonably practicable. However, Recipient's obligations under this Agreement\nand any licenses granted by Recipient relating to the Program shall continue and\nsurvive.\n\nEveryone is permitted to copy and distribute copies of this Agreement, but in\norder to avoid inconsistency the Agreement is copyrighted and may only be\nmodified in the following manner. The Agreement Steward reserves the right to\npublish new versions (including revisions) of this Agreement from time to time.\nNo one other than the Agreement Steward has the right to modify this Agreement.\nIBM is the initial Agreement Steward. IBM may assign the responsibility to serve\nas the Agreement Steward to a suitable separate entity. Each new version of the\nAgreement will be given a distinguishing version number. The Program (including\nContributions) may always be distributed subject to the version of the Agreement\nunder which it was received. In addition, after a new version of the Agreement\nis published, Contributor may elect to distribute the Program (including its\nContributions) under the new version. Except as expressly stated in Sections\n2(a) and 2(b) above, Recipient receives no rights or licenses to the\nintellectual property of any Contributor under this Agreement, whether\nexpressly, by implication, estoppel or otherwise. All rights in the Program not\nexpressly granted under this Agreement are reserved.\n\nThis Agreement is governed by the laws of the State of New York and the\nintellectual property laws of the United States of America. No party to this\nAgreement will bring a legal action under this Agreement more than one year\nafter the cause of action arose. Each party waives its rights to a jury trial in\nany resulting litigation.\n\nSpecial exception for LZMA compression module\n\nIgor Pavlov and Amir Szekely, the authors of the LZMA compression module for\nNSIS, expressly permit you to statically or dynamically link your code (or bind\nby name) to the files from the LZMA compression module for NSIS without\nsubjecting your linked code to the terms of the Common Public license version\n1.0. Any modifications or additions to files from the LZMA compression module\nfor NSIS, however, are subject to the terms of the Common Public License version\n1.0.\n\n\nFor the following XML Schemas for Java EE Deployment Descriptors:\n - javaee_5.xsd\n - javaee_web_services_1_2.xsd\n - javaee_web_services_client_1_2.xsd\n - javaee_6.xsd\n - javaee_web_services_1_3.xsd\n - javaee_web_services_client_1_3.xsd\n - jsp_2_2.xsd\n - web-app_3_0.xsd\n - web-common_3_0.xsd\n - web-fragment_3_0.xsd\n - javaee_7.xsd\n - javaee_web_services_1_4.xsd\n - javaee_web_services_client_1_4.xsd\n - jsp_2_3.xsd\n - web-app_3_1.xsd\n - web-common_3_1.xsd\n - web-fragment_3_1.xsd\n - javaee_8.xsd\n - web-app_4_0.xsd\n - web-common_4_0.xsd\n - web-fragment_4_0.xsd\n\nCOMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0\n\n1. Definitions.\n\n   1.1. Contributor. means each individual or entity that creates or contributes\n        to the creation of Modifications.\n\n   1.2. Contributor Version. means the combination of the Original Software,\n        prior Modifications used by a Contributor (if any), and the\n        Modifications made by that particular Contributor.\n\n   1.3. Covered Software. means (a) the Original Software, or (b) Modifications,\n        or (c) the combination of files containing Original Software with files\n        containing Modifications, in each case including portions thereof.\n\n   1.4. Executable. means the Covered Software in any form other than Source\n        Code.\n\n   1.5. Initial Developer. means the individual or entity that first makes\n        Original Software available under this License.\n\n   1.6. Larger Work. means a work which combines Covered Software or portions\n        thereof with code not governed by the terms of this License.\n\n   1.7. License. means this document.\n\n   1.8. Licensable. means having the right to grant, to the maximum extent\n        possible, whether at the time of the initial grant or subsequently\n        acquired, any and all of the rights conveyed herein.\n\n   1.9. Modifications. means the Source Code and Executable form of any of the\n        following:\n\n        A. Any file that results from an addition to, deletion from or\n           modification of the contents of a file containing Original Software\n           or previous Modifications;\n\n        B. Any new file that contains any part of the Original Software or\n           previous Modification; or\n\n        C. Any new file that is contributed or otherwise made available under\n           the terms of this License.\n\n   1.10. Original Software. means the Source Code and Executable form of\n         computer software code that is originally released under this License.\n\n   1.11. Patent Claims. means any patent claim(s), now owned or hereafter\n         acquired, including without limitation, method, process, and apparatus\n         claims, in any patent Licensable by grantor.\n\n   1.12. Source Code. means (a) the common form of computer software code in\n         which modifications are made and (b) associated documentation included\n         in or with such code.\n\n   1.13. You. (or .Your.) means an individual or a legal entity exercising\n         rights under, and complying with all of the terms of, this License. For\n         legal entities, .You. includes any entity which controls, is controlled\n         by, or is under common control with You. For purposes of this\n         definition, .control. means (a) the power, direct or indirect, to cause\n         the direction or management of such entity, whether by contract or\n         otherwise, or (b) ownership of more than fifty percent (50%) of the\n         outstanding shares or beneficial ownership of such entity.\n\n2. License Grants.\n\n      2.1. The Initial Developer Grant.\n\n      Conditioned upon Your compliance with Section 3.1 below and subject to\n      third party intellectual property claims, the Initial Developer hereby\n      grants You a world-wide, royalty-free, non-exclusive license:\n\n        (a) under intellectual property rights (other than patent or trademark)\n            Licensable by Initial Developer, to use, reproduce, modify, display,\n            perform, sublicense and distribute the Original Software (or\n            portions thereof), with or without Modifications, and/or as part of\n            a Larger Work; and\n\n        (b) under Patent Claims infringed by the making, using or selling of\n            Original Software, to make, have made, use, practice, sell, and\n            offer for sale, and/or otherwise dispose of the Original Software\n            (or portions thereof).\n\n        (c) The licenses granted in Sections 2.1(a) and (b) are effective on the\n            date Initial Developer first distributes or otherwise makes the\n            Original Software available to a third party under the terms of this\n            License.\n\n        (d) Notwithstanding Section 2.1(b) above, no patent license is granted:\n            (1) for code that You delete from the Original Software, or (2) for\n            infringements caused by: (i) the modification of the Original\n            Software, or (ii) the combination of the Original Software with\n            other software or devices.\n\n    2.2. Contributor Grant.\n\n    Conditioned upon Your compliance with Section 3.1 below and subject to third\n    party intellectual property claims, each Contributor hereby grants You a\n    world-wide, royalty-free, non-exclusive license:\n\n        (a) under intellectual property rights (other than patent or trademark)\n            Licensable by Contributor to use, reproduce, modify, display,\n            perform, sublicense and distribute the Modifications created by such\n            Contributor (or portions thereof), either on an unmodified basis,\n            with other Modifications, as Covered Software and/or as part of a\n            Larger Work; and\n\n        (b) under Patent Claims infringed by the making, using, or selling of\n            Modifications made by that Contributor either alone and/or in\n            combination with its Contributor Version (or portions of such\n            combination), to make, use, sell, offer for sale, have made, and/or\n            otherwise dispose of: (1) Modifications made by that Contributor (or\n            portions thereof); and (2) the combination of Modifications made by\n            that Contributor with its Contributor Version (or portions of such\n            combination).\n\n        (c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on\n            the date Contributor first distributes or otherwise makes the\n            Modifications available to a third party.\n\n        (d) Notwithstanding Section 2.2(b) above, no patent license is granted:\n            (1) for any code that Contributor has deleted from the Contributor\n            Version; (2) for infringements caused by: (i) third party\n            modifications of Contributor Version, or (ii) the combination of\n            Modifications made by that Contributor with other software (except\n            as part of the Contributor Version) or other devices; or (3) under\n            Patent Claims infringed by Covered Software in the absence of\n            Modifications made by that Contributor.\n\n3. Distribution Obligations.\n\n      3.1. Availability of Source Code.\n      Any Covered Software that You distribute or otherwise make available in\n      Executable form must also be made available in Source Code form and that\n      Source Code form must be distributed only under the terms of this License.\n      You must include a copy of this License with every copy of the Source Code\n      form of the Covered Software You distribute or otherwise make available.\n      You must inform recipients of any such Covered Software in Executable form\n      as to how they can obtain such Covered Software in Source Code form in a\n      reasonable manner on or through a medium customarily used for software\n      exchange.\n\n      3.2. Modifications.\n      The Modifications that You create or to which You contribute are governed\n      by the terms of this License. You represent that You believe Your\n      Modifications are Your original creation(s) and/or You have sufficient\n      rights to grant the rights conveyed by this License.\n\n      3.3. Required Notices.\n      You must include a notice in each of Your Modifications that identifies\n      You as the Contributor of the Modification. You may not remove or alter\n      any copyright, patent or trademark notices contained within the Covered\n      Software, or any notices of licensing or any descriptive text giving\n      attribution to any Contributor or the Initial Developer.\n\n      3.4. Application of Additional Terms.\n      You may not offer or impose any terms on any Covered Software in Source\n      Code form that alters or restricts the applicable version of this License\n      or the recipients. rights hereunder. You may choose to offer, and to\n      charge a fee for, warranty, support, indemnity or liability obligations to\n      one or more recipients of Covered Software. However, you may do so only on\n      Your own behalf, and not on behalf of the Initial Developer or any\n      Contributor. You must make it absolutely clear that any such warranty,\n      support, indemnity or liability obligation is offered by You alone, and\n      You hereby agree to indemnify the Initial Developer and every Contributor\n      for any liability incurred by the Initial Developer or such Contributor as\n      a result of warranty, support, indemnity or liability terms You offer.\n\n      3.5. Distribution of Executable Versions.\n      You may distribute the Executable form of the Covered Software under the\n      terms of this License or under the terms of a license of Your choice,\n      which may contain terms different from this License, provided that You are\n      in compliance with the terms of this License and that the license for the\n      Executable form does not attempt to limit or alter the recipient.s rights\n      in the Source Code form from the rights set forth in this License. If You\n      distribute the Covered Software in Executable form under a different\n      license, You must make it absolutely clear that any terms which differ\n      from this License are offered by You alone, not by the Initial Developer\n      or Contributor. You hereby agree to indemnify the Initial Developer and\n      every Contributor for any liability incurred by the Initial Developer or\n      such Contributor as a result of any such terms You offer.\n\n      3.6. Larger Works.\n      You may create a Larger Work by combining Covered Software with other code\n      not governed by the terms of this License and distribute the Larger Work\n      as a single product. In such a case, You must make sure the requirements\n      of this License are fulfilled for the Covered Software.\n\n4. Versions of the License.\n\n      4.1. New Versions.\n      Sun Microsystems, Inc. is the initial license steward and may publish\n      revised and/or new versions of this License from time to time. Each\n      version will be given a distinguishing version number. Except as provided\n      in Section 4.3, no one other than the license steward has the right to\n      modify this License.\n\n      4.2. Effect of New Versions.\n      You may always continue to use, distribute or otherwise make the Covered\n      Software available under the terms of the version of the License under\n      which You originally received the Covered Software. If the Initial\n      Developer includes a notice in the Original Software prohibiting it from\n      being distributed or otherwise made available under any subsequent version\n      of the License, You must distribute and make the Covered Software\n      available under the terms of the version of the License under which You\n      originally received the Covered Software. Otherwise, You may also choose\n      to use, distribute or otherwise make the Covered Software available under\n      the terms of any subsequent version of the License published by the\n      license steward.\n\n      4.3. Modified Versions.\n      When You are an Initial Developer and You want to create a new license for\n      Your Original Software, You may create and use a modified version of this\n      License if You: (a) rename the license and remove any references to the\n      name of the license steward (except to note that the license differs from\n      this License); and (b) otherwise make it clear that the license contains\n      terms which differ from this License.\n\n5. DISCLAIMER OF WARRANTY.\n\n   COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN .AS IS. BASIS, WITHOUT\n   WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT\n   LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS,\n   MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK\n   AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD\n   ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL\n   DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY\n   SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN\n   ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED\n   HEREUNDER EXCEPT UNDER THIS DISCLAIMER.\n\n6. TERMINATION.\n\n      6.1. This License and the rights granted hereunder will terminate\n           automatically if You fail to comply with terms herein and fail to\n           cure such breach within 30 days of becoming aware of the breach.\n           Provisions which, by their nature, must remain in effect beyond the\n           termination of this License shall survive.\n\n      6.2. If You assert a patent infringement claim (excluding declaratory\n           judgment actions) against Initial Developer or a Contributor (the\n           Initial Developer or Contributor against whom You assert such claim\n           is referred to as .Participant.) alleging that the Participant\n           Software (meaning the Contributor Version where the Participant is a\n           Contributor or the Original Software where the Participant is the\n           Initial Developer) directly or indirectly infringes any patent, then\n           any and all rights granted directly or indirectly to You by such\n           Participant, the Initial Developer (if the Initial Developer is not\n           the Participant) and all Contributors under Sections 2.1 and/or 2.2\n           of this License shall, upon 60 days notice from Participant terminate\n           prospectively and automatically at the expiration of such 60 day\n           notice period, unless if within such 60 day period You withdraw Your\n           claim with respect to the Participant Software against such\n           Participant either unilaterally or pursuant to a written agreement\n           with Participant.\n\n      6.3. In the event of termination under Sections 6.1 or 6.2 above, all end\n           user licenses that have been validly granted by You or any\n           distributor hereunder prior to termination (excluding licenses\n           granted to You by any distributor) shall survive termination.\n\n7. LIMITATION OF LIABILITY.\n\n   UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING\n   NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY\n   OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF\n   ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL,\n   INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT\n   LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK STOPPAGE,\n   COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR\n   LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF\n   SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR\n   DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY.S NEGLIGENCE TO THE EXTENT\n   APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE\n   EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS\n   EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.\n\n8. U.S. GOVERNMENT END USERS.\n\n   The Covered Software is a .commercial item,. as that term is defined in 48\n   C.F.R. 2.101 (Oct. 1995), consisting of .commercial computer software. (as\n   that term is defined at 48 C.F.R. ? 252.227-7014(a)(1)) and commercial\n   computer software documentation. as such terms are used in 48 C.F.R. 12.212\n   (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1\n   through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered\n   Software with only those rights set forth herein. This U.S. Government Rights\n   clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or\n   provision that addresses Government rights in computer software under this\n   License.\n\n9. MISCELLANEOUS.\n\n   This License represents the complete agreement concerning subject matter\n   hereof. If any provision of this License is held to be unenforceable, such\n   provision shall be reformed only to the extent necessary to make it\n   enforceable. This License shall be governed by the law of the jurisdiction\n   specified in a notice contained within the Original Software (except to the\n   extent applicable law, if any, provides otherwise), excluding such\n   jurisdiction's conflict-of-law provisions. Any litigation relating to this\n   License shall be subject to the jurisdiction of the courts located in the\n   jurisdiction and venue specified in a notice contained within the Original\n   Software, with the losing party responsible for costs, including, without\n   limitation, court costs and reasonable attorneys. fees and expenses. The\n   application of the United Nations Convention on Contracts for the\n   International Sale of Goods is expressly excluded. Any law or regulation\n   which provides that the language of a contract shall be construed against\n   the drafter shall not apply to this License. You agree that You alone are\n   responsible for compliance with the United States export administration\n   regulations (and the export control laws and regulation of any other\n   countries) when You use, distribute or otherwise make available any Covered\n   Software.\n\n10. RESPONSIBILITY FOR CLAIMS.\n\n   As between Initial Developer and the Contributors, each party is responsible\n   for claims and damages arising, directly or indirectly, out of its\n   utilization of rights under this License and You agree to work with Initial\n   Developer and Contributors to distribute such responsibility on an equitable\n   basis. Nothing herein is intended or shall be deemed to constitute any\n   admission of liability.\n\n   NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION\n   LICENSE (CDDL)\n\n   The code released under the CDDL shall be governed by the laws of the State\n   of California (excluding conflict-of-law provisions). Any litigation relating\n   to this License shall be subject to the jurisdiction of the Federal Courts of\n   the Northern District of California and the state courts of the State of\n   California, with venue lying in Santa Clara County, California.\n\n```\n"
  },
  {
    "path": "tests/syntax-tests/source/Java Server Page (JSP)/NOTICE",
    "content": "Apache Tomcat\nCopyright 1999-2021 The Apache Software Foundation\n\nThis product includes software developed at\nThe Apache Software Foundation (https://www.apache.org/).\n\nThis software contains code derived from netty-native\ndeveloped by the Netty project\n(https://netty.io, https://github.com/netty/netty-tcnative/)\nand from finagle-native developed at Twitter\n(https://github.com/twitter/finagle).\n\nThis software contains code derived from jgroups-kubernetes\ndeveloped by the JGroups project (http://www.jgroups.org/).\n\nThe Windows Installer is built with the Nullsoft\nScriptable Install System (NSIS), which is\nopen source software.  The original software and\nrelated information is available at\nhttp://nsis.sourceforge.net.\n\nJava compilation software for JSP pages is provided by the Eclipse\nJDT Core Batch Compiler component, which is open source software.\nThe original software and related information is available at\nhttps://www.eclipse.org/jdt/core/.\n\norg.apache.tomcat.util.json.JSONParser.jj is a public domain javacc grammar\nfor JSON written by Robert Fischer.\nhttps://github.com/RobertFischer/json-parser\n\nFor portions of the Tomcat JNI OpenSSL API and the OpenSSL JSSE integration\nThe org.apache.tomcat.jni and the org.apache.tomcat.net.openssl packages\nare derivative work originating from the Netty project and the finagle-native\nproject developed at Twitter\n* Copyright 2014 The Netty Project\n* Copyright 2014 Twitter\n\nFor portions of the Tomcat cloud support\nThe org.apache.catalina.tribes.membership.cloud package contains derivative\nwork originating from the jgroups project.\nhttps://github.com/jgroups-extras/jgroups-kubernetes\nCopyright 2002-2018 Red Hat Inc.\n\nThe original XML Schemas for Java EE Deployment Descriptors:\n - javaee_5.xsd\n - javaee_web_services_1_2.xsd\n - javaee_web_services_client_1_2.xsd\n - javaee_6.xsd\n - javaee_web_services_1_3.xsd\n - javaee_web_services_client_1_3.xsd\n - jsp_2_2.xsd\n - web-app_3_0.xsd\n - web-common_3_0.xsd\n - web-fragment_3_0.xsd\n - javaee_7.xsd\n - javaee_web_services_1_4.xsd\n - javaee_web_services_client_1_4.xsd\n - jsp_2_3.xsd\n - web-app_3_1.xsd\n - web-common_3_1.xsd\n - web-fragment_3_1.xsd\n - javaee_8.xsd\n - web-app_4_0.xsd\n - web-common_4_0.xsd\n - web-fragment_4_0.xsd\n\nmay be obtained from:\nhttp://www.oracle.com/webfolder/technetwork/jsc/xml/ns/javaee/index.html\n"
  },
  {
    "path": "tests/syntax-tests/source/Java Server Page (JSP)/sessionDetail.jsp",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<%--\n Licensed to the Apache Software Foundation (ASF) under one or more\n  contributor license agreements.  See the NOTICE file distributed with\n  this work for additional information regarding copyright ownership.\n  The ASF licenses this file to You under the Apache License, Version 2.0\n  (the \"License\"); you may not use this file except in compliance with\n  the License.  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<%@page session=\"false\" contentType=\"text/html; charset=ISO-8859-1\" %>\n<%@page import=\"java.util.Enumeration\" %>\n<%@page import=\"jakarta.servlet.http.HttpSession\" %>\n<%@page import=\"org.apache.catalina.Session\" %>\n<%@page import=\"org.apache.catalina.manager.JspHelper\" %>\n<%@page import=\"org.apache.catalina.util.ContextName\" %>\n<!DOCTYPE html\n     PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n     \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<%--!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\"\n \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\"--%>\n\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\">\n<% String path = (String) request.getAttribute(\"path\");\n   String version = (String) request.getAttribute(\"version\");\n   ContextName cn = new ContextName(path, version);\n   Session currentSession = (Session)request.getAttribute(\"currentSession\");\n   String currentSessionId = null;\n   HttpSession currentHttpSession = null;\n   if (currentSession != null) {\n       currentHttpSession = currentSession.getSession();\n       currentSessionId = JspHelper.escapeXml(currentSession.getId());\n   } else {\n       currentSessionId = \"Session invalidated\";\n   }\n   String submitUrl = JspHelper.escapeXml(response.encodeURL(\n           ((HttpServletRequest) pageContext.getRequest()).getRequestURI() +\n           \"?path=\" + path + \"&version=\" + version));\n%>\n<head>\n    <meta http-equiv=\"content-type\" content=\"text/html; charset=iso-8859-1\"/>\n    <meta http-equiv=\"pragma\" content=\"no-cache\"/><!-- HTTP 1.0 -->\n    <meta http-equiv=\"cache-control\" content=\"no-cache,must-revalidate\"/><!-- HTTP 1.1 -->\n    <meta http-equiv=\"expires\" content=\"0\"/><!-- 0 is an invalid value and should be treated as 'now' -->\n    <meta http-equiv=\"content-language\" content=\"en\"/>\n    <meta name=\"author\" content=\"Cedrik LIME\"/>\n    <meta name=\"copyright\" content=\"copyright 2005-2021 the Apache Software Foundation\"/>\n    <meta name=\"robots\" content=\"noindex,nofollow,noarchive\"/>\n    <title>Sessions Administration: details for <%= currentSessionId %></title>\n</head>\n<body>\n<% if (currentHttpSession == null) { %>\n   <h1><%=currentSessionId%></h1>\n<% } else { %>\n   <h1>Details for Session <%= currentSessionId %></h1>\n\n   <table style=\"text-align: left;\" border=\"0\">\n     <tr>\n       <th>Session Id</th>\n       <td><%= currentSessionId %></td>\n     </tr>\n     <tr>\n       <th>Guessed Locale</th>\n       <td><%= JspHelper.guessDisplayLocaleFromSession(currentSession) %></td>\n     </tr>\n     <tr>\n       <th>Guessed User</th>\n       <td><%= JspHelper.guessDisplayUserFromSession(currentSession) %></td>\n     </tr>\n     <tr>\n       <th>Creation Time</th>\n       <td><%= JspHelper.getDisplayCreationTimeForSession(currentSession) %></td>\n     </tr>\n     <tr>\n       <th>Last Accessed Time</th>\n       <td><%= JspHelper.getDisplayLastAccessedTimeForSession(currentSession) %></td>\n     </tr>\n     <tr>\n       <th>Session Max Inactive Interval</th>\n       <td><%= JspHelper.secondsToTimeString(currentSession.getMaxInactiveInterval()) %></td>\n     </tr>\n     <tr>\n       <th>Used Time</th>\n       <td><%= JspHelper.getDisplayUsedTimeForSession(currentSession) %></td>\n     </tr>\n     <tr>\n       <th>Inactive Time</th>\n       <td><%= JspHelper.getDisplayInactiveTimeForSession(currentSession) %></td>\n     </tr>\n     <tr>\n       <th>TTL</th>\n       <td><%= JspHelper.getDisplayTTLForSession(currentSession) %></td>\n     </tr>\n   </table>\n\n   <form method=\"post\" action=\"<%= submitUrl %>\">\n     <div>\n       <input type=\"hidden\" name=\"sessionId\" value=\"<%= currentSessionId %>\" />\n       <input type=\"hidden\" name=\"action\" value=\"sessionDetail\" />\n       <%\n       if (\"Primary\".equals(request.getParameter(\"sessionType\"))) {\n       %>\n         <input type=\"hidden\" name=\"sessionType\" value=\"Primary\" />\n       <%\n       }\n       %>    <input type=\"submit\" value=\"Refresh\" />\n     </div>\n   </form>\n\n   <div class=\"error\"><%= JspHelper.escapeXml(request.getAttribute(\"error\")) %></div>\n   <div class=\"message\"><%= JspHelper.escapeXml(request.getAttribute(\"message\")) %></div>\n\n   <table style=\"text-align: left;\" border=\"1\" cellpadding=\"2\" cellspacing=\"2\">\n   <% int nAttributes = 0;\n      Enumeration<String> attributeNamesEnumeration = currentHttpSession.getAttributeNames();\n      while (attributeNamesEnumeration.hasMoreElements()) {\n          attributeNamesEnumeration.nextElement();\n          ++nAttributes;\n      }\n   %>\n       <caption style=\"font-variant: small-caps;\"><%= JspHelper.formatNumber(nAttributes) %> attributes</caption>\n       <thead>\n           <tr>\n               <th>Remove Attribute</th>\n               <th>Attribute name</th>\n               <th>Attribute value</th>\n           </tr>\n       </thead>\n       <%--tfoot>\n           <tr>\n               <td colspan=\"3\" style=\"text-align: center;\">\n                   TODO: set Max Inactive Interval on sessions\n               </td>\n           </tr>\n       </tfoot--%>\n       <tbody>\n   <% attributeNamesEnumeration = currentHttpSession.getAttributeNames();\n      while (attributeNamesEnumeration.hasMoreElements()) {\n          String attributeName = attributeNamesEnumeration.nextElement();\n   %>\n           <tr>\n               <td align=\"center\">\n                   <form method=\"post\" action=\"<%= submitUrl %>\">\n                       <div>\n                           <input type=\"hidden\" name=\"action\" value=\"removeSessionAttribute\" />\n                           <input type=\"hidden\" name=\"sessionId\" value=\"<%= currentSessionId %>\" />\n                           <input type=\"hidden\" name=\"attributeName\" value=\"<%= JspHelper.escapeXml(attributeName) %>\" />\n                           <%\n                             if (\"Primary\".equals(request.getParameter(\"sessionType\"))) {\n                           %>\n                             <input type=\"submit\" value=\"Remove\" />\n                             <input type=\"hidden\" name=\"sessionType\" value=\"Primary\" />\n                           <%\n                             } else {\n                               out.print(\"Primary sessions only\");\n                             }\n                           %>\n                       </div>\n                   </form>\n               </td>\n               <td><%= JspHelper.escapeXml(attributeName) %></td>\n               <td><% Object attributeValue = currentHttpSession.getAttribute(attributeName); %><span title=\"<%= attributeValue == null ? \"\" : attributeValue.getClass().toString() %>\"><%= JspHelper.escapeXml(attributeValue) %></span></td>\n           </tr>\n   <% } // end while %>\n       </tbody>\n   </table>\n<% } // endif%>\n\n<form method=\"post\" action=\"<%=submitUrl%>\">\n  <p style=\"text-align: center;\">\n    <input type=\"submit\" value=\"Return to session list\" />\n  </p>\n</form>\n\n<%--div style=\"display: none;\">\n<p>\n    <a href=\"http://validator.w3.org/check?uri=referer\"><img\n        src=\"http://www.w3.org/Icons/valid-html401\"\n        alt=\"Valid HTML 4.01!\" height=\"31\" width=\"88\"></a>\n    <a href=\"http://validator.w3.org/check?uri=referer\"><img\n        src=\"http://www.w3.org/Icons/valid-xhtml10\"\n        alt=\"Valid XHTML 1.0!\" height=\"31\" width=\"88\" /></a>\n    <a href=\"http://validator.w3.org/check?uri=referer\"><img\n        src=\"http://www.w3.org/Icons/valid-xhtml11\"\n        alt=\"Valid XHTML 1.1!\" height=\"31\" width=\"88\" /></a>\n</p>\n</div--%>\n\n</body>\n</html>\n"
  },
  {
    "path": "tests/syntax-tests/source/JavaScript/test.js",
    "content": "let letNumber = 1000;\nconst constNumber = 10;\nvar varNumber = -1234;\nconst constNegativeFloat = -1.23;\nvar tooMuch = Infinity;\nnothing = null;\nlet listofthings = [\"thing\", 'thing2', `foo`, [\"bar\"]];\n\n// Simple comment\n\n/**\n* #########\n* Multiline\n* comment\n* #########\n*/\n\nlet test;\nfor (let i = 0; i < constNumber; i++) {\n\tif (test) continue;\n\telse test += 1; // random things\n}\n\nwhile(test < 100 && typeof test === \"number\") {\n\ttest = test > 30 ? test+5 : test+1;\n}\n\nfunction weatherSays(when=Date.now()) {\n\treturn \"rain\";\n}\n\nconst thereAreClouds = true;\nconst cloudsCount = 20;\n\nswitch(weatherSays(Date.now())) {\n\tcase 'rain':\n\t\tbreak;\n\tcase 'sun':\n\tdefault:\n\t\tbreak;\n}\n\nlet rain = false;\nif ((thereAreClouds && cloudsCount >= 20) || weatherSays() === \"rain\") {\n\train = false;\n} else if (thereAreClouds && weatherSays() == \"rain\") { // oh no, unsafe two equals checking!\n\train = true;\n} else {\n\train = !!cloudsCount;\n}\n\nclass Forecast {\n\tconstructor(where, isGonnaRainA=true, isGonnaRainB=false, isGonnaRainC=false, ...randomArgs) {\n\t\tthis.station = {\n\t\t\tlocation: [where.x, where.y, where.z],\n\t\t\tsurroundings: {\n\t\t\t\tzoneA: {\n\t\t\t\t\tlocation: [1, 2, 3],\n\t\t\t\t\tisGonnaRain: isGonnaRainA\n\t\t\t\t},\n\t\t\t\tzoneB: {\n\t\t\t\t\tlocation: [-1, 2, 2],\n\t\t\t\t\tisGonnaRain: isGonnaRainB\n\t\t\t\t},\n\t\t\t\tzoneC: {\n\t\t\t\t\tlocation: [-2, 0, 0],\n\t\t\t\t\tisGonnaRainC: isGonnaRainC\n\t\t\t\t},\n\t\t\t}\n\t\t};\n\t}\n\t\n\tasync getLocalPrevisions() {\n\t\tconst rainZones = [this.station.surroundings.zoneA.isGonnaRain, this.station.surroundings.zoneB.isGonnaRain, this.station.surroundings.zoneC.isGonnaRain];\n\t\treturn await rainZones.filter(z => !!z).length > (rainZones.length / 2);\n\t}\n\t\n\tcommunicatePrevisions(isGonnaRain=undefined) {\n\t\tif (isGonnaRain) console.log(\"Take the umbrella.\");\n\t}\n\t\n\tdestroy() {\n\t\tdelete this.station;\n\t}\n\t\n\tstatic startHiring() {\n\t\tconsole.log(\"We're looking for weather presenters.\");\n\t\tconsole.log(\"A lot of presenters came. Hiring stops.\");\n\t}\n\t\n\t/* This forecasting station is magic. It can generate rain, but this method is secret because it's a generator function - nobody uses them! */\n\t* generateRainInZoneC(clouds=[1, 2, 3]) {\n\t\tthis.station.surroundings.zoneC.isGonnaRain = true;\n\t\tconst makeRain = () => { return \"raining!\"; };\n\t\t\n\t\tyield clouds; // first, keeps clouds\n\t\tdo {\n\t\t\tconsole.log(makeRain());\n\t\t\tyield clouds.pop(); // then all clouds do rain\n\t\t} while(clouds.length >= 1);\n\t}\n}\n\nForecast.startHiring();\nconst forecasting = new Forecast([3, 3, 3]);\n(async() => {\n\tconst raining = forecasting.generateRainInZoneC();\n\training.next();\n\tforecasting.communicatePrevisions(await forecasting.getLocalPrevisions());\n\training.next();\n\training.next();\n\training.return(\"stop!\");\n\tforecasting.destroy();\n})();\n"
  },
  {
    "path": "tests/syntax-tests/source/Jinja2/template.jinja2",
    "content": "{% extends 'base.jinja2' %}\n<h1>{% block title %}{% endblock %}</h1>\n{% for entry in entries %}\n  <span>Entry {{ loop.index }}</span>\n  {% if entry.show %}\n    <p>{{ entry.value }}</p>\n  {% else if false %}\n    <p>No value</p>\n  {% endif %}\n{% endfor %}\n{% set some_value = 123 %}\n  <div>{{ some_value | custom_filter }}, {{ some_value | abs }}</div>\n{% endset %}\n{{ some_dict['val'].val }}\n{# comment #}\n{#\n  longer comment\n  {{ value }}\n#}\n{% raw %}\n  {{ do not transform }}\n{% endraw %}\n{% macro some_macro(value) -%}\n  <p style=\"color: red;\">{{ value }}</p>\n{%- endmacro %}\n{% if another_val is defined %}\n  <h3>{{ another_val }}</h3>\n{% else %}\n  <h3>Unknown</h3>\n{% endif %}\n"
  },
  {
    "path": "tests/syntax-tests/source/Julia/test.jl",
    "content": "x = 3\n\ny = 2x\n\ntypeof(y)\n\nf(x) = 2 + x\n\n\nf\n\nf(10)\n\n\nfunction g(x, y)\n    z = x + y\n    return z^2\nend\n\ng(1, 2)\n\nlet s = 0\n    for i in 1:10\n        s += i    # Equivalent to s = s + i\n    end\n    s\nend\n\n\ntypeof(1:10)\n\nfunction mysum(n)\n    s = 0\n    for i in 1:n\n        s += i\n    end\n    return s\nend\n\nmysum(100)\n\na = 3\n\na < 5\n\nif a < 5\n    \"small\"\nelse\n    \"big\"\nend\n\nv = [1, 2, 3]\n\ntypeof(v)\n\nv[2]\n\nv[2] = 10\n\nv2 = [i^2 for i in 1:10]\n\nM = [1 2\n     3 4]\n\ntypeof(M)\n\nzeros(5, 5)\n\nzeros(Int, 4, 5)\n\n[i + j for i in 1:5, j in 1:6]\n"
  },
  {
    "path": "tests/syntax-tests/source/Kotlin/test.kt",
    "content": "import kotlin.math.*\n\ndata class Example(\n    val name: String,\n    val numbers: List<Int?>\n)\n\nfun interface JokeInterface {\n    fun isFunny(): Boolean\n}\n\nabstract class AbstractJoke : JokeInterface {\n    override fun isFunny() = false\n    abstract fun content(): String\n}\n\nclass Joke : AbstractJoke() {\n    override fun isFunny(): Boolean {\n        return true\n    }\n    override fun content(): String = \"content of joke here, haha\"\n}\n\nclass DelegatedJoke(val joke: Joke) : JokeInterface by joke {\n    val number: Long = 123L\n\n    companion object {\n        const val someConstant = \"some constant text\"\n    }\n}\n\nobject SomeSingleton\n\nsealed class Shape {\n    abstract fun area(): Double\n}\n\ndata class Square(val sideLength: Double) : Shape() {\n    override fun area(): Double = sideLength.pow(2)\n}\n\nobject Point : Shape() {\n    override fun area() = .0\n}\n\nclass Circle(val radius: Double) : Shape() {\n    override fun area(): Double {\n        return PI * radius * radius\n    }\n}\n\nfun String.extensionMethod() = \"test\"\n\nfun main() {\n    val name = \"\"\"\n       multiline\n       string\n       \n       some numbers: 123123 42\n    \"\"\".trimIndent()\n    val example = Example(name = name, numbers = listOf(512, 42, null, -1))\n\n    example.numbers\n        .filterNotNull()\n        .forEach { println(it) }\n\n    setOf(Joke(), DelegatedJoke(Joke()).joke)\n        .filter(JokeInterface::isFunny)\n        .map(AbstractJoke::content)\n        .forEachIndexed { index: Int, joke ->\n            println(\"I heard a funny joke(#${index + 1}): $joke\")\n        }\n\n    listOf(Square(12.3), Point, Circle(5.2))\n        .associateWith(Shape::area)\n        .toList()\n        .sortedBy { it.second }\n        .forEach {\n            println(\"${it.first}: ${it.second}\")\n        }\n\n    println(\"some string\".extensionMethod())\n\n    require(SomeSingleton::class.simpleName == \"SomeSingletonName\") { \"something does not seem right...\" }\n}\n"
  },
  {
    "path": "tests/syntax-tests/source/LLVM/test.ll",
    "content": "; ModuleID = 'test.c'\nsource_filename = \"test.c\"\ntarget datalayout = \"e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128\"\ntarget triple = \"x86_64-pc-linux-gnu\"\n\n@.str = private unnamed_addr constant [13 x i8] c\"Hello World!\\00\", align 1\n\n; Function Attrs: noinline norecurse optnone uwtable\ndefine dso_local i32 @main(i32 %0, i8** %1) #0 {\n  %3 = alloca i32, align 4\n  %4 = alloca i32, align 4\n  %5 = alloca i8**, align 8\n  store i32 0, i32* %3, align 4\n  store i32 %0, i32* %4, align 4\n  store i8** %1, i8*** %5, align 8\n  %6 = call i32 @puts(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str, i64 0, i64 0))\n  ret i32 1337\n}\n\ndeclare dso_local i32 @puts(i8*) #1\n\nattributes #0 = { noinline norecurse optnone uwtable \"correctly-rounded-divide-sqrt-fp-math\"=\"false\" \"disable-tail-calls\"=\"false\" \"frame-pointer\"=\"all\" \"less-precise-fpmad\"=\"false\" \"min-legal-vector-width\"=\"0\" \"no-infs-fp-math\"=\"false\" \"no-jump-tables\"=\"false\" \"no-nans-fp-math\"=\"false\" \"no-signed-zeros-fp-math\"=\"false\" \"no-trapping-math\"=\"false\" \"stack-protector-buffer-size\"=\"8\" \"target-cpu\"=\"x86-64\" \"target-features\"=\"+cx8,+fxsr,+mmx,+sse,+sse2,+x87\" \"unsafe-fp-math\"=\"false\" \"use-soft-float\"=\"false\" }\nattributes #1 = { \"correctly-rounded-divide-sqrt-fp-math\"=\"false\" \"disable-tail-calls\"=\"false\" \"frame-pointer\"=\"all\" \"less-precise-fpmad\"=\"false\" \"no-infs-fp-math\"=\"false\" \"no-nans-fp-math\"=\"false\" \"no-signed-zeros-fp-math\"=\"false\" \"no-trapping-math\"=\"false\" \"stack-protector-buffer-size\"=\"8\" \"target-cpu\"=\"x86-64\" \"target-features\"=\"+cx8,+fxsr,+mmx,+sse,+sse2,+x87\" \"unsafe-fp-math\"=\"false\" \"use-soft-float\"=\"false\" }\n\n!llvm.module.flags = !{!0}\n!llvm.ident = !{!1}\n\n!0 = !{i32 1, !\"wchar_size\", i32 4}\n!1 = !{!\"clang version 10.0.0-4ubuntu1 \"}\n"
  },
  {
    "path": "tests/syntax-tests/source/Lean/LICENSE.md",
    "content": "The `test.lean` file has been adpated from\n\n- multiple files of [Mathematics in Lean](https://leanprover-community.github.io/mathematics_in_lean/) under the Apache 2.0 license,\n- and https://github.com/Julian/lean-across-the-board under the MIT license.\n\n## Mathematics in Lean (Apache 2.0)\n\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 2020 Jeremy Avigad, Patrick Massot.\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## Julian/lean-across-the-board (MIT)\n\nCopyright (c) 2020 Julian Berman\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "tests/syntax-tests/source/Lean/test.lean",
    "content": "import MIL.Common\nimport Mathlib.Topology.Instances.Real.Defs\n\nopen Set Filter Topology\n\nvariable {α : Type*}\nvariable (s t : Set ℕ)\nvariable (ssubt : s ⊆ t)\nvariable {α : Type*} (s : Set (Set α))\n-- Apostrophes are allowed in variable names\nvariable (f'_x x' : ℕ)\nvariable (bangwI' jablu'DI' QaQqu' nay' Ghay'cha' he' : ℕ)\n\n-- In the next example we could use `tauto` in each proof instead of knowing the lemmas\nexample {α : Type*} (s : Set α) : Filter α :=\n  { sets := { t | s ⊆ t }\n    univ_sets := subset_univ s\n    sets_of_superset := fun hU hUV ↦ Subset.trans hU hUV\n    inter_sets := fun hU hV ↦ subset_inter hU hV }\n\n\nnamespace chess.utils\n\nsection repr\n\n@[class] structure One₂ (α : Type) where\n  /-- The element one -/\n  one : α\n\nstructure StandardTwoSimplex where\n  x : ℝ\n  y : ℝ\n  z : ℝ\n  x_nonneg : 0 ≤ x\n  y_nonneg : 0 ≤ y\n  z_nonneg : 0 ≤ z\n  sum_eq : x + y + z = 1\n\n#check Pi.ringHom\n#check ker_Pi_Quotient_mk\n#eval 1 + 1\n\n/-- The homomorphism from ``R ⧸ ⨅ i, I i`` to ``Π i, R ⧸ I i`` featured in the Chinese\n  Remainder Theorem. -/\ndef chineseMap (I : ι → Ideal R) : (R ⧸ ⨅ i, I i) →+* Π i, R ⧸ I i :=\n  Ideal.Quotient.lift (⨅ i, I i) (Pi.ringHom fun i : ι ↦ Ideal.Quotient.mk (I i))\n    (by simp [← RingHom.mem_ker, ker_Pi_Quotient_mk])\n\nlemma chineseMap_mk (I : ι → Ideal R) (x : R) :\n    chineseMap I (Quotient.mk _ x) = fun i : ι ↦ Ideal.Quotient.mk (I i) x :=\n  rfl\n\ntheorem isCoprime_Inf {I : Ideal R} {J : ι → Ideal R} {s : Finset ι}\n    (hf : ∀ j ∈ s, IsCoprime I (J j)) : IsCoprime I (⨅ j ∈ s, J j) := by\n  classical\n  simp_rw [isCoprime_iff_add] at *\n  induction s using Finset.induction with\n  | empty =>\n      simp\n  | @insert i s _ hs =>\n      rw [Finset.iInf_insert, inf_comm, one_eq_top, eq_top_iff, ← one_eq_top]\n      set K := ⨅ j ∈ s, J j\n      calc\n        1 = I + K                  := (hs fun j hj ↦ hf j (Finset.mem_insert_of_mem hj)).symm\n        _ = I + K * (I + J i)      := by rw [hf i (Finset.mem_insert_self i s), mul_one]\n        _ = (1 + K) * I + K * J i  := by ring\n        _ ≤ I + K ⊓ J i            := by gcongr ; apply mul_le_left ; apply mul_le_inf\n\n\nclass Ring₃ (R : Type) extends AddGroup₃ R, Monoid₃ R, MulZeroClass R where\n  /-- Multiplication is left distributive over addition -/\n  left_distrib : ∀ a b c : R, a * (b + c) = a * b + a * c\n  /-- Multiplication is right distributive over addition -/\n  right_distrib : ∀ a b c : R, (a + b) * c = a * c + b * c\n\ninstance {R : Type} [Ring₃ R] : AddCommGroup₃ R :=\n{ Ring₃.toAddGroup₃ with\n  add_comm := by\n    sorry }\n\nend repr\n\nend chess.utils\n"
  },
  {
    "path": "tests/syntax-tests/source/Less/example.less",
    "content": "// Load fonts\n@import url(https://fonts.googleapis.com/css?family=Lustria|Lato:700);\n\n// Color scheme https://kuler.adobe.com/Salmon-on-Ice-color-theme-2291686/\n@dk:  #3E454C; // dark\n@hl:  #2185C5; // highlight\n@hll: #7ECEFD; // lighter highlight\n@lt:  #FFF6E5; // light\n@ct:  #FF7F66; // contrast\n\n// Sizes\n@contentWidth: 750px;\n@marginTop:    50px;\n@marginSide:   100px;\n\n// Fonts and Text\n@font:       'Lustria', serif;\n@headerFont: 'Lato', sans;\n\n@fontSize:      19px;\n@fontSizeH1:    50px;\n@fontSizeH2:    30px;\n@parSep:        40px;\n\n@linkSizeFactor: 0.8;\n\n// Sizes for small devices\n@smallMarginTop:     25px;\n@smallMarginSide:    25px;\n@smallFontSize:      18px;\n@smallFontSizeH1:    40px;\n@smallFontSizeH2:    28px;\n@smallParSep:        25px;\n\n#wrapper {\n    width: 100%;\n    margin: auto;\n    min-height: 100%;\n    height: auto !important;\n    height: 100%;\n    overflow: hidden !important;\n    position: relative;\n}\n"
  },
  {
    "path": "tests/syntax-tests/source/Lisp/LICENSE.md",
    "content": "The `utils.lisp` file has been added from https://github.com/zkat/chillax under the following license: \n\nCopyright © 2009-2010 Kat Marchán\n\nPermission is hereby granted, free of charge, to any person\nobtaining a copy of this software and associated documentation\nfiles (the \"Software\"), to deal in the Software without\nrestriction, including without limitation the rights to use, copy,\nmodify, merge, publish, distribute, sublicense, and/or sell copies\nof 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\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\nHOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\nDEALINGS IN THE SOFTWARE.\n\n"
  },
  {
    "path": "tests/syntax-tests/source/Lisp/utils.lisp",
    "content": "(cl:defpackage :chillax.utils\n  (:use :cl :alexandria)\n  (:export\n   :fun :mkhash :hashget :strcat :dequote :at))\n(in-package :chillax.utils)\n\n;;; Functions\n(defmacro fun (&body body)\n  \"This macro puts the FUN back in FUNCTION.\"\n  `(lambda (&optional _) (declare (ignorable _)) ,@body))\n\n;;; Hash tables\n(defun mkhash (&rest keys-and-values &aux (table (make-hash-table :test #'equal)))\n  \"Convenience function for `literal' hash table definition.\"\n  (loop for (key val) on keys-and-values by #'cddr do (setf (gethash key table) val)\n     finally (return table)))\n\n(defun hashget (hash &rest keys)\n  \"Convenience function for recursively accessing hash tables.\"\n  (reduce (lambda (h k) (gethash k h)) keys :initial-value hash))\n\n(define-compiler-macro hashget (hash &rest keys)\n  (if (null keys) hash\n      (let ((hash-sym (make-symbol \"HASH\"))\n            (key-syms (loop for i below (length keys)\n                         collect (make-symbol (format nil \"~:@(~:R~)-KEY\" i)))))\n        `(let ((,hash-sym ,hash)\n               ,@(loop for key in keys for sym in key-syms\n                    collect `(,sym ,key)))\n           ,(reduce (lambda (hash key) `(gethash ,key ,hash))\n                    key-syms :initial-value hash-sym)))))\n\n(defun (setf hashget) (new-value hash key &rest more-keys)\n  \"Uses the last key given to hashget to insert NEW-VALUE into the hash table\nreturned by the second-to-last key.\ntl;dr: DWIM SETF function for HASHGET.\"\n  (if more-keys\n      (setf (gethash (car (last more-keys))\n                     (apply #'hashget hash key (butlast more-keys)))\n            new-value)\n      (setf (gethash key hash) new-value)))\n\n;;; Strings\n(defun strcat (string &rest more-strings)\n  (apply #'concatenate 'string string more-strings))\n\n(defun dequote (string)\n  (let ((len (length string)))\n    (if (and (> len 1) (starts-with #\\\" string) (ends-with #\\\" string))\n      (subseq string 1 (- len 1))\n      string)))\n\n;;;\n;;; At\n;;;\n(defgeneric at (doc &rest keys))\n(defgeneric (setf at) (new-value doc key &rest more-keys))\n\n(defmethod at ((doc hash-table) &rest keys)\n  (apply #'hashget doc keys))\n(defmethod (setf at) (new-value (doc hash-table) key &rest more-keys)\n  (apply #'(setf hashget) new-value doc key more-keys))\n\n(defmethod at ((doc list) &rest keys)\n  (reduce (lambda (alist key)\n            (cdr (assoc key alist :test #'equal)))\n          keys :initial-value doc))\n(defmethod (setf at) (new-value (doc list) key &rest more-keys)\n  (if more-keys\n      (setf (cdr (assoc (car (last more-keys))\n                        (apply #'at doc key (butlast more-keys))\n                        :test #'equal))\n            new-value)\n      (setf (cdr (assoc key doc :test #'equal)) new-value)))\n\n;; A playful alias.\n(defun @ (doc &rest keys)\n  (apply #'at doc keys))\n(defun (setf @) (new-value doc key &rest more-keys)\n  (apply #'(setf at) new-value doc key more-keys))\n"
  },
  {
    "path": "tests/syntax-tests/source/Literate Haskell/Main.lhs",
    "content": "\\documentclass{article}\n\n\\begin{document}\n\n\\section*{Introduction}\n\nText outside code environments should follow TeX/LaTeX highlighting.\n\nThe code environment delimiters themselves should be highlighted.\n\nText inside code environments should follow regular Haskell highlighting.\n\n\\begin{code}\nimport           Data.List\nimport           System.Environment\nimport           Text.Printf\n\ntwoSumN :: Int -> [Int] -> [Int]\ntwoSumN _ [] = []\ntwoSumN n (x : xs) | (n - x) `elem` xs = [x, n - x]\n                   | otherwise         = twoSumN n xs\n\nthreeSumN :: Int -> [Int] -> [Int]\nthreeSumN _ [] = []\nthreeSumN n (x : xs) | null partial = threeSumN n xs\n                     | otherwise    = x : partial\n  where partial = twoSumN (n - x) xs\n\\end{code}\n\nText in-between code environments.\n% LaTeX comment.\n\n\\begin{code}\noutput :: String -> IO ()\noutput path = do\n  input <- sort . map read . filter (not . null) . lines <$> readFile path\n  printf \"File: %s\\n\" path\n  printf \"  Part 1: %d\\n\" . product . twoSumN 2020 $ input\n  printf \"  Part 2: %d\\n\" . product . threeSumN 2020 $ input\n\n-- Haskell comment inside code environment.\n\nmain :: IO ()\nmain = getArgs >>= mapM_ output\n\\end{code}\n\n\\end{document}\n"
  },
  {
    "path": "tests/syntax-tests/source/LiveScript/LICENSE.md",
    "content": "The `livescript-demo.ls` file has been added from https://github.com/paulmillr/LiveScript.tmbundle under the following license:\n\nThe MIT License (MIT)\n\nCopyright (c) 2012 Paul Miller (http://paulmillr.com/), Jeremy Ashkenas\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "tests/syntax-tests/source/LiveScript/livescript-demo.ls",
    "content": "a = -> 1\nconst b = --> 2\nvar c = ~> 3\nd = ~~>\ne = (a) -> (b) ~> (c) --> (d, e) ~~> 5\ndashes-identifiers = ->\n  a - a\n  b -- c\n  1-1 1- -1\n  a- a\n  a -a\n\n//abc #eaze #@ //\n//\na #baze\n//\n\npubli\nif it is \\abc and ($-y = !(a,) ->) ~= map //a#//\nthen match that | _ | otherwise => implements $(\"#abc #@a\")\n\nswitch |a=>b\n| a then b\n\nif a => b else c\n\nunderscores_i$d = ->\n/regexp1/ and //regexp2//g\n'strings' and \"strings\" and \\strings\n([2 til 10] or [1 to 50])\n  |> map (* 2)\n  |> filter (> 5)\n  |> fold (+)\n\nsetTimeout _, 3000 <| do-stuff\n_.map; _abc; __\n\n\nclass Class extends Anc-est-or\n  (args) ->\n\ncopy = (from, to, callback) -->\n  error, data <- read file\n  return callback error if error?\n  error <~ write file, data\n  return callback error if error?\n  callback()\n\n$(\\#gafBr).text $t.fmtFloat(efb.gaf)\n\n->\n~>\n~~>\n-->\n# Comment\n/* Comment */\n# error, data <- read file\n  /* error, data <- read file */\n\nadd = (a=1, b=2) --> a + b\nadd 1 2\ndo-stuff!\ndo-stuff? #\ndo-stuff? 1\ndo-stuff + 1\n@do-stuff +1\n@do-stuff /1\na b c |> d <| e f(g)\n'cats' is 'cats'\n'cats' `_.is-insensitive` 'CATS'\nsetTimeout _, 1000 <| !-> console.log 'Who summoned me'\nprivate-list = yield @get-private-list!\nswitch | true => \"#@@spaghetti\"\n~function add a=1, b=2 => a + b\nrow.0._id\nnew Spaghetti\n(++a++) (++ 2 ++)\n(.cool.) (+  a  -) (/ 2 *)\n(ina -a in) (-> a)\n(ina in$a)\n(a is-in)\n(in)\n((((((+ a((a))))))))\n"
  },
  {
    "path": "tests/syntax-tests/source/Log/example.log",
    "content": "2021-03-06 23:22:21.392 https://[2001:db8:4006:812::200e]:8080/path/the%20page.html\n2021-03-06 23:22:21 https://example.com:8080/path/the%20page(with_parens).html\n2022-03-16T17:41:02.519 helix_term::application [WARN] unhandled window/showMessage: ShowMessageParams { typ: Error, message: \"rust-analyzer failed to load workspace: Failed to read Cargo metadata from Cargo.toml file /home/zeta/dev/raytracer/Cargo.toml, cargo 1.61.0-nightly (65c8266 2022-03-09): Failed to run `\\\"cargo\\\" \\\"metadata\\\" \\\"--format-version\\\" \\\"1\\\" \\\"--manifest-path\\\" \\\"/home/zeta/dev/raytracer/Cargo.toml\\\" \\\"--filter-platform\\\" \\\"wasm32-unknown-unknown\\\"`: `cargo metadata` exited with an error:     Updating crates.io index\\nerror: failed to select a version for `parking_lot`.\\n    ... required by package `raytracer v0.1.0 (/home/zeta/dev/raytracer)`\\nversions that meet the requirements `^0.12.0` are: 0.12.0\\n\\nthe package `raytracer` depends on `parking_lot`, with features: `wasm-bindgen` but `parking_lot` does not have these features.\\n\\n\\nfailed to select a version for `parking_lot` which could resolve this conflict\\n\" }\n"
  },
  {
    "path": "tests/syntax-tests/source/Lua/test.lua",
    "content": "--- Finds factorial of a number.\n-- @param value Number to find factorial.\n-- @return Factorial of number.\nlocal function factorial(value)\n    if value <= 1 then\n        return 1\n    else\n        return value * factorial(value - 1)\n    end\nend\n\n--- Joins a table of strings into a new string.\n-- @param table Table of strings.\n-- @param separator Separator character.\n-- @return Joined string.\nlocal function join(table, separator)\n    local data = \"\"\n    \n    for index, value in ipairs(table) do\n        data = data .. value .. separator\n    end\n    \n    data = data:sub(1, data:len() - 1)\n    \n    return data\nend\n\nlocal a = factorial(5)\n\nprint(a)\n\nlocal b = join({ \"l\", \"u\", \"a\" }, \",\")\n\nprint(b)\n"
  },
  {
    "path": "tests/syntax-tests/source/MATLAB/LICENSE.md",
    "content": "The `test.matlab` file is a modified version of https://github.com/pygments/pygments/blob/3e1b79c82d2df318f63f24984d875fd2a3400808/tests/test_matlab.py under the following license: \n\nCopyright (c) 2006-2020 by the respective authors (see AUTHORS file).\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n* Redistributions of source code must retain the above copyright\n  notice, this list of conditions and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright\n  notice, this list of conditions and the following disclaimer in the\n  documentation and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "tests/syntax-tests/source/MATLAB/test.matlab",
    "content": "function zz=sample(aa)\n%%%%%%%%%%%%%%%%%%\n% some comments\n%%%%%%%%%%%%%%%%%%\n\nx = 'a string';    % some 'ticks' in a comment\ny = 'a string with ''interal'' quotes';\n\nfor i=1:20\n  disp(i);\nend\n\na = rand(30);\nb = rand(30);\n\nc = a .* b ./ a \\ ... comment at end of line and continuation\n    (b .* a + b - a);\n\nc = a' * b';  % note: these ticks are for transpose, not quotes.\n\ndisp('a comment symbol, %, in a string');\n\n!echo abc % this isn't a comment - it's passed to system command\n\nfunction y=myfunc(x)\ny = exp(x);\n\n%{\n  a block comment\n%}\n\nfunction no_arg_func\nfprintf('%s\\n', 'function with no args')\nend\n"
  },
  {
    "path": "tests/syntax-tests/source/Makefile/LICENSE.md",
    "content": "The `Makefile` (https://github.com/redis/redis/blob/6.0.8/src/Makefile) file has been added from Redis (https://github.com/redis/redis) under the following license: \n\nCopyright (c) 2006-2020, Salvatore Sanfilippo\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n    * Neither the name of Redis nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
  },
  {
    "path": "tests/syntax-tests/source/Makefile/Makefile",
    "content": "# Redis Makefile\n# Copyright (C) 2009 Salvatore Sanfilippo <antirez at gmail dot com>\n# This file is released under the BSD license, see the COPYING file\n#\n# The Makefile composes the final FINAL_CFLAGS and FINAL_LDFLAGS using\n# what is needed for Redis plus the standard CFLAGS and LDFLAGS passed.\n# However when building the dependencies (Jemalloc, Lua, Hiredis, ...)\n# CFLAGS and LDFLAGS are propagated to the dependencies, so to pass\n# flags only to be used when compiling / linking Redis itself REDIS_CFLAGS\n# and REDIS_LDFLAGS are used instead (this is the case of 'make gcov').\n#\n# Dependencies are stored in the Makefile.dep file. To rebuild this file\n# Just use 'make dep', but this is only needed by developers.\n\nrelease_hdr := $(shell sh -c './mkreleasehdr.sh')\nuname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not')\nuname_M := $(shell sh -c 'uname -m 2>/dev/null || echo not')\nOPTIMIZATION?=-O2\nDEPENDENCY_TARGETS=hiredis linenoise lua\nNODEPS:=clean distclean\n\n# Default settings\nSTD=-std=c11 -pedantic -DREDIS_STATIC=''\nifneq (,$(findstring clang,$(CC)))\nifneq (,$(findstring FreeBSD,$(uname_S)))\n  STD+=-Wno-c11-extensions\nendif\nendif\nWARN=-Wall -W -Wno-missing-field-initializers\nOPT=$(OPTIMIZATION)\n\nPREFIX?=/usr/local\nINSTALL_BIN=$(PREFIX)/bin\nINSTALL=install\nPKG_CONFIG?=pkg-config\n\n# Default allocator defaults to Jemalloc if it's not an ARM\nMALLOC=libc\nifneq ($(uname_M),armv6l)\nifneq ($(uname_M),armv7l)\nifeq ($(uname_S),Linux)\n\tMALLOC=jemalloc\nendif\nendif\nendif\n\n# To get ARM stack traces if Redis crashes we need a special C flag.\nifneq (,$(filter aarch64 armv,$(uname_M)))\n        CFLAGS+=-funwind-tables\nelse\nifneq (,$(findstring armv,$(uname_M)))\n        CFLAGS+=-funwind-tables\nendif\nendif\n\n# Backwards compatibility for selecting an allocator\nifeq ($(USE_TCMALLOC),yes)\n\tMALLOC=tcmalloc\nendif\n\nifeq ($(USE_TCMALLOC_MINIMAL),yes)\n\tMALLOC=tcmalloc_minimal\nendif\n\nifeq ($(USE_JEMALLOC),yes)\n\tMALLOC=jemalloc\nendif\n\nifeq ($(USE_JEMALLOC),no)\n\tMALLOC=libc\nendif\n\n# Override default settings if possible\n-include .make-settings\n\nFINAL_CFLAGS=$(STD) $(WARN) $(OPT) $(DEBUG) $(CFLAGS) $(REDIS_CFLAGS)\nFINAL_LDFLAGS=$(LDFLAGS) $(REDIS_LDFLAGS) $(DEBUG)\nFINAL_LIBS=-lm\nDEBUG=-g -ggdb\n\n# Linux ARM needs -latomic at linking time\nifneq (,$(filter aarch64 armv,$(uname_M)))\n        FINAL_LIBS+=-latomic\nelse\nifneq (,$(findstring armv,$(uname_M)))\n        FINAL_LIBS+=-latomic\nendif\nendif\n\nifeq ($(uname_S),SunOS)\n\t# SunOS\n        ifneq ($(@@),32bit)\n\t\tCFLAGS+= -m64\n\t\tLDFLAGS+= -m64\n\tendif\n\tDEBUG=-g\n\tDEBUG_FLAGS=-g\n\texport CFLAGS LDFLAGS DEBUG DEBUG_FLAGS\n\tINSTALL=cp -pf\n\tFINAL_CFLAGS+= -D__EXTENSIONS__ -D_XPG6\n\tFINAL_LIBS+= -ldl -lnsl -lsocket -lresolv -lpthread -lrt\nelse\nifeq ($(uname_S),Darwin)\n\t# Darwin\n\tFINAL_LIBS+= -ldl\n\tOPENSSL_CFLAGS=-I/usr/local/opt/openssl/include\n\tOPENSSL_LDFLAGS=-L/usr/local/opt/openssl/lib\nelse\nifeq ($(uname_S),AIX)\n        # AIX\n        FINAL_LDFLAGS+= -Wl,-bexpall\n        FINAL_LIBS+=-ldl -pthread -lcrypt -lbsd\nelse\nifeq ($(uname_S),OpenBSD)\n\t# OpenBSD\n\tFINAL_LIBS+= -lpthread\n\tifeq ($(USE_BACKTRACE),yes)\n\t    FINAL_CFLAGS+= -DUSE_BACKTRACE -I/usr/local/include\n\t    FINAL_LDFLAGS+= -L/usr/local/lib\n\t    FINAL_LIBS+= -lexecinfo\n    \tendif\n\nelse\nifeq ($(uname_S),FreeBSD)\n\t# FreeBSD\n\tFINAL_LIBS+= -lpthread -lexecinfo\nelse\nifeq ($(uname_S),DragonFly)\n\t# FreeBSD\n\tFINAL_LIBS+= -lpthread -lexecinfo\nelse\nifeq ($(uname_S),OpenBSD)\n\t# OpenBSD\n\tFINAL_LIBS+= -lpthread -lexecinfo\nelse\nifeq ($(uname_S),NetBSD)\n\t# NetBSD\n\tFINAL_LIBS+= -lpthread -lexecinfo\nelse\n\t# All the other OSes (notably Linux)\n\tFINAL_LDFLAGS+= -rdynamic\n\tFINAL_LIBS+=-ldl -pthread -lrt\nendif\nendif\nendif\nendif\nendif\nendif\nendif\nendif\n# Include paths to dependencies\nFINAL_CFLAGS+= -I../deps/hiredis -I../deps/linenoise -I../deps/lua/src\n\n# Determine systemd support and/or build preference (defaulting to auto-detection)\nBUILD_WITH_SYSTEMD=no\n# If 'USE_SYSTEMD' in the environment is neither \"no\" nor \"yes\", try to\n# auto-detect libsystemd's presence and link accordingly.\nifneq ($(USE_SYSTEMD),no)\n\tLIBSYSTEMD_PKGCONFIG := $(shell $(PKG_CONFIG) --exists libsystemd && echo $$?)\n# If libsystemd cannot be detected, continue building without support for it\n# (unless a later check tells us otherwise)\nifeq ($(LIBSYSTEMD_PKGCONFIG),0)\n\tBUILD_WITH_SYSTEMD=yes\nendif\nendif\nifeq ($(USE_SYSTEMD),yes)\nifneq ($(LIBSYSTEMD_PKGCONFIG),0)\n$(error USE_SYSTEMD is set to \"$(USE_SYSTEMD)\", but $(PKG_CONFIG) cannot find libsystemd)\nendif\n# Force building with libsystemd\n\tBUILD_WITH_SYSTEMD=yes\nendif\nifeq ($(BUILD_WITH_SYSTEMD),yes)\n\tFINAL_LIBS+=$(shell $(PKG_CONFIG) --libs libsystemd)\n\tFINAL_CFLAGS+= -DHAVE_LIBSYSTEMD\nendif\n\nifeq ($(MALLOC),tcmalloc)\n\tFINAL_CFLAGS+= -DUSE_TCMALLOC\n\tFINAL_LIBS+= -ltcmalloc\nendif\n\nifeq ($(MALLOC),tcmalloc_minimal)\n\tFINAL_CFLAGS+= -DUSE_TCMALLOC\n\tFINAL_LIBS+= -ltcmalloc_minimal\nendif\n\nifeq ($(MALLOC),jemalloc)\n\tDEPENDENCY_TARGETS+= jemalloc\n\tFINAL_CFLAGS+= -DUSE_JEMALLOC -I../deps/jemalloc/include\n\tFINAL_LIBS := ../deps/jemalloc/lib/libjemalloc.a $(FINAL_LIBS)\nendif\n\nifeq ($(BUILD_TLS),yes)\n\tFINAL_CFLAGS+=-DUSE_OPENSSL $(OPENSSL_CFLAGS)\n\tFINAL_LDFLAGS+=$(OPENSSL_LDFLAGS)\n\tLIBSSL_PKGCONFIG := $(shell $(PKG_CONFIG) --exists libssl && echo $$?)\nifeq ($(LIBSSL_PKGCONFIG),0)\n\tLIBSSL_LIBS=$(shell $(PKG_CONFIG) --libs libssl)\nelse\n\tLIBSSL_LIBS=-lssl\nendif\n\tLIBCRYPTO_PKGCONFIG := $(shell $(PKG_CONFIG) --exists libcrypto && echo $$?)\nifeq ($(LIBCRYPTO_PKGCONFIG),0)\n\tLIBCRYPTO_LIBS=$(shell $(PKG_CONFIG) --libs libcrypto)\nelse\n\tLIBCRYPTO_LIBS=-lcrypto\nendif\n\tFINAL_LIBS += ../deps/hiredis/libhiredis_ssl.a $(LIBSSL_LIBS) $(LIBCRYPTO_LIBS)\nendif\n\nREDIS_CC=$(QUIET_CC)$(CC) $(FINAL_CFLAGS)\nREDIS_LD=$(QUIET_LINK)$(CC) $(FINAL_LDFLAGS)\nREDIS_INSTALL=$(QUIET_INSTALL)$(INSTALL)\n\nCCCOLOR=\"\\033[34m\"\nLINKCOLOR=\"\\033[34;1m\"\nSRCCOLOR=\"\\033[33m\"\nBINCOLOR=\"\\033[37;1m\"\nMAKECOLOR=\"\\033[32;1m\"\nENDCOLOR=\"\\033[0m\"\n\nifndef V\nQUIET_CC = @printf '    %b %b\\n' $(CCCOLOR)CC$(ENDCOLOR) $(SRCCOLOR)$@$(ENDCOLOR) 1>&2;\nQUIET_LINK = @printf '    %b %b\\n' $(LINKCOLOR)LINK$(ENDCOLOR) $(BINCOLOR)$@$(ENDCOLOR) 1>&2;\nQUIET_INSTALL = @printf '    %b %b\\n' $(LINKCOLOR)INSTALL$(ENDCOLOR) $(BINCOLOR)$@$(ENDCOLOR) 1>&2;\nendif\n\nREDIS_SERVER_NAME=redis-server\nREDIS_SENTINEL_NAME=redis-sentinel\nREDIS_SERVER_OBJ=adlist.o quicklist.o ae.o anet.o dict.o server.o sds.o zmalloc.o lzf_c.o lzf_d.o pqsort.o zipmap.o sha1.o ziplist.o release.o networking.o util.o object.o db.o replication.o rdb.o t_string.o t_list.o t_set.o t_zset.o t_hash.o config.o aof.o pubsub.o multi.o debug.o sort.o intset.o syncio.o cluster.o crc16.o endianconv.o slowlog.o scripting.o bio.o rio.o rand.o memtest.o crcspeed.o crc64.o bitops.o sentinel.o notify.o setproctitle.o blocked.o hyperloglog.o latency.o sparkline.o redis-check-rdb.o redis-check-aof.o geo.o lazyfree.o module.o evict.o expire.o geohash.o geohash_helper.o childinfo.o defrag.o siphash.o rax.o t_stream.o listpack.o localtime.o lolwut.o lolwut5.o lolwut6.o acl.o gopher.o tracking.o connection.o tls.o sha256.o timeout.o setcpuaffinity.o\nREDIS_CLI_NAME=redis-cli\nREDIS_CLI_OBJ=anet.o adlist.o dict.o redis-cli.o zmalloc.o release.o ae.o crcspeed.o crc64.o siphash.o crc16.o\nREDIS_BENCHMARK_NAME=redis-benchmark\nREDIS_BENCHMARK_OBJ=ae.o anet.o redis-benchmark.o adlist.o dict.o zmalloc.o siphash.o\nREDIS_CHECK_RDB_NAME=redis-check-rdb\nREDIS_CHECK_AOF_NAME=redis-check-aof\n\nall: $(REDIS_SERVER_NAME) $(REDIS_SENTINEL_NAME) $(REDIS_CLI_NAME) $(REDIS_BENCHMARK_NAME) $(REDIS_CHECK_RDB_NAME) $(REDIS_CHECK_AOF_NAME)\n\t@echo \"\"\n\t@echo \"Hint: It's a good idea to run 'make test' ;)\"\n\t@echo \"\"\n\nMakefile.dep:\n\t-$(REDIS_CC) -MM *.c > Makefile.dep 2> /dev/null || true\n\nifeq (0, $(words $(findstring $(MAKECMDGOALS), $(NODEPS))))\n-include Makefile.dep\nendif\n\n.PHONY: all\n\npersist-settings: distclean\n\techo STD=$(STD) >> .make-settings\n\techo WARN=$(WARN) >> .make-settings\n\techo OPT=$(OPT) >> .make-settings\n\techo MALLOC=$(MALLOC) >> .make-settings\n\techo BUILD_TLS=$(BUILD_TLS) >> .make-settings\n\techo USE_SYSTEMD=$(USE_SYSTEMD) >> .make-settings\n\techo CFLAGS=$(CFLAGS) >> .make-settings\n\techo LDFLAGS=$(LDFLAGS) >> .make-settings\n\techo REDIS_CFLAGS=$(REDIS_CFLAGS) >> .make-settings\n\techo REDIS_LDFLAGS=$(REDIS_LDFLAGS) >> .make-settings\n\techo PREV_FINAL_CFLAGS=$(FINAL_CFLAGS) >> .make-settings\n\techo PREV_FINAL_LDFLAGS=$(FINAL_LDFLAGS) >> .make-settings\n\t-(cd ../deps && $(MAKE) $(DEPENDENCY_TARGETS))\n\n.PHONY: persist-settings\n\n# Prerequisites target\n.make-prerequisites:\n\t@touch $@\n\n# Clean everything, persist settings and build dependencies if anything changed\nifneq ($(strip $(PREV_FINAL_CFLAGS)), $(strip $(FINAL_CFLAGS)))\n.make-prerequisites: persist-settings\nendif\n\nifneq ($(strip $(PREV_FINAL_LDFLAGS)), $(strip $(FINAL_LDFLAGS)))\n.make-prerequisites: persist-settings\nendif\n\n# redis-server\n$(REDIS_SERVER_NAME): $(REDIS_SERVER_OBJ)\n\t$(REDIS_LD) -o $@ $^ ../deps/hiredis/libhiredis.a ../deps/lua/src/liblua.a $(FINAL_LIBS)\n\n# redis-sentinel\n$(REDIS_SENTINEL_NAME): $(REDIS_SERVER_NAME)\n\t$(REDIS_INSTALL) $(REDIS_SERVER_NAME) $(REDIS_SENTINEL_NAME)\n\n# redis-check-rdb\n$(REDIS_CHECK_RDB_NAME): $(REDIS_SERVER_NAME)\n\t$(REDIS_INSTALL) $(REDIS_SERVER_NAME) $(REDIS_CHECK_RDB_NAME)\n\n# redis-check-aof\n$(REDIS_CHECK_AOF_NAME): $(REDIS_SERVER_NAME)\n\t$(REDIS_INSTALL) $(REDIS_SERVER_NAME) $(REDIS_CHECK_AOF_NAME)\n\n# redis-cli\n$(REDIS_CLI_NAME): $(REDIS_CLI_OBJ)\n\t$(REDIS_LD) -o $@ $^ ../deps/hiredis/libhiredis.a ../deps/linenoise/linenoise.o $(FINAL_LIBS)\n\n# redis-benchmark\n$(REDIS_BENCHMARK_NAME): $(REDIS_BENCHMARK_OBJ)\n\t$(REDIS_LD) -o $@ $^ ../deps/hiredis/libhiredis.a $(FINAL_LIBS)\n\ndict-benchmark: dict.c zmalloc.c sds.c siphash.c\n\t$(REDIS_CC) $(FINAL_CFLAGS) $^ -D DICT_BENCHMARK_MAIN -o $@ $(FINAL_LIBS)\n\nDEP = $(REDIS_SERVER_OBJ:%.o=%.d) $(REDIS_CLI_OBJ:%.o=%.d) $(REDIS_BENCHMARK_OBJ:%.o=%.d)\n-include $(DEP)\n\n# Because the jemalloc.h header is generated as a part of the jemalloc build,\n# building it should complete before building any other object. Instead of\n# depending on a single artifact, build all dependencies first.\n%.o: %.c .make-prerequisites\n\t$(REDIS_CC) -MMD -o $@ -c $<\n\nclean:\n\trm -rf $(REDIS_SERVER_NAME) $(REDIS_SENTINEL_NAME) $(REDIS_CLI_NAME) $(REDIS_BENCHMARK_NAME) $(REDIS_CHECK_RDB_NAME) $(REDIS_CHECK_AOF_NAME) *.o *.gcda *.gcno *.gcov redis.info lcov-html Makefile.dep dict-benchmark\n\trm -f $(DEP)\n\n.PHONY: clean\n\ndistclean: clean\n\t-(cd ../deps && $(MAKE) distclean)\n\t-(rm -f .make-*)\n\n.PHONY: distclean\n\ntest: $(REDIS_SERVER_NAME) $(REDIS_CHECK_AOF_NAME)\n\t@(cd ..; ./runtest)\n\ntest-sentinel: $(REDIS_SENTINEL_NAME)\n\t@(cd ..; ./runtest-sentinel)\n\ncheck: test\n\nlcov:\n\t$(MAKE) gcov\n\t@(set -e; cd ..; ./runtest --clients 1)\n\t@geninfo -o redis.info .\n\t@genhtml --legend -o lcov-html redis.info\n\ntest-sds: sds.c sds.h\n\t$(REDIS_CC) sds.c zmalloc.c -DSDS_TEST_MAIN $(FINAL_LIBS) -o /tmp/sds_test\n\t/tmp/sds_test\n\n.PHONY: lcov\n\nbench: $(REDIS_BENCHMARK_NAME)\n\t./$(REDIS_BENCHMARK_NAME)\n\n32bit:\n\t@echo \"\"\n\t@echo \"WARNING: if it fails under Linux you probably need to install libc6-dev-i386\"\n\t@echo \"\"\n\t$(MAKE) CFLAGS=\"-m32\" LDFLAGS=\"-m32\"\n\ngcov:\n\t$(MAKE) REDIS_CFLAGS=\"-fprofile-arcs -ftest-coverage -DCOVERAGE_TEST\" REDIS_LDFLAGS=\"-fprofile-arcs -ftest-coverage\"\n\nnoopt:\n\t$(MAKE) OPTIMIZATION=\"-O0\"\n\nvalgrind:\n\t$(MAKE) OPTIMIZATION=\"-O0\" MALLOC=\"libc\"\n\nhelgrind:\n\t$(MAKE) OPTIMIZATION=\"-O0\" MALLOC=\"libc\" CFLAGS=\"-D__ATOMIC_VAR_FORCE_SYNC_MACROS\"\n\nsrc/help.h:\n\t@../utils/generate-command-help.rb > help.h\n\ninstall: all\n\t@mkdir -p $(INSTALL_BIN)\n\t$(REDIS_INSTALL) $(REDIS_SERVER_NAME) $(INSTALL_BIN)\n\t$(REDIS_INSTALL) $(REDIS_BENCHMARK_NAME) $(INSTALL_BIN)\n\t$(REDIS_INSTALL) $(REDIS_CLI_NAME) $(INSTALL_BIN)\n\t$(REDIS_INSTALL) $(REDIS_CHECK_RDB_NAME) $(INSTALL_BIN)\n\t$(REDIS_INSTALL) $(REDIS_CHECK_AOF_NAME) $(INSTALL_BIN)\n\t@ln -sf $(REDIS_SERVER_NAME) $(INSTALL_BIN)/$(REDIS_SENTINEL_NAME)\n\nuninstall:\n\trm -f $(INSTALL_BIN)/{$(REDIS_SERVER_NAME),$(REDIS_BENCHMARK_NAME),$(REDIS_CLI_NAME),$(REDIS_CHECK_RDB_NAME),$(REDIS_CHECK_AOF_NAME),$(REDIS_SENTINEL_NAME)}\n"
  },
  {
    "path": "tests/syntax-tests/source/Manpage/bat-0.16.man",
    "content": "BAT(1)                      General Commands Manual                     BAT(1)\n\nNAME\n       bat - a cat(1) clone with syntax highlighting and Git integration.\n\nUSAGE\n       bat [OPTIONS] [FILE]...\n\n       bat cache [CACHE-OPTIONS] [--build|--clear]\n\nDESCRIPTION\n       bat  prints  the syntax-highlighted content of a collection of FILEs to\n       the terminal. If no FILE is specified, or when FILE is  '-',  it  reads\n       from standard input.\n\n       bat  supports  a  large number of programming and markup languages.  It\n       also communicates with git(1) to show modifications with respect to the\n       git  index.  bat automatically pipes its output through a pager (by de‐\n       fault: less).\n\n       Whenever the output of bat goes to  a  non-interactive  terminal,  i.e.\n       when  the output is piped into another process or into a file, bat will\n       act as a drop-in replacement for cat(1) and fall back to  printing  the\n       plain file contents.\n\nOPTIONS\n       General  remarks: Command-line options like '-l'/'--language' that take\n       values  can  be  specified  as  either  '--language   value',   '--lan‐\n       guage=value', '-l value' or '-lvalue'.\n\n       -A, --show-all\n\n              Show  non-printable  characters  like space, tab or newline. Use\n              '--tabs' to control the width of the tab-placeholders.\n\n       -p, --plain\n\n              Only show plain style, no decorations.  This  is  an  alias  for\n              '--style=plain'.  When  '-p' is used twice ('-pp'), it also dis‐\n              ables    automatic    paging    (alias    for     '--style=plain\n              --pager=never').\n\n       -l, --language <language>\n\n              Explicitly  set  the  language for syntax highlighting. The lan‐\n              guage can be specified as a name (like 'C++' or 'LaTeX') or pos‐\n              sible   file   extension   (like  'cpp',  'hpp'  or  'md').  Use\n              '--list-languages' to show all supported language names and file\n              extensions.\n\n       -H, --highlight-line <N:M>...\n\n              Highlight  the specified line ranges with a different background\n              color For example:\n\n              --highlight-line 40\n                     highlights line 40\n\n              --highlight-line 30:40\n                     highlights lines 30 to 40\n\n              --highlight-line :40\n                     highlights lines 1 to 40\n\n              --highlight-line 40:\n                     highlights lines 40 to the end of the file\n\n       --tabs <T>\n\n              Set the tab width to T spaces. Use a width of  0  to  pass  tabs\n              through directly\n\n       --wrap <mode>\n\n              Specify  the  text-wrapping mode (*auto*, never, character). The\n              '--terminal-width' option can be used in addition to control the\n              output width.\n\n       --terminal-width <width>\n\n              Explicitly  set the width of the terminal instead of determining\n              it automatically. If prefixed with '+' or '-', the value will be\n              treated  as  an  offset  to the actual terminal width. See also:\n              '--wrap'.\n\n       -n, --number\n\n              Only show line numbers, no other decorations. This is  an  alias\n              for '--style=numbers'\n\n       --color <when>\n\n              Specify  when to use colored output. The automatic mode only en‐\n              ables colors if an interactive terminal  is  detected.  Possible\n              values: *auto*, never, always.\n\n       --italic-text <when>\n\n              Specify  when  to use ANSI sequences for italic text in the out‐\n              put. Possible values: always, *never*.\n\n       --decorations <when>\n\n              Specify when to use the decorations that have been specified via\n              '--style'. The automatic mode only enables decorations if an in‐\n              teractive terminal is detected. Possible values: *auto*,  never,\n              always.\n\n       -f, --force-colorization\n\n              Alias  for '--decorations=always --color=always'. This is useful\n              if the output of bat is piped to another program, but  you  want\n              to keep the colorization/decorations.\n\n       --paging <when>\n\n              Specify when to use the pager. To disable the pager, use '--pag‐\n              ing=never' or its alias, -P. To disable the  pager  permanently,\n              set  BAT_PAGER  to  an  empty  string. To control which pager is\n              used, see the '--pager' option. Possible values: *auto*,  never,\n              always.\n\n       --pager <command>\n\n              Determine  which  pager  is  used. This option will override the\n              PAGER and BAT_PAGER environment variables. The default pager  is\n              'less'.  To  control  when the pager is used, see the '--paging'\n              option. Example: '--pager \"less -RF\"'.\n\n       -m, --map-syntax <glob-pattern:syntax-name>...\n\n              Map a glob pattern to an existing syntax name. The glob  pattern\n              is  matched  on  the full path and the filename. For example, to\n              highlight  *.build  files  with  the  Python  syntax,   use   -m\n              '*.build:Python'.  To highlight files named '.myignore' with the\n              Git Ignore syntax, use -m '.myignore:Git Ignore'.\n\n       --theme <theme>\n\n              Set the theme for syntax highlighting.  Use  '--list-themes'  to\n              see  all  available  themes.   To  set  a default theme, add the\n              '--theme=\"...\"' option to the configuration file or  export  the\n              BAT_THEME environment variable (e.g.: export BAT_THEME=\"...\").\n\n       --list-themes\n\n              Display a list of supported themes for syntax highlighting.\n\n       --style <style-components>\n\n              Configure  which elements (line numbers, file headers, grid bor‐\n              ders, Git modifications, ..) to display in addition to the  file\n              contents.  The  argument is a comma-separated list of components\n              to display (e.g. 'numbers,changes,grid') or a pre-defined  style\n              ('full').  To set a default style, add the '--style=\"..\"' option\n              to the configuration file or export  the  BAT_STYLE  environment\n              variable (e.g.: export BAT_STYLE=\"..\"). Possible values: *auto*,\n              full, plain, changes, header, grid, numbers, snip.\n\n       -r, --line-range <N:M>...\n\n              Only print the specified range of lines for each file. For exam‐\n              ple:\n\n              --line-range 30:40\n                     prints lines 30 to 40\n\n              --line-range :40\n                     prints lines 1 to 40\n\n              --line-range 40:\n                     prints lines 40 to the end of the file\n\n       -L, --list-languages\n\n              Display a list of supported languages for syntax highlighting.\n\n       -u, --unbuffered\n\n              This option exists for POSIX-compliance reasons ('u' is for 'un‐\n              buffered'). The output is always unbuffered  -  this  option  is\n              simply ignored.\n\n       -h, --help\n\n              Print this help message.\n\n       -V, --version\n\n              Show version information.\n\nPOSITIONAL ARGUMENTS\n       <FILE>...\n\n              Files  to print and concatenate. Use a dash ('-') or no argument\n              at all to read from standard input.\n\nSUBCOMMANDS\n       cache - Modify the syntax-definition and theme cache.\n\nFILES\n       bat can also be customized with a configuration file. The  location  of\n       the file is dependent on your operating system. To get the default path\n       for your system, call:\n\n       bat --config-file\n\n       Alternatively, you can use the BAT_CONFIG_PATH environment variable  to\n       point bat to a non-default location of the configuration file.\n\nADDING CUSTOM LANGUAGES\n       bat  supports  Sublime  Text .sublime-syntax language files, and can be\n       customized to add additional languages to your local  installation.  To\n       do  this,  add  the  .sublime-snytax language files to `$(bat --config-\n       dir)/syntaxes` and run `bat cache --build`.\n\n       Example:\n\n            mkdir -p \"$(bat --config-dir)/syntaxes\"\n            cd \"$(bat --config-dir)/syntaxes\"\n\n            # Put new '.sublime-syntax' language definition files\n            # in this folder (or its subdirectories), for example:\n            git clone https://github.com/tellnobody1/sublime-purescript-syntax\n\n            # And then build the cache.\n            bat cache --build\n\n       Once the cache is built, the new  language  will  be  visible  in  `bat\n       --list-languages`.\n       If  you  ever  want  to  remove the custom languages, you can clear the\n       cache with `bat cache --clear`.\n\nADDING CUSTOM THEMES\n       Similarly to custom  languages,  bat  supports  Sublime  Text  .tmTheme\n       themes.   These  can  be installed to `$(bat --config-dir)/themes`, and\n       are added to the cache with `bat cache --build`.\n\nMORE INFORMATION\n       For more information and up-to-date documentation, visit the bat repo:\n       https://github.com/sharkdp/bat\n\n                                                                        BAT(1)\n"
  },
  {
    "path": "tests/syntax-tests/source/Manpage/fzf-0.33.0.man",
    "content": "fzf(1)                                                                         fzf - a command-line fuzzy finder                                                                         fzf(1)\n\nNAME\n       fzf - a command-line fuzzy finder\n\nSYNOPSIS\n       fzf [options]\n\nDESCRIPTION\n       fzf is a general-purpose command-line fuzzy finder.\n\nOPTIONS\n   Search mode\n       -x, --extended\n              Extended-search mode. Since 0.10.9, this is enabled by default. You can disable it with +x or --no-extended.\n\n       -e, --exact\n              Enable exact-match\n\n       -i     Case-insensitive match (default: smart-case match)\n\n       +i     Case-sensitive match\n\n       --literal\n              Do not normalize latin script letters for matching.\n\n       --scheme=SCHEME\n              Choose scoring scheme tailored for different types of input.\n\n              default  Generic scoring scheme designed to work well with any type of input\n              path     Scoring scheme for paths (additional bonus point only after path separator)\n              history  Scoring scheme for command history (no additional bonus points).\n                       Sets --tiebreak=index as well.\n\n       --algo=TYPE\n              Fuzzy matching algorithm (default: v2)\n\n              v2     Optimal scoring algorithm (quality)\n              v1     Faster but not guaranteed to find the optimal result (performance)\n\n       -n, --nth=N[,..]\n              Comma-separated list of field index expressions for limiting search scope.  See FIELD INDEX EXPRESSION for the details.\n\n       --with-nth=N[,..]\n              Transform the presentation of each line using field index expressions\n\n       -d, --delimiter=STR\n              Field delimiter regex for --nth and --with-nth (default: AWK-style)\n\n       --disabled\n              Do  not  perform  search.  With this option, fzf becomes a simple selector interface rather than a \"fuzzy finder\". You can later enable the search using enable-search or toggle-\n              search action.\n\n   Search result\n       +s, --no-sort\n              Do not sort the result\n\n       --tac  Reverse the order of the input\n\n              e.g.\n                   history | fzf --tac --no-sort\n\n       --tiebreak=CRI[,..]\n              Comma-separated list of sort criteria to apply when the scores are tied.\n\n              length  Prefers line with shorter length\n              chunk   Prefers line with shorter matched chunk (delimited by whitespaces)\n              begin   Prefers line with matched substring closer to the beginning\n              end     Prefers line with matched substring closer to the end\n              index   Prefers line that appeared earlier in the input stream\n\n              - Each criterion should appear only once in the list\n              - index is only allowed at the end of the list\n              - index is implicitly appended to the list when not specified\n              - Default is length (or equivalently length,index)\n              - If end is found in the list, fzf will scan each line backwards\n\n   Interface\n       -m, --multi\n              Enable multi-select with tab/shift-tab. It optionally takes an integer argument which denotes the maximum number of items that can be selected.\n\n       +m, --no-multi\n              Disable multi-select\n\n       --no-mouse\n              Disable mouse\n\n       --bind=KEYBINDS\n              Comma-separated list of custom key bindings. See KEY/EVENT BINDINGS for the details.\n\n       --cycle\n              Enable cyclic scroll\n\n       --keep-right\n              Keep the right end of the line visible when it's too long. Effective only when the query string is empty.\n\n       --scroll-off=LINES\n              Number of screen lines to keep above or below when scrolling to the top or to the bottom (default: 0).\n\n       --no-hscroll\n              Disable horizontal scroll\n\n       --hscroll-off=COLS\n              Number of screen columns to keep to the right of the highlighted substring (default: 10). Setting it to a large value will cause the text to be positioned on the center  of  the\n              screen.\n\n       --filepath-word\n              Make word-wise movements and actions respect path separators. The following actions are affected:\n\n              backward-kill-word\n              backward-word\n              forward-word\n              kill-word\n\n       --jump-labels=CHARS\n              Label characters for jump and jump-accept\n\n   Layout\n       --height=HEIGHT[%]\n              Display fzf window below the cursor with the given height instead of using the full screen.\n\n       --min-height=HEIGHT\n              Minimum height when --height is given in percent (default: 10).  Ignored when --height is not specified.\n\n       --layout=LAYOUT\n              Choose the layout (default: default)\n\n              default       Display from the bottom of the screen\n              reverse       Display from the top of the screen\n              reverse-list  Display from the top of the screen, prompt at the bottom\n\n       --reverse\n              A synonym for --layout=reverse\n\n       --border[=BORDER_OPT]\n              Draw border around the finder\n\n              rounded       Border with rounded corners (default)\n              sharp         Border with sharp corners\n              horizontal    Horizontal lines above and below the finder\n              vertical      Vertical lines on each side of the finder\n              top (up)\n              bottom (down)\n              left\n              right\n              none\n\n       --no-unicode\n              Use ASCII characters instead of Unicode box drawing characters to draw border\n\n       --margin=MARGIN\n              Comma-separated expression for margins around the finder.\n\n              TRBL     Same margin for top, right, bottom, and left\n              TB,RL    Vertical, horizontal margin\n              T,RL,B   Top, horizontal, bottom margin\n              T,R,B,L  Top, right, bottom, left margin\n\n              Each part can be given in absolute number or in percentage relative to the terminal size with % suffix.\n\n              e.g.\n                   fzf --margin 10%\n                   fzf --margin 1,5%\n\n       --padding=PADDING\n              Comma-separated expression for padding inside the border. Padding is distinguishable from margin only when --border option is used.\n\n              e.g.\n                   fzf --margin 5% --padding 5% --border --preview 'cat {}' \\\n                       --color bg:#222222,preview-bg:#333333\n\n              TRBL     Same padding for top, right, bottom, and left\n              TB,RL    Vertical, horizontal padding\n              T,RL,B   Top, horizontal, bottom padding\n              T,R,B,L  Top, right, bottom, left padding\n\n       --info=STYLE\n              Determines the display style of finder info.\n\n              default       Display on the next line to the prompt\n              inline        Display on the same line\n              hidden        Do not display finder info\n\n       --no-info\n              A synonym for --info=hidden\n\n       --prompt=STR\n              Input prompt (default: '> ')\n\n       --pointer=STR\n              Pointer to the current line (default: '>')\n\n       --marker=STR\n              Multi-select marker (default: '>')\n\n       --header=STR\n              The  given  string  will  be  printed  as the sticky header. The lines are displayed in the given order from top to bottom regardless of --layout option, and are not affected by\n              --with-nth. ANSI color codes are processed even when --ansi is not set.\n\n       --header-lines=N\n              The first N lines of the input are treated as the sticky header. When --with-nth is set, the lines are transformed just like the other lines that follow.\n\n       --header-first\n              Print header before the prompt line\n\n       --ellipsis=STR\n              Ellipsis to show when line is truncated (default: '..')\n\n   Display\n       --ansi Enable processing of ANSI color codes\n\n       --tabstop=SPACES\n              Number of spaces for a tab character (default: 8)\n\n       --color=[BASE_SCHEME][,COLOR_NAME[:ANSI_COLOR][:ANSI_ATTRIBUTES]]...\n              Color configuration. The name of the base color scheme is followed by custom color mappings.\n\n              BASE SCHEME:\n                  (default: dark on 256-color terminal, otherwise 16)\n\n                  dark    Color scheme for dark 256-color terminal\n                  light   Color scheme for light 256-color terminal\n                  16      Color scheme for 16-color terminal\n                  bw      No colors (equivalent to --no-color)\n\n              COLOR NAMES:\n                  fg         Text\n                  bg         Background\n                  preview-fg Preview window text\n                  preview-bg Preview window background\n                  hl         Highlighted substrings\n                  fg+        Text (current line)\n                  bg+        Background (current line)\n                  gutter     Gutter on the left (defaults to bg+)\n                  hl+        Highlighted substrings (current line)\n                  query      Query string\n                  disabled   Query string when search is disabled\n                  info       Info line (match counters)\n                  border     Border around the window (--border and --preview)\n                  prompt     Prompt\n                  pointer    Pointer to the current line\n                  marker     Multi-select marker\n                  spinner    Streaming input indicator\n                  header     Header\n\n              ANSI COLORS:\n                  -1         Default terminal foreground/background color\n                             (or the original color of the text)\n                  0 ~ 15     16 base colors\n                    black\n                    red\n                    green\n                    yellow\n                    blue\n                    magenta\n                    cyan\n                    white\n                    bright-black (gray | grey)\n                    bright-red\n                    bright-green\n                    bright-yellow\n                    bright-blue\n                    bright-magenta\n                    bright-cyan\n                    bright-white\n                  16 ~ 255   ANSI 256 colors\n                  #rrggbb    24-bit colors\n\n              ANSI ATTRIBUTES: (Only applies to foreground colors)\n                  regular    Clears previously set attributes; should precede the other ones\n                  bold\n                  underline\n                  reverse\n                  dim\n                  italic\n                  strikethrough\n\n              EXAMPLES:\n\n                   # Seoul256 theme with 8-bit colors\n                   # (https://github.com/junegunn/seoul256.vim)\n                   fzf --color='bg:237,bg+:236,info:143,border:240,spinner:108' \\\n                       --color='hl:65,fg:252,header:65,fg+:252' \\\n                       --color='pointer:161,marker:168,prompt:110,hl+:108'\n\n                   # Seoul256 theme with 24-bit colors\n                   fzf --color='bg:#4B4B4B,bg+:#3F3F3F,info:#BDBB72,border:#6B6B6B,spinner:#98BC99' \\\n                       --color='hl:#719872,fg:#D9D9D9,header:#719872,fg+:#D9D9D9' \\\n                       --color='pointer:#E12672,marker:#E17899,prompt:#98BEDE,hl+:#98BC99'\n\n       --no-bold\n              Do not use bold text\n\n       --black\n              Use black background\n\n   History\n       --history=HISTORY_FILE\n              Load search history from the specified file and update the file on completion.  When enabled, CTRL-N and CTRL-P are automatically remapped to next-history and previous-history.\n\n       --history-size=N\n              Maximum number of entries in the history file (default: 1000). The file is automatically truncated when the number of the lines exceeds the value.\n\n   Preview\n       --preview=COMMAND\n              Execute the given command for the current line and display the result on the preview window. {} in the command is the placeholder that is replaced to the single-quoted string of\n              the current line. To transform the replacement string, specify field index expressions between the braces (See FIELD INDEX EXPRESSION for the details).\n\n              e.g.\n                   fzf --preview='head -$LINES {}'\n                   ls -l | fzf --preview=\"echo user={3} when={-4..-2}; cat {-1}\" --header-lines=1\n\n              fzf  exports $FZF_PREVIEW_LINES and $FZF_PREVIEW_COLUMNS so that they represent the exact size of the preview window. (It also overrides $LINES and $COLUMNS with the same values\n              but they can be reset by the default shell, so prefer to refer to the ones with FZF_PREVIEW_ prefix.)\n\n              A placeholder expression starting with + flag will be replaced to the space-separated list of the selected lines (or the current line if  no  selection  was  made)  individually\n              quoted.\n\n              e.g.\n                   fzf --multi --preview='head -10 {+}'\n                   git log --oneline | fzf --multi --preview 'git show {+1}'\n\n              When using a field index expression, leading and trailing whitespace is stripped from the replacement string. To preserve the whitespace, use the s flag.\n\n              Also,  {q}  is  replaced to the current query string, and {n} is replaced to zero-based ordinal index of the line. Use {+n} if you want all index numbers when multiple lines are\n              selected.\n\n              A placeholder expression with f flag is replaced to the path of a temporary file that holds the evaluated list. This is useful when you multi-select a large number of items  and\n              the length of the evaluated string may exceed ARG_MAX.\n\n              e.g.\n                   # Press CTRL-A to select 100K items and see the sum of all the numbers.\n                   # This won't work properly without 'f' flag due to ARG_MAX limit.\n                   seq 100000 | fzf --multi --bind ctrl-a:select-all \\\n                                    --preview \"awk '{sum+=\\$1} END {print sum}' {+f}\"\n\n              Note that you can escape a placeholder pattern by prepending a backslash.\n\n              Preview window will be updated even when there is no match for the current query if any of the placeholder expressions evaluates to a non-empty string.\n\n              Since  0.24.0,  fzf can render partial preview content before the preview command completes. ANSI escape sequence for clearing the display (CSI 2 J) is supported, so you can use\n              it to implement preview window that is constantly updating.\n\n              e.g.\n                    fzf --preview 'for i in $(seq 100000); do\n                      (( i % 200 == 0 )) && printf \"\\033[2J\"\n                      echo \"$i\"\n                      sleep 0.01\n                    done'\n\n       --preview-window=[POSITION][,SIZE[%]][,border-BORDER_OPT][,[no]wrap][,[no]follow][,[no]cycle][,[no]hidden][,+SCROLL[OFFSETS][/DENOM]][,~HEADER_LINES][,default][,<SIZE_THRESHOLD(ALTER‐\n       NATIVE_LAYOUT)]\n\n              POSITION: (default: right)\n                  up\n                  down\n                  left\n                  right\n\n              Determines the layout of the preview window.\n\n              * If the argument contains :hidden, the preview window will be hidden by default until toggle-preview action is triggered.\n\n              * If size is given as 0, preview window will not be visible, but fzf will still execute the command in the background.\n\n              * Long lines are truncated by default. Line wrap can be enabled with wrap flag.\n\n              * Preview window will automatically scroll to the bottom when follow flag is set, similarly to how tail -f works.\n\n                     e.g.\n                           fzf --preview-window follow --preview 'for i in $(seq 100000); do\n                             echo \"$i\"\n                             sleep 0.01\n                             (( i % 300 == 0 )) && printf \"\\033[2J\"\n                           done'\n\n              * Cyclic scrolling is enabled with cycle flag.\n\n              *  To  change  the  style  of the border of the preview window, specify one of the options for --border with border- prefix.  e.g. border-rounded (border with rounded edges, de‐\n              fault), border-sharp (border with sharp edges), border-left, border-none, etc.\n\n              * [:+SCROLL[OFFSETS][/DENOM]] determines the initial scroll offset of the preview window.\n\n                - SCROLL can be either a numeric integer or a single-field index expression that refers to a numeric integer.\n\n                - The optional OFFSETS part is for adjusting the base offset. It should be given as a series of signed integers (-INTEGER or +INTEGER).\n\n                - The final /DENOM part is for specifying a fraction of the preview window height.\n\n              * ~HEADER_LINES keeps the top N lines as the fixed header so that they are always visible.\n\n              * default resets all options previously set to the default.\n\n                     e.g.\n                          # Non-default scroll window positions and sizes\n                          fzf --preview=\"head {}\" --preview-window=up,30%\n                          fzf --preview=\"file {}\" --preview-window=down,1\n\n                          # Initial scroll offset is set to the line number of each line of\n                          # git grep output *minus* 5 lines (-5)\n                          git grep --line-number '' |\n                            fzf --delimiter : --preview 'nl {1}' --preview-window '+{2}-5'\n\n                          # Preview with bat, matching line in the middle of the window below\n                          # the fixed header of the top 3 lines\n                          #\n                          #   ~3    Top 3 lines as the fixed header\n                          #   +{2}  Base scroll offset extracted from the second field\n                          #   +3    Extra offset to compensate for the 3-line header\n                          #   /2    Put in the middle of the preview area\n                          #\n                          git grep --line-number '' |\n                            fzf --delimiter : \\\n                                --preview 'bat --style=full --color=always --highlight-line {2} {1}' \\\n                                --preview-window '~3,+{2}+3/2'\n\n                          # Display top 3 lines as the fixed header\n                          fzf --preview 'bat --style=full --color=always {}' --preview-window '~3'\n\n              * You can specify an alternative set of options that are used only when the size\n                of the preview window is below a certain threshold. Note that only one\n                alternative layout is allowed.\n\n                     e.g.\n                           fzf --preview 'cat {}' --preview-window 'right,border-left,<30(up,30%,border-bottom)'\n\n   Scripting\n       -q, --query=STR\n              Start the finder with the given query\n\n       -1, --select-1\n              If there is only one match for the initial query (--query), do not start interactive finder and automatically select the only match\n\n       -0, --exit-0\n              If there is no match for the initial query (--query), do not start interactive finder and exit immediately\n\n       -f, --filter=STR\n              Filter mode. Do not start interactive finder. When used with --no-sort, fzf becomes a fuzzy-version of grep.\n\n       --print-query\n              Print query as the first line\n\n       --expect=KEY[,..]\n              Comma-separated list of keys that can be used to complete fzf in addition to the default enter key. When this option is set, fzf will print the name of the key  pressed  as  the\n              first  line  of  its  output  (or as the second line if --print-query is also used). The line will be empty if fzf is completed with the default enter key. If --expect option is\n              specified multiple times, fzf will expect the union of the keys. --no-expect will clear the list.\n\n              e.g.\n                   fzf --expect=ctrl-v,ctrl-t,alt-s --expect=f1,f2,~,@\n\n       --read0\n              Read input delimited by ASCII NUL characters instead of newline characters\n\n       --print0\n              Print output delimited by ASCII NUL characters instead of newline characters\n\n       --no-clear\n              Do not clear finder interface on exit. If fzf was started in full screen mode, it will not switch back to the original screen, so you'll have to manually run tput rmcup  to  re‐\n              turn. This option can be used to avoid flickering of the screen when your application needs to start fzf multiple times in order.\n\n       --sync Synchronous search for multi-staged filtering. If specified, fzf will launch ncurses finder only after the input stream is complete.\n\n              e.g. fzf --multi | fzf --sync\n\n       --version\n              Display version information and exit\n\n       Note that most options have the opposite versions with --no- prefix.\n\nENVIRONMENT VARIABLES\n       FZF_DEFAULT_COMMAND\n              Default  command to use when input is tty. On *nix systems, fzf runs the command with $SHELL -c if SHELL is set, otherwise with sh -c, so in this case make sure that the command\n              is POSIX-compliant.\n\n       FZF_DEFAULT_OPTS\n              Default options. e.g. export FZF_DEFAULT_OPTS=\"--extended --cycle\"\n\nEXIT STATUS\n       0      Normal exit\n       1      No match\n       2      Error\n       130    Interrupted with CTRL-C or ESC\n\nFIELD INDEX EXPRESSION\n       A field index expression can be a non-zero integer or a range expression ([BEGIN]..[END]). --nth and --with-nth take a comma-separated list of field index expressions.\n\n   Examples\n       1      The 1st field\n       2      The 2nd field\n       -1     The last field\n       -2     The 2nd to last field\n       3..5   From the 3rd field to the 5th field\n       2..    From the 2nd field to the last field\n       ..-3   From the 1st field to the 3rd to the last field\n       ..     All the fields\n\nEXTENDED SEARCH MODE\n       Unless specified otherwise, fzf will start in \"extended-search mode\". In this mode, you can specify multiple patterns delimited by spaces, such as: 'wild ^music .mp3$ sbtrkt !rmx\n\n       You can prepend a backslash to a space (\\ ) to match a literal space character.\n\n   Exact-match (quoted)\n       A term that is prefixed by a single-quote character (') is interpreted as an \"exact-match\" (or \"non-fuzzy\") term. fzf will search for the exact occurrences of the string.\n\n   Anchored-match\n       A term can be prefixed by ^, or suffixed by $ to become an anchored-match term. Then fzf will search for the lines that start with or end with the given string. An anchored-match  term\n       is also an exact-match term.\n\n   Negation\n       If a term is prefixed by !, fzf will exclude the lines that satisfy the term from the result. In this case, fzf performs exact match by default.\n\n   Exact-match by default\n       If you don't prefer fuzzy matching and do not wish to \"quote\" (prefixing with ') every word, start fzf with -e or --exact option. Note that when --exact is set, '-prefix \"unquotes\" the\n       term.\n\n   OR operator\n       A single bar character term acts as an OR operator. For example, the following query matches entries that start with core and end with either go, rb, or py.\n\n       e.g. ^core go$ | rb$ | py$\n\nKEY/EVENT BINDINGS\n       --bind option allows you to bind a key or an event to one or more actions. You can use it to customize key bindings or implement dynamic behaviors.\n\n       --bind takes a comma-separated list of binding expressions. Each binding expression is KEY:ACTION or EVENT:ACTION.\n\n       e.g.\n            fzf --bind=ctrl-j:accept,ctrl-k:kill-line\n\n   AVAILABLE KEYS: (SYNONYMS)\n       ctrl-[a-z]\n       ctrl-space\n       ctrl-\\\n       ctrl-]\n       ctrl-^      (ctrl-6)\n       ctrl-/      (ctrl-_)\n       ctrl-alt-[a-z]\n       alt-[*]     (Any case-sensitive single character is allowed)\n       f[1-12]\n       enter       (return ctrl-m)\n       space\n       bspace      (bs)\n       alt-up\n       alt-down\n       alt-left\n       alt-right\n       alt-enter\n       alt-space\n       alt-bspace  (alt-bs)\n       tab\n       btab        (shift-tab)\n       esc\n       del\n       up\n       down\n       left\n       right\n       home\n       end\n       insert\n       pgup        (page-up)\n       pgdn        (page-down)\n       shift-up\n       shift-down\n       shift-left\n       shift-right\n       alt-shift-up\n       alt-shift-down\n       alt-shift-left\n       alt-shift-right\n       left-click\n       right-click\n       double-click\n       or any single character\n\n   AVAILABLE EVENTS:\n       change\n              Triggered whenever the query string is changed\n\n              e.g.\n                   # Move cursor to the first entry whenever the query is changed\n                   fzf --bind change:first\n\n       backward-eof\n              Triggered when the query string is already empty and you try to delete it backward.\n\n              e.g.\n                   fzf --bind backward-eof:abort\n\n   AVAILABLE ACTIONS:\n       A key or an event can be bound to one or more of the following actions.\n\n         ACTION:                   DEFAULT BINDINGS (NOTES):\n           abort                      ctrl-c  ctrl-g  ctrl-q  esc\n           accept                     enter   double-click\n           accept-non-empty           (same as accept except that it prevents fzf from exiting without selection)\n           backward-char              ctrl-b  left\n           backward-delete-char       ctrl-h  bspace\n           backward-delete-char/eof   (same as backward-delete-char except aborts fzf if query is empty)\n           backward-kill-word         alt-bs\n           backward-word              alt-b   shift-left\n           beginning-of-line          ctrl-a  home\n           cancel                     (clear query string if not empty, abort fzf otherwise)\n           change-preview(...)        (change --preview option)\n           change-preview-window(...) (change --preview-window option; rotate through the multiple option sets separated by '|')\n           change-prompt(...)         (change prompt to the given string)\n           clear-screen               ctrl-l\n           clear-selection            (clear multi-selection)\n           close                      (close preview window if open, abort fzf otherwise)\n           clear-query                (clear query string)\n           delete-char                del\n           delete-char/eof            ctrl-d (same as delete-char except aborts fzf if query is empty)\n           deselect\n           deselect-all               (deselect all matches)\n           disable-search             (disable search functionality)\n           down                       ctrl-j  ctrl-n  down\n           enable-search              (enable search functionality)\n           end-of-line                ctrl-e  end\n           execute(...)               (see below for the details)\n           execute-silent(...)        (see below for the details)\n           first                      (move to the first match)\n           forward-char               ctrl-f  right\n           forward-word               alt-f   shift-right\n           ignore\n           jump                       (EasyMotion-like 2-keystroke movement)\n           jump-accept                (jump and accept)\n           kill-line\n           kill-word                  alt-d\n           last                       (move to the last match)\n           next-history               (ctrl-n on --history)\n           page-down                  pgdn\n           page-up                    pgup\n           half-page-down\n           half-page-up\n           preview(...)               (see below for the details)\n           preview-down               shift-down\n           preview-up                 shift-up\n           preview-page-down\n           preview-page-up\n           preview-half-page-down\n           preview-half-page-up\n           preview-bottom\n           preview-top\n           previous-history           (ctrl-p on --history)\n           print-query                (print query and exit)\n           put                        (put the character to the prompt)\n           refresh-preview\n           rebind(...)                (rebind bindings after unbind)\n           reload(...)                (see below for the details)\n           replace-query              (replace query string with the current selection)\n           select\n           select-all                 (select all matches)\n           toggle                     (right-click)\n           toggle-all                 (toggle all matches)\n           toggle+down                ctrl-i  (tab)\n           toggle-in                  (--layout=reverse* ? toggle+up : toggle+down)\n           toggle-out                 (--layout=reverse* ? toggle+down : toggle+up)\n           toggle-preview\n           toggle-preview-wrap\n           toggle-search              (toggle search functionality)\n           toggle-sort\n           toggle+up                  btab    (shift-tab)\n           unbind(...)                (unbind bindings)\n           unix-line-discard          ctrl-u\n           unix-word-rubout           ctrl-w\n           up                         ctrl-k  ctrl-p  up\n           yank                       ctrl-y\n\n   ACTION COMPOSITION\n       Multiple actions can be chained using + separator.\n\n       e.g.\n            fzf --multi --bind 'ctrl-a:select-all+accept'\n            fzf --multi --bind 'ctrl-a:select-all' --bind 'ctrl-a:+accept'\n\n   ACTION ARGUMENT\n       An action denoted with (...) suffix takes an argument.\n\n       e.g.\n            fzf --bind 'ctrl-a:change-prompt(NewPrompt> )'\n            fzf --bind 'ctrl-v:preview(cat {})' --preview-window hidden\n\n       If the argument contains parentheses, fzf may fail to parse the expression. In that case, you can use any of the following alternative notations to avoid parse errors.\n\n           action-name[...]\n           action-name~...~\n           action-name!...!\n           action-name@...@\n           action-name#...#\n           action-name$...$\n           action-name%...%\n           action-name^...^\n           action-name&...&\n           action-name*...*\n           action-name;...;\n           action-name/.../\n           action-name|...|\n           action-name:...\n              The last one is the special form that frees you from parse errors as it does not expect the closing character. The catch is that it should be the last one in the comma-separated\n              list of key-action pairs.\n\n   COMMAND EXECUTION\n       With  execute(...)  action,  you  can execute arbitrary commands without leaving fzf. For example, you can turn fzf into a simple file browser by binding enter key to less command like\n       follows.\n\n           fzf --bind \"enter:execute(less {})\"\n\n       You can use the same placeholder expressions as in --preview.\n\n       fzf switches to the alternate screen when executing a command. However, if the command is expected to complete quickly, and you are not interested in its output, you might want to  use\n       execute-silent instead, which silently executes the command without the switching. Note that fzf will not be responsive until the command is complete. For asynchronous execution, start\n       your command as a background process (i.e. appending &).\n\n       On *nix systems, fzf runs the command with $SHELL -c if SHELL is set, otherwise with sh -c, so in this case make sure that the command is POSIX-compliant.\n\n   RELOAD INPUT\n       reload(...) action is used to dynamically update the input list without restarting fzf. It takes the same command template with placeholder expressions as execute(...).\n\n       See https://github.com/junegunn/fzf/issues/1750 for more info.\n\n       e.g.\n            # Update the list of processes by pressing CTRL-R\n            ps -ef | fzf --bind 'ctrl-r:reload(ps -ef)' --header 'Press CTRL-R to reload' \\\n                         --header-lines=1 --layout=reverse\n\n            # Integration with ripgrep\n            RG_PREFIX=\"rg --column --line-number --no-heading --color=always --smart-case \"\n            INITIAL_QUERY=\"foobar\"\n            FZF_DEFAULT_COMMAND=\"$RG_PREFIX '$INITIAL_QUERY'\" \\\n              fzf --bind \"change:reload:$RG_PREFIX {q} || true\" \\\n                  --ansi --disabled --query \"$INITIAL_QUERY\"\n\n   PREVIEW BINDING\n       With preview(...) action, you can specify multiple different preview commands in addition to the default preview command given by --preview option.\n\n       e.g.\n            # Default preview command with an extra preview binding\n            fzf --preview 'file {}' --bind '?:preview:cat {}'\n\n            # A preview binding with no default preview command\n            # (Preview window is initially empty)\n            fzf --bind '?:preview:cat {}'\n\n            # Preview window hidden by default, it appears when you first hit '?'\n            fzf --bind '?:preview:cat {}' --preview-window hidden\n\n   CHANGE PREVIEW WINDOW ATTRIBUTES\n       change-preview-window action can be used to change the properties of the preview window. Unlike the --preview-window option, you can specify multiple sets of options separated  by  '|'\n       characters.\n\n       e.g.\n            # Rotate through the options using CTRL-/\n            fzf --preview 'cat {}' --bind 'ctrl-/:change-preview-window(right,70%|down,40%,border-horizontal|hidden|right)'\n\n            # The default properties given by `--preview-window` are inherited, so an empty string in the list is interpreted as the default\n            fzf --preview 'cat {}' --preview-window 'right,40%,border-left' --bind 'ctrl-/:change-preview-window(70%|down,border-top|hidden|)'\n\n            # This is equivalent to toggle-preview action\n            fzf --preview 'cat {}' --bind 'ctrl-/:change-preview-window(hidden|)'\n\nAUTHOR\n       Junegunn Choi (junegunn.c@gmail.com)\n\nSEE ALSO\n       Project homepage:\n              https://github.com/junegunn/fzf\n\n       Extra Vim plugin:\n              https://github.com/junegunn/fzf.vim\n\nLICENSE\n       MIT\n\nfzf 0.33.0                                                                                  Aug 2022                                                                                     fzf(1)\n"
  },
  {
    "path": "tests/syntax-tests/source/Manpage/select-2.man",
    "content": "SELECT(2)                                             Linux Programmer's Manual                                             SELECT(2)\n\nNAME\n       select, pselect, FD_CLR, FD_ISSET, FD_SET, FD_ZERO - synchronous I/O multiplexing\n\nSYNOPSIS\n       #include <sys/select.h>\n\n       int select(int nfds, fd_set *readfds, fd_set *writefds,\n                  fd_set *exceptfds, struct timeval *timeout);\n\n       void FD_CLR(int fd, fd_set *set);\n       int  FD_ISSET(int fd, fd_set *set);\n       void FD_SET(int fd, fd_set *set);\n       void FD_ZERO(fd_set *set);\n\n       int pselect(int nfds, fd_set *readfds, fd_set *writefds,\n                   fd_set *exceptfds, const struct timespec *timeout,\n                   const sigset_t *sigmask);\n\n   Feature Test Macro Requirements for glibc (see feature_test_macros(7)):\n\n       pselect(): _POSIX_C_SOURCE >= 200112L\n\nDESCRIPTION\n       select()  allows  a  program  to  monitor  multiple file descriptors, waiting until one or more of the file descriptors become\n       \"ready\" for some class of I/O operation (e.g., input possible).  A file descriptor is considered ready if it  is  possible  to\n       perform a corresponding I/O operation (e.g., read(2), or a sufficiently small write(2)) without blocking.\n\n       select()  can monitor only file descriptors numbers that are less than FD_SETSIZE; poll(2) and epoll(7) do not have this limi‐\n       tation.  See BUGS.\n\n   File descriptor sets\n       The principal arguments of select() are three \"sets\" of file descriptors (declared with the  type  fd_set),  which  allow  the\n       caller  to  wait  for  three  classes of events on the specified set of file descriptors.  Each of the fd_set arguments may be\n       specified as NULL if no file descriptors are to be watched for the corresponding class of events.\n\n       Note well: Upon return, each of the file descriptor sets is modified in place to indicate which file descriptors are currently\n       \"ready\".   Thus,  if using select() within a loop, the sets must be reinitialized before each call.  The implementation of the\n       fd_set arguments as value-result arguments is a design error that is avoided in poll(2) and epoll(7).\n\n       The contents of a file descriptor set can be manipulated using the following macros:\n\n       FD_ZERO()\n              This macro clears (removes all file descriptors from) set.  It should be employed as the first step in  initializing  a\n              file descriptor set.\n\n       FD_SET()\n              This macro adds the file descriptor fd to set.  Adding a file descriptor that is already present in the set is a no-op,\n              and does not produce an error.\n\n       FD_CLR()\n              This macro removes the file descriptor fd from set.  Removing a file descriptor that is not present in the set is a no-\n              op, and does not produce an error.\n\n       FD_ISSET()\n              select()  modifies the contents of the sets according to the rules described below.  After calling select(), the FD_IS‐\n              SET() macro can be used to test if a file descriptor is still present in a set.  FD_ISSET() returns nonzero if the file\n              descriptor fd is present in set, and zero if it is not.\n\n   Arguments\n       The arguments of select() are as follows:\n\n       readfds\n              The  file  descriptors  in  this  set are watched to see if they are ready for reading.  A file descriptor is ready for\n              reading if a read operation will not block; in particular, a file descriptor is also ready on end-of-file.\n\n              After select() has returned, readfds will be cleared of all file descriptors except for those that are ready for  read‐\n              ing.\n\n       writefds\n              The  file  descriptors  in  this  set are watched to see if they are ready for writing.  A file descriptor is ready for\n              writing if a write operation will not block.  However, even if a file descriptor indicates as writable, a  large  write\n              may still block.\n\n              After select() has returned, writefds will be cleared of all file descriptors except for those that are ready for writ‐\n              ing.\n\n       exceptfds\n              The file descriptors in this set are watched for \"exceptional conditions\".  For examples  of  some  exceptional  condi‐\n              tions, see the discussion of POLLPRI in poll(2).\n\n              After  select()  has  returned,  exceptfds will be cleared of all file descriptors except for those for which an excep‐\n              tional condition has occurred.\n\n       nfds   This argument should be set to the highest-numbered file descriptor in any of the three sets, plus  1.   The  indicated\n              file descriptors in each set are checked, up to this limit (but see BUGS).\n\n       timeout\n              The  timeout argument is a timeval structure (shown below) that specifies the interval that select() should block wait‐\n              ing for a file descriptor to become ready.  The call will block until either:\n\n              • a file descriptor becomes ready;\n\n              • the call is interrupted by a signal handler; or\n\n              • the timeout expires.\n\n              Note that the timeout interval will be rounded up to the system clock granularity, and kernel  scheduling  delays  mean\n              that the blocking interval may overrun by a small amount.\n\n              If both fields of the timeval structure are zero, then select() returns immediately.  (This is useful for polling.)\n\n              If timeout is specified as NULL, select() blocks indefinitely waiting for a file descriptor to become ready.\n\n   pselect()\n       The  pselect() system call allows an application to safely wait until either a file descriptor becomes ready or until a signal\n       is caught.\n\n       The operation of select() and pselect() is identical, other than these three differences:\n\n       • select() uses a timeout that is a struct timeval (with seconds and microseconds), while pselect()  uses  a  struct  timespec\n         (with seconds and nanoseconds).\n\n       • select() may update the timeout argument to indicate how much time was left.  pselect() does not change this argument.\n\n       • select() has no sigmask argument, and behaves as pselect() called with NULL sigmask.\n\n       sigmask  is a pointer to a signal mask (see sigprocmask(2)); if it is not NULL, then pselect() first replaces the current sig‐\n       nal mask by the one pointed to by sigmask, then does the \"select\" function, and then restores the original signal  mask.   (If\n       sigmask is NULL, the signal mask is not modified during the pselect() call.)\n\n       Other than the difference in the precision of the timeout argument, the following pselect() call:\n\n           ready = pselect(nfds, &readfds, &writefds, &exceptfds,\n                           timeout, &sigmask);\n\n       is equivalent to atomically executing the following calls:\n\n           sigset_t origmask;\n\n           pthread_sigmask(SIG_SETMASK, &sigmask, &origmask);\n           ready = select(nfds, &readfds, &writefds, &exceptfds, timeout);\n           pthread_sigmask(SIG_SETMASK, &origmask, NULL);\n\n       The reason that pselect() is needed is that if one wants to wait for either a signal or for a file descriptor to become ready,\n       then an atomic test is needed to prevent race conditions.  (Suppose the signal handler sets a global flag and returns.  Then a\n       test  of this global flag followed by a call of select() could hang indefinitely if the signal arrived just after the test but\n       just before the call.  By contrast, pselect() allows one to first block signals, handle the signals that have  come  in,  then\n       call pselect() with the desired sigmask, avoiding the race.)\n\n   The timeout\n       The timeout argument for select() is a structure of the following type:\n\n           struct timeval {\n               time_t      tv_sec;         /* seconds */\n               suseconds_t tv_usec;        /* microseconds */\n           };\n\n       The corresponding argument for pselect() has the following type:\n\n           struct timespec {\n               time_t      tv_sec;         /* seconds */\n               long        tv_nsec;        /* nanoseconds */\n           };\n\n       On  Linux,  select()  modifies  timeout  to  reflect  the amount of time not slept; most other implementations do not do this.\n       (POSIX.1 permits either behavior.)  This causes problems both when Linux code which reads timeout is ported to other operating\n       systems, and when code is ported to Linux that reuses a struct timeval for multiple select()s in a loop without reinitializing\n       it.  Consider timeout to be undefined after select() returns.\n\nRETURN VALUE\n       On success, select() and pselect() return the number of file descriptors contained in the three returned descriptor sets (that\n       is,  the  total number of bits that are set in readfds, writefds, exceptfds).  The return value may be zero if the timeout ex‐\n       pired before any file descriptors became ready.\n\n       On error, -1 is returned, and errno is set to indicate the error; the file descriptor sets are unmodified, and timeout becomes\n       undefined.\n\nERRORS\n       EBADF  An invalid file descriptor was given in one of the sets.  (Perhaps a file descriptor that was already closed, or one on\n              which an error has occurred.)  However, see BUGS.\n\n       EINTR  A signal was caught; see signal(7).\n\n       EINVAL nfds is negative or exceeds the RLIMIT_NOFILE resource limit (see getrlimit(2)).\n\n       EINVAL The value contained within timeout is invalid.\n\n       ENOMEM Unable to allocate memory for internal tables.\n\nVERSIONS\n       pselect() was added to Linux in kernel 2.6.16.  Prior to this, pselect() was emulated in glibc (but see BUGS).\n\nCONFORMING TO\n       select() conforms to POSIX.1-2001, POSIX.1-2008, and 4.4BSD (select() first appeared in 4.2BSD).  Generally  portable  to/from\n       non-BSD  systems  supporting  clones  of  the BSD socket layer (including System V variants).  However, note that the System V\n       variant typically sets the timeout variable before returning, but the BSD variant does not.\n\n       pselect() is defined in POSIX.1g, and in POSIX.1-2001 and POSIX.1-2008.\n\nNOTES\n       An fd_set is a fixed size buffer.  Executing FD_CLR() or FD_SET() with a value of fd that is negative or is equal to or larger\n       than FD_SETSIZE will result in undefined behavior.  Moreover, POSIX requires fd to be a valid file descriptor.\n\n       The operation of select() and pselect() is not affected by the O_NONBLOCK flag.\n\n       On some other UNIX systems, select() can fail with the error EAGAIN if the system fails to allocate kernel-internal resources,\n       rather than ENOMEM as Linux does.  POSIX specifies this error for poll(2), but not for select().  Portable programs  may  wish\n       to check for EAGAIN and loop, just as with EINTR.\n\n   The self-pipe trick\n       On  systems  that  lack pselect(), reliable (and more portable) signal trapping can be achieved using the self-pipe trick.  In\n       this technique, a signal handler writes a byte to a pipe whose other end is monitored by select() in the  main  program.   (To\n       avoid  possibly  blocking when writing to a pipe that may be full or reading from a pipe that may be empty, nonblocking I/O is\n       used when reading from and writing to the pipe.)\n\n   Emulating usleep(3)\n       Before the advent of usleep(3), some code employed a call to select() with all three sets empty, nfds  zero,  and  a  non-NULL\n       timeout as a fairly portable way to sleep with subsecond precision.\n\n   Correspondence between select() and poll() notifications\n       Within  the  Linux  kernel  source,  we  find  the  following  definitions which show the correspondence between the readable,\n       writable, and exceptional condition notifications of select() and the event notifications provided by poll(2) and epoll(7):\n\n           #define POLLIN_SET  (EPOLLRDNORM | EPOLLRDBAND | EPOLLIN |\n                                EPOLLHUP | EPOLLERR)\n                              /* Ready for reading */\n           #define POLLOUT_SET (EPOLLWRBAND | EPOLLWRNORM | EPOLLOUT |\n                                EPOLLERR)\n                              /* Ready for writing */\n           #define POLLEX_SET  (EPOLLPRI)\n                              /* Exceptional condition */\n\n   Multithreaded applications\n       If a file descriptor being monitored by select() is closed in another thread, the result is unspecified.  On  some  UNIX  sys‐\n       tems,  select()  unblocks  and  returns, with an indication that the file descriptor is ready (a subsequent I/O operation will\n       likely fail with an error, unless another process reopens file descriptor between the time select() returned and the I/O oper‐\n       ation  is  performed).   On Linux (and some other systems), closing the file descriptor in another thread has no effect on se‐\n       lect().  In summary, any application that relies on a particular behavior in this scenario must be considered buggy.\n\n   C library/kernel differences\n       The Linux kernel allows file descriptor sets of arbitrary size, determining the length of the sets  to  be  checked  from  the\n       value of nfds.  However, in the glibc implementation, the fd_set type is fixed in size.  See also BUGS.\n\n       The pselect() interface described in this page is implemented by glibc.  The underlying Linux system call is named pselect6().\n       This system call has somewhat different behavior from the glibc wrapper function.\n\n       The Linux pselect6() system call modifies its timeout argument.  However, the glibc wrapper function hides  this  behavior  by\n       using  a  local  variable for the timeout argument that is passed to the system call.  Thus, the glibc pselect() function does\n       not modify its timeout argument; this is the behavior required by POSIX.1-2001.\n\n       The final argument of the pselect6() system call is not a sigset_t * pointer, but is instead a structure of the form:\n\n           struct {\n               const kernel_sigset_t *ss;   /* Pointer to signal set */\n               size_t ss_len;               /* Size (in bytes) of object\n                                               pointed to by 'ss' */\n           };\n\n       This allows the system call to obtain both a pointer to the signal set and its size, while allowing for the fact that most ar‐\n       chitectures  support a maximum of 6 arguments to a system call.  See sigprocmask(2) for a discussion of the difference between\n       the kernel and libc notion of the signal set.\n\n   Historical glibc details\n       Glibc 2.0 provided an incorrect version of pselect() that did not take a sigmask argument.\n\n       In glibc versions 2.1 to 2.2.1, one must define _GNU_SOURCE in order to obtain the  declaration  of  pselect()  from  <sys/se‐\n       lect.h>.\n\nBUGS\n       POSIX allows an implementation to define an upper limit, advertised via the constant FD_SETSIZE, on the range of file descrip‐\n       tors that can be specified in a file descriptor set.  The Linux kernel imposes no fixed limit, but  the  glibc  implementation\n       makes  fd_set a fixed-size type, with FD_SETSIZE defined as 1024, and the FD_*() macros operating according to that limit.  To\n       monitor file descriptors greater than 1023, use poll(2) or epoll(7) instead.\n\n       According to POSIX, select() should check all specified file descriptors in the three file descriptor sets, up  to  the  limit\n       nfds-1.   However,  the current implementation ignores any file descriptor in these sets that is greater than the maximum file\n       descriptor number that the process currently has open.  According to POSIX, any such file descriptor that is specified in  one\n       of the sets should result in the error EBADF.\n\n       Starting  with  version  2.1, glibc provided an emulation of pselect() that was implemented using sigprocmask(2) and select().\n       This implementation remained vulnerable to the very race condition that pselect() was designed to prevent.  Modern versions of\n       glibc use the (race-free) pselect() system call on kernels where it is provided.\n\n       On  Linux,  select()  may report a socket file descriptor as \"ready for reading\", while nevertheless a subsequent read blocks.\n       This could for example happen when data has arrived but upon examination has the wrong checksum and is discarded.   There  may\n       be  other circumstances in which a file descriptor is spuriously reported as ready.  Thus it may be safer to use O_NONBLOCK on\n       sockets that should not block.\n\n       On Linux, select() also modifies timeout if the call is interrupted by a signal handler (i.e., the EINTR error return).   This\n       is not permitted by POSIX.1.  The Linux pselect() system call has the same behavior, but the glibc wrapper hides this behavior\n       by internally copying the timeout to a local variable and passing that variable to the system call.\n\nEXAMPLES\n       #include <stdio.h>\n       #include <stdlib.h>\n       #include <sys/select.h>\n\n       int\n       main(void)\n       {\n           fd_set rfds;\n           struct timeval tv;\n           int retval;\n\n           /* Watch stdin (fd 0) to see when it has input. */\n\n           FD_ZERO(&rfds);\n           FD_SET(0, &rfds);\n\n           /* Wait up to five seconds. */\n\n           tv.tv_sec = 5;\n           tv.tv_usec = 0;\n\n           retval = select(1, &rfds, NULL, NULL, &tv);\n           /* Don't rely on the value of tv now! */\n\n           if (retval == -1)\n               perror(\"select()\");\n           else if (retval)\n               printf(\"Data is available now.\\n\");\n               /* FD_ISSET(0, &rfds) will be true. */\n           else\n               printf(\"No data within five seconds.\\n\");\n\n           exit(EXIT_SUCCESS);\n       }\n\nSEE ALSO\n       accept(2), connect(2), poll(2), read(2), recv(2), restart_syscall(2), send(2), sigprocmask(2), write(2), epoll(7), time(7)\n\n       For a tutorial with discussion and examples, see select_tut(2).\n\nCOLOPHON\n       This page is part of release 5.08 of the Linux man-pages project.  A description of the project, information  about  reporting\n       bugs, and the latest version of this page, can be found at https://www.kernel.org/doc/man-pages/.\n\nLinux                                                         2020-04-11                                                    SELECT(2)\n"
  },
  {
    "path": "tests/syntax-tests/source/Manpage/sway.5.man",
    "content": "sway(5)                       File Formats Manual                      sway(5)\n\nNAME\n       sway - configuration file and commands\n\nDESCRIPTION\n       A sway configuration file is a list of sway commands that are executed\n       by sway on startup.  These commands usually consist of setting your\n       preferences and setting key bindings. An example config is likely\n       present in /etc/sway/config for you to check out.\n\n       Lines in the configuration file might be extended through multiple\n       lines by adding a '\\' character at the end of line. e.g.:\n\n           bindsym Shift+XF86AudioRaiseVolume exec \\\n                pactl set-sink-volume @DEFAULT_SINK@ -1%\n\n       Commands can also be given as a block in the form command { <subcom‐\n       mands...> }. Anything before the opening { will be prepended to the\n       lines inside the block. For example:\n\n           output eDP-1 {\n                background ~/wallpaper.png fill\n                resolution 1920x1080\n           }\n\n       is identical to\n\n           output eDP-1 background ~/wallpaper.png fill\n           output eDP-1 resolution 1920x1080\n\n       These commands can be executed in your config file, via swaymsg(1), or\n       via the bindsym command.\n\nCOMMAND CONVENTIONS\n       Commands are split into several arguments using spaces. You can enclose\n       arguments with quotation marks (\"...\" or '...') to add spaces to a sin‐\n       gle argument. You may also run several commands in order by separating\n       each with , or ;. Criteria is retained across commands separated by ,,\n       but will be reset (and allow for new criteria, if desired) for commands\n       separated by a ;.\n\n       Throughout the documentation, | is used to distinguish between argu‐\n       ments for which you may only select one. [...] is used for optional ar‐\n       guments, and <...> for arguments where you are expected to supply some\n       value.\n\nCOMMANDS\n       This section only lists general commands. For input and output com‐\n       mands, refer to sway-input(5) and sway-output(5).\n\n       The following commands may only be used in the configuration file.\n\n       bar [<bar-id>] <bar-subcommands...>\n           For details on bar subcommands, see sway-bar(5).\n\n       default_orientation horizontal|vertical|auto\n           Sets the default container layout for tiled containers.\n\n       include <path>\n           Includes another file from path. path can be either a full path or\n           a path relative to the parent config, and expands shell syntax (see\n           wordexp(3) for details). The same include file can only be included\n           once; subsequent attempts will be ignored.\n\n       swaybg_command <command>\n           Executes custom background command. Default is swaybg. Refer to\n           sway-output(5) for more information.\n\n           It can be disabled by setting the command to a single dash:\n           swaybg_command -\n\n       swaynag_command <command>\n           Executes custom command for swaynag. Default is swaynag. Additional\n           arguments may be appended to the end. This should only be used to\n           either direct sway to call swaynag from a custom path or to provide\n           additional arguments. This should be placed at the top of the con‐\n           fig for the best results.\n\n           It can be disabled by setting the command to a single dash: sway‐\n           nag_command -\n\n       workspace_layout default|stacking|tabbed\n           Specifies the initial layout for new containers in an empty\n           workspace.\n\n       xwayland enable|disable|force\n           Enables or disables Xwayland support, which allows X11 applications\n           to be used. enable will lazily load Xwayland so Xwayland will not\n           be launched until the first client attempts to connect. In some\n           cases, such as slower machines, it may be desirable to have Xway‐\n           land started immediately by using force instead of enable.\n\n       The following commands cannot be used directly in the configuration\n       file. They are expected to be used with bindsym or at runtime through\n       swaymsg(1).\n\n       border none|normal|csd|pixel [<n>]\n           Set border style for focused window. normal includes a border of\n           thickness n and a title bar. pixel is a border without title bar n\n           pixels thick. Default is normal with border thickness 2. csd is\n           short for client-side-decorations, which allows the client to draw\n           its own decorations.\n\n       border toggle\n           Cycles through the available border styles.\n\n       exit\n           Exit sway and end your Wayland session.\n\n       floating enable|disable|toggle\n           Make focused view floating, non-floating, or the opposite of what\n           it is now.\n\n       <criteria> focus\n           Moves focus to the container that matches the specified criteria.\n\n       focus up|right|down|left\n           Moves focus to the next container in the specified direction.\n\n       focus prev|next [sibling]\n           Moves focus to the previous or next container in the current lay‐\n           out. By default, the last active child of the newly focused con‐\n           tainer will be focused. The sibling option indicates not to immedi‐\n           ately focus a child of the container.\n\n       focus child\n           Moves focus to the last-focused child of the focused container.\n\n       focus parent\n           Moves focus to the parent of the focused container.\n\n       focus output up|right|down|left\n           Moves focus to the next output in the specified direction.\n\n       focus output <name>\n           Moves focus to the named output.\n\n       focus tiling\n           Sets focus to the last focused tiling container.\n\n       focus floating\n           Sets focus to the last focused floating container.\n\n       focus mode_toggle\n           Moves focus between the floating and tiled layers.\n\n       fullscreen [enable|disable|toggle] [global]\n           Makes focused view fullscreen, non-fullscreen, or the opposite of\n           what it is now. If no argument is given, it does the same as tog‐\n           gle. If global is specified, the view will be fullscreen across all\n           outputs.\n\n       gaps inner|outer|horizontal|vertical|top|right|bottom|left all|current\n       set|plus|minus|toggle <amount>\n           Changes the inner or outer gaps for either all workspaces or the\n           current workspace. outer gaps can be altered per side with top,\n           right, bottom, and left or per direction with horizontal and verti‐\n           cal.\n\n       inhibit_idle focus|fullscreen|open|none|visible\n           Set/unset an idle inhibitor for the view. focus will inhibit idle\n           when the view is focused by any seat. fullscreen will inhibit idle\n           when the view is fullscreen (or a descendant of a fullscreen con‐\n           tainer) and is visible. open will inhibit idle until the view is\n           closed (or the inhibitor is unset/changed). visible will inhibit\n           idle when the view is visible on any output. none will remove any\n           existing idle inhibitor for the view.\n\n           This can also be used with criteria to set an idle inhibitor for\n           any existing view or with for_window to set idle inhibitors for fu‐\n           ture views.\n\n       layout default|splith|splitv|stacking|tabbed\n           Sets the layout mode of the focused container.\n\n           When using the stacking layout, only the focused window in the con‐\n           tainer is displayed, with the opened windows' list on the top of\n           the container.\n\n           The tabbed layout is similar to stacking, but the windows’ list is\n           vertically split.\n\n       layout toggle [split|all]\n           Cycles the layout mode of the focused container though a preset\n           list of layouts. If no argument is given, then it cycles through\n           stacking, tabbed and the last split layout. If split is given, then\n           it cycles through splith and splitv. If all is given, then it cy‐\n           cles through every layout.\n\n       layout toggle [split|tabbed|stacking|splitv|splith]\n       [split|tabbed|stacking|splitv|splith]...\n           Cycles the layout mode of the focused container through a list of\n           layouts.\n\n       max_render_time off|<msec>\n           Controls when the relevant application is told to render this win‐\n           dow, as a positive number of milliseconds before the next time sway\n           composites the output. A smaller number leads to fresher rendered\n           frames being composited by sway and lower perceived input latency,\n           but if set too low, the application may not finish rendering before\n           sway composites the output, leading to delayed frames.\n\n           When set to off, the relevant application is told to render this\n           window immediately after display refresh. How much time is left for\n           rendering before sway composites the output at that point depends\n           on the output max_render_time setting.\n\n           To set this up for optimal latency:\n           1.   Set up output max_render_time (see sway-output(5)).\n           2.   Put the target application in full-screen and have it continu‐\n               ously render something.\n           3.   Start by setting max_render_time 1. If the application drops\n               frames, increment by 1.\n\n           This setting only has an effect if a per-output max_render_time is\n           in effect on the output the window is currently on. See sway-out‐\n           put(5) for further details.\n\n       move left|right|up|down [<px> px]\n           Moves the focused container in the direction specified. The op‐\n           tional px argument specifies how many pixels to move the container.\n           If unspecified, the default is 10 pixels. Pixels are ignored when\n           moving tiled containers.\n\n       move [absolute] position <pos_x> [px|ppt] <pos_y> [px|ppt]\n           Moves the focused container to the specified position in the\n           workspace. The position can be specified in pixels or percentage\n           points, omitting the unit defaults to pixels. If absolute is used,\n           the position is relative to all outputs. absolute can not be used\n           with percentage points.\n\n       move [absolute] position center\n           Moves the focused container to be centered on the workspace. If ab‐\n           solute is used, it is moved to the center of all outputs.\n\n       move position cursor|mouse|pointer\n           Moves the focused container to be centered on the cursor.\n\n       move [container|window] [to] mark <mark>\n           Moves the focused container to the specified mark.\n\n       move [--no-auto-back-and-forth] [container|window] [to] workspace [num‐\n       ber] <name>\n           Moves the focused container to the specified workspace. The string\n           number is optional and is used to match a workspace with the same\n           number, even if it has a different name.\n\n       move [container|window] [to] workspace prev|next|current\n           Moves the focused container to the previous, next or current\n           workspace on this output, or if no workspaces remain, the previous\n           or next output.\n\n       move [container|window] [to] workspace prev_on_output|next_on_output\n           Moves the focused container to the previous or next workspace on\n           this output, wrapping around if already at the first or last\n           workspace.\n\n       move [container|window] [to] workspace back_and_forth\n           Moves the focused container to previously focused workspace.\n\n       move [container|window] [to] output <name-or-id>|current\n           Moves the focused container to the specified output.\n\n       move [container|window] [to] output up|right|down|left\n           Moves the focused container to next output in the specified direc‐\n           tion.\n\n       move [container|window] [to] scratchpad\n           Moves the focused container to the scratchpad.\n\n       move workspace [to] output <name-or-id>|current\n           Moves the focused workspace to the specified output.\n\n       move workspace to [output] <name-or-id>|current\n           Moves the focused workspace to the specified output.\n\n       move workspace [to] output up|right|down|left\n           Moves the focused workspace to next output in the specified direc‐\n           tion.\n\n       move workspace to [output] up|right|down|left\n           Moves the focused workspace to next output in the specified direc‐\n           tion.\n\n       nop <comment>\n           A no operation command that can be used to override default behav‐\n           iour. The optional comment argument is ignored, but logged for de‐\n           bugging purposes.\n\n       reload\n           Reloads the sway config file and applies any changes. The config\n           file is located at path specified by the command line arguments\n           when started, otherwise according to the priority stated in\n           sway(1).\n\n       rename workspace [<old_name>] to <new_name>\n           Rename either <old_name> or the focused workspace to the <new_name>\n\n       resize shrink|grow width|height [<amount> [px|ppt]]\n           Resizes the currently focused container by amount, specified in\n           pixels or percentage points. If the units are omitted, floating\n           containers are resized in px and tiled containers by ppt. amount\n           will default to 10 if omitted.\n\n       resize set height <height> [px|ppt]\n           Sets the height of the container to height, specified in pixels or\n           percentage points. If the units are omitted, floating containers\n           are resized in px and tiled containers by ppt. If height is 0, the\n           container will not be resized.\n\n       resize set [width] <width> [px|ppt]\n           Sets the width of the container to width, specified in pixels or\n           percentage points. If the units are omitted, floating containers\n           are resized in px and tiled containers by ppt. If width is 0, the\n           container will not be resized.\n\n       resize set [width] <width> [px|ppt] [height] <height> [px|ppt]\n           Sets the width and height of the container to width and height,\n           specified in pixels or percentage points. If the units are omitted,\n           floating containers are resized in px and tiled containers by ppt.\n           If width or height is 0, the container will not be resized on that\n           axis.\n\n       scratchpad show\n           Shows a window from the scratchpad. Repeatedly using this command\n           will cycle through the windows in the scratchpad.\n\n       shortcuts_inhibitor enable|disable\n           Enables or disables the ability of clients to inhibit keyboard\n           shortcuts for a view. This is primarily useful for virtualization\n           and remote desktop software. It affects either the currently fo‐\n           cused view or a set of views selected by criteria. Subcommand dis‐\n           able additionally deactivates any active inhibitors for the given\n           view(s). Criteria are particularly useful with the for_window com‐\n           mand to configure a class of views differently from the per-seat\n           defaults established by the seat subcommand of the same name. See\n           sway-input(5) for more ways to affect inhibitors.\n\n       split vertical|v|horizontal|h|none|n|toggle|t\n           Splits the current container, vertically or horizontally. When none\n           is specified, the effect of a previous split is undone if the cur‐\n           rent container is the only child of a split parent. When toggle is\n           specified, the current container is split opposite to the parent\n           container's layout.\n\n       splith\n           Equivalent to split horizontal\n\n       splitv\n           Equivalent to split vertical\n\n       splitt\n           Equivalent to split toggle\n\n       sticky enable|disable|toggle\n           \"Sticks\" a floating window to the current output so that it shows\n           up on all workspaces.\n\n       swap container with id|con_id|mark <arg>\n           Swaps the position, geometry, and fullscreen status of two contain‐\n           ers. The first container can be selected either by criteria or fo‐\n           cus. The second container can be selected by id, con_id, or mark.\n           id can only be used with xwayland views. If the first container has\n           focus, it will retain focus unless it is moved to a different\n           workspace or the second container becomes fullscreen on the same\n           workspace as the first container. In either of those cases, the\n           second container will gain focus.\n\n       title_format <format>\n           Sets the format of window titles. The following placeholders may be\n           used:\n\n               %title - The title supplied by the window\n                         %app_id - The wayland app ID (applicable to wayland\n               windows only)\n                         %class - The X11 classname (applicable to xwayland\n               windows only)\n                         %instance - The X11 instance (applicable to xwayland\n               windows only)\n                         %shell - The protocol the window is using (typically\n               xwayland or\n                   xdg_shell)\n\n           This command is typically used with for_window criteria. For exam‐\n           ple:\n\n               for_window [title=\".\"] title_format \"<b>%title</b> (%app_id)\"\n\n           Note that markup requires pango to be enabled via the font command.\n\n           The default format is \"%title\".\n\n       The following commands may be used either in the configuration file or\n       at runtime.\n\n       assign <criteria> [→] [workspace] [number] <workspace>\n           Assigns views matching criteria (see CRITERIA for details) to\n           workspace. The → (U+2192) is optional and cosmetic. This command is\n           equivalent to:\n\n               for_window <criteria> move container to workspace <workspace>\n\n       assign <criteria> [→] output left|right|up|down|<name>\n           Assigns views matching criteria (see CRITERIA for details) to the\n           specified output. The → (U+2192) is optional and cosmetic. This\n           command is equivalent to:\n\n               for_window <criteria> move container to output <output>\n\n       bindsym [--whole-window] [--border] [--exclude-titlebar] [--release]\n       [--locked] [--to-code] [--input-device=<device>] [--no-warn] [--no-re‐\n       peat] [Group<1-4>+]<key combo> <command>\n           Binds key combo to execute the sway command command when pressed.\n           You may use XKB key names here (wev(1) is a good tool for discover‐\n           ing these). With the flag --release, the command is executed when\n           the key combo is released. If input-device is given, the binding\n           will only be executed for that input device and will be executed\n           instead of any binding that is generic to all devices. If a group\n           number is given, then the binding will only be available for that\n           group. By default, if you overwrite a binding, swaynag will give\n           you a warning. To silence this, use the --no-warn flag.\n\n           Unless the flag --locked is set, the command will not be run when a\n           screen locking program is active. If there is a matching binding\n           with and without --locked, the one with will be preferred when\n           locked and the one without will be preferred when unlocked. If\n           there are matching bindings and one has both --input-device and\n           --locked and the other has neither, the former will be preferred\n           even when unlocked.\n\n           Unless the flag --inhibited is set, the command will not be run\n           when a keyboard shortcuts inhibitor is active for the currently fo‐\n           cused window. Such inhibitors are usually requested by remote desk‐\n           top and virtualization software to enable the user to send keyboard\n           shortcuts to the remote or virtual session. The --inhibited flag\n           allows one to define bindings which will be exempt from pass-\n           through to such software. The same preference logic as for --locked\n           applies.\n\n           Unless the flag --no-repeat is set, the command will be run repeat‐\n           edly when the key is held, according to the repeat settings speci‐\n           fied in the input configuration.\n\n           Bindings to keysyms are layout-dependent. This can be changed with\n           the --to-code flag. In this case, the keysyms will be translated\n           into the corresponding keycodes in the first configured layout.\n\n           Mouse bindings operate on the container under the cursor instead of\n           the container that has focus. Mouse buttons can either be specified\n           in the form button[1-9] or by using the name of the event code (ex\n           BTN_LEFT or BTN_RIGHT). For the former option, the buttons will be\n           mapped to their values in X11 (1=left, 2=middle, 3=right, 4=scroll\n           up, 5=scroll down, 6=scroll left, 7=scroll right, 8=back, 9=for‐\n           ward). For the latter option, you can find the event names using\n           libinput debug-events.\n\n           The priority for matching bindings is as follows: input device,\n           group, and locked state.\n\n           --whole-window, --border, and --exclude-titlebar are mouse-only op‐\n           tions which affect the region in which the mouse bindings can be\n           triggered.  By default, mouse bindings are only triggered when over\n           the title bar. With the --border option, the border of the window\n           will be included in this region. With the --whole-window option,\n           the cursor can be anywhere over a window including the title, bor‐\n           der, and content. --exclude-titlebar can be used in conjunction\n           with any other option to specify that the titlebar should be ex‐\n           cluded from the region of consideration.\n\n           If --whole-window is given, the command can be triggered when the\n           cursor is over an empty workspace. Using a mouse binding over a\n           layer surface's exclusive region is not currently possible.\n\n           Example:\n                     # Execute firefox when alt, shift, and f are pressed together\n                     bindsym Mod1+Shift+f exec firefox\n\n           bindcode [--whole-window] [--border] [--exclude-titlebar] [--re‐\n           lease] [--locked] [--input-device=<device>] [--no-warn]\n           [Group<1-4>+]<code> <command> is also available for binding with\n           key/button codes instead of key/button names.\n\n       bindswitch [--locked] [--no-warn] [--reload] <switch>:<state> <command>\n           Binds <switch> to execute the sway command command on state\n           changes. Supported switches are lid (laptop lid) and tablet (tablet\n           mode) switches. Valid values for state are on, off and toggle.\n           These switches are on when the device lid is shut and when tablet\n           mode is active respectively. toggle is also supported to run a com‐\n           mand both when the switch is toggled on or off.\n\n           Unless the flag --locked is set, the command will not be run when a\n           screen locking program is active. If there is a matching binding\n           with and without --locked, the one with will be preferred when\n           locked and the one without will be preferred when unlocked.\n\n           If the --reload flag is given, the binding will also be executed\n           when the config is reloaded. toggle bindings will not be executed\n           on reload. The --locked flag will operate as normal so if the con‐\n           fig is reloaded while locked and --locked is not given, the binding\n           will not be executed.\n\n           By default, if you overwrite a binding, swaynag will give you a\n           warning. To silence this, use the --no-warn flag.\n\n           Example:\n                     # Show the virtual keyboard when tablet mode is entered.\n                     bindswitch tablet:on busctl call --user sm.puri.OSK0 /sm/puri/OSK0 sm.puri.OSK0 SetVisible b true\n\n                     # Log a message when the laptop lid is opened or closed.\n                     bindswitch lid:toggle exec echo \"Lid moved\"\n\n       bindgesture [--exact] [--input-device=<device>] [--no-warn] <ges‐\n       ture>[:<fingers>][:directions] <command>\n           Binds gesture to execute the sway command command when detected.\n           Currently supports the hold, pinch or swipe gesture. Optionally can\n           be limited to bind to a certain number of fingers or, for a pinch\n           or swipe gesture, to certain directions.\n\n       ┌──────┬─────────┬─────────────────────────────────────────────────────┐\n       │type  │ fingers │ direction                                           │\n       ├──────┼─────────┼─────────────────────────────────────────────────────┤\n       │hold  │  1 - 5  │ none                                                │\n       ├──────┼─────────┼─────────────────────────────────────────────────────┤\n       │swipe │  3 - 5  │ up, down, left, right                               │\n       ├──────┼─────────┼─────────────────────────────────────────────────────┤\n       │pinch │  2 - 5  │ all above + inward, outward, clockwise, counter‐    │\n       │      │         │ clockwise                                           │\n       └──────┴─────────┴─────────────────────────────────────────────────────┘\n           The fingers can be limited to any sensible number or left empty to\n           accept any finger counts. Valid directions are up, down, left and\n           right, as well as inward, outward, clockwise, counterclockwise for\n           the pinch gesture. Multiple directions can be combined by a plus.\n\n           If a input-device is given, the binding will only be executed for\n           that input device and will be executed instead of any binding that\n           is generic to all devices. By default, if you overwrite a binding,\n           swaynag will give you a warning. To silence this, use the --no-warn\n           flag.\n\n           The --exact flag can be used to ensure a binding only matches when\n           exactly all specified directions are matched and nothing more. If\n           there is matching binding with --exact, it will be preferred.\n\n           The priority for matching bindings is as follows: input device,\n           then exact matches followed by matches with the highest number of\n           matching directions.\n\n           Gestures executed while the pointer is above a bar are not handled\n           by sway. See the respective documentation, e.g. bindgesture in\n           sway-bar(5).\n\n           Example:\n                     # Allow switching between workspaces with left and right swipes\n                     bindgesture swipe:right workspace prev\n                     bindgesture swipe:left workspace next\n\n                     # Allow container movements by pinching them\n                     bindgesture pinch:inward+up move up\n                     bindgesture pinch:inward+down move down\n                     bindgesture pinch:inward+left move left\n                     bindgesture pinch:inward+right move right\n\n       client.background <color>\n           This command is ignored and is only present for i3 compatibility.\n\n       client.<class> <border> <background> <text> [<indicator> [<child_bor‐\n       der>]]\n           Configures the color of window borders and title bars. The first\n           three colors are required. When omitted indicator will use a sane\n           default and child_border will use the color set for background.\n           Colors may be specified in hex, either as #RRGGBB or #RRGGBBAA.\n\n           The available classes are:\n\n           client.focused\n               The window that has focus.\n\n           client.focused_inactive\n               The most recently focused view within a container which is not\n               focused.\n\n           client.focused_tab_title\n               A view that has focused descendant container. Tab or stack con‐\n               tainer title that is the parent of the focused container but is\n               not directly focused. Defaults to focused_inactive if not spec‐\n               ified and does not use the indicator and child_border colors.\n\n           client.placeholder\n               Ignored (present for i3 compatibility).\n\n           client.unfocused\n               A view that does not have focus.\n\n           client.urgent\n               A view with an urgency hint. Note: Native Wayland windows do\n               not support urgency. Urgency only works for Xwayland windows.\n\n           The meaning of each color is:\n\n           border\n               The border around the title bar.\n\n           background\n               The background of the title bar.\n\n           text\n               The text color of the title bar.\n\n           indicator\n               The color used to indicate where a new view will open. In a\n               tiled container, this would paint the right border of the cur‐\n               rent view if a new view would be opened to the right.\n\n           child_border\n               The border around the view itself.\n\n       The default colors are:\n\n       ┌──────────────┬─────────┬────────────┬─────────┬───────────┬────────────┐\n       │    class     │ border  │ background │ text    │ indicator │ child_bor‐ │\n       │              │         │            │         │           │ der        │\n       ├──────────────┼─────────┼────────────┼─────────┼───────────┼────────────┤\n       │background    │ n/a     │ #ffffff    │ n/a     │ n/a       │ n/a        │\n       ├──────────────┼─────────┼────────────┼─────────┼───────────┼────────────┤\n       │focused       │ #4c7899 │ #285577    │ #ffffff │ #2e9ef4   │ #285577    │\n       ├──────────────┼─────────┼────────────┼─────────┼───────────┼────────────┤\n       │focused_in‐   │ #333333 │ #5f676a    │ #ffffff │ #484e50   │ #5f676a    │\n       │active        │         │            │         │           │            │\n       ├──────────────┼─────────┼────────────┼─────────┼───────────┼────────────┤\n       │fo‐           │ #333333 │ #5f676a    │ #ffffff │ n/a       │ n/a        │\n       │cused_tab_ti‐ │         │            │         │           │            │\n       │tle           │         │            │         │           │            │\n       ├──────────────┼─────────┼────────────┼─────────┼───────────┼────────────┤\n       │unfocused     │ #333333 │ #222222    │ #888888 │ #292d2e   │ #222222    │\n       ├──────────────┼─────────┼────────────┼─────────┼───────────┼────────────┤\n       │urgent        │ #2f343a │ #900000    │ #ffffff │ #900000   │ #900000    │\n       ├──────────────┼─────────┼────────────┼─────────┼───────────┼────────────┤\n       │placeholder   │ #000000 │ #0c0c0c    │ #ffffff │ #000000   │ #0c0c0c    │\n       └──────────────┴─────────┴────────────┴─────────┴───────────┴────────────┘\n\n       default_border normal|none|pixel [<n>]\n           Set default border style for new tiled windows.\n\n       default_floating_border normal|none|pixel [<n>]\n           Set default border style for new floating windows. This only ap‐\n           plies to windows that are spawned in floating mode, not windows\n           that become floating afterwards.\n\n       exec <shell command>\n           Executes shell command with sh.\n\n       exec_always <shell command>\n           Like exec, but the shell command will be executed again after\n           reload.\n\n       floating_maximum_size <width> x <height>\n           Specifies the maximum size of floating windows. -1 x -1 removes the\n           upper limit. The default is 0 x 0, which will use the width and\n           height of the entire output layout as the maximums\n\n       floating_minimum_size <width> x <height>\n           Specifies the minimum size of floating windows. The default is 75 x\n           50.\n\n       floating_modifier <modifier> [normal|inverse]\n           When the modifier key is held down, you may hold left click to move\n           windows, and right click to resize them. Setting modifier to none\n           disables this feature. If inverse is specified, left click is used\n           for resizing and right click for moving.\n\n       focus_follows_mouse yes|no|always\n           If set to yes, moving your mouse over a window will focus that win‐\n           dow. If set to always, the window under the cursor will always be\n           focused, even after switching between workspaces.\n\n       focus_on_window_activation smart|urgent|focus|none\n           This option determines what to do when a client requests window ac‐\n           tivation. If set to urgent, the urgent state will be set for that\n           window. If set to focus, the window will become focused. If set to\n           smart, the window will become focused only if it is already visi‐\n           ble, otherwise the urgent state will be set. Default is urgent.\n\n       focus_wrapping yes|no|force|workspace\n           This option determines what to do when attempting to focus over the\n           edge of a container. If set to no, the focused container will re‐\n           tain focus, if there are no other containers in the direction. If\n           set to yes, focus will be wrapped to the opposite edge of the con‐\n           tainer, if there are no other containers in the direction. If set\n           to force, focus will be wrapped to the opposite edge of the con‐\n           tainer, even if there are other containers in the direction. If set\n           to workspace, focus will wrap like in the yes case and additionally\n           wrap when moving outside of workspaces boundaries. Default is yes.\n\n       font [pango:]<font>\n           Sets font to use for the title bars. To enable support for pango\n           markup, preface the font name with pango:. For example, monospace\n           10 is the default font. To enable support for pango markup,\n           pango:monospace 10 should be used instead. Regardless of whether\n           pango markup is enabled, font should be specified as a pango font\n           description. For more information on pango font descriptions, see\n           https://docs.gtk.org/Pango/type_func.FontDescrip‐\n           tion.from_string.html#description\n\n       force_display_urgency_hint <timeout> [ms]\n           If an application on another workspace sets an urgency hint,\n           switching to this workspace may lead to immediate focus of the ap‐\n           plication, which also means the window decoration color would be\n           immediately reset to client.focused. This may make it unnecessarily\n           hard to tell which window originally raised the event. This option\n           allows one to set a timeout in ms to delay the urgency hint reset.\n\n       titlebar_border_thickness <thickness>\n           Thickness of the titlebar border in pixels\n\n       titlebar_padding <horizontal> [<vertical>]\n           Padding of the text in the titlebar. horizontal value affects hori‐\n           zontal padding of the text while vertical value affects vertical\n           padding (space above and below text). Padding includes titlebar\n           borders so their value should be greater than titlebar_bor‐\n           der_thickness. If vertical value is not specified it is set to the\n           horizontal value.\n\n       for_window <criteria> <command>\n           Whenever a window that matches criteria appears, run list of com‐\n           mands. See CRITERIA for more details.\n\n       gaps inner|outer|horizontal|vertical|top|right|bottom|left <amount>\n           Sets default amount pixels of inner or outer gap, where the inner\n           affects spacing around each view and outer affects the spacing\n           around each workspace. Outer gaps are in addition to inner gaps. To\n           reduce or remove outer gaps, outer gaps can be set to a negative\n           value. outer gaps can also be specified per side with top, right,\n           bottom, and left or per direction with horizontal and vertical.\n\n           This affects new workspaces only, and is used when the workspace\n           doesn't have its own gaps settings (see: workspace <ws> gaps ...).\n\n       hide_edge_borders [--i3] none|vertical|horizon‐\n       tal|both|smart|smart_no_gaps\n           Hides window borders adjacent to the screen edges. Default is none.\n           The --i3 option enables i3-compatible behavior to hide the title\n           bar on tabbed and stacked containers with one child. The\n           smart|smart_no_gaps options are equivalent to setting smart_borders\n           smart|no_gaps and hide_edge_borders none.\n\n       input <input_device> <input-subcommands...>\n           For details on input subcommands, see sway-input(5).\n\n           * may be used in lieu of a specific device name to configure all\n           input devices. A list of input device names may be obtained via\n           swaymsg -t get_inputs.\n\n       seat <seat> <seat-subcommands...>\n           For details on seat subcommands, see sway-input(5).\n\n       kill\n           Kills (closes) the currently focused container and all of its chil‐\n           dren.\n\n       smart_borders on|no_gaps|off\n           If smart_borders are on, borders will only be enabled if the\n           workspace has more than one visible child. If smart_borders is set\n           to no_gaps, borders will only be enabled if the workspace has more\n           than one visible child and gaps equal to zero.\n\n       smart_gaps on|off|toggle|inverse_outer\n           If smart_gaps are on gaps will only be enabled if a workspace has\n           more than one child. If smart_gaps are inverse_outer outer gaps\n           will only be enabled if a workspace has exactly one child.\n\n       mark --add|--replace [--toggle] <identifier>\n           Marks are arbitrary labels that can be used to identify certain\n           windows and then jump to them at a later time. Each identifier can\n           only be set on a single window at a time since they act as a unique\n           identifier. By default, mark sets identifier as the only mark on a\n           window. --add will instead add identifier to the list of current\n           marks for that window. If --toggle is specified mark will remove\n           identifier if it is already marked.\n\n       mode <mode>\n           Switches to the specified mode. The default mode is default.\n\n       mode [--pango_markup] <mode> <mode-subcommands...>\n           The only valid mode-subcommands... are bindsym, bindcode,\n           bindswitch, and set. If --pango_markup is given, then mode will be\n           interpreted as pango markup.\n\n       mouse_warping output|container|none\n           If output is specified, the mouse will be moved to new outputs as\n           you move focus between them. If container is specified, the mouse\n           will be moved to the middle of the container on switch. Default is\n           output.\n\n       no_focus <criteria>\n           Prevents windows matching <criteria> from being focused automati‐\n           cally when they're created. This has no effect on the first window\n           in a workspace.\n\n       output <output_name> <output-subcommands...>\n           For details on output subcommands, see sway-output(5).\n\n           * may be used in lieu of a specific output name to configure all\n           outputs. A list of output names may be obtained via swaymsg -t\n           get_outputs.\n\n       popup_during_fullscreen smart|ignore|leave_fullscreen\n           Determines what to do when a fullscreen view opens a dialog. If\n           smart (the default), the dialog will be displayed. If ignore, the\n           dialog will not be rendered. If leave_fullscreen, the view will\n           exit fullscreen mode and the dialog will be rendered.\n\n       set $<name> <value>\n           Sets variable $name to value. You can use the new variable in the\n           arguments of future commands. When the variable is used, it can be\n           escaped with an additional $ (ie $$name) to have the replacement\n           happen at run time instead of when reading the config. However, it\n           does not always make sense for the variable to be replaced at run\n           time since some arguments do need to be known at config time.\n\n       show_marks yes|no\n           If show_marks is yes, marks will be displayed in the window bor‐\n           ders. Any mark that starts with an underscore will not be drawn\n           even if show_marks is yes. The default is yes.\n\n       opacity [set|plus|minus] <value>\n           Adjusts the opacity of the window between 0 (completely transpar‐\n           ent) and 1 (completely opaque). If the operation is omitted, set\n           will be used.\n\n       tiling_drag  enable|disable|toggle\n           Sets whether or not tiling containers can be dragged with the\n           mouse. If enabled (default), the floating_mod can be used to drag\n           tiling, as well as floating, containers. Using the left mouse but‐\n           ton on title bars without the floating_mod will also allow the con‐\n           tainer to be dragged. toggle should not be used in the config file.\n\n       tiling_drag_threshold <threshold>\n           Sets the threshold that must be exceeded for a container to be\n           dragged by its titlebar. This has no effect if floating_mod is used\n           or if tiling_drag is set to disable.  Once the threshold has been\n           exceeded once, the drag starts and the cursor can come back inside\n           the threshold without stopping the drag.  threshold is multiplied\n           by the scale of the output that the cursor on.  The default is 9.\n\n       title_align left|center|right\n           Sets the title alignment. If right is selected and show_marks is\n           set to yes, the marks will be shown on the left side instead of the\n           right side.\n\n       unbindswitch <switch>:<state>\n           Removes a binding for when <switch> changes to <state>.\n\n       unbindgesture [--exact] [--input-device=<device>] <gesture>[:<fin‐\n       gers>][:directions]\n           Removes a binding for the specified gesture, fingers and directions\n           combination.\n\n       unbindsym [--whole-window] [--border] [--exclude-titlebar] [--release]\n       [--locked] [--to-code] [--input-device=<device>] <key combo>\n           Removes the binding for key combo that was previously bound with\n           the given flags.  If input-device is given, only the binding for\n           that input device will be unbound.\n\n           unbindcode [--whole-window] [--border] [--exclude-titlebar] [--re‐\n           lease] [--locked] [--input-device=<device>] <code> is also avail‐\n           able for unbinding with key/button codes instead of key/button\n           names.\n\n       unmark [<identifier>]\n           unmark will remove identifier from the list of current marks on a\n           window. If identifier is omitted, all marks are removed.\n\n       urgent enable|disable|allow|deny\n           Using enable or disable manually sets or unsets the window's urgent\n           state. Using allow or deny controls the window's ability to set it‐\n           self as urgent. By default, windows are allowed to set their own\n           urgency.\n\n       workspace [--no-auto-back-and-forth] [number] <[num:]name>\n           Switches to the specified workspace. The num: portion of the name\n           is optional and will be used for ordering. If num: is not given and\n           name is a number, then it will be also be used for ordering.\n\n           If the no-auto-back-and-forth option is given, then this command\n           will not perform a back-and-forth operation when the workspace is\n           already focused and workspace_auto_back_and_forth is enabled.\n\n           If the number keyword is specified and a workspace with the number\n           already exists, then the workspace with the number will be used. If\n           a workspace with the number does not exist, a new workspace will be\n           created with the name name.\n\n       workspace prev|next\n           Switches to the next workspace on the current output or on the next\n           output if currently on the last workspace.\n\n       workspace prev_on_output|next_on_output\n           Switches to the next workspace on the current output.\n\n       workspace back_and_forth\n           Switches to the previously focused workspace.\n\n       workspace <name> gaps inner|outer|horizontal|vertical|top|right|bot‐\n       tom|left <amount>\n           Specifies that workspace name should have the given gaps settings\n           when it is created.\n\n           This command does not affect existing workspaces. To alter the gaps\n           of an existing workspace, use the gaps command.\n\n       workspace <name> output <outputs...>\n           Specifies that workspace name should be shown on the specified out‐\n           puts. Multiple outputs can be listed and the first available will\n           be used. If the workspace gets placed on an output further down the\n           list and an output that is higher on the list becomes available,\n           the workspace will be moved to the higher priority output.\n\n           This command does not affect existing workspaces. To move an exist‐\n           ing workspace, use the move command in combination with the\n           workspace criteria (non-empty workspaces only) or workspace command\n           (to switch to the workspace before moving).\n\n       workspace_auto_back_and_forth yes|no\n           When yes, repeating a workspace switch command will switch back to\n           the prior workspace. For example, if you are currently on workspace\n           1, switch to workspace 2, then invoke the workspace 2 command\n           again, you will be returned to workspace 1. Default is no.\n\nCRITERIA\n       A criteria is a string in the form of, for example:\n\n           [class=\"[Rr]egex.*\" title=\"some title\"]\n\n       The string contains one or more (space separated) attribute/value\n       pairs. They are used by some commands to choose which views to execute\n       actions on. All attributes must match for the criteria to match. Crite‐\n       ria is retained across commands separated by a ,, but will be reset\n       (and allow for new criteria, if desired) for commands separated by a ;.\n\n       Criteria may be used with either the for_window or assign commands to\n       specify operations to perform on new views. A criteria may also be used\n       to perform specific commands (ones that normally act upon one window)\n       on all views that match that criteria. For example:\n\n       Focus on a window with the mark \"IRC\":\n\n           [con_mark=\"IRC\"] focus\n\n       Kill all windows with the title \"Emacs\":\n\n           [class=\"Emacs\"] kill\n\n       You may like to use swaymsg -t get_tree for finding the values of these\n       properties in practice for your applications.\n\n       The following attributes may be matched with:\n\n       app_id\n           Compare value against the app id. Can be a regular expression. If\n           value is __focused__, then the app id must be the same as that of\n           the currently focused window. app_id are specific to Wayland appli‐\n           cations.\n\n       class\n           Compare value against the window class. Can be a regular expres‐\n           sion. If value is __focused__, then the window class must be the\n           same as that of the currently focused window. class are specific to\n           X11 applications and require XWayland.\n\n       con_id\n           Compare against the internal container ID, which you can find via\n           IPC. If value is __focused__, then the id must be the same as that\n           of the currently focused window.\n\n       con_mark\n           Compare against the window marks. Can be a regular expression.\n\n       floating\n           Matches floating windows.\n\n       id\n           Compare value against the X11 window ID. Must be numeric. id is\n           specific to X11 applications and requires XWayland.\n\n       instance\n           Compare value against the window instance. Can be a regular expres‐\n           sion. If value is __focused__, then the window instance must be the\n           same as that of the currently focused window. instance is specific\n           to X11 applications and requires XWayland.\n\n       pid\n           Compare value against the window's process ID. Must be numeric.\n\n       shell\n           Compare value against the window shell, such as \"xdg_shell\" or\n           \"xwayland\". Can be a regular expression. If value is __focused__,\n           then the shell must be the same as that of the currently focused\n           window.\n\n       tiling\n           Matches tiling windows.\n\n       title\n           Compare against the window title. Can be a regular expression. If\n           value is __focused__, then the window title must be the same as\n           that of the currently focused window.\n\n       urgent\n           Compares the urgent state of the window. Can be first, last, lat‐\n           est, newest, oldest or recent.\n\n       window_role\n           Compare against the window role (WM_WINDOW_ROLE). Can be a regular\n           expression. If value is __focused__, then the window role must be\n           the same as that of the currently focused window. window_role is\n           specific to X11 applications and requires XWayland.\n\n       window_type\n           Compare against the window type (_NET_WM_WINDOW_TYPE). Possible\n           values are normal, dialog, utility, toolbar, splash, menu, drop‐\n           down_menu, popup_menu, tooltip and notification. window_type is\n           specific to X11 applications and requires XWayland.\n\n       workspace\n           Compare against the workspace name for this view. Can be a regular\n           expression. If the value is __focused__, then all the views on the\n           currently focused workspace matches.\n\nSEE ALSO\n       sway(1) sway-input(5) sway-output(5) sway-bar(5) sway-ipc(7)\n\n                                  2022-12-25                           sway(5)\n"
  },
  {
    "path": "tests/syntax-tests/source/Manpage/uwsm-0.26.3.man",
    "content": "UWSM(1)                                 General Commands Manual                                UWSM(1)\n\nNAME\n       UWSM - Universal Wayland Session Manager.\n\nSYNOPSIS\n       uwsm [-h|-v] {subcommand} [options ...]\n\nDESCRIPTION\n       Launches arbitrary wayland compositor via a set of systemd user units to provide graphical user\n       session  with  environment  management, XDG autostart support, clean shutdown. Provides helpers\n       for launching applications as scopes or services.\n\nSUBCOMMANDS\n       select     Select default compositor Entry.\n       start      Start compositor and graphical session.\n       finalize   Send compositor-set variables and unit startup notification to systemd user manager.\n       stop       Stop graphical session and compositor.\n       app        Application unit launcher (with Desktop Entry support).\n       check      Perform state checks (for scripting and info).\n       aux        Technical functions for use inside units.\n\n       See corresponding SUBCOMMANDS subsections below for further info.\n\n       Help for each subcommand is accessible by running \"uwsm {subcommand} -h\".\n\nCONFIGURATION\n   Files\n       In XDG config hierarchy:\n       uwsm/env\n       uwsm/env.d/*\n       uwsm/env-${compositor}\n       uwsm/env-${compositor}.d/*   Environment (shell) to  be  sourced  for  the  graphical  session.\n                                    Sourced from directories of increasing priority, in each directory\n                                    common  file is sourced first, then suffixed files in the order of\n                                    items listed in XDG_CURRENT_SESSION var (lowercased).\n       uwsm/default-id              Stores Desktop Entry ID of default compositor.\n\n       Fallback is also extended into the system part of XDG data hierarchy, this can be used for dis‐\n       tro level defaults.\n\n   Environment vars\n       UWSM_UNIT_RUNG                  (run|home)\n                                       Which rung of systemd/user/ hierarchy to manage generated  unit\n                                       and drop-in files in: $XDG_RUNTIME_DIR or $XDG_CONFIG_HOME.\n       UWSM_TWEAKS                     (boolean value)\n                                       Set  to  False  to  remove  and not generate tweak drop-ins for\n                                       other software.\n       UWSM_FINALIZE_VARNAMES          (whitespace-separated names of env vars)\n                                       Additional variables for \"uwsm finalize\".\n       UWSM_WAIT_VARNAMES              (whitespace-separated names of env vars)\n                                       Variables to wait for in activation environment before proceed‐\n                                       ing to graphical session (in addition to WAYLAND_DISPLAY).\n       UWSM_WAIT_VARNAMES_TIMEOUT      (int value)\n                                       Seconds to wait for variables to appear in activation  environ‐\n                                       ment. Essentially, startup timeout (default: 10).\n       UWSM_WAIT_VARNAMES_SETTLETIME   (float value)\n                                       Seconds  to  pause  after all expected vars found in activation\n                                       environment (default: 0.2).\n       UWSM_APP_UNIT_TYPE              (scope|service)\n                                       Default unit type for launching apps (default: scope).\n       UWSM_SILENT_START               (int or boolean value)\n                                       True or 1 to inhibit stdout messages from \"uwsm  start\".  2  to\n                                       also inhibit warnings.\n       DEBUG                           (int or boolean value)\n                                       True or positive number to dump debug info to stderr.\n\nOPERATION OVERVIEW\n   Login Sequence Integration\n       uwsm  can  be  launched  by using conditional exec in shell profile to replace login shell (see\n       Shell Profile Integration section).\n\n       Alternatively \"uwsm start ...\" command can be put into wayland session's Desktop  Entry  to  be\n       launched by a display manager (see Use Inside Desktop Entry section).\n\n   Compositor Selection\n       uwsm  can  run arbitrary compositor command line or a Desktop Entry by ID (specifying Action ID\n       is also supported).\n\n       Desktop Entry can also be selected via a whiptail menu (see select subcommand section).\n\n   Startup\n       See start subcommand section for command syntax.\n\n       UWSM uses a set of units bound to standard user session targets:\n\n       •   wayland-session-pre@.target (bound to graphical-session-pre.target)\n           •   wayland-wm-env@.service (environment preloader service)\n       •   wayland-session@.target (bound to graphical-session.target)\n           •   wayland-wm@.service (service for the selected compositor)\n       •   wayland-session-xdg-autostart@.target (bound to xdg-desktop-autostart.target)\n       •   wayland-session-envelope@.target (lives through entire lifecycle)\n       •   wayland-session-shutdown.target (conflicts with targets above for shutdown)\n       •   wayland-session-bindpid@.service (PID-tracking session killswitch)\n       •   wayland-session-waitenv.service (delays graphical session until vars appear)\n\n       Compositor ID (Desktop Entry ID or executable name) becomes the  specifier  for  all  templated\n       units.\n\n       At  the  stage of graphical-session-pre.target, the environment saved from \"uwsm start\" context\n       is loaded (or POSIX shell profile is sourced), uwsm environment files are sourced. The delta is\n       exported to the systemd and D-Bus activation environments by the environment preloader  service\n       and  is  marked  for  cleanup  at  shutdown  stage. Preloader shell context for convenience has\n       IN_UWSM_ENV_PRELOADER var set to true.\n\n       At the stage  of  graphical-session.target  (before  it)  the  main  compositor  unit  wayland-\n       wm@${ID}.service and wayland-session-waitenv.service are started.\n\n       Compositor should at least put WAYLAND_DISPLAY variable to systemd activation environment. This\n       will  trigger  uwsm's automatic finalization logic. Without WAYLAND_DISPLAY in activation envi‐\n       ronment startup will timeout in 10 seconds.\n\n       Manual finalization is possible by running \"uwsm finalize\" (see finalize  subcommand  section),\n       also  in  combination  with  tweaking UWSM_WAIT_VARNAMES and UWSM_WAIT_VARNAMES_SETTLETIME vars\n       (see Environment vars section).\n\n       Successful activation of compositor unit and existence of WAYLAND_DISPLAY in  activation  envi‐\n       ronment will allow graphical-session.target to be declared reached.\n\n       Finally, xdg-desktop-autostart.target is activated.\n\n   Inside session\n       It  is  highly recommended to configure the compositor or app launcher to launch apps as scopes\n       or services in special user session slices (app.slice, background.slice,  session.slice).  uwsm\n       provides custom nested slices for apps to live in and be terminated on session end:\n       •   app-graphical.slice\n       •   background-graphical.slice\n       •   session-graphical.slice\n\n       A  helper app subcommand is provided to handle all the systemd-run invocations for you (see app\n       subcommand section).\n\n       The compositor is launched in session.slice by default (as recommended by systemd.special(7)).\n\n   Shutdown\n       Can be initiated by either:\n       •   running uwsm stop\n       •   stopping wayland-wm@*.service or wayland-session-envelope@*.target\n       •   starting wayland-session-shutdown.target\n\n       Systemd stops all user units in reverse, as it usually does. During deactivation of  graphical-\n       session-pre.target,  the environment preloader service cleans activation environments by unset‐\n       ting all variables that were marked for removal during startup and finalization stages.\n\n       Do not use compositor's native exit mechanism or kill its process directly.\n\nSUBCOMMANDS\n   select\n       Selects default wayland session compositor Desktop Entry.\n\n           uwsm select\n\n       Invokes a whiptail menu to select default session among Desktop Entries in wayland-sessions XDG\n       data hierarchy. Writes to ${XDG_CONFIG_HOME}/uwsm/default-id. Nothing else is done.  Returns  1\n       if selection is cancelled. Can be used for scripting launch condition in shell profile.\n\n   check\n       Performs tests, returns 0 on success, 1 on failure.\n\n       is-active:\n\n           uwsm check is-active [-h] [-v] [compositor]\n\n           -v           show additional info\n           compositor   check for specific compositor\n\n       Checks  if  unit of specific compositor or graphical-session*.target in general is in active or\n       activating state.\n\n       may-start:\n\n           uwsm check may-start [-h] [-g [S]] [-v|-q] [N ...]\n\n           N ...   allowed VT numbers (default: 1)\n           -g S    wait S seconds for graphical.target in queue  (default:  60;  0  or  less  disables\n                   check).\n           -i      do not check for login shell\n           -r      do not check for local session (allow remote session)\n           -v      show all failed tests\n           -q      be quiet\n\n       Checks whether it is OK to launch a wayland session via the following conditions:\n       •   DBUS_SESSION_BUS_ADDRESS is set\n       •   Running from login shell\n       •   System is at graphical.target\n       •   User graphical-session*.target units are not yet active\n       •   Foreground VT is among allowed (default: 1)\n       •   Login session's VT is matching\n\n   start\n       Generates units for given compositor command line or Desktop Entry and starts them.\n\n           uwsm  start  [-h]  [-D  name[:name...]] [-a|-e] [-N Name] [-C Comment] [-U {run|home}] [-t]\n           [-o] [-n] -- compositor [args ...]\n\n           -F                  Hardcode mode, always write command line to unit drop-ins and use  full\n                               paths.\n           -D name[:name...]   Names to fill XDG_CURRENT_DESKTOP with (:-separated). Existing var con‐\n                               tent is a starting point if no active session is running.\n           -a                  Append desktop names set by -D to other sources (default).\n           -e                  Use desktop names set by -D exclusively, discard other sources.\n           -N Name             Fancy name for compositor (filled from Desktop Entry by default).\n           -C Comment          Fancy  description  for  compositor  (filled  from Desktop Entry by de‐\n                               fault).\n           -U {run|home}       Select  rung  for  generated  unit  files:  run:  $XDG_RUNTIME_DIR/sys‐\n                               temd/user  (default), or home: $XDG_CONFIG_HOME/systemd/user. Permanent\n                               destination will save some time by removing need for reloading systemd.\n                               Managed files from other rung will  be  removed.  Can  be  preset  with\n                               UWSM_UNIT_RUNG environment var.\n           -t                  Do  not  generate  (and  remove)  tweak  unit files. Can be preset with\n                               UWSM_TWEAKS=false environment var.\n           -T                  Generate tweak unit files for other software. This is default behavior.\n           -g S                Wait for S seconds for system graphical.target in  queue  and  warn  if\n                               timed out or not in queue (default: 60, negative to disable).\n           -G S                Wait  for  S  seconds for system graphical.target in queue and abort if\n                               timed out or not in queue (overrides -g, default: -1, (disabled)).\n           -o                  Only generate units, but do not start.\n           -n                  Dry run, do not write or start anything.\n\n       The first argument of the compositor command line acts as an ID and should be either one of:\n       •   Executable name\n       •   Desktop Entry ID (optionally with \":\"-delimited action ID)\n       •   Special value:\n           •   select - invoke menu to select compositor.\n           •   default - run previously selected compositor (or select if no selection was saved).\n\n       If given as path, hardcode mode will be used implicitly.\n\n       Always use \"--\" to disambiguate dashed arguments intended for compositor itself.\n\n       After units are (re)generated, wayland-session-bindpid@${PID}.service is started, to track  the\n       PID  of  invoking  uwsm, then uwsm process replaces itself with systemctl execution that starts\n       wayland-wm@${ID}.service and waits for it to finish.\n\n       In order to complete the startup sequence, the compositor has to put WAYLAND_DISPLAY  into  the\n       systemd  activation environment. This can be done explicitly by making compositor run \"uwsm fi‐\n       nalize\" command (see the next subsection).\n\n   finalize\n       For running by a compositor on startup.\n\n           uwsm finalize [-h] [VAR_NAME ...]\n\n       Exports WAYLAND_DISPLAY, DISPLAY and any defined vars mentioned by names  in  arguments  or  in\n       UWSM_FINALIZE_VARNAMES variable (whitespace-separated). Then sends startup notification for the\n       unit to systemd user manager.\n\n       This  is required if compositor itself does not put WAYLAND_DISPLAY to systemd activation envi‐\n       ronment, otherwise wayland-session@.service unit or a dedicated wayland-session-waitenv.service\n       unit will terminate due to startup timeout.\n\n       UWSM_FINALIZE_VARNAMES variable can be prefilled by plugins.\n\n       Direct assignment as VAR_NAME=value is also possible, but recommended only for  creating  flags\n       for UWSM_WAIT_VARNAMES mechanism.\n\n   stop\n       Stops compositor and optionally removes generated units.\n\n           uwsm stop [-h] [-r [compositor] [-U {run|home}] [-n]\n\n           -r [compositor]   Also remove units (all or only compositor-specific).\n           -U {run|home}     Select  rung for generated unit files: run: $XDG_RUNTIME_DIR/systemd/user\n                             (default), or home: $XDG_CONFIG_HOME/systemd/user. Permanent  destination\n                             will save some time by removing need for reloading systemd. Managed files\n                             from  other rung will be removed. Can be preset with UWSM_UNIT_RUNG envi‐\n                             ronment var.\n           -n                Dry run, do not stop or remove anything.\n\n   app\n       Application-to-unit launcher with Desktop Entry support.\n\n           uwsm app [-h] [-s {a,b,s,custom.slice}] [-t {scope,service}] [-a app_name]  [-u  unit_name]\n           [-d unit_description] [-S ] [-T] -- application [args ...]\n\n           -s {a,b,s,custom.slice}   Slice selector (default: a):\n                                        a - app-graphical.slice\n                                        b - background-graphical.slice\n                                        s - session-graphical.slice\n                                        any slice by full name\n           -t {scope,service}        Type  of  unit  to  launch  (default:  scope,  can  be  preset by\n                                     UWSM_APP_UNIT_TYPE env var).\n           -a app_name               Override app name (a substring in unit name).\n           -u unit_name              Override the whole autogenerated unit name.\n           -d unit_description       Unit Description.\n           -p Property=value         Set additional unit property (option is repeatable).\n           -S {out,err,both}         Silence stdout, stderr, or both.\n           -T                        Launch app in a terminal. Allows command  to  be  empty  to  just\n                                     launch a terminal.\n\n       Application  can  be  provided as a command with optional arguments, or a Desktop Entry ID, op‐\n       tionally suffixed with \":\"-delimited Action ID. If Desktop Entry is being  launched,  arguments\n       should be compatible with it.\n\n       Always use \"--\" to disambiguate dashed arguments intended for application itself.\n\n   aux\n       For use in systemd user services. Can only be called by systemd user manager.\n\n       prepare-env   Prepares  environment  (for  use in ExecStart in wayland-wm-env@.service bound to\n                     wayland-session-pre@.target).\n       cleanup-env   Cleans up environment (for use ExecStop in in  wayland-wm-env@.service  bound  to\n                     wayland-session-pre@.target).\n       exec          Executes a command with arguments or a desktop entry (for use in Exec in wayland-\n                     wm@.service bound to wayland-session@.target).\n       app-daemon    Daemon for faster app argument generation, used by uwsm-app client.\n\nAPP DAEMON\n       Provided as wayland-wm-app-daemon.service to be started on-demand.\n\n       Daemon  receives app arguments from ${XDG_RUNTIME_DIR}/uwsm-app-daemon-in pipe. Resulting argu‐\n       ments are formatted as shell code and written to ${XDG_RUNTIME_DIR}/uwsm-app-daemon-out pipe.\n\n       Arguments are expected to be \\0-delimited, leading \\0 are stripped. One command is received per\n       write+close.\n\n       The first argument determines the behavior:\n\n       •   app  the rest is processed the same as in \"uwsm app\"\n       •   ping just \"pong\" is returnedn\n       •   stop daemon is stoppedn\n\n       Single commands are prepended with exec, iterated commands are assembled with trailing &  each,\n       followed by wait.\n\n       The  purpose  of  all this is to skip all the expensive Python startup and import routines that\n       slow things down every time \"uwsm app\" is called. Instead the daemon does it once and then lis‐\n       tens for requests, while a simple shell script may dump arguments to one pipe and run the  code\n       received from another via eval, which is much faster.\n\n       The simplest script is:\n\n                #!/bin/sh\n                printf '0%s' app \"$@\" > \"${XDG_RUNTIME_DIR}/uwsm-app-daemon-in\"\n                IFS='' read -r cmd < \"${XDG_RUNTIME_DIR}/uwsm-app-daemon-out\"\n                eval \"$cmd\"\n\n       Provided  uwsm-app  client  script is a bit smarter: it can start the daemon, applies timeouts,\n       and supports newlines in returned args.\n\nSHELL PROFILE INTEGRATION\n       To launch uwsm automatically on login, add one of constructs below (or similar) to  shell  pro‐\n       file.\n\n       This asks to select a compositor (or refuse and continue with login shell) when logged in on VT\n       1:\n\n                if uwsm check may-start && uwsm select; then\n                     exec systemd-cat -t uwsm_start uwsm start default\n                fi\n\n       This just starts a specific compositor depending on foreground VT:\n\n                if uwsm check may-start 1; then\n                     exec systemd-cat -t uwsm_start uwsm start sway.desktop\n                elif uwsm check may-start 2; then\n                     exec systemd-cat -t uwsm_start uwsm start labwc.desktop\n                fi\n\n       Using  \"uwsm  check  may-start\"  as  a  condition  is essential, not only to prevent accidental\n       startup attempts where they are not expected, but also since startup may involve sourcing shell\n       profile, which might lead to nasty loops.\n\n       See check subcommand section for info on may-start checker.\n\n       exec allows uwsm to replace login shell in order to properly bind to user  session  and  handle\n       session termination.\n\n       \"systemd-cat  -t uwsm_start\" (optional) executes the command given to it (uwsm) with its stdout\n       and stderr connected to the systemd journal, tagged with identifier \"uwsm_start\". See  systemd-\n       cat(1) for more options.\n\nUSE INSIDE DESKTOP ENTRY\n       To  launch  uwsm from a display/login manager, \"uwsm start\" can be used inside Desktop Entries.\n       Example /usr/local/share/wayland-sessions/my-compositor.desktop:\n\n                [Desktop Entry]\n                Name=My compositor (with UWSM)\n                Comment=My cool compositor\n                Exec=uwsm start -N \"My compositor\" -D mycompositor -C \"My cool compositor\" mywm\n                DesktopNames=mycompositor\n                Type=Application\n\n       Things to keep in mind:\n\n       •   For consistency, command line arguments should mirror the keys of the entry\n       •   Command in Exec= should start with \"uwsm start\"\n       •   It should not point to itself (as a combination of Desktop Entry ID and Action ID)\n       •   It should not point to a Desktop Entry ID and Action ID that also uses ‘uwsm‘\n\n       Potentially such entries may be found and used by uwsm itself, i.e. in shell  profile  integra‐\n       tion  situation,  or  when  launched manually. Following the principles above ensures uwsm will\n       properly recognize itself and parse requested arguments inside the entry without any  side  ef‐\n       fects.\n\nSEE ALSO\n       uwsm-plugins(3), systemd-run(1), systemd-cat(1), systemd.special(7)\n\n                                              2026-02-14                                       UWSM(1)\n"
  },
  {
    "path": "tests/syntax-tests/source/Markdown/example.md",
    "content": "# H1\n## H2\n### H3\n#### H4\n##### H5\n###### H6\n\n**bold** *italic* ~~strike~~ [~~***link***~~](https://guides.github.com/features/mastering-markdown/)\n__bold__ _italic_\n\n* Unordered\n* List\n  * With Indents\n  \n1. Ordered\n2. List\n  3. With Indents\n  \n![Markdown Logo](https://upload.wikimedia.org/wikipedia/commons/4/48/Markdown-mark.svg)\n\n> quotes\n> and more\n\n`fn inline_code() -> String { \"inline code\".to_string() }`\n\n```rust\n    fn syntax_highlighted<T: AsRef<&str>>(thing: T) {\n        println!(\"The best code has syntax highlighting: {}\", thing);\n    }\n```\n\n- [x] Task\n- [] Unfinished Task\n- [] Another unfinished task\n\nFirst Header | Second Header\n------------ | -------------\nContent from cell 1 | Content from cell 2\nContent in the first column | Content in the second column\n"
  },
  {
    "path": "tests/syntax-tests/source/Markdown/typescript.md",
    "content": "# Typescript test\n\n```typescript\nenum Status {\n    Pending,\n    InProgress,\n    Completed,\n}\n\ninterface Task {\n    id: number;\n    title: string;\n    status: Status;\n    assignee?: string;\n}\n\nclass TaskManager<T extends Task> {\n    private tasks: T[] = [];\n\n    addTask(task: T): void {\n        this.tasks.push(task);\n    }\n\n    getTasksByStatus(status: Status): T[] {\n        return this.tasks.filter(task => task.status === status);\n    }\n\n    async fetchTasks(): Promise<T[]> {\n        // Simulate async fetch\n        return new Promise(resolve => setTimeout(() => resolve(this.tasks), 500));\n    }\n}\n\n// Type guard\nfunction isTask(obj: any): obj is Task {\n    return typeof obj.id === 'number' && typeof obj.title === 'string';\n}\n\n// Usage\nconst manager = new TaskManager<Task>();\nmanager.addTask({ id: 1, title: \"Write docs\", status: Status.Pending });\nmanager.addTask({ id: 2, title: \"Review PR\", status: Status.InProgress, assignee: \"Alice\" });\n\n(async () => {\n    const allTasks = await manager.fetchTasks();\n    allTasks.forEach(task => {\n        if (isTask(task)) {\n            console.log(`Task #${task.id}: ${task.title} [${Status[task.status]}]`);\n        }\n    });\n})();\n\n// Type assertion\nconst unknownValue: unknown = { id: 3, title: \"Test\", status: Status.Completed };\nconst assertedTask = unknownValue as Task;\nconsole.log(assertedTask.title);\n```\n"
  },
  {
    "path": "tests/syntax-tests/source/MediaWiki/test.mediawiki",
    "content": "= Heading 1 =\n== Heading 2 ==\n=== Heading 3 ===\n==== Heading 4 ====\n===== Heading 5 =====\n====== Heading 6 ======\n\n== Lists ==\n* Unordered\n* lists\n** with nested\n*** elements\n\n# Ordered\n# lists\n## with nested\n### elements\n\n; Description : lists with single definition\n\n; Description\n: lists\n: with more\n: definitions\n\n== Text formatting ==\n''italic text''\n\n'''bold text'''\n\n'''''bold italic text'''''\n\n== Links ==\n[https://www.wikipedia.org/ Wikipedia]\n\n== Images ==\n[[File:MediaWiki-2020-logo.svg|thumb|MediaWiki logo]]\n"
  },
  {
    "path": "tests/syntax-tests/source/MemInfo/test.meminfo",
    "content": "MemTotal:        1004892 kB\nMemFree:          109424 kB\nMemAvailable:     498032 kB\nBuffers:           66360 kB\nCached:           448344 kB\nSwapCached:            0 kB\nActive:           547076 kB\nInactive:         196864 kB\nActive(anon):     249956 kB\nInactive(anon):     7328 kB\nActive(file):     297120 kB\nInactive(file):   189536 kB\nUnevictable:       18516 kB\nMlocked:           18516 kB\nSwapTotal:             0 kB\nSwapFree:              0 kB\nDirty:               276 kB\nWriteback:             0 kB\nAnonPages:        247780 kB\nMapped:           168472 kB\nShmem:             19860 kB\nKReclaimable:      59128 kB\nSlab:             108616 kB\nSReclaimable:      59128 kB\nSUnreclaim:        49488 kB\nKernelStack:        2060 kB\nPageTables:         4232 kB\nNFS_Unstable:          0 kB\nBounce:                0 kB\nWritebackTmp:          0 kB\nCommitLimit:      502444 kB\nCommitted_AS:     678300 kB\nVmallocTotal:   34359738367 kB\nVmallocUsed:       10756 kB\nVmallocChunk:          0 kB\nPercpu:              784 kB\nHardwareCorrupted:     0 kB\nAnonHugePages:         0 kB\nShmemHugePages:        0 kB\nShmemPmdMapped:        0 kB\nFileHugePages:         0 kB\nFilePmdMapped:         0 kB\nCmaTotal:              0 kB\nCmaFree:               0 kB\nHugePages_Total:       0\nHugePages_Free:        0\nHugePages_Rsvd:        0\nHugePages_Surp:        0\nHugepagesize:       2048 kB\nHugetlb:               0 kB\nDirectMap4k:      118764 kB\nDirectMap2M:      929792 kB\nDirectMap1G:           0 kB\n"
  },
  {
    "path": "tests/syntax-tests/source/NAnt Build File/Default.build",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project name=\"Paraesthesia.Tools.NAntTasks\" default=\"all\" verbose=\"false\">\n\t<!-- === ENVIRONMENT SETUP === -->\n\t<property name=\"nant.settings.currentframework\" value=\"net-2.0\"/>\n\t<tstamp />\n\t<sysinfo />\n\t<property name=\"build.config\" value=\"Release\" />\n\t<property name=\"build.version\" value=\"2.0.0.0\" />\n\t<property name=\"build.name\" value=\"Paraesthesia.Tools.NAntTasks\" />\n\t<property name=\"build.dir\" value=\"${project::get-base-directory()}\\build\" />\n\t<property name=\"build.bin.dir\" value=\"${build.dir}\\bin\" />\n\t<property name=\"build.doc.dir\" value=\"${build.dir}\\doc\" />\n\t<property name=\"build.install.dir\" value=\"${build.dir}\\install\" />\n\t<property name=\"build.log.dir\" value=\"${build.dir}\\log\" />\n\t\n\t<!-- === STANDARD TARGETS === -->\n\t<target name=\"all\" depends=\"build-tasks test\" description=\"Builds all custom NAnt task projects.\"/>\n\n\t<target name=\"clean\" description=\"Remove all compiled output folders.\">\n\t\t<echo message=\"Removing build output folder...\"/>\n\t\t<delete dir=\"${build.dir}\" failonerror=\"false\" verbose=\"false\"/>\n\t\t<echo message=\"Removing compilation artifact folders...\"/>\n\t\t<delete failonerror=\"false\" verbose=\"false\">\n\t\t\t<fileset>\n\t\t\t\t<exclude name=\"lib\" />\n\t\t\t\t<exclude name=\"lib\\**\" />\n\t\t\t\t<include name=\"**\\obj\\**\" />\n\t\t\t\t<include name=\"**\\bin\\**\" />\n\t\t\t</fileset>\n\t\t</delete>\n\t\t<echo message=\"Clean complete.\"/>\n\t</target>\n\n\t<target name=\"test\" description=\"Run unit tests on this project.\" depends=\"build-tests\">\n\t\t<!-- TODO: Run the unit tests -->\n\t</target>\n\n\t<target name=\"doc\" description=\"Generates NDoc documentation.\" depends=\"build-tasks\">\n\t\t<ndoc>\n\t\t\t<assemblies basedir=\"${build.bin.dir}\">\n\t\t\t\t<include name=\"Paraesthesia.Tools.*.dll\"/>\n\t\t\t</assemblies>\n\t\t\t<summaries>\n\t\t\t\t<include name=\"NamespaceSummary.xml\"/>\n\t\t\t</summaries>\n\t\t\t<documenters>\n\t\t\t\t<documenter name=\"MSDN\">\n\t\t\t\t\t<property name=\"AutoDocumentConstructors\" value=\"True\" />\n\t\t\t\t\t<property name=\"AutoPropertyBackerSummaries\" value=\"True\" />\n\t\t\t\t\t<property name=\"CollectionNamespace\" value=\"${build.name} v${build.version}\" />\n\t\t\t\t\t<property name=\"CopyrightHref\" value=\"http://www.paraesthesia.com\" />\n\t\t\t\t\t<property name=\"CopyrightText\" value=\"Copyright 2007 Travis Illig\" />\n\t\t\t\t\t<property name=\"DefaultTOC\" value=\"Empty\" />\n\t\t\t\t\t<property name=\"DeleteCHM\" value=\"False\" />\n\t\t\t\t\t<property name=\"DocumentEmptyNamespaces\" value=\"False\" />\n\t\t\t\t\t<property name=\"DocumentInternals\" value=\"False\" />\n\t\t\t\t\t<property name=\"DocumentPrivates\" value=\"False\" />\n\t\t\t\t\t<property name=\"DocumentProtected\" value=\"True\" />\n\t\t\t\t\t<property name=\"GenerateCollectionFiles\" value=\"True\" />\n\t\t\t\t\t<property name=\"HtmlHelpCompilerFilename\" value=\"hhc.exe\" />\n\t\t\t\t\t<property name=\"HtmlHelpName\" value=\"${build.name} v${build.version}\" />\n\t\t\t\t\t<property name=\"IncludeAssemblyVersion\" value=\"True\" />\n\t\t\t\t\t<property name=\"IncludeFavorites\" value=\"True\" />\n\t\t\t\t\t<property name=\"IncludeHeirarchy\" value=\"True\" />\n\t\t\t\t\t<property name=\"LinkToSdkDocVersion\" value=\"SDK_v1_1\" />\n\t\t\t\t\t<property name=\"OmitObjectTags\" value=\"False\" />\n\t\t\t\t\t<property name=\"OutputDirectory\" value=\"${build.doc.dir}\" />\n\t\t\t\t\t<property name=\"PlugInNamespace\" value=\"ms.vscc\" />\n\t\t\t\t\t<property name=\"RootPageContainsNamespaces\" value=\"True\" />\n\t\t\t\t\t<property name=\"ShowMissingParams\" value=\"True\" />\n\t\t\t\t\t<property name=\"ShowMissingRemarks\" value=\"False\" />\n\t\t\t\t\t<property name=\"ShowMissingReturns\" value=\"True\" />\n\t\t\t\t\t<property name=\"ShowMissingSummaries\" value=\"True\" />\n\t\t\t\t\t<property name=\"ShowMissingValues\" value=\"True\" />\n\t\t\t\t\t<property name=\"ShowVisualBasic\" value=\"False\" />\n\t\t\t\t\t<property name=\"SortTOCByNamespace\" value=\"True\" />\n\t\t\t\t\t<property name=\"SplitTOCs\" value=\"False\" />\n\t\t\t\t\t<property name=\"Title\" value=\"${build.name} v${build.version}\" />\n\t\t\t\t</documenter>\n\t\t\t</documenters>\n\t\t</ndoc>\n\t\t<delete>\n\t\t\t<fileset basedir=\"${build.doc.dir}\">\n\t\t\t\t<include name=\"**/**\" />\n\t\t\t\t<exclude name=\"*.chm\" />\n\t\t\t</fileset>\n\t\t</delete>\n\t</target>\n\t\n\t<target name=\"install\" description=\"Creates distribution packages.\" depends=\"all\">\n\t\t<mkdir dir=\"${build.install.dir}\" />\n\t\t<zip verbose=\"true\"\n\t\t\tzipfile=\"${build.install.dir}/${build.name}_${build.version}.zip\"\n\t\t\tziplevel=\"9\">\n\t\t\t<fileset basedir=\"${build.dir}\">\n\t\t\t\t<include name=\"**\" />\n\t\t\t\t<exclude name=\"${build.install.dir}/**\" />\n\t\t\t\t<exclude name=\"${build.log.dir}/**\" />\n\t\t\t</fileset>\n\t\t\t<fileset basedir=\".\">\n\t\t\t\t<include name=\"readme.txt\" />\n\t\t\t</fileset>\n\t\t</zip>\n\t\t<zip verbose=\"true\"\n\t\t\tzipfile=\"${build.install.dir}/${build.name}_${build.version}_src.zip\"\n\t\t\tziplevel=\"9\">\n\t\t\t<fileset basedir=\".\">\n\t\t\t\t<include name=\"**\" />\n\t\t\t\t<exclude name=\"**/*.suo\" />\n\t\t\t\t<exclude name=\"**/*.user\" />\n\t\t\t\t<exclude name=\"**/*.cache\" />\n\t\t\t\t<exclude name=\"**/bin/**\" />\n\t\t\t\t<exclude name=\"**/build/**\" />\n\t\t\t\t<exclude name=\"**/lib/*.dll\" />\n\t\t\t\t<exclude name=\"**/obj/**\" />\n\t\t\t</fileset>\n\t\t</zip>\n\t</target>\n\t\n\t<target name=\"production\" description=\"Executes the production build.\" depends=\"clean set-version all test doc cleanup-build-output install\">\n\t\t<echo message=\"Completed production build.\" />\n\t</target>\n\n\n\t\n\t<!-- === PREREQUISITE TASKS === -->\n\t<target name=\"build-tasks\" description=\"Builds the custom NAnt task solution.\">\n\t\t<!-- solution configuration=\"${build.config}\" outputdir=\"${build.bin.dir}\" solutionfile=\"Paraesthesia.Tools.NAntTasks.sln\" / -->\n\t\t<exec program=\"MSBuild.exe\">\n\t\t\t<arg value=\"Paraesthesia.Tools.NAntTasks.sln\" />\n\t\t\t<arg line=\"/p:Configuration=${build.config}\" />\n\t\t\t<arg line=\"/p:OutDir=&quot;${build.bin.dir}\\\\&quot;\" />\n\t\t</exec>\n\t</target>\n\t\n\t<target name=\"build-tests\" description=\"Builds the unit tests for the project.\">\n\t\t<!-- TODO: When there are unit tests, build them. -->\n\t</target>\n\n\t<target name=\"cleanup-build-output\" description=\"Cleans up the build output for archival.\">\n\t\t<echo message=\"Cleaning up build output...\" />\n\t\t<delete>\n\t\t\t<fileset basedir=\"${build.bin.dir}\">\n\t\t\t\t<include name=\"*\" />\n\t\t\t\t<exclude name=\"Paraesthesia.Tools.*\" />\n\t\t\t</fileset>\n\t\t</delete>\n\t\t<echo message=\"Build output cleaned up.  Only project output files remain.\" />\n\t</target>\n\n\t<target name=\"set-version\" description=\"Updates the build assembly version.\">\n\t\t<asminfo output=\"AssemblyVersion.cs\" language=\"CSharp\">\n\t\t\t<imports>\n\t\t\t\t<import namespace=\"System.Reflection\" />\n\t\t\t</imports>\n\t\t\t<attributes>\n\t\t\t\t<attribute type=\"AssemblyVersionAttribute\" value=\"${build.version}\"/>\n\t\t\t\t<attribute type=\"AssemblyCompanyAttribute\" value=\"Paraesthesia\" />\n\t\t\t\t<attribute type=\"AssemblyCopyrightAttribute\" value=\"(c) 2007 - ${datetime::get-year(datetime::now())} Travis Illig\" />\n\t\t\t</attributes>\n\t\t\t<references>\n\t\t\t\t<include name=\"System.dll\" />\n\t\t\t</references>\n\t\t</asminfo>\n\t</target>\n\n</project>\n"
  },
  {
    "path": "tests/syntax-tests/source/NAnt Build File/LICENSE.md",
    "content": "The `Default.build` file has been added from https://github.com/tillig/nant-tasks under the following license:\n\n```text\nThe MIT License (MIT)\n\nCopyright (c) 2009 Travis Illig\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"
  },
  {
    "path": "tests/syntax-tests/source/NSE/test.nse",
    "content": "--- Finds factorial of a number.\n-- @param value Number to find factorial.\n-- @return Factorial of number.\nlocal function factorial(value)\n    if value <= 1 then\n        return 1\n    else\n        return value * factorial(value - 1)\n    end\nend\n\n--- Joins a table of strings into a new string.\n-- @param table Table of strings.\n-- @param separator Separator character.\n-- @return Joined string.\nlocal function join(table, separator)\n    local data = \"\"\n    \n    for index, value in ipairs(table) do\n        data = data .. value .. separator\n    end\n    \n    data = data:sub(1, data:len() - 1)\n    \n    return data\nend\n\nlocal a = factorial(5)\n\nprint(a)\n\nlocal b = join({ \"l\", \"u\", \"a\" }, \",\")\n\nprint(b)\n"
  },
  {
    "path": "tests/syntax-tests/source/NSIS/test.nsi",
    "content": "/*\n * Multi-line\n * Comment\n */\n\n# Single-line comment\n; Another-single line comment\n\n; Includes\n!include \"LogicLib.nsh\"\n\n; Defines\n!define ARCHITECTURE \"x64\"\n\n; Compile time command\n!echo \"Building ${ARCHITECTURE} script\"\n\n; Macro definition\n!macro SayHello name\n    !ifdef name\n        !echo \"Hello, ${name}\"\n    !else\n        !echo \"Hello, world\"\n    !endif\n!macroend\n\n; Macro usage\n!insertmacro SayHello \"John Doe\"\n\n; Settings\nName \"installer_name\"\nOutFile \"installer_name.exe\"\nRequestExecutionLevel user\nCRCCheck on\nUnicode true\n\n!ifdef ${ARCHITECTURE}\n  InstallDir \"$PROGRAMFILES64\\installer_name\"\n!else\n  InstallDir \"$PROGRAMFILES\\installer_name\"\n!endif\n\n; Pages\nPage components\nPage instfiles\n\n; Functions\nFunction PrintTestStrings\n  DetailPrint \"The install button reads $(^InstallBtn)\"\n  DetailPrint 'Here comes a$\\n$\\rline-break!'\n  DetailPrint `Escape the dollar-sign: $$`\nFunctionEnd\n\n; Sections\nSection \"section_name\" section_index\n    Call PrintTestStrings    \n\n    ; NSIS plugin call\n    nsExec::ExecToLog \"calc.exe\"\nSectionEnd\n\n"
  },
  {
    "path": "tests/syntax-tests/source/Ninja/LICENSE.md",
    "content": "The `test.ninja` file has been added from [https://ninja-build.org/manual.html] under the following license:\n\n\n                                 Apache License\n                           Version 2.0, January 2010\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"
  },
  {
    "path": "tests/syntax-tests/source/Ninja/test.ninja",
    "content": "cflags = -Wall\n\nrule cc\n  command = gcc $cflags -c $in -o $out\n\nbuild foo.o: cc foo.c\n"
  },
  {
    "path": "tests/syntax-tests/source/OCaml/syntax-test.ml",
    "content": "let s = \"hello world\"\n\nlet n : int = 87\n\nlet id x = x\n\nlet add x y = x + y\n\nlet add' x y =\n  let left = x in\n  let right = y in\n  x + y\n\nlet add'' : int -> int -> int = fun x -> fun y -> x + y\n\nlet unwrap_option default opt =\n  match opt with\n  | None -> default\n  | Some v -> v\n\nlet string_of_bool = function true -> \"true\" | false -> \"false\"\n\nlet is_a c =\n  if c = 'a' then true\n  else false\n\nlet _ = Printf.printf \"%s\" \"hello\"\nlet () = Printf.printf \"%s\\n\" \"world\"\n\nlet x = ref 0\nlet _ = x := 1\n\ntype my_bool = True | False\n\ntype shape = Circle of float | Square of float | Rectangle of (float * float)\n\ntype user = {\n  login : string;\n  password : string;\n}\n\ntype 'a my_ref = { mutable ref_value : 'a }\n\nlet (:=) r v = r.ref_value <- v\n\nlet (+) 2 2 = 5\n\nexception Bad_value of string\n\nlet bad_value_error () = raise (Bad_value \"your value is bad and you should feel bad\")\n\nlet () =\n  try bad_value_error ()\n  with Bad_value _ -> ()\n\nlet () =\n  try bad_value_error ()\n  with\n  | Bad_value _ -> ()\n  | Not_found -> ()\n\nmodule type FOO = sig\n  val foo : 'a -> 'a\nend\n\nmodule Foo : FOO = struct\n  let foo x = x\nend\n\nlet greeter = object\n  val greeting = \"Hello\"\n  method greet name = Printf.sprintf \"%s, %s!\" greeting name \nend\n\nlet greeting = greeter#greet \"world\"\n\nclass greeter_factory greeting_text = object (self)\n  val greeting = greeting_text\n  method greet name = Printf.sprintf \"%s, %s!\" greeting name\n  initializer Printf.printf \"Objects will greet the user with \\\"%s\\\"\\n\" greeting\nend\n\nlet g = new greeter_factory \"Hi\"\n"
  },
  {
    "path": "tests/syntax-tests/source/Objective-C/test.m",
    "content": "#import <myClass.h>\n@import Foundation\n// Single line comments\n\n/*\n * Multi line comment\n */\n\nint main (int argc, const char * argv[]) {\n   NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];\n\n   NSLog(@\"Storage size for int : %d \\n\", sizeof(int));\n   NSLog (@\"hello world\");\n   if (NO)\n   {\n       NSLog(@\"I am never run\");\n   } else if (0)\n   {\n       NSLog(@\"I am also never run\");\n   } else\n   {\n       NSLog(@\"I print\");\n   }\n\n   [pool drain];\n   return 0;\n}\n\n@implementation MyClass {\n    long distance;\n    NSNumber height;\n}\n"
  },
  {
    "path": "tests/syntax-tests/source/Objective-C++/test.mm",
    "content": "#import <Foundation/Foundation.h>\n\nclass Hello {\n    private:\n        id greeting_text;\n\n    public:\n        Hello() {\n            greeting_text = @\"Hello, world!\";\n        }\n\n        Hello(const char* initial_greeting_text) {\n            greeting_text = [[NSString alloc] initWithUTF8String:initial_greeting_text];\n        }\n\n        void say_hello() {\n            printf(\"%s\\n\", [greeting_text UTF8String]);\n        }\n};\n\n@interface Greeting : NSObject {\n    @private\n        Hello *hello;\n\n}\n- (id)init;\n- (void)dealloc;\n- (void)sayGreeting;\n- (void)sayGreeting:(Hello*)greeting;\n@end\n\n@implementation Greeting\n- (id)init {\n    self = [super init];\n    if (self) {\n        hello = new Hello();\n    }\n    return self;\n}\n\n- (void)dealloc {\n    delete hello;\n    [super dealloc];\n}\n\n- (void)sayGreeting {\n    hello->say_hello();\n}\n\n- (void)sayGreeting:(Hello*)greeting {\n    greeting->say_hello();\n}\n@end\n\nint main() {\n\n    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];\n    Greeting *greeting = [[Greeting alloc] init];\n    [greeting sayGreeting];\n\n    Hello *hello = new Hello(\"Bonjour, monde!\");\n    [greeting sayGreeting:hello];\n\n    delete hello;\n    [greeting release];\n    [pool release];\n    return 0;\n}\n"
  },
  {
    "path": "tests/syntax-tests/source/Odin/test.odin",
    "content": "package main\n\nimport \"core:fmt\"\nimport \"core:math\"\n\nVector :: struct {\n\tcomponents: []f64,\n}\n\neuclidean_distance :: proc(v1: Vector, v2: Vector) -> f64 {\n\tif len(v1.components) != len(v2.components) {\n\t\tpanic(\"Vectors must be same dimension\")\n\t}\n\tsum: f64 = 0.0;\n\tfor i, comp in v1.components {\n\t\tdiff := comp - v2.components[i];\n\t\tsum += diff * diff;\n\t}\n\treturn math.sqrt(sum);\n}\n\nmain :: proc() {\n\tv1: Vector = Vector{components = []f64{1.0, 2.0, 3.0}};\n\tv2: Vector = Vector{components = []f64{4.0, 6.0, 8.0}};\n\tdist: f64 = euclidean_distance(v1, v2);\n\tfmt.println(\"Distance:\", dist);\n}\n"
  },
  {
    "path": "tests/syntax-tests/source/PHP/test.php",
    "content": "<?php\n#if this was md, i'll be a title\n\ndefine(\"CONSTANT\", 3.14);\necho CONSTANT;\n\n//am i a comment\n/*\n\tyes, and so am I too\n*/\n\n\n//variable declaration\n$variable = \"welcome\";\n$number = 2;\n$float = 1.23;\n$nothing = null;\n$truth = true;\n$lies = false;\n$numberone = 2;\n$numbertwo = 3;\n\n//operators\n$third = $numberone + $numbertwo;\n$third = $numberone - $numbertwo;\n$third = $numberone * $numbertwo;\n$third = $numberone / $numbertwo;\n$third = $numberone % $numbertwo;\n$third = $numberone ** $numbertwo;\n$numberone += $numbertwo;\n\necho $variable;\n\necho \"You are $variable!\";\necho \"We are \" . $variable .\"s!\";\n\n\nif(($numberone >= 3 || $numberone <=2) && $numberone != 2.5){\n\techo \"what a number!!!\";\n}\nif($numberone >= 3 and $numberone <=2 and $numberone != 2.5){\n\techo \"something is wrong, this is supposed to be impossible\";\n}\n\n\nif ($number < 3){\n\t$languages = array(\"HTML\", \"CSS\", \"JS\");\n\tprint_r($languages);\n\techo $languages[2];\n\tprint $languages[$number];\n}\nelseif ($number == 3 ){\n\tfunction favMovie() {\n\t\techo \"JUMAJI\";\n\t\treturn true;\n\t}\n\tfavMovie();\n}\nelse {\n\tswitch ($number) {\n\t\tcase 4:\n\t\t\techo \"fours\";\n\t\t\tbreak;\n\t\tdefault:\n\t\t\techo \"I dont know you\";\n\t}\n}\n\nwhile($number <= 6 ){\n\techo $number;\n\t$number++;\n\t$number += 1;\n}\n\ndo {\n\t$number++;\n} while ($number < 10);\n\nfor ($houses = 0; $houses <= 5; $housees++){\n\tbreak;\n\techo \"getting more houses\";\n}\n\n\nclass Person {\n\tpublic $name;\n\tpublic $age;\n\t\n\tfunction __construct($name){\n\t\t$this->name = $name;\n\t}\n\t\n\tfunction __destruct(){\n\t\techo \"On my way out\";\n\t}\n\t\n\tfunction setName($name) {\n\t\t$this->name = $name;\n\t}\n}\n\n$doe = new Person(\"John Do\");\n$doe->setName('John Doe');\n\n\n\n\n\n$ending = 2 > 3 ? \"yep\" : \"nah\";\n\n?>\n"
  },
  {
    "path": "tests/syntax-tests/source/Pascal/test.pas",
    "content": "program Hello;\nuses crt;\n\ntype str = string[1];\n     arr = array[1..20, 1..60] of char;\n\nvar x, y:integer;\n    carr:arr;\n    c:char;\n\nProcedure start;\n{comment here}\nbegin write (' Press enter to begin. ');\nreadln;\nend;\n\nFunction Valid (var choice:char): boolean;\nbegin \n    valid:= false;\n    case choice of \n        '1':valid:= true;\n        '2': valid:= true;\n        '3': valid:= true;\n        '4': valid:= true;\n        '5': valid:= true;\n        '6': valid:= true;\n    end;\nend;\n\nbegin\n    for y:=1 to 3 do\n    begin\n        writeln (y);\n    end;\n    \n    repeat\n        writeln(y);\n        y := y + 1;\n    until y > 5;\n    writeln ('Hello World');\nend.\n\n"
  },
  {
    "path": "tests/syntax-tests/source/Passwd/passwd",
    "content": "root:x:0:0:root:/root:/bin/bash\ndaemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin\nnobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin\nsyslog:x:104:106::/nonexistent:/usr/sbin/nologin\nsshd:x:109:65534::/run/sshd:/usr/sbin/nologin\nreima:x:1000:1000:,,,:/home/reima:/bin/bash\n\n"
  },
  {
    "path": "tests/syntax-tests/source/Perl/test.pl",
    "content": "# Perl Test\n# By saul-bt\n# PUBLIC DOMAIN\n\nuse strict;\nuse warnings;\n\n## REFERENCES ##\nmy @colors = (\"red\", \"green\", \"blue\");\n\n# '\\' can be used to get a reference\nmy $colorsRef = \\@colors;\n\nmy %superHash = (\n    \"colors\" => $colorsRef,\n    # Also you can create an anonymous\n    # array with '[]' ({} for hashes)\n    # that returns the reference\n    \"numbers\" => [1, 2, 3]\n);\n\n# Now the hash stores something like\n# this: (\"colors\", ARRAY(0x...),\n#        \"numbers\", ARRAY(0x...))\n\n# And you can access these arrays with:\nprint qq(@{$superHash{\"colors\"}}\\n);\n\n# To print an element:\nprint qq(${$superHash{\"numbers\"}}[0]\\n);\nprint $superHash{\"colors\"} -> [0], \"\\n\";\n\n# Size of array:\nprint scalar @{$superHash{\"colors\"}};\n\n\n## ARRAYS ##\n%meh1 = (num => 0, val => 4);\n%meh2 = (\n    num => 1,\n    val => 3\n);\n\n@mehs = (\\%meh1, \\%meh2);\n\nprint $mehs[0]{val};\n\n\n## HANDLERS & HEREDOC ##\nprint \"What's your name? \";\n$name = <STDIN>;\nchomp($name);\n\nprint <<WELCOME;\n\nHi $name, Where are you from?\nWELCOME\n\n$place = <STDIN>;\nchomp($place);\n\nprint <<GOODBYE;\n\nOh, you are $name from $place...\nI hear that $place is a beautiful place.\nIt's nice meet people like you $name.\nI hope to see you soon :)\n\nBye $name.\nGOODBYE\n\nopen (content, \"<\", \"file.txt\");\n\nfor $line (<content>) {\n    print $line;\n}\n\nprint \"What are you looking for? \";\n$numResults = 0;\n$word = <STDIN>;\nchomp($word);\n\nfor $line (<>) {\n  if ($line =~ m/\\b$word\\b/i) {\n    $numResults += 1;\n    print \"[$word FOUND]> $line\\n\";\n    next;\n  }\n  print $line;\n}\n\nprint \"\\n\\n=== There are $numResults coincidences ===\";\n\n\n## SCRIPT ARGUMENTS ##\n$nargs = $#ARGV + 1;\n\nprint \"There are $nargs arguments:\\n\";\n\nfor $arg (@ARGV) {\n    print \"- $arg\\n\";\n}\n\n## REGEX STUFF ##\n$string = \"Perl is cool\";\n\nif ($string =~ m/[Pp]erl/) {\n  print \"Yeah\";\n}\nelsif ($string =~ m(perl)i) {\n  print \"Sad\";\n}\nelse {\n  print \"MEH\";\n}\n\n# From my dummy recreation of printf\nsub checkTypes {\n    my @percents = @{scalar(shift)};\n    my @args = @{scalar(shift)};\n    my $size = scalar(@percents);\n\n    foreach my $n (0..$size - 1) {\n        my $currArg = $args[$n];\n        my $currFormat = substr($percents[$n],-1);\n\t\n        $currFormat eq 's' && $currArg =~ m/^\\D+$/ ||\n        $currFormat =~ m/[dx]/ && $currArg =~ m/^\\d+$/ ||\n        $currFormat eq 'f' && $currArg =~ m/^\\d+(?:\\.\\d+)?$/ or\n        die \"'$currArg' can't be formatted as '$currFormat'\";\n    }\n}\n\n## WEIRD STUFF (JAPH) ##\n# VMS <3\nnot exp log srand xor s qq qx xor\ns x x length uc ord and print chr\nord for qw q join use sub tied qx\nxor eval xor print qq q q xor int\neval lc q m cos and print chr ord\nfor qw y abs ne open tied hex exp\nref y m xor scalar srand print qq\nq q xor int eval lc qq y sqrt cos\nand print chr ord for qw x printf\neach return local x y or print qq\ns s and eval q s undef or oct xor\ntime xor ref print chr int ord lc\nforeach qw y hex alarm chdir kill\nexec return y s gt sin sort split\n\n@P=split//,\".URRUU\\c8R\";@d=split//,\"\\nrekcah xinU / lreP rehtona tsuJ\";sub p{\n@p{\"r$p\",\"u$p\"}=(P,P);pipe\"r$p\",\"u$p\";++$p;($q*=2)+=$f=!fork;map{$P=$P[$f^ord\n($p{$_})&6];$p{$_}=/ ^$P/ix?$P:close$_}keys%p}p;p;p;p;p;map{$p{$_}=~/^[P.]/&&\nclose$_}%p;wait until$?;map{/^r/&&<$_>}%p;$_=$d[$q];sleep rand(2)if/\\S/;print\n\n''=~('(?{'.('-)@.)@_*([]@!@/)(@)@-@),@(@@+@)'\n^'][)@]`}`]()`@.@]@%[`}%[@`@!#@%[').',\"})')\n"
  },
  {
    "path": "tests/syntax-tests/source/Plaintext/README.md",
    "content": "This text file was generated with the following script.\n\n```python\nwith open(\"plaintext.txt\", \"w\"):\n    for i in range(176):\n        try:\n            f.write(chr(i) + \"\\n\")\n        except:\n            pass\n    f.write(\"\\n\")\n    f.write(\"Here is a line with multiple characters\\n\")\n```\n"
  },
  {
    "path": "tests/syntax-tests/source/Plaintext/bat_options",
    "content": "--show-all\n"
  },
  {
    "path": "tests/syntax-tests/source/Protocol Buffer/vyconf.proto",
    "content": "message Request {\n  enum ConfigFormat {\n    CURLY = 0;\n    JSON = 1;\n  }\n\n  enum OutputFormat {\n    OutPlain = 0;\n    OutJSON = 1;\n  }\n\n  message Status {\n  }\n\n  message SetupSession {\n    optional string ClientApplication = 1;\n    optional int32 OnBehalfOf = 2;\n  }\n\n  message Set {\n    repeated string Path = 1;\n    optional bool Ephemeral = 3; \n  }\n\n  message Delete {\n    repeated string Path = 1;\n  }\n\n  message Rename {\n    repeated string EditLevel = 1;\n    required string From = 2;\n    required string To = 3;\n  }\n\n  message Copy {\n    repeated string EditLevel = 1;\n    required string From = 2;\n    required string To = 3;\n  }\n\n  message Comment {\n    repeated string Path = 1;\n    required string Comment = 2;\n  }\n\n  message Commit {\n    optional bool Confirm = 1;\n    optional int32 ConfirmTimeout = 2;\n    optional string Comment = 3;\n  }\n\n  message Rollback {\n    required int32 Revision = 1;\n  }\n\n  message Load {\n    required string Location = 1;\n    optional ConfigFormat format = 2;\n  }\n\n  message Merge {\n    required string Location = 1;\n    optional ConfigFormat format = 2;\n  }\n\n  message Save {\n    required string Location = 1;\n    optional ConfigFormat format = 2;\n  }\n\n  message ShowConfig {\n    repeated string Path = 1;\n    optional ConfigFormat format = 2;\n  }\n\n  message Exists {\n    repeated string Path = 1;\n  }\n\n  message GetValue {\n    repeated string Path = 1;\n    optional OutputFormat output_format = 2;\n  }\n\n  message GetValues {\n    repeated string Path = 1;\n    optional OutputFormat output_format = 2;\n  }\n\n  message ListChildren {\n    repeated string Path = 1;\n    optional OutputFormat output_format = 2;\n  }\n\n  message RunOpMode {\n    repeated string Path = 1;\n    optional OutputFormat output_format = 2;\n  }\n\n  message Confirm {\n  }\n\n  message EnterConfigurationMode {\n    required bool Exclusive = 1;\n    required bool OverrideExclusive = 2;\n  }\n\n  message ExitConfigurationMode {\n  }\n\n  oneof msg {\n    Status status = 1;\n    SetupSession setup_session = 2;\n    Set set = 3;\n    Delete delete = 4;\n    Rename rename = 5;\n    Copy copy = 6;\n    Comment comment = 7;\n    Commit commit = 8;\n    Rollback rollback = 9;\n    Merge merge = 10;\n    Save save = 11;\n    ShowConfig show_config = 12;\n    Exists exists = 13;\n    GetValue get_value = 14;\n    GetValues get_values = 15;\n    ListChildren list_children = 16;\n    RunOpMode run_op_mode = 17;\n    Confirm confirm = 18;\n    EnterConfigurationMode configure = 19;\n    ExitConfigurationMode exit_configure = 20;\n    string teardown = 21;\n  }  \n}\n\nmessage RequestEnvelope {\n    optional string token = 1;\n    required Request request = 2;\n}\n\nenum Status {\n  SUCCESS = 0;\n  FAIL = 1;\n  INVALID_PATH = 2;\n  INVALID_VALUE = 3;\n  COMMIT_IN_PROGRESS = 4;\n  CONFIGURATION_LOCKED = 5;\n  INTERNAL_ERROR = 6;\n  PERMISSION_DENIED = 7;\n  PATH_ALREADY_EXISTS = 8;\n}\n\nmessage Response {\n  required Status status = 1;\n  optional string output = 2;\n  optional string error = 3;\n  optional string warning = 4;\n}\n"
  },
  {
    "path": "tests/syntax-tests/source/Puppet/LICENSE.md",
    "content": "The `manifest_large_exported_classes_node.pp` file has been added from https://github.com/puppetlabs/puppet under the following license:\n\n```text\n\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": "tests/syntax-tests/source/Puppet/manifest_large_exported_classes_node.pp",
    "content": "class foo ($bar) {\n  @@notify { 'foo': }\n}\n@@file { \"somedir/${name}_${munin_port_real}\":\n  ensure => present,\n  content => template(\"munin/defaultclient.erb\"),\n}\n# Collect all exported files\nFile <<||>>\n\n# Compile the munin.conf with a local header\nconcatenated_file { \"/etc/munin/munin.conf\":\n    dir => somedir,\n    header => \"/etc/munin/munin.conf.header\",\n}\nhosting_vserver_configuration {\n    \"erics\":\n        domain => \"orange.co\",\n        type => \"friend\",\n        context => 13,\n        ip => \"255.255.255.254\", prefix => 27,\n        admin_user => \"erict\", admin_user_name => \"hello, its me\",\n        admin_user_email => \"erict@orange.co\",\n        customer => \"hello? is it me?\",\n        admin_password => file(\"/etc/puppet/secrets/hosting/erict_passwd\"),\n}\nclass davids_black_co_at {\n    ## Create users for my parents and my grandmother\n    hosting::user {\n        rztt: realname => \"some other rztt\",\n            uid => 2001, admin => true;\n        same: realname => \"could be same\",\n            uid => 2002;\n        imapersontoodamnit: realname => \"some one else\",\n            uid => 2003;\n    }\n\n    # Install git.black.co.at\n    include git::daemon\n    include git::web\n    git::web::export { [manifests, \"puppet-trunk\"]: }\n\n    # Provision an additional mysql database on the database server\n    hosting::database { \"fogbugz\": type => mysql }\n    # Create another VirtualHost\n    apache2::site { \"local-fogbugz\":\n        source => \"puppet://$servername/files/hosting/erict/sites/local-fogbugz\"\n    }\n}\nnode backuppc {\n        # only use the smarthost\n        $mta = ssmtp\n        # this is a vserver on this host, so register correctly in nagios\n        $nagios_parent = \"orange.co\"\n        # I'm sharing an IP here, so those things have to have their own ports\n        $apache2_port = 8080\n        $munin_port = 5008\n        $munin_stats_port = 8667\n\n        # default configuration\n        include dbp\n\n        # configure the backuppc server\n        include backuppc::server\n}\n"
  },
  {
    "path": "tests/syntax-tests/source/PureScript/test.purs",
    "content": "-- | This module defines a datatype `Pair` together with a few useful instances\n-- | and helper functions. Note that this is not just `Tuple a a` but rather a\n-- | list with exactly two elements. Specifically, the `Functor` instance maps\n-- | over both values (in contrast to the `Functor` instance for `Tuple a`).\nmodule Data.Pair\n  ( Pair(..)\n  , (~)\n  , fst\n  , snd\n  , curry\n  , uncurry\n  , swap\n  ) where\n\nimport Prelude\n\nimport Data.Foldable (class Foldable)\nimport Data.Traversable (class Traversable)\nimport Data.Distributive (class Distributive)\n\nimport Test.QuickCheck.Arbitrary (class Arbitrary, arbitrary)\n\n-- | A pair simply consists of two values of the same type.\ndata Pair a = Pair a a\n\ninfixl 6 Pair as ~\n\n-- | Returns the first component of a pair.\nfst ∷ ∀ a. Pair a → a\nfst (x ~ _) = x\n\n-- | Returns the second component of a pair.\nsnd ∷ ∀ a. Pair a → a\nsnd (_ ~ y) = y\n\n-- | Turn a function that expects a pair into a function of two arguments.\ncurry ∷ ∀ a b. (Pair a → b) → a → a → b\ncurry f x y = f (x ~ y)\n\n-- | Turn a function of two arguments into a function that expects a pair.\nuncurry ∷ ∀ a b. (a → a → b) → Pair a → b\nuncurry f (x ~ y) = f x y\n\n-- | Exchange the two components of the pair\nswap ∷ ∀ a. Pair a → Pair a\nswap (x ~ y) = y ~ x\n\nderive instance eqPair ∷ Eq a ⇒ Eq (Pair a)\n\nderive instance ordPair ∷ Ord a ⇒ Ord (Pair a)\n\ninstance showPair ∷ Show a ⇒ Show (Pair a) where\n  show (x ~ y) = \"(\" <> show x <> \" ~ \" <> show y <> \")\"\n\ninstance functorPair ∷ Functor Pair where\n  map f (x ~ y) = f x ~ f y\n\ninstance applyPair ∷ Apply Pair where\n  apply (f ~ g) (x ~ y) = f x ~ g y\n\ninstance applicativePair ∷ Applicative Pair where\n  pure x = x ~ x\n\ninstance bindPair ∷ Bind Pair where\n  bind (x ~ y) f = fst (f x) ~ snd (f y)\n\ninstance monadPair ∷ Monad Pair\n\ninstance semigroupPair ∷ Semigroup a ⇒ Semigroup (Pair a) where\n  append (x1 ~ y1) (x2 ~ y2) = (x1 <> x2) ~ (y1 <> y2)\n\ninstance monoidPair ∷ Monoid a ⇒ Monoid (Pair a) where\n  mempty = mempty ~ mempty\n\ninstance foldablePair ∷ Foldable Pair where\n  foldr f z (Pair x y) = x `f` (y `f` z)\n  foldl f z (Pair x y) = (z `f` x) `f` y\n  foldMap f (Pair x y) = f x <> f y\n\ninstance traversablePair ∷ Traversable Pair where\n  traverse f (Pair x y) = Pair <$> f x <*> f y\n  sequence (Pair mx my) = Pair <$> mx <*> my\n\ninstance distributivePair ∷ Distributive Pair where\n  distribute xs = map fst xs ~ map snd xs\n  collect f xs = map (fst <<< f) xs ~ map (snd <<< f) xs\n\ninstance arbitraryPair ∷ Arbitrary a ⇒ Arbitrary (Pair a) where\n  arbitrary = Pair <$> arbitrary <*> arbitrary\n"
  },
  {
    "path": "tests/syntax-tests/source/Python/battest.py",
    "content": "from os import getcwd\nimport numpy as np\nfrom matplotlib.pyplot import plot as plt\nfrom time import *\n\n\n# COMMENT test\nh2 = 4  # this is a comment\n\"\"\"this is also a comment\"\"\"\n\n# Import test\n\n# class test\n\n\nclass Hello:\n    def __init__(self, x):\n        self.name = x\n        \n    def selfprint(self):\n        print(\"hello my name is \", self.name)\n\n    def testprint(self):\n        print(1*2, 2+3, 4 % 5, 8-4, 9/4, 23//4)\n\n# Decorators test\nclass Decorators:\n    @classmethod\n    def decoratorsTest(self):\n        pass\n    \nH1 = Hello(\"john\")\nH1.selfprint()\nH1.testprint()\n\n\n# list test\na = [1, 2, 3, 4, 5]\na.sort()\nprint(a[1:3])\nprint(a[:4])\nprint(a[2])\nprint(a[2:])\n\n# dictionary test\n# copied from w3schools example\n\nmyfamily = {\n    \"child1\": {\n        \"name\": \"Emil\",\n        \"year\": 2004\n    },\n    \"child2\": {\n        \"name\": \"Tobias\",\n        \"year\": 2007\n    },\n    \"child3\": {\n        \"name\": \"Linus\",\n        \"year\": 2011\n    }\n}\n\n# tuple test\n\ntestTuple = (\"one\", 2, \"3\")\nprint(testTuple)\n\nprint(np.random.randint(5, 45))\n\n# string test\na = \"hello world\"\nb = \"\"\"good morning\nhello world\nbye\"\"\"\n\nformattest = \"teststring is ={}\".format(5)\n\n# lambda test\n\n\ndef x2(n):\n    lambda n: n/7\n\n\n# if else ladder\nif 1 > 2:\n    print(\"yes\")\nelif 4 > 5:\n    print(\"maybe\")\nelse:\n    print(\"no\")\n\n# loops\ni = 5\nwhile(i > 0):\n    print(i)\n    i -= 1\n\nfor x in range(1, 20, 2):\n    print(x)\n"
  },
  {
    "path": "tests/syntax-tests/source/QML/BatSyntaxTest.qml",
    "content": "import QtQuick 2.0\nimport \"../components\"\n\nPage {\n    id: page\n\n    // properties\n\n    property bool startup: true\n    readonly property var var1: null\n    readonly property QtObject var2: null\n\n    allowedOrientations: Orientation.All\n\n    /* components */\n\n    DBusServiceWatcher {\n        id: dbusService\n        service: \"org.bat.service\"\n\n        onRegisteredChanged: {\n            if (dbusService.registered) {\n                announcedNameField.text = daemon.announcedName()\n            }\n        }\n    }\n\n    Component.onCompleted: {\n        console.debug(\"completed\")\n    }\n\n    Flickable {\n        anchors.fill: parent\n        contentHeight: column.height\n        visible: dbusService.registered\n\n        ViewPlaceholder {\n            enabled: !startup\n                     && trustedDevices.count == 0\n                     && nearDevices.count == 0\n            text: qsTr(\"Install Bat.\")\n        }\n\n        Column {\n            id: column\n\n            width: page.width\n            spacing: Theme.paddingLarge\n\n            PageHeader {\n                title: qsTr(\"Syntax Test\")\n            }\n\n            TextField {\n                id: announcedNameField\n                width: parent.width\n                label: qsTr(\"Device Name\")\n                text: dbusService.registered ? daemon.announcedName() : \"\"\n\n                onActiveFocusChanged: {\n                    if (activeFocus)\n                        return\n\n                    if (text.length === 0) {\n                        text = daemon.announcedName()\n                    } else {\n                        daemon.setAnnouncedName(text)\n                        placeholderText = text\n                    }\n                }\n\n                EnterKey.onClicked: announcedNameField.focus = false\n                EnterKey.iconSource: \"image://theme/icon-m-enter-close\"\n            }\n\n\n            Component {\n                id: deviceDelegate\n\n                ListItem {\n                    id: listItem\n\n                    property bool showStatus: deviceStatusLabel.text.length\n\n                    width: page.width\n                    height: Theme.itemSizeMedium\n\n                    Image {\n                        id: icon\n                        source: iconUrl\n\n                        x: Theme.horizontalPageMargin\n                        anchors.verticalCenter: parent.verticalCenter\n                        sourceSize.width: Theme.iconSizeMedium\n                        sourceSize.height: Theme.iconSizeMedium\n                    }\n\n                    Label {\n                        id: deviceNameLabel\n                        anchors {\n                            left: icon.right\n                            leftMargin: Theme.paddingLarge\n                            right: parent.right\n                            rightMargin: Theme.horizontalPageMargin\n                        }\n                        y: listItem.contentHeight / 2 - implicitHeight / 2\n                           - showStatus * (deviceStatusLabel.implicitHeight / 2)\n\n                        text: name\n                        color: listItem.highlighted\n                               ? Theme.highlightColor\n                               : Theme.primaryColor\n                        truncationMode: TruncationMode.Fade\n                        textFormat: Text.PlainText\n\n                        Behavior on y { NumberAnimation {} }\n                    }\n\n                    Label {\n                        id: deviceStatusLabel\n                        anchors {\n                            left: deviceNameLabel.left\n                            top: deviceNameLabel.bottom\n                            right: parent.right\n                            rightMargin: Theme.horizontalPageMargin\n                        }\n\n                        text: (trusted && reachable)\n                              ? qsTr(\"Connected\")\n                              : (hasPairingRequests || waitsForPairing\n                                 ? qsTr(\"Pending pairing request ...\") : \"\")\n                        color: listItem.highlighted\n                               ? Theme.secondaryHighlightColor\n                               : Theme.secondaryColor\n                        truncationMode: TruncationMode.Fade\n                        font.pixelSize: Theme.fontSizeExtraSmall\n                        opacity: showStatus ? 1.0 : 0.0\n                        width: parent.width\n                        textFormat: Text.PlainText\n\n                        Behavior on opacity { FadeAnimation {} }\n                    }\n\n                    onClicked: {\n                        pageStack.push(\n                            Qt.resolvedUrl(\"DevicePage.qml\"),\n                            { deviceId: id })\n                    }\n                }\n            }\n\n            DeviceListModel {\n                id: devicelistModel\n            }\n\n            ColumnView {\n                id: devicesView\n                width: page.width\n                itemHeight: Theme.itemSizeMedium\n\n\n                model: trustedDevicesModel\n                delegate: deviceDelegate\n                visible: devicesView.count > 0\n            }\n        }\n\n        PullDownMenu {\n//            MenuItem {\n//                text: qsTr(\"About ...\")\n//                onClicked: pageStack.push(Qt.resolvedUrl(\"AboutPage.qml\"))\n//            }\n\n            MenuItem {\n                text: qsTr(\"Settings ...\")\n                onClicked: pageStack.push(Qt.resolvedUrl(\"SettingsPage.qml\"))\n            }\n        }\n\n        VerticalScrollDecorator {}\n    }\n\n    /*\n    Connections {\n        target: ui\n        onOpeningDevicePage: openDevicePage(deviceId)\n    }*/\n\n    Timer {\n        interval: 1000\n        running: true\n        repeat: false\n        onTriggered: startup = false\n    }\n\n    function openDevicePage(deviceId) {\n        if (typeof pageStack === \"undefined\")\n            return;\n\n        console.log(\"opening device \" + deviceId)\n\n        window.activate()\n\n        var devicePage = pageStack.find(function(page) {\n            return page.objectName === \"DevicePage\"\n        })\n        if (devicePage !== null && devicePage.deviceId === deviceId) {\n            pageStack.pop(devicePage)\n            ui.showMainWindow()\n            return\n        }\n\n        pageStack.pop(page, PageStackAction.Immediate)\n        pageStack.push(\n            Qt.resolvedUrl(\"DevicePage.qml\"),\n            { deviceId: deviceId },\n            PageStackAction.Immediate)\n    }\n}\n"
  },
  {
    "path": "tests/syntax-tests/source/R/test.r",
    "content": "# take input from the user\nnum = as.integer(readline(prompt=\"Enter a number: \"))\nfactorial = 1\n# check is the number is negative, positive or zero\nif(num < 0) {\nprint(\"Sorry, factorial does not exist for negative numbers\")\n} else if(num == 0) {\nprint(\"The factorial of 0 is 1\")\n} else {\nfor(i in 1:num) {\nfactorial = factorial * i\n}\nprint(paste(\"The factorial of\", num ,\"is\",factorial))\n}\n\nx <- 0\nif (x < 0) {\nprint(\"Negative number\")\n} else if (x > 0) {\nprint(\"Positive number\")\n} else\nprint(\"Zero\")\n\nx <- 1:5\nfor (val in x) {\nif (val == 3){\nnext\n}\nprint(val)\n}\n\nx <- 1\nrepeat {\nprint(x)\nx = x+1\nif (x == 6){\nbreak\n}\n}\n\n`%divisible%` <- function(x,y)\n{\nif (x%%y ==0) return (TRUE)\nelse          return (FALSE)\n}\n\nswitch(\"length\", \"color\" = \"red\", \"shape\" = \"square\", \"length\" = 5)\n[1] 5\n\nrecursive.factorial <- function(x) {\nif (x == 0)    return (1)\nelse           return (x * recursive.factorial(x-1))\n}\n\npow <- function(x, y) {\n# function to print x raised to the power y\nresult <- x^y\nprint(paste(x,\"raised to the power\", y, \"is\", result))\n}\n\nA <- read.table(\"x.data\", sep=\",\",\n                col.names=c(\"year\", \"my1\", \"my2\"))\nnrow(A)                                 # Count the rows in A\n\nsummary(A$year)                        \n\nA$newcol <- A$my1 + A$my2               # Makes a new\nnewvar <- A$my1 - A$my2                 # Makes a \nA$my1 <- NULL                           # Removes \nstr(A)\nsummary(A)\nlibrary(Hmisc)          \ncontents(A)\ndescribe(A)\n\nset.seed(102)                           # This yields a good illustration.\nx <- sample(1:3, 15, replace=TRUE)\neducation <- factor(x, labels=c(\"None\", \"School\", \"College\"))\nx <- sample(1:2, 15, replace=TRUE)\ngender <- factor(x, labels=c(\"Male\", \"Female\"))\nage <- runif(15, min=20,max=60)\n\nD <- data.frame(age, gender, education)\nrm(x,age,gender,education)\nprint(D)\n\n# Table about education\ntable(D$education)\n\n# Table about education and gender --\ntable(D$gender, D$education)\n# Joint distribution of education and gender --\ntable(D$gender, D$education)/nrow(D)\n\n# Add in the marginal distributions also\naddmargins(table(D$gender, D$education))\naddmargins(table(D$gender, D$education))/nrow(D)\n\n# Generate a good LaTeX table out of it --\nlibrary(xtable)\nxtable(addmargins(table(D$gender, D$education))/nrow(D),\n       digits=c(0,2,2,2,2))  \n\nby(D$age, D$gender, mean)\nby(D$age, D$gender, sd)\nby(D$age, D$gender, summary)\n\na <- matrix(by(D$age, list(D$gender, D$education), mean), nrow=2)\nrownames(a) <- levels(D$gender)\ncolnames(a) <- levels(D$education)\nprint(a)\nprint(xtable(a))\n\ndat <- read.csv(file = \"files/dataset-2013-01.csv\", header = TRUE)\ninterim_object <- data.frame(rep(1:100, 10),\n                             rep(101:200, 10),\n                             rep(201:300, 10))\nobject.size(interim_object) \nrm(\"interim_object\") \nls() \nrm(list = ls())\n\nvector1 <- c(5,9,3)\nvector2 <- c(10,11,12,13,14,15)\narray1 <- array(c(vector1,vector2),dim = c(3,3,2))\nvector3 <- c(9,1,0)\nvector4 <- c(6,0,11,3,14,1,2,6,9)\narray2 <- array(c(vector1,vector2),dim = c(3,3,2))\nmatrix1 <- array1[,,2]\nmatrix2 <- array2[,,2]\nresult <- matrix1+matrix2\nprint(result)\n\ncolumn.names <- c(\"COL1\",\"COL2\",\"COL3\")\nrow.names <- c(\"ROW1\",\"ROW2\",\"ROW3\")\nmatrix.names <- c(\"Matrix1\",\"Matrix2\")\nresult <- array(c(vector1,vector2),dim = c(3,3,2),dimnames = list(row.names,\n   column.names, matrix.names))\nprint(result[3,,2])\nprint(result[1,3,1])\nprint(result[,,2])\n\n# Load the package required to read JSON files.\nlibrary(\"rjson\")\nresult <- fromJSON(file = \"input.json\")\nprint(result)\n\nx <- c(151, 174, 138, 186, 128, 136, 179, 163, 152, 131)\ny <- c(63, 81, 56, 91, 47, 57, 76, 72, 62, 48)\nrelation <- lm(y~x)\nprint(relation)\n\nrelation <- lm(y~x)\npng(file = \"linearregression.png\")\nplot(y,x,col = \"blue\",main = \"Height & Weight Regression\",\nabline(lm(x~y)),cex = 1.3,pch = 16,xlab = \"Weight in Kg\",ylab = \"Height in cm\")\ndev.off()\n\ndata <- c(\"East\",\"West\",\"East\",\"North\",\"North\",\"East\",\"West\",\"West\",\"West\",\"East\",\"North\")\nprint(data)\nprint(is.factor(data))\nfactor_data <- factor(data)\nprint(factor_data)\nprint(is.factor(factor_data))\n\nv <- c(7,12,28,3,41)\n\n# Give the chart file a name.\npng(file = \"line_chart_label_colored.jpg\")\nplot(v,type = \"o\", col = \"red\", xlab = \"Month\", ylab = \"Rain fall\", main = \"Rain fall chart\")\n"
  },
  {
    "path": "tests/syntax-tests/source/Racket/test.rkt",
    "content": "#lang racket\n\n(require \"main.rkt\" rackunit)\n\n;; Helper for test cases with multiple outputs\n;; See: https://stackoverflow.com/questions/41081395/unit-testing-in-racket-with-multiple-outputs\n(define-syntax check-values-equal?\n  (syntax-rules ()\n    [(_ a b) (check-equal? (call-with-values (thunk a) list) b)]))\n\n\n;; Named POSIX semaphores\n(test-begin\n  (define test-sem-name \"/test-nix-1\")\n\n  ;; Unlink if already exists\n  (sem-unlink test-sem-name)\n\n  ;; Open and unlink\n  (define test-sem-p (sem-open test-sem-name (+ O_CREAT O_EXCL)))\n  (check-not-false test-sem-p)\n  (check-not-equal? test-sem-p (void))\n  (check-exn exn:fail?\n             (lambda () (sem-open test-sem-name (+ O_CREAT O_EXCL)))\n             \"Permission denied\")\n  (check-exn exn:fail?\n             (lambda () (sem-open test-sem-name (+ O_CREAT O_EXCL))))\n\n  ;; Change values\n  (check-equal? (sem-getvalue test-sem-p) 0)\n  (sem-post test-sem-p)\n  (check-equal? (sem-getvalue test-sem-p) 1)\n  (sem-wait test-sem-p)\n  (check-equal? (sem-getvalue test-sem-p) 0)\n  (sem-post test-sem-p)\n  (check-equal? (sem-getvalue test-sem-p) 1)\n  (sem-post test-sem-p)\n  (check-equal? (sem-getvalue test-sem-p) 2)\n  (sem-trywait test-sem-p)\n  (check-equal? (sem-getvalue test-sem-p) 2)\n\n  ;; Can't unlink twice\n  (check-not-false (sem-unlink test-sem-name))\n  (check-false (sem-unlink test-sem-name)))\n\n\n;; Named POSIX shared memory\n(test-begin\n  (define test-shm-name \"test-nix-mem-1\")\n\n  ;; Open and unlink\n  (shm-unlink test-shm-name)\n  (define test-shm-fd (shm-open test-shm-name (+ O_EXCL O_CREAT O_RDWR) #o644))\n  (check > test-shm-fd 0)\n  (check-not-false (shm-unlink test-shm-name))\n  (check-false (shm-unlink test-shm-name)))\n"
  },
  {
    "path": "tests/syntax-tests/source/Rego/LICENSE.md",
    "content": "The `src_test.rego` file has been added from https://github.com/Azure/Community-Policy under the following license:\n\n```text\n    MIT License\n\n    Copyright (c) Microsoft Corporation.\n\n    Permission is hereby granted, free of charge, to any person obtaining a copy\n    of this software and associated documentation files (the \"Software\"), to deal\n    in the Software without restriction, including without limitation the rights\n    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n    copies of the Software, and to permit persons to whom the Software is\n    furnished to do so, subject to the following conditions:\n\n    The above copyright notice and this permission notice shall be included in all\n    copies or substantial portions of the Software.\n\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n    SOFTWARE\n```\n"
  },
  {
    "path": "tests/syntax-tests/source/Rego/src_test.rego",
    "content": "package k8sazureprocmount\n\ntest_input_container_not_proc_mount_allowed {\n    input := { \"review\": input_review, \"parameters\": input_parameters_default}\n    results := violation with input as input\n    count(results) == 0\n}\ntest_input_container_proc_mount_not_allowed {\n    input := { \"review\": input_review_unmasked, \"parameters\": input_parameters_default}\n    results := violation with input as input\n    count(results) == 1\n}\ntest_input_container_proc_mount_not_allowed_null_param {\n    input := { \"review\": input_review_unmasked, \"parameters\": null }\n    results := violation with input as input\n    count(results) == 1\n}\ntest_input_container_proc_mount_not_allowed_missing_param {\n    input := { \"review\": input_review_unmasked }\n    results := violation with input as input\n    count(results) == 1\n}\ntest_input_container_many_not_proc_mount_allowed {\n    input := { \"review\": input_review_many, \"parameters\": input_parameters_default}\n    results := violation with input as input\n    count(results) == 0\n}\ntest_input_container_many_mixed_proc_mount_not_allowed {\n    input := { \"review\": input_review_many_mixed, \"parameters\": input_parameters_default}\n    results := violation with input as input\n    count(results) == 1\n}\ntest_input_container_many_mixed_proc_mount_not_allowed_two {\n    input := { \"review\": input_review_many_mixed_two, \"parameters\": input_parameters_default}\n    results := violation with input as input\n    count(results) == 2\n}\ntest_input_container_proc_mount_case_insensitive {\n    input := { \"review\": input_review, \"parameters\": input_parameters_default_lower}\n    results := violation with input as input\n    count(results) == 0\n}\ntest_input_container_not_proc_mount_unmasked {\n    input := { \"review\": input_review, \"parameters\": input_parameters_unmasked}\n    results := violation with input as input\n    count(results) == 0\n}\ntest_input_container_proc_mount_unmasked {\n    input := { \"review\": input_review_unmasked, \"parameters\": input_parameters_unmasked}\n    results := violation with input as input\n    count(results) == 0\n}\ntest_input_container_many_mixed_proc_mount_allowed_two {\n    input := { \"review\": input_review_many_mixed_two, \"parameters\": input_parameters_unmasked}\n    results := violation with input as input\n    count(results) == 0\n}\n\ninput_review = {\n    \"object\": {\n        \"metadata\": {\n            \"name\": \"nginx\"\n        },\n        \"spec\": {\n            \"containers\": input_containers_one\n        }\n    }\n}\n\ninput_review_unmasked = {\n    \"object\": {\n        \"metadata\": {\n            \"name\": \"nginx\"\n        },\n        \"spec\": {\n            \"containers\": input_containers_one_unmasked\n        }\n    }\n}\n\ninput_review_many = {\n    \"object\": {\n        \"metadata\": {\n            \"name\": \"nginx\"\n        },\n        \"spec\": {\n            \"containers\": input_containers_many,\n            \"initContainers\": input_containers_one\n        }\n    }\n}\n\ninput_review_many_mixed = {\n    \"object\": {\n        \"metadata\": {\n            \"name\": \"nginx\"\n        },\n        \"spec\": {\n            \"containers\": input_containers_many,\n            \"initContainers\": input_containers_one_unmasked\n        }\n    }\n}\n\ninput_review_many_mixed_two = {\n    \"object\": {\n        \"metadata\": {\n            \"name\": \"nginx\"\n        },\n        \"spec\": {\n            \"containers\": input_containers_many_mixed,\n            \"initContainers\": input_containers_one_unmasked\n        }\n    }\n}\n\ninput_containers_one = [\n{\n    \"name\": \"nginx\",\n    \"image\": \"nginx\",\n    \"securityContext\": {\n      \"procMount\": \"Default\"\n    }\n}]\n\ninput_containers_one_unmasked = [\n{\n    \"name\": \"nginx\",\n    \"image\": \"nginx\",\n    \"securityContext\": {\n      \"procMount\": \"Unmasked\"\n    }\n}]\n\ninput_containers_many = [\n{\n    \"name\": \"nginx\",\n    \"image\": \"nginx\",\n    \"securityContext\": {\n      \"procMount\": \"Default\"\n    }\n},\n{\n    \"name\": \"nginx1\",\n    \"image\": \"nginx\"\n},\n{\n    \"name\": \"nginx2\",\n    \"image\": \"nginx\",\n    \"securityContext\": {\n      \"runAsUser\": \"1000\"\n    }\n}]\n\ninput_containers_many_mixed = [\n{\n    \"name\": \"nginx\",\n    \"image\": \"nginx\",\n    \"securityContext\": {\n      \"procMount\": \"Default\"\n    }\n},\n{\n    \"name\": \"nginx1\",\n    \"image\": \"nginx\",\n    \"securityContext\": {\n      \"procMount\": \"Unmasked\"\n    }\n}]\n\ninput_parameters_default = {\n     \"procMount\": \"Default\"\n}\n\ninput_parameters_default_lower = {\n     \"procMount\": \"default\"\n}\n\ninput_parameters_unmasked = {\n     \"procMount\": \"Unmasked\"\n}\n"
  },
  {
    "path": "tests/syntax-tests/source/Regular Expression/test.re",
    "content": "^\\[START\\]\\d\\D\\h\\H\\s\\S[a-z]\\v\\V\\w\\W.([a-z]){3,5}\\[END\\]$\n"
  },
  {
    "path": "tests/syntax-tests/source/Requirements.txt/requirements.txt",
    "content": "# Options\n--allow-external\n--allow-unverified\n\n# Freeze packages\nalabaster==0.7.6\nBabel>=2.9.1\ndocutils==0.12\ngevent_subprocess==0.1.2\ngitpython==3.0.7\nhg-diff==1.2.4\nJinja2>=2.8.1\nMarkupSafe==0.23\nPygments==2.7.4\npytz==2015.7\nsix==1.10.0\nsnowballstemmer==1.2.0\nSphinx==1.3.3\nsphinx-rtd-theme==0.1.9\nsvn==1.0.1\nzope.interface==4.2.0\n\n# Examples from PEP508\n# c.f. https://www.python.org/dev/peps/pep-0508/\nrequests [security,tests] >= 2.8.1, == 2.8.* ; python_version < \"2.7\" # Comment\npip @ https://github.com/pypa/pip/archive/1.3.1.zip#sha1=da9234ee9982d4bbb3c72346a6de940a148ea686\nname @ gopher:/foo/com\"\nfoobar[quux]<2,>=3; os_name=='a'\n\n# VCS repositories\n-e git+git://git.myproject.org/MyProject#egg=MyProject # Git\n-e git://git.myproject.org/MyProject.git@v1.0#egg=MyProject\n-e hg+https://hg.myproject.org/MyProject#egg=MyProject # Mercurial\n-e hg+http://hg.myproject.org/MyProject@da39a3ee5e6b#egg=MyProject\n-e svn+http://svn.myproject.org/svn/MyProject/trunk@2019#egg=MyProject # Subversion\n-e bzr+ssh://user@myproject.org/MyProject/trunk#egg=MyProject # Bazaar\n-e bzr+https://bzr.myproject.org/MyProject/trunk@2019#egg=MyProject\n\n# Project or archive URL\nhttps://github.com/pallets/click/archive/7.0.zip#egg=click\n"
  },
  {
    "path": "tests/syntax-tests/source/Robot Framework/LICENSE.md",
    "content": "The `recipe141_aws_simple_storage_service.robot` file has been added from https://github.com/adrianyorke/robotframework-cookbook under the following license:\n\n```text\nMIT License\n\nCopyright (c) 2020 Adrian Yorke\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"
  },
  {
    "path": "tests/syntax-tests/source/Robot Framework/recipe141_aws_simple_storage_service.robot",
    "content": "*** Settings ***\nDocumentation     PROBLEM:\n...               You want to test the existence of a file in an AWS S3 bucket\n...               without using lower level Python code or developing a custom library.\n...               DISCUSSION:\n...               This recipe demonstrates:\n...               - using a Suite Teardown to end the test suite cleanly\n...               - using keywords from an external library\n...               - accessing OS Environment Variables directly using %{} syntax\n...               This recipe has the following external dependencies:\n...               $ pip install --upgrade robotframework-aws\n...               This recipe also requires the following OS environment variables:\n...               AWS_ACCESS_KEY_ID\n...               AWS_SECRET_ACCESS_KEY\nSuite Teardown    Delete All Sessions\nLibrary           AWSLibrary\nForce Tags        no-ci-testing\n\n*** Variables ***\n${recipe}         Recipe 14.1 AWS Simple Storage Service\n${level}          Intermediate\n${category}       External Library: AWSLibrary\n${REGION}         us-east-1\n${BUCKET}         YOUR_BUCKET_NAME_GOES_HERE\n${KEY}            YOUR_FILE_PATH_GOES_HERE\n\n*** Test Cases ***\nCheck Key Exists In Bucket\n    Log Variables\n    Create Session With Keys    ${REGION}    %{AWS_ACCESS_KEY_ID}    %{AWS_SECRET_ACCESS_KEY}\n    Key Should Exist            ${BUCKET}    ${KEY}\n"
  },
  {
    "path": "tests/syntax-tests/source/Ruby/output.rb",
    "content": "class RepeatedSubstring\n  def find_repeated_substring(s)\n    # catch the edge cases\n    return 'NONE' if s == ''\n    # check if the string consists of only one character => \"aaaaaa\" => \"a\"\n    return s.split('').uniq[0] if s.split('').uniq.length == 1\n\n    searched = []\n    longest_prefix = 0\n    long_prefix = ''\n    (0..s.length - 1).each do |i|\n      next if searched.include? s[i]\n\n      searched.push(s[i])\n      next_occurrences = next_index(s, i + 1, s[i])\n      next_occurrences.each do |next_occurrence|\n        next if next_occurrence == -1\n\n        prefix = ge_prefix(s[i..next_occurrence - 1], s[next_occurrence..s.length])\n        if prefix.length > longest_prefix\n          longest_prefix = prefix.length\n          long_prefix = prefix\n        end\n      end\n    end\n    # if prefix == \"       \" it is a invalid sequence\n    return 'NONE' if long_prefix.strip.empty?\n\n    long_prefix\n  end\n\n  def get_prefix(s1, s2)\n    prefix = ''\n    min_length = [s1.length, s2.length].min\n    return '' if s1.nil? || s2.nil?\n\n    (0..min_length - 1).each do |i|\n      return prefix if s1[i] != s2[i]\n\n      prefix += s1[i]\n    end\n    prefix\n  end\n\n  def next_index(seq, index, value)\n    indexes = []\n    (index..seq.length).each do |i|\n      indexes.push(i) if seq[i] == value\n    end\n    indexes\n  end\n\n  def find_repeated_substring_file(file_path)\n    File.open(file_path).read.each_line.map { |line| find_repeated_substring(line) }\n  end\nend\n"
  },
  {
    "path": "tests/syntax-tests/source/Ruby Haml/test.html.haml",
    "content": "%html\n  %head\n    %title Test Title\n  %body\n    %navigation\n      = render :partial => \"navigation_top\"\n    %h1= page.title\n    %p\n      Here is a point to emphasize:\n        %strong.highlighted#search_item_found= item1.text\n        %span{:class => \"fancy\", :id => \"fancy1\"}= item2.text\n    .special= special.text\n    %ol\n      %li First\n      %li Second\n"
  },
  {
    "path": "tests/syntax-tests/source/Ruby On Rails/test.rb",
    "content": "class ContactsController < ApplicationController\n  def new\n    @contact = Contact.new\n  end\n\n  def create\n    @contact = Contact.new(secure_params)\n    if @contact.valid?\n      UserMailer.contact_email(@contact).deliver_now\n      flash[:notice] = \"Message sent from #{@contact.name}.\"\n      redirect_to root_path\n    else\n      render :new\n    end\n  end\n\n  private\n\n  def secure_params\n    params.require(:contact).permit(:name, :email, :content)\n  end\nend\n"
  },
  {
    "path": "tests/syntax-tests/source/Rust/output.rs",
    "content": "use std::io::{self, Write};\n#[cfg(feature = \"paging\")]\nuse std::process::Child;\n\nuse crate::error::*;\n#[cfg(feature = \"paging\")]\nuse crate::less::retrieve_less_version;\n#[cfg(feature = \"paging\")]\nuse crate::paging::PagingMode;\n\n#[derive(Debug)]\npub enum OutputType {\n    #[cfg(feature = \"paging\")]\n    Pager(Child),\n    Stdout(io::Stdout),\n}\n\nimpl OutputType {\n    #[cfg(feature = \"paging\")]\n    pub fn from_mode(mode: PagingMode, pager: Option<&str>) -> Result<Self> {\n        use self::PagingMode::*;\n        Ok(match mode {\n            Always => OutputType::try_pager(false, pager)?,\n            QuitIfOneScreen => OutputType::try_pager(true, pager)?,\n            _ => OutputType::stdout(),\n        })\n    }\n\n    /// Try to launch the pager. Fall back to stdout in case of errors.\n    #[cfg(feature = \"paging\")]\n    fn try_pager(quit_if_one_screen: bool, pager_from_config: Option<&str>) -> Result<Self> {\n        use std::env;\n        use std::ffi::OsString;\n        use std::path::PathBuf;\n        use std::process::{Command, Stdio};\n\n        let mut replace_arguments_to_less = false;\n\n        let pager_from_env = match (env::var(\"BAT_PAGER\"), env::var(\"PAGER\")) {\n            (Ok(bat_pager), _) => Some(bat_pager),\n            (_, Ok(pager)) => {\n                // less needs to be called with the '-R' option in order to properly interpret the\n                // ANSI color sequences printed by bat. If someone has set PAGER=\"less -F\", we\n                // therefore need to overwrite the arguments and add '-R'.\n                //\n                // We only do this for PAGER (as it is not specific to 'bat'), not for BAT_PAGER\n                // or bats '--pager' command line option.\n                replace_arguments_to_less = true;\n                Some(pager)\n            }\n            _ => None,\n        };\n\n        let pager_from_config = pager_from_config.map(|p| p.to_string());\n\n        if pager_from_config.is_some() {\n            replace_arguments_to_less = false;\n        }\n\n        let pager = pager_from_config\n            .or(pager_from_env)\n            .unwrap_or_else(|| String::from(\"less\"));\n\n        let pagerflags =\n            shell_words::split(&pager).chain_err(|| \"Could not parse pager command.\")?;\n\n        match pagerflags.split_first() {\n            Some((pager_name, args)) => {\n                let mut pager_path = PathBuf::from(pager_name);\n\n                if pager_path.file_stem() == Some(&OsString::from(\"bat\")) {\n                    pager_path = PathBuf::from(\"less\");\n                }\n\n                let is_less = pager_path.file_stem() == Some(&OsString::from(\"less\"));\n\n                let mut process = if is_less {\n                    let mut p = Command::new(&pager_path);\n                    if args.is_empty() || replace_arguments_to_less {\n                        p.arg(\"--RAW-CONTROL-CHARS\");\n                        if quit_if_one_screen {\n                            p.arg(\"--quit-if-one-screen\");\n                        }\n\n                        // Passing '--no-init' fixes a bug with '--quit-if-one-screen' in older\n                        // versions of 'less'. Unfortunately, it also breaks mouse-wheel support.\n                        //\n                        // See: http://www.greenwoodsoftware.com/less/news.530.html\n                        //\n                        // For newer versions (530 or 558 on Windows), we omit '--no-init' as it\n                        // is not needed anymore.\n                        match retrieve_less_version() {\n                            None => {\n                                p.arg(\"--no-init\");\n                            }\n                            Some(version)\n                                if (version < 530 || (cfg!(windows) && version < 558)) =>\n                            {\n                                p.arg(\"--no-init\");\n                            }\n                            _ => {}\n                        }\n                    } else {\n                        p.args(args);\n                    }\n                    p.env(\"LESSCHARSET\", \"UTF-8\");\n                    p\n                } else {\n                    let mut p = Command::new(&pager_path);\n                    p.args(args);\n                    p\n                };\n\n                Ok(process\n                    .stdin(Stdio::piped())\n                    .spawn()\n                    .map(OutputType::Pager)\n                    .unwrap_or_else(|_| OutputType::stdout()))\n            }\n            None => Ok(OutputType::stdout()),\n        }\n    }\n\n    pub(crate) fn stdout() -> Self {\n        OutputType::Stdout(io::stdout())\n    }\n\n    #[cfg(feature = \"paging\")]\n    pub(crate) fn is_pager(&self) -> bool {\n        if let OutputType::Pager(_) = self {\n            true\n        } else {\n            false\n        }\n    }\n\n    #[cfg(not(feature = \"paging\"))]\n    pub(crate) fn is_pager(&self) -> bool {\n        false\n    }\n\n    pub fn handle(&mut self) -> Result<&mut dyn Write> {\n        Ok(match *self {\n            #[cfg(feature = \"paging\")]\n            OutputType::Pager(ref mut command) => command\n                .stdin\n                .as_mut()\n                .chain_err(|| \"Could not open stdin for pager\")?,\n            OutputType::Stdout(ref mut handle) => handle,\n        })\n    }\n}\n\n#[cfg(feature = \"paging\")]\nimpl Drop for OutputType {\n    fn drop(&mut self) {\n        if let OutputType::Pager(ref mut command) = *self {\n            let _ = command.wait();\n        }\n    }\n}\n"
  },
  {
    "path": "tests/syntax-tests/source/SCSS/example.scss",
    "content": "@import 'fonts';\n\n$theme_dark: (\n  \"background-color\": null,\n);\n$theme_main: (\n  \"text-size\": 3em,\n  \"text-color\": black,\n  \"text-shadow\": #36ad 0px 0px 3px,\n  \"card-background\": #d6f,\n  \"card-shadow\": #11121212 0px 0px 2px 1px,\n  \"card-padding\": 1rem,\n  \"card-margin\": 0.5in,\n  \"image-width\": 600px,\n  \"image-height\": 100vh,\n  \"background-color\": #dedbef,\n  \"i-ran-out-of-placeholders-for-units\": (1vw 100% 60pt),\n);\n\n$current_theme: $theme_main;\n\n@mixin themed() {\n  $current_theme: $theme_main !global;\n  @content;\n\n  @media (prefers-color-scheme: dark) {\n  \t$current_theme: $theme_dark !global;\n  \t@content;\n  }\n  \n  .#{\"dark\"} & {\n    $current_theme: $theme_dark !global;\n    @content;\n  }\n}\n\n@function theme($variable) {\n  @if map-has_key($current_theme, $variable) {\n    @return map-get($current_theme, $variable);\n  } @else {\n    @error \"Unknown theme variable: #{$variable}\";\n  }\n}\n\nbody {\n  @include themed {\n    background-color: theme('background-color');\n    background-image: url(\"https://github.com/sharkdp/bat/raw/master/doc/logo-header.svg\");\n  }\n  \n  header[data-selectable=\"false\"] {\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: /* CSS comment */ none;\n    cursor: default !important; // SCSS comment\n  }\n  \n  > div {\n    border: #04f 1px solid;\n    \n    &::after {\n      content: 'Pseudo';\n      color: #2F5F7F;\n      box-sizing: border-box;\n    }\n  }\n}\n\n@keyframes rotate {\n  0% {\n    transform: rotate(0deg);\n  }\n  50% {\n    transform: rotate(180deg)}\n  100% {transform: rotate(0rad);}\n}\n\n@font-face {\n  font-family: 'Example Font';\n  src: url(example.ttf) format('ttf');\n  src: local('Comic Sans MS');\n}\n"
  },
  {
    "path": "tests/syntax-tests/source/SLS/test.sls",
    "content": "required_packages:\n  pkg.installed:\n    - pkgs:\n      - git\n      - perl\n      - fortune\n\ncowsay_source:\n  git.latest:\n    - name: https://github.com/jasonm23/cowsay.git\n    - target: /root/cowsay\n\nrun_installer:\n  cmd.run:\n    - name: ./install.sh /usr/local\n    - cwd: /root/cowsay\n    - onchanges:\n      - git: cowsay_source\n\n{% set cowfiles = salt.cmd.run('cowsay -l').split('\\n')[1:] %}\n{% set ascii_arts = cowfiles | join(' ') %}\n\n{% for ascii_art in ascii_arts.split(' ') %}\nrun_cowsay_{{ ascii_art }}: # name must be unique\n  cmd.run:\n    {% if ascii_art is in ['head-in', 'sodomized', 'telebears'] %}\n    - name: echo cowsay -f {{ ascii_art }} should not be used\n    {% else %}\n    - name: fortune | cowsay -f {{ ascii_art }}\n    {% endif %}\n{% endfor %}\n\necho_pillar_demo_1:\n  cmd.run:\n    - name: \"echo {{ pillar.demo_text | default('pillar not defined') }}\"\n\necho_pillar_demo_2:\n  cmd.run:\n    - name: \"echo {{ pillar.demo.text | default('pillar not defined') }}\"\n\n# Comment\n{% set rand = salt['random.get_str'](20) %}\n{% set IP_Address = pillar['IP_Address'] %}\n\nwait:\n  cmd.run:\n    - name: sleep 210  # another comment\n\ncreate_roster_file:\n  file.managed:\n    - name: /tmp/salt-roster-{{ rand }}\n    - contents:\n      - 'switch:'\n      - '  host: {{ IP_Address }}'\n      - \"  user: test\"\n      - \"  passwd: {{ passwd }}\"\n\n"
  },
  {
    "path": "tests/syntax-tests/source/SML/sample.sml",
    "content": "val x = 0\n\nval hello = \"hello world\"\n\nval id = fn x => x\n\nfun id' x = x\n\nval () = print \"hello world\\n\"\n\nval _ = let\n  val hello = \"hello\"\n  val world = \"world\"\nin\n  print (hello ^ \" \" ^ world ^ \"\\n\")\nend\n\nfun isZero n =\n  if n = 0 then true\n  else false\n\nfun isTrue b =\n  case b of\n    true => true\n  | false => false\n\nexception Bad_value of string\n\nfun isTrue' b =\n  case b of\n    true => true\n  | _    => raise (Bad_value \"value is not true!\")\n\nval alwaysTrue =\n  isTrue' false handle Bad_value _ => true\n\ndatatype myBool = True | False\n\ndatatype shape = Square of real | Circle of real | Point\n\nsignature FOO = sig\n  val foo : 'a -> 'a\nend\n\nstructure Foo :> FOO = struct\n  fun foo x = x\nend\n"
  },
  {
    "path": "tests/syntax-tests/source/SQL/ims.sql",
    "content": "-- interships\ncreate table interships \n(intership_id number(7) constraint intership_id_pk primary key,\nname varchar2(50),\nstart_date date,\nend_date date);\n\n\ninsert into interships\nvalues\n  (1,\n   'Leaderator 2019',\n   to_date('15/02/2019', 'DD/MM/YYYY'),\n   to_date('01/09/2019', 'DD/MM/YYYY'));\n\ninsert into interships\n  (intership_id, name, start_date)\nvalues\n  (2, 'Leaderator 2020', to_date('10/02/2019', 'DD/MM/YYYY'));\n\ncommit;\n\n-- directions\ncreate table directions \n(direction_id number(7) constraint direction_id_pk primary key,\nname varchar2(50));\n\ninsert into directions values (1, 'Data Science');\n\ninsert into directions values (2, 'Oracle Development');\n\ncommit;\n\n-- participants\ncreate table participants \n(participant_id number(7) constraint participant_id_pk primary key,\nfirst_name varchar2(25),\nlast_name varchar2(25),\npersonal_id number(11),\nintership_id number(7) constraint participant_inter_id_fk references interships (intership_id),\ndirection_id number(7) constraint participant_direct_id_fk references directions (direction_id),\nconstraint personal_id_unique unique (personal_id));\n\ninsert into participants\nvalues\n  (1, 'Erekle', 'Tvinadze', 01011234567, 1, 1);\n\ninsert into participants\nvalues\n  (2, 'Mariami', 'Chakhvadze', 01011234568, 2, 2);\n\ncommit;\n\n-- hiring_layer_types\ncreate table hiring_layer_types \n(layer_type_id number(7) constraint layer_id_pk primary key,\ntype varchar2(50));\n\ninsert into hiring_layer_types values (1, 'GMAT');\n\ninsert into hiring_layer_types values (2, 'Algorithms');\n\ninsert into hiring_layer_types values (3, 'Interview');\n\ncommit;\n\n-- hiring_layers\ncreate table hiring_layers\n(layer_id number(7) constraint layer_pk primary key,\nlayer_type_id number(7) constraint layer_type_fk references hiring_layer_types (layer_type_id),\nparticipant_id number(7) constraint participant_id_fk references participants (participant_id),\nresult number(3));\n\ninsert into hiring_layers values (1, 1, 1, 52);\n\ninsert into hiring_layers values (2, 1, 2, 80);\n\ninsert into hiring_layers values (3, 2, 2, 75);\n\ninsert into hiring_layers values (4, 3, 2, 100);\n\ncommit;\n\n-- subjects\ncreate table subjects \n(subject_id number(7) constraint subject_id_pk primary key,\nname varchar2(100),\nminimum_score number(3));\n\ninsert into subjects values (1, 'SQL', 70);\n\ninsert into subjects values (2, 'Machine Learning', 70);\n\ncommit;\n\n-- direction_subjects\ncreate table direction_subjects\n(direction_subject_id number(7) constraint direct_sub_id primary key,\ndirection_id number(7) constraint direct_id_fk references directions (direction_id),\nsubject_id number(7) constraint subject_id_fk references subjects (subject_id));\n\ninsert into direction_subjects values (1, 2, 1);\n\ninsert into direction_subjects values (2, 1, 1);\n\ninsert into direction_subjects values (3, 1, 2);\n\ncommit;\n\n-- component_types\ncreate table component_types\n(component_type_id number(7) constraint com_type_id_pk primary key,\ntype varchar2(50));\n\ninsert into component_types values (1, 'Homework');\n\ninsert into component_types values (2, 'Quiz');\n\ncommit;\n\n-- components\ncreate table components\n(component_id number(7) constraint component_id_pk primary key,\nsubject_id number(7) constraint sub_id_fk references subjects (subject_id),\nminimum_score number(3),\ncomponent_type_id number(7) constraint com_type_id_fk references component_types (component_type_id),\nweight number(3));\n\ninsert into components values (1, 1, 60, 1, 20);\n\ninsert into components values (2, 2, 65, 2, 50);\n\ncommit;\n\n-- results\ncreate table results \n(result_id number(7) constraint result_id_pk primary key,\nissue_date date,\ngrade number(3),\nparticipant_id number(7) constraint particip_id_fk references participants (participant_id),\ncomponent_id number(7) constraint component_id_fk references components (component_id));\n\ninsert into results\nvalues\n  (1, to_date('04/05/2020', 'DD/MM/YYYY'), 87, 2, 2);\n\ncommit;\n\n-- learning_material_types\ncreate table learning_material_types\n(material_type_id number(7) constraint lear_material_id_pk primary key,\ntype varchar(50));\n\ninsert into learning_material_types values (1, 'Book');\n\ninsert into learning_material_types values (2, 'PPT');\n\ninsert into learning_material_types values (3, 'Youtube Video');\n\ncommit;\n\n-- learning_materials\ncreate table learning_materials\n(learning_material_id number(7),\nurl varchar2(3000),\nsubject_id number(7) constraint subj_id_fk references subjects (subject_id),\nmaterial_type_id number(7) constraint material_type_id_fk references learning_material_types (material_type_id));\n\ninsert into learning_materials values (1, 'www.youtube.com', 1, 3);\n\ncommit;\n\n-- sessions\ncreate table sessions \n(session_id number(7) constraint session_id_pk primary key,\nstart_date date,\nend_date date,\nintership_id number(7) constraint inter_idd_fk references interships (intership_id),\ndirection_id number(7) constraint direct_fk references directions (direction_id),\nsubject_id number(7) constraint subject_fk references subjects (subject_id));\n\n-- attendances\ncreate table attendances\n(attendance_id number(7) constraint attend_id_pk primary key,\nparticipant_id number(7) constraint participant_fk references participants (participant_id),\nsession_id number(7) constraint session_id_fk references sessions (session_id),\nstatus varchar2(25));\n\n\n/*\nშექმენით view სადაც იქნება სტაჟირების შესახებ ინფორმაცია:\nსახელი,\nდაწყების თარიღი,\nდასრულების თარიღი,\nმონაწილეების რაოდენობა.\n*/\ncreate view intership_info\nas select i.name, i.start_date, i.end_date, (select count(participant_id) from participants p where p.intership_id = i.intership_id) number_of_participants\nfrom interships i;\n\n/*\nშექმენით view სადაც იქნება მონაწილეებზე ინფორმაცია:\nსტაჟირების სახელი,\nმონაწილის სახელი,\nმიმართულება,\nშერჩევის რამდენი ეტაპი გაიარა,\nსტაჟირების სტატუსი(გაიარა, ვერ გაიარა, მიმდინარე,ვერ მოხვდა სტაჟირებაზე)\n*/\ncreate view participant_info\nas select i.name intership, p.first_name, p.last_name, d.name direction, \n(select count(h2.participant_id) from hiring_layers h2 where h2.participant_id = p.participant_id) number_of_layers,\ncase when p.direction_id is null then 'Rejected'\n  when i.end_date is null then 'Present'\n  when (select h2.result from hiring_layers h2 join hiring_layer_types l on h2.layer_type_id = l.layer_type_id where h2.participant_id = p.participant_id and l.type = 'Intership') > (select minimum_score from subjects) then 'Passed'\n    else 'Failed'\n      end  status\nfrom interships i,\nparticipants p,\ndirections d\nwhere i.intership_id = p.intership_id\nand (d.direction_id = p.direction_id or p.direction_id is null);\n\n/*\nშექნენით view სადაც იქნება მიმართულებებზე ინფორმაცია:\nმიმართულების სახელი,\nრა საგნები ისწავლება\n*/\ncreate view direction_info\nas select d.name direction, s.name subject\nfrom directions d,\ndirection_subjects ds,\nsubjects s\nwhere d.direction_id = ds.direction_id\nand ds.subject_id = s.subject_id;\n\n/*\nშექმენით view სადც იქნება საგნების ინფორმაცია:\nსაგნის სახელი,\nსაგნის ზღვარი,\nშეფასების კომპონენტები(სახელი, ზღვარი , წონა).\n*/\ncreate view subject_info\nas select s.name, s.minimum_score subject_min_score, ct.type, c.minimum_score component_min_score, c.weight\nfrom subjects s,\ncomponent_types ct,\ncomponents c\nwhere s.subject_id = c.subject_id \nand c.component_type_id = ct.component_type_id;\n\n/*\nშექმენით view დასწრების აღრიცხვა მონაწილეების მიხედვით:\nსტაჟირებაზე მიმართულების მიხედვით:\nრამდენი ჩატარდა,\nრამდენს დაესწრო,\nრამდენს არ დაესწრო.\n*/\ncreate view attendance_info\nas select p.first_name, p.last_name, \n(select count(s2.session_id) from sessions s2 where s2.direction_id = p.direction_id) lectures,\n(select count(a2.attendance_id) from attendances a2 where a2.participant_id = p.participant_id and a2.status = 'Present') present,\n(select count(a2.attendance_id) from attendances a2 where a2.participant_id = p.participant_id and a2.status = 'Absent') absent\nfrom participants p,\nattendances a,\nsessions s\nwhere p.participant_id = a.participant_id\nand a.session_id = s.session_id;\n"
  },
  {
    "path": "tests/syntax-tests/source/SSH Config/ssh_config",
    "content": "# A comment\n\nIdentityFile \"custom/id_ed25519\"\nPort 1984\n\nHost example.com\n    User dummy\n    Compression no\n\nHost *.co.uk\n    BatchMode no\n    GlobalKnownHostsFile \"/etc/ssh/ssh_known_hosts\"\n"
  },
  {
    "path": "tests/syntax-tests/source/SSHD Config/sshd_config",
    "content": "# This test sshd config file is intended for syntax testing\n# purposes only.\n#\n# Definitely do not use this in production for sshd.\n\nPort 22\n\n# Here's a directive commented out:\n#ListenAddress 0.0.0.0\n\nListenAddress 127.0.0.1\n\nHostKey /etc/ssh/ssh_host_rsa_key\nIgnoreRhosts yes\nPrintMotd yes\nX11Forwarding no\nAllowAgentForwarding no\nPermitRootLogin forced-commands-only\nSyslogFacility AUTH\n\nLogLevel VERBOSE\n\nAuthorizedKeysFile /etc/ssh/authorized-keys/%u\n\nPasswordAuthentication yes\nPermitEmptyPasswords no\nAllowUsers alice\n\n# pass locale information\nAcceptEnv LANG LC_*\n\nBanner /etc/sshd_banner\n\nAllowTcpForwarding yes\nPermitTunnel no\nPermitTTY yes\n"
  },
  {
    "path": "tests/syntax-tests/source/Sass/example.sass",
    "content": "@import \"fonts\"\n\n$theme_dark: (\n  \"background-color\": null\n)\n\n$theme_main: (\n  \"text-size\": 3em\n  \"text-color\": black\n  \"text-shadow\": #36ad 0px 0px 3px\n  \"card-background\": #d6f\n  \"card-shadow\": #11121212 0px 0px 2px 1px\n  \"card-padding\": 1rem\n  \"card-margin\": 0.5in\n  \"image-width\": 600px\n  \"image-height\": 100vh\n  \"background-color\": #dedbef\n  \"i-ran-out-of-placeholders-for-units\": (\n    1vw 100% 60pt\n  )\n)\n\n$current_theme: $theme_main\n\n@mixin themed()\n  $current_theme: $theme_main !global\n  @content\n\n  @media (prefers-color-scheme: dark)\n    $current_theme: $theme_dark !global\n    @content\n\n  .#{\"dark\"} &\n    $current_theme: $theme_dark !global\n    @content\n\n@function theme($variable)\n  @if map-has_key($current_theme, $variable)\n    @return map-get($current_theme, $variable)\n  @else\n    @error \"Unknown theme variable: #{$variable}\"\n\nbody\n  @include themed\n    background-color: theme(\"background-color\")\n    background-image: url(\"https://github.com/sharkdp/bat/raw/master/doc/logo-header.svg\")\n\n\n  header[data-selectable=\"false\"]\n    -webkit-user-select: none\n    -moz-user-select: none\n    -ms-user-select: /* CSS comment */ none\n    cursor: default !important // Sass comment\n\n\n  > div\n    border: #04f 1px solid\n\n    &::after\n      content: \"Pseudo\"\n      color: #2f5f7f\n      box-sizing: border-box\n\n@keyframes rotate\n  0%\n    transform: rotate(0deg)\n  50%\n    transform: rotate(180deg)\n  100%\n    transform: rotate(0rad)\n\n@font-face\n  font-family: \"Example Font\"\n  src: url(example.ttf) format(\"ttf\")\n  src: local(\"Comic Sans MS\")\n\n"
  },
  {
    "path": "tests/syntax-tests/source/Scala/ConcurrentEffectLaws.scala",
    "content": "/*\n * Copyright (c) 2017-2019 The Typelevel Cats-effect Project Developers\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\npackage cats\npackage effect\npackage laws\n\nimport cats.effect.concurrent.Deferred\nimport cats.syntax.all._\nimport cats.laws._\n\nimport scala.concurrent.Promise\n\ntrait ConcurrentEffectLaws[F[_]] extends ConcurrentLaws[F] with EffectLaws[F] {\n  implicit def F: ConcurrentEffect[F]\n\n  def runAsyncRunCancelableCoherence[A](fa: F[A]) = {\n    val fa1 = IO.async[A] { cb =>\n      F.runAsync(fa)(r => IO(cb(r))).unsafeRunSync()\n    }\n    val fa2 = IO.cancelable[A] { cb =>\n      F.toIO(F.runCancelable(fa)(r => IO(cb(r))).unsafeRunSync())\n    }\n    fa1 <-> fa2\n  }\n\n  def runCancelableIsSynchronous[A] = {\n    val lh = Deferred.uncancelable[F, Unit].flatMap { latch =>\n      val spawned = Promise[Unit]()\n      // Never ending task\n      val ff = F.cancelable[A] { _ =>\n        spawned.success(()); latch.complete(())\n      }\n      // Execute, then cancel\n      val token = F.delay(F.runCancelable(ff)(_ => IO.unit).unsafeRunSync()).flatMap { cancel =>\n        // Waiting for the task to start before cancelling it\n        Async.fromFuture(F.pure(spawned.future)) >> cancel\n      }\n      F.liftIO(F.runAsync(token)(_ => IO.unit).toIO) *> latch.get\n    }\n    lh <-> F.unit\n  }\n\n  def runCancelableStartCancelCoherence[A](a: A) = {\n    // Cancellation via runCancelable\n    val f1: F[A] = for {\n      effect1 <- Deferred.uncancelable[F, A]\n      latch <- F.delay(Promise[Unit]())\n      never = F.cancelable[A] { _ =>\n        latch.success(()); effect1.complete(a)\n      }\n      cancel <- F.liftIO(F.runCancelable(never)(_ => IO.unit).toIO)\n      // Waiting for the task to start before cancelling it\n      _ <- Async.fromFuture(F.pure(latch.future)) // TODO get rid of this, IO, and Future here\n      _ <- cancel\n      result <- effect1.get\n    } yield result\n\n    // Cancellation via start.flatMap(_.cancel)\n    val f2: F[A] = for {\n      effect2 <- Deferred.uncancelable[F, A]\n      // Using a latch to ensure that the task started\n      latch <- Deferred.uncancelable[F, Unit]\n      never = F.bracket(latch.complete(()))(_ => F.never[Unit])(_ => effect2.complete(a))\n      fiber <- F.start(never)\n      // Waiting for the task to start before cancelling it\n      _ <- latch.get\n      _ <- F.start(fiber.cancel)\n      result <- effect2.get\n    } yield result\n\n    f1 <-> f2\n  }\n\n  def toIORunCancelableConsistency[A](fa: F[A]) =\n    ConcurrentEffect.toIOFromRunCancelable(fa) <-> F.toIO(fa)\n}\n\nobject ConcurrentEffectLaws {\n  def apply[F[_]](implicit F0: ConcurrentEffect[F], contextShift0: ContextShift[F]): ConcurrentEffectLaws[F] =\n    new ConcurrentEffectLaws[F] {\n      val F = F0\n      val contextShift = contextShift0\n    }\n}\n"
  },
  {
    "path": "tests/syntax-tests/source/Scala/LICENSE.md",
    "content": "The `ConcurrentEffectLaws.scala` file has been added from https://github.com/typelevel/cats-effect under the following license:\n\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"
  },
  {
    "path": "tests/syntax-tests/source/Slim/test.slim",
    "content": "doctype html\nhtml lang=locale\n  head\n    meta charset='utf-8'\n    title #{@title ? \"#{@title} | Testing\" : 'Testing'}\n    == stylesheet('app.css')\n\n  body\n    header\n      h1.title Testing\n\n      - @links.each do |link|\n        a href=link.href\n          =link.title\n    div\n      == yield\n\n    - if APP_ENV == 'production'\n      footer\n        p Testing\n"
  },
  {
    "path": "tests/syntax-tests/source/Solidity/ERC721.sol",
    "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\nimport \"./IERC721.sol\";\nimport \"./IERC721Receiver.sol\";\nimport \"./extensions/IERC721Metadata.sol\";\nimport \"../../utils/Address.sol\";\nimport \"../../utils/Context.sol\";\nimport \"../../utils/Strings.sol\";\nimport \"../../utils/introspection/ERC165.sol\";\n\n/**\n * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including\n * the Metadata extension, but not including the Enumerable extension, which is available separately as\n * {ERC721Enumerable}.\n */\ncontract ERC721 is Context, ERC165, IERC721, IERC721Metadata {\n    using Address for address;\n    using Strings for uint256;\n\n    // Token name\n    string private _name;\n\n    // Token symbol\n    string private _symbol;\n\n    // Mapping from token ID to owner address\n    mapping (uint256 => address) private _owners;\n\n    // Mapping owner address to token count\n    mapping (address => uint256) private _balances;\n\n    // Mapping from token ID to approved address\n    mapping (uint256 => address) private _tokenApprovals;\n\n    // Mapping from owner to operator approvals\n    mapping (address => mapping (address => bool)) private _operatorApprovals;\n\n    /**\n     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\n     */\n    constructor (string memory name_, string memory symbol_) {\n        _name = name_;\n        _symbol = symbol_;\n    }\n\n    /**\n     * @dev See {IERC165-supportsInterface}.\n     */\n    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {\n        return interfaceId == type(IERC721).interfaceId\n            || interfaceId == type(IERC721Metadata).interfaceId\n            || super.supportsInterface(interfaceId);\n    }\n\n    /**\n     * @dev See {IERC721-balanceOf}.\n     */\n    function balanceOf(address owner) public view virtual override returns (uint256) {\n        require(owner != address(0), \"ERC721: balance query for the zero address\");\n        return _balances[owner];\n    }\n\n    /**\n     * @dev See {IERC721-ownerOf}.\n     */\n    function ownerOf(uint256 tokenId) public view virtual override returns (address) {\n        address owner = _owners[tokenId];\n        require(owner != address(0), \"ERC721: owner query for nonexistent token\");\n        return owner;\n    }\n\n    /**\n     * @dev See {IERC721Metadata-name}.\n     */\n    function name() public view virtual override returns (string memory) {\n        return _name;\n    }\n\n    /**\n     * @dev See {IERC721Metadata-symbol}.\n     */\n    function symbol() public view virtual override returns (string memory) {\n        return _symbol;\n    }\n\n    /**\n     * @dev See {IERC721Metadata-tokenURI}.\n     */\n    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n        require(_exists(tokenId), \"ERC721Metadata: URI query for nonexistent token\");\n\n        string memory baseURI = _baseURI();\n        return bytes(baseURI).length > 0\n            ? string(abi.encodePacked(baseURI, tokenId.toString()))\n            : '';\n    }\n\n    /**\n     * @dev Base URI for computing {tokenURI}. Empty by default, can be overriden\n     * in child contracts.\n     */\n    function _baseURI() internal view virtual returns (string memory) {\n        return \"\";\n    }\n\n    /**\n     * @dev See {IERC721-approve}.\n     */\n    function approve(address to, uint256 tokenId) public virtual override {\n        address owner = ERC721.ownerOf(tokenId);\n        require(to != owner, \"ERC721: approval to current owner\");\n\n        require(_msgSender() == owner || isApprovedForAll(owner, _msgSender()),\n            \"ERC721: approve caller is not owner nor approved for all\"\n        );\n\n        _approve(to, tokenId);\n    }\n\n    /**\n     * @dev See {IERC721-getApproved}.\n     */\n    function getApproved(uint256 tokenId) public view virtual override returns (address) {\n        require(_exists(tokenId), \"ERC721: approved query for nonexistent token\");\n\n        return _tokenApprovals[tokenId];\n    }\n\n    /**\n     * @dev See {IERC721-setApprovalForAll}.\n     */\n    function setApprovalForAll(address operator, bool approved) public virtual override {\n        require(operator != _msgSender(), \"ERC721: approve to caller\");\n\n        _operatorApprovals[_msgSender()][operator] = approved;\n        emit ApprovalForAll(_msgSender(), operator, approved);\n    }\n\n    /**\n     * @dev See {IERC721-isApprovedForAll}.\n     */\n    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n        return _operatorApprovals[owner][operator];\n    }\n\n    /**\n     * @dev See {IERC721-transferFrom}.\n     */\n    function transferFrom(address from, address to, uint256 tokenId) public virtual override {\n        //solhint-disable-next-line max-line-length\n        require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n\n        _transfer(from, to, tokenId);\n    }\n\n    /**\n     * @dev See {IERC721-safeTransferFrom}.\n     */\n    function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override {\n        safeTransferFrom(from, to, tokenId, \"\");\n    }\n\n    /**\n     * @dev See {IERC721-safeTransferFrom}.\n     */\n    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override {\n        require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n        _safeTransfer(from, to, tokenId, _data);\n    }\n\n    /**\n     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n     * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n     *\n     * `_data` is additional data, it has no specified format and it is sent in call to `to`.\n     *\n     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n     * implement alternative mechanisms to perform token transfer, such as signature-based.\n     *\n     * Requirements:\n     *\n     * - `from` cannot be the zero address.\n     * - `to` cannot be the zero address.\n     * - `tokenId` token must exist and be owned by `from`.\n     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n     *\n     * Emits a {Transfer} event.\n     */\n    function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual {\n        _transfer(from, to, tokenId);\n        require(_checkOnERC721Received(from, to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n    }\n\n    /**\n     * @dev Returns whether `tokenId` exists.\n     *\n     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n     *\n     * Tokens start existing when they are minted (`_mint`),\n     * and stop existing when they are burned (`_burn`).\n     */\n    function _exists(uint256 tokenId) internal view virtual returns (bool) {\n        return _owners[tokenId] != address(0);\n    }\n\n    /**\n     * @dev Returns whether `spender` is allowed to manage `tokenId`.\n     *\n     * Requirements:\n     *\n     * - `tokenId` must exist.\n     */\n    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\n        require(_exists(tokenId), \"ERC721: operator query for nonexistent token\");\n        address owner = ERC721.ownerOf(tokenId);\n        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));\n    }\n\n    /**\n     * @dev Safely mints `tokenId` and transfers it to `to`.\n     *\n     * Requirements:\n     *\n     * - `tokenId` must not exist.\n     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n     *\n     * Emits a {Transfer} event.\n     */\n    function _safeMint(address to, uint256 tokenId) internal virtual {\n        _safeMint(to, tokenId, \"\");\n    }\n\n    /**\n     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n     */\n    function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual {\n        _mint(to, tokenId);\n        require(_checkOnERC721Received(address(0), to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n    }\n\n    /**\n     * @dev Mints `tokenId` and transfers it to `to`.\n     *\n     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n     *\n     * Requirements:\n     *\n     * - `tokenId` must not exist.\n     * - `to` cannot be the zero address.\n     *\n     * Emits a {Transfer} event.\n     */\n    function _mint(address to, uint256 tokenId) internal virtual {\n        require(to != address(0), \"ERC721: mint to the zero address\");\n        require(!_exists(tokenId), \"ERC721: token already minted\");\n\n        _beforeTokenTransfer(address(0), to, tokenId);\n\n        _balances[to] += 1;\n        _owners[tokenId] = to;\n\n        emit Transfer(address(0), to, tokenId);\n    }\n\n    /**\n     * @dev Destroys `tokenId`.\n     * The approval is cleared when the token is burned.\n     *\n     * Requirements:\n     *\n     * - `tokenId` must exist.\n     *\n     * Emits a {Transfer} event.\n     */\n    function _burn(uint256 tokenId) internal virtual {\n        address owner = ERC721.ownerOf(tokenId);\n\n        _beforeTokenTransfer(owner, address(0), tokenId);\n\n        // Clear approvals\n        _approve(address(0), tokenId);\n\n        _balances[owner] -= 1;\n        delete _owners[tokenId];\n\n        emit Transfer(owner, address(0), tokenId);\n    }\n\n    /**\n     * @dev Transfers `tokenId` from `from` to `to`.\n     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n     *\n     * Requirements:\n     *\n     * - `to` cannot be the zero address.\n     * - `tokenId` token must be owned by `from`.\n     *\n     * Emits a {Transfer} event.\n     */\n    function _transfer(address from, address to, uint256 tokenId) internal virtual {\n        require(ERC721.ownerOf(tokenId) == from, \"ERC721: transfer of token that is not own\");\n        require(to != address(0), \"ERC721: transfer to the zero address\");\n\n        _beforeTokenTransfer(from, to, tokenId);\n\n        // Clear approvals from the previous owner\n        _approve(address(0), tokenId);\n\n        _balances[from] -= 1;\n        _balances[to] += 1;\n        _owners[tokenId] = to;\n\n        emit Transfer(from, to, tokenId);\n    }\n\n    /**\n     * @dev Approve `to` to operate on `tokenId`\n     *\n     * Emits a {Approval} event.\n     */\n    function _approve(address to, uint256 tokenId) internal virtual {\n        _tokenApprovals[tokenId] = to;\n        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);\n    }\n\n    /**\n     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n     * The call is not executed if the target address is not a contract.\n     *\n     * @param from address representing the previous owner of the given token ID\n     * @param to target address that will receive the tokens\n     * @param tokenId uint256 ID of the token to be transferred\n     * @param _data bytes optional data to send along with the call\n     * @return bool whether the call correctly returned the expected magic value\n     */\n    function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)\n        private returns (bool)\n    {\n        if (to.isContract()) {\n            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {\n                return retval == IERC721Receiver(to).onERC721Received.selector;\n            } catch (bytes memory reason) {\n                if (reason.length == 0) {\n                    revert(\"ERC721: transfer to non ERC721Receiver implementer\");\n                } else {\n                    // solhint-disable-next-line no-inline-assembly\n                    assembly {\n                        revert(add(32, reason), mload(reason))\n                    }\n                }\n            }\n        } else {\n            return true;\n        }\n    }\n\n    /**\n     * @dev Hook that is called before any token transfer. This includes minting\n     * and burning.\n     *\n     * Calling conditions:\n     *\n     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\n     * transferred to `to`.\n     * - When `from` is zero, `tokenId` will be minted for `to`.\n     * - When `to` is zero, ``from``'s `tokenId` will be burned.\n     * - `from` cannot be the zero address.\n     * - `to` cannot be the zero address.\n     *\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n     */\n    function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { }\n}\n"
  },
  {
    "path": "tests/syntax-tests/source/Solidity/LICENSE.md",
    "content": "The `ERC721.sol` file has been added from\n[](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/ERC721.sol)\nunder the following license:\n\nThe MIT License (MIT)\n\nCopyright (c) 2016-2020 zOS Global Limited\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n"
  },
  {
    "path": "tests/syntax-tests/source/Strace/ls.strace",
    "content": "execve(\"/usr/bin/ls\", [\"ls\"], 0x7fff7d89cea0 /* 34 vars */) = 0\nbrk(NULL)                               = 0x55bc0a294000\naccess(\"/etc/ld.so.preload\", R_OK)      = -1 ENOENT (No such file or directory)\nopenat(AT_FDCWD, \"/etc/ld.so.cache\", O_RDONLY|O_CLOEXEC) = 3\nfstat(3, {st_mode=S_IFREG|0644, st_size=45404, ...}) = 0\nmmap(NULL, 45404, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f7066972000\nclose(3)                                = 0\nopenat(AT_FDCWD, \"/lib/x86_64-linux-gnu/libselinux.so.1\", O_RDONLY|O_CLOEXEC) = 3\nread(3, \"\\177ELF\\2\\1\\1\\0\\0\\0\\0\\0\\0\\0\\0\\0\\3\\0>\\0\\1\\0\\0\\0@k\\0\\0\\0\\0\\0\\0\"..., 832) = 832\nfstat(3, {st_mode=S_IFREG|0644, st_size=155296, ...}) = 0\nmmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f7066970000\nmmap(NULL, 2259632, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f7066748000\nmprotect(0x7f706676d000, 2093056, PROT_NONE) = 0\nmmap(0x7f706696c000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x24000) = 0x7f706696c000\nmmap(0x7f706696e000, 6832, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f706696e000\nclose(3)                                = 0\nopenat(AT_FDCWD, \"/lib/x86_64-linux-gnu/libc.so.6\", O_RDONLY|O_CLOEXEC) = 3\nread(3, \"\\177ELF\\2\\1\\1\\3\\0\\0\\0\\0\\0\\0\\0\\0\\3\\0>\\0\\1\\0\\0\\0\\260A\\2\\0\\0\\0\\0\\0\"..., 832) = 832\nfstat(3, {st_mode=S_IFREG|0755, st_size=1824496, ...}) = 0\nmmap(NULL, 1837056, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f7066587000\nmprotect(0x7f70665a9000, 1658880, PROT_NONE) = 0\nmmap(0x7f70665a9000, 1343488, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x22000) = 0x7f70665a9000\nmmap(0x7f70666f1000, 311296, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x16a000) = 0x7f70666f1000\nmmap(0x7f706673e000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1b6000) = 0x7f706673e000\nmmap(0x7f7066744000, 14336, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f7066744000\nclose(3)                                = 0\nopenat(AT_FDCWD, \"/lib/x86_64-linux-gnu/libpcre.so.3\", O_RDONLY|O_CLOEXEC) = 3\nread(3, \"\\177ELF\\2\\1\\1\\0\\0\\0\\0\\0\\0\\0\\0\\0\\3\\0>\\0\\1\\0\\0\\0\\340!\\0\\0\\0\\0\\0\\0\"..., 832) = 832\nfstat(3, {st_mode=S_IFREG|0644, st_size=468944, ...}) = 0\nmmap(NULL, 471304, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f7066513000\nmmap(0x7f7066515000, 335872, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x2000) = 0x7f7066515000\nmmap(0x7f7066567000, 122880, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x54000) = 0x7f7066567000\nmmap(0x7f7066585000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x71000) = 0x7f7066585000\nclose(3)                                = 0\nopenat(AT_FDCWD, \"/lib/x86_64-linux-gnu/libdl.so.2\", O_RDONLY|O_CLOEXEC) = 3\nread(3, \"\\177ELF\\2\\1\\1\\0\\0\\0\\0\\0\\0\\0\\0\\0\\3\\0>\\0\\1\\0\\0\\0000\\21\\0\\0\\0\\0\\0\\0\"..., 832) = 832\nfstat(3, {st_mode=S_IFREG|0644, st_size=14592, ...}) = 0\nmmap(NULL, 16656, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f706650e000\nmmap(0x7f706650f000, 4096, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1000) = 0x7f706650f000\nmmap(0x7f7066510000, 4096, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x2000) = 0x7f7066510000\nmmap(0x7f7066511000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x2000) = 0x7f7066511000\nclose(3)                                = 0\nopenat(AT_FDCWD, \"/lib/x86_64-linux-gnu/libpthread.so.0\", O_RDONLY|O_CLOEXEC) = 3\nread(3, \"\\177ELF\\2\\1\\1\\3\\0\\0\\0\\0\\0\\0\\0\\0\\3\\0>\\0\\1\\0\\0\\0@l\\0\\0\\0\\0\\0\\0\"..., 832) = 832\nfstat(3, {st_mode=S_IFREG|0755, st_size=146968, ...}) = 0\nmmap(NULL, 132288, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f70664ed000\nmmap(0x7f70664f3000, 61440, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x6000) = 0x7f70664f3000\nmmap(0x7f7066502000, 24576, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x15000) = 0x7f7066502000\nmmap(0x7f7066508000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1a000) = 0x7f7066508000\nmmap(0x7f706650a000, 13504, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f706650a000\nclose(3)                                = 0\nmmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f70664eb000\narch_prctl(ARCH_SET_FS, 0x7f70664ec380) = 0\nmprotect(0x7f706673e000, 16384, PROT_READ) = 0\nmprotect(0x7f7066508000, 4096, PROT_READ) = 0\nmprotect(0x7f7066511000, 4096, PROT_READ) = 0\nmprotect(0x7f7066585000, 4096, PROT_READ) = 0\nmprotect(0x7f706696c000, 4096, PROT_READ) = 0\nmprotect(0x55bc08de8000, 4096, PROT_READ) = 0\nmprotect(0x7f70669a5000, 4096, PROT_READ) = 0\nmunmap(0x7f7066972000, 45404)           = 0\nset_tid_address(0x7f70664ec650)         = 1737\nset_robust_list(0x7f70664ec660, 24)     = 0\nrt_sigaction(SIGRTMIN, {sa_handler=0x7f70664f36b0, sa_mask=[], sa_flags=SA_RESTORER|SA_SIGINFO, sa_restorer=0x7f70664ff730}, NULL, 8) = 0\nrt_sigaction(SIGRT_1, {sa_handler=0x7f70664f3740, sa_mask=[], sa_flags=SA_RESTORER|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f70664ff730}, NULL, 8) = 0\nrt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0\nprlimit64(0, RLIMIT_STACK, NULL, {rlim_cur=8192*1024, rlim_max=RLIM64_INFINITY}) = 0\nstatfs(\"/sys/fs/selinux\", 0x7ffd655ea110) = -1 ENOENT (No such file or directory)\nstatfs(\"/selinux\", 0x7ffd655ea110)      = -1 ENOENT (No such file or directory)\nbrk(NULL)                               = 0x55bc0a294000\nbrk(0x55bc0a2b5000)                     = 0x55bc0a2b5000\nopenat(AT_FDCWD, \"/proc/filesystems\", O_RDONLY|O_CLOEXEC) = 3\nfstat(3, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0\nread(3, \"nodev\\tsysfs\\nnodev\\trootfs\\nnodev\\tr\"..., 1024) = 333\nread(3, \"\", 1024)                       = 0\nclose(3)                                = 0\naccess(\"/etc/selinux/config\", F_OK)     = -1 ENOENT (No such file or directory)\nopenat(AT_FDCWD, \"/usr/lib/locale/locale-archive\", O_RDONLY|O_CLOEXEC) = 3\nfstat(3, {st_mode=S_IFREG|0644, st_size=3031696, ...}) = 0\nmmap(NULL, 3031696, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f7066206000\nclose(3)                                = 0\nioctl(1, TCGETS, {B38400 opost isig icanon echo ...}) = 0\nioctl(1, TIOCGWINSZ, {ws_row=46, ws_col=173, ws_xpixel=0, ws_ypixel=0}) = 0\nopenat(AT_FDCWD, \".\", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 3\nfstat(3, {st_mode=S_IFDIR|0700, st_size=4096, ...}) = 0\ngetdents64(3, /* 3 entries */, 32768)   = 80\ngetdents64(3, /* 0 entries */, 32768)   = 0\nclose(3)                                = 0\nfstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(0x88, 0), ...}) = 0\nwrite(1, \"ls.strace\\n\", 10)             = 10\nclose(1)                                = 0\nclose(2)                                = 0\nexit_group(0)                           = ?\n+++ exited with 0 +++\n"
  },
  {
    "path": "tests/syntax-tests/source/Stylus/LICENSE.md",
    "content": "The `gradients.styl` file has been added from https://github.com/stylus/nib under the following license:\n\n```text\nThe MIT License (MIT)\n\nCopyright (c) 2014 TJ Holowaychuk <tj@vision-media.ca>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject 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, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n```\n"
  },
  {
    "path": "tests/syntax-tests/source/Stylus/gradients.styl",
    "content": "@import 'config'\n\n/*\n * Implicit color stop position.\n */\n\npos-in-stops(i, stops)\n  len = length(stops)\n  if len - 1 == i\n    100%\n  else if i\n    unit(i / len * 100, '%')\n  else\n    0\n\n/*\n * Normalize color stops:\n *\n *   - (color pos) -> (pos color)\n *   - (color) -> (implied-pos color)\n *\n */\n\nnormalize-stops(stops)\n  stops = clone(stops)\n  for stop, i in stops\n    if length(stop) == 1\n      color = stop[0]\n      stop[0] = pos-in-stops(i, stops)\n      stop[1] = color\n    else if typeof(stop[1]) == 'unit'\n      pos = stop[1]\n      stop[1] = stop[0]\n      stop[0] = pos\n  stops\n\n/*\n * Join color stops with the given translation function.\n */\n\njoin-stops(stops, translate)\n  str = ''\n  len = length(stops)\n  for stop, i in stops\n    str += ', ' if i\n    pos = stop[0]\n    color = stop[1]\n    str += translate(color, pos)\n  unquote(str)\n\n/*\n * Standard color stop.\n */\n\nstd-stop(color, pos)\n  '%s %s' % (color pos)\n\n/*\n * Create a linear gradient with the given start position\n * and variable number of color stops.\n *\n * Examples:\n *\n *    background: linear-gradient(top, red, green, blue)\n *    background: linear-gradient(bottom, red, green 50%, blue)\n *    background: linear-gradient(bottom, red, 50% green, blue)\n *    background: linear-gradient(bottom, red, 50% green, 90% white, blue)\n *\n */\n\nlinear-gradient(start, stops...)\n  error('color stops required') unless length(stops)\n\n  unquote('linear-gradient(' + join(', ',arguments) + ')')\n\n/*\n * Create a linear gradient image with the given start position\n * and variable number of color stops.\n */\n\nlinear-gradient-image(start, stops...)\n  error('node-canvas is required for linear-gradient-image()') unless has-canvas\n  stops = stops[0] if length(stops) == 1\n  error('gradient image size required') unless start[0] is a 'unit'\n  size = start[0]\n  start = start[1] or 'top'\n  grad = create-gradient-image(size, start)\n  stops = normalize-stops(stops)\n  add-color-stop(grad, stop[0], stop[1]) for stop in stops\n  'url(%s)' % gradient-data-uri(grad)\n"
  },
  {
    "path": "tests/syntax-tests/source/Svelte/App.svelte",
    "content": "<script>\n\timport { onMount } from 'svelte';\n\timport List from './List.svelte';\n\timport Item from './Item.svelte';\n\n\tlet item;\n\tlet page;\n\n\tasync function hashchange() {\n\t\t// the poor man's router!\n\t\tconst path = window.location.hash.slice(1);\n\n\t\tif (path.startsWith('/item')) {\n\t\t\tconst id = path.slice(6);\n\t\t\titem = await fetch(`https://node-hnapi.herokuapp.com/item/${id}`).then(r => r.json());\n\n\t\t\twindow.scrollTo(0,0);\n\t\t} else if (path.startsWith('/top')) {\n\t\t\tpage = +path.slice(5);\n\t\t\titem = null;\n\t\t} else {\n\t\t\twindow.location.hash = '/top/1';\n\t\t}\n\t}\n\n\tonMount(hashchange);\n</script>\n\n<script type=\"text/livescript\">\n\t// This block is a regression test for a bat panic when a LiveScript syntax definition is missing\n</script>\n\n<style lang=\"text/postcss\">\n\t/* This block is a regression test for a bat panic when a PostCSS syntax definition is missing */\n</style>\n\n<style>\n\tmain {\n\t\tposition: relative;\n\t\tmax-width: 800px;\n\t\tmargin: 0 auto;\n\t\tmin-height: 101vh;\n\t\tpadding: 1em;\n\t}\n\n\tmain :global(.meta) {\n\t\tcolor: #999;\n\t\tfont-size: 12px;\n\t\tmargin: 0 0 1em 0;\n\t}\n\n\tmain :global(a) {\n\t\tcolor: rgb(0,0,150);\n\t}\n</style>\n\n<svelte:window on:hashchange={hashchange}/>\n\n<main>\n\t{#if item}\n\t\t<Item {item} returnTo=\"#/top/{page}\"/>\n\t{:else if page}\n\t\t<List {page}/>\n\t{/if}\n</main>\n"
  },
  {
    "path": "tests/syntax-tests/source/Svelte/LICENSE.md",
    "content": "The `App.svelte` file has been added from:\n\nhttps://github.com/sveltejs/svelte/blob/master/site/content/examples/21-miscellaneous/01-hacker-news/App.svelte\n\nUnder the following license:\n\n\nCopyright (c) 2016-20 [these people](https://github.com/sveltejs/svelte/graphs/contributors)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "tests/syntax-tests/source/Swift/test.swift",
    "content": "class Person {\n// We can define class property here\nvar age  = 25\n// Implement Class initializer. Initializers are called when a new object of this class is created\ninit() { \n   print(“A new instance of this class Person is created.”) \n } \n} \n// We can now create an instance of class Person - an object - by putting parentheses after the class name\nlet personObj =  Person()\n// Once an instance of Person class is created we can access its properties using the dot “.” syntax.\nprint(“This person age is \\(personObj.age)”)\n\nimport Foundation\nclass Friend : Comparable {\n    let name : String\n    let age : Int\n    \n    init(name : String, age: Int) {\n        self.name = name\n        self.age = age\n    }\n}\nfunc < (lhs: Friend, rhs: Friend) -> Bool {\n    return lhs.age < rhs.age }; func > (lhs: Friend, rhs: Friend) -> Bool {\n    return lhs.age > rhs.age\n}\nfunc == (lhs: Friend, rhs: Friend) -> Bool {\n    var returnValue = false\n    if (lhs.name == rhs.name) && (lhs.age == rhs.age)\n    {\n        returnValue = true\n    }\n    return returnValue\n}\n\n  let friend1 = Friend(name: \"Sergey\", age: 35)\n        let friend2 = Friend(name: \"Sergey\", age: 30)\n        \n        print(\"Compare Friend object. Same person? (friend1 == friend2)\")\n\nfunc sayHelloWorld() {\n    print(\"Hello World\")\n}\n// Call function\nsayHelloWorld()\n\nfunc printOutFriendNames(names: String...)  {\n  \n    for name in names {\n \n        print(name)\n    }\n \n}\n// Call the printOutFriendNames with two parameters\nprintOutFriendNames(\"Sergey\", \"Bill\")\n// Call the function with more parameters\nprintOutFriendNames(\"Sergey\", \"Bill\", \"Max\")\n\nlet simpleClosure = {\n    print(\"From a simpleClosure\")\n}\n// Call closure\nsimpleClosure() \n\nlet fullName = { (firstName:String, lastName:String)->String in\n    return firstName + \" \" + lastName\n}\n// Call Closure\nlet myFullName = fullName(\"Sergey\", \"Kargopolov\")\nprint(\"My full name is \\(myFullName)\")\n\nlet myDictionary = [String:String]()\n// Another way to create an empty dictionary\nlet myDictionary2:[String:String] = [:]\n// Keys in dictionary can also be of type Int\nlet myDictionary3 = [Int:String]()\n\nvar myDictionary = [\"first_name\": \"Sergey\", \"last_name\": \"Kargopolov\"]\n// print to preview\nprint(myDictionary)\n// Add a new key with a value\nmyDictionary[\"user_id\"] = \"f5h7ru0tJurY8f7g5s6fd\"\n// We should now have 3 key value pairs printed\nprint(myDictionary)\n\nvar myDictionary = [\"first_name\": \"Sergey\", \"last_name\": \"Kargopolov\"]\n// Loop through dictionary keys and print values\nfor (key,value) in myDictionary {\n    print(\"\\(key) = \\(value)\")\n}\n class Friend {\n    let name : String\n    let age : Int\n    \n    init(name : String, age: Int) {\n        self.name = name\n        self.age = age\n    }\n}\n\n var friends:[Friend] = []\n        \n        let friend1 = Friend(name: \"Sergey\", age: 30)\n        let friend2 = Friend(name: \"Bill\", age: 35)\n        let friend3 = Friend(name: \"Michael\", age: 21)\n        \n        friends.append(friend1)\n        friends.append(friend2)\n        friends.append(friend3)\n        \n        printFriends(friends: friends)\n        \n        // Get sorted array in descending order (largest to the smallest number)\n        let sortedFriends = friends.sorted(by: { $0.age > $1.age })\n        printFriends(friends: sortedFriends)\n        \n        // Get sorted array in ascending order (smallest to the largest number)\n        let sortedFriendsAscendingOrder = friends.sorted(by: { $0.age < $1.age })\n        printFriends(friends: sortedFriendsAscendingOrder)\n\n\n func printFriends(friends: [Friend])\n    {\n        for friendEntry in friends {\n            print(\"Name: \\(friendEntry.name), age: \\(friendEntry.age)\")\n        }\n    }\n\nimport UIKit\nclass ViewController: UIViewController  {\noverride func viewDidLoad() {\n    super.viewDidLoad()\n}\noverride func viewWillAppear(_ animated: Bool) {\n    super.viewWillAppear(animated)\n    \n    // Create destination URL \n    let documentsUrl:URL =  FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first as URL!\n    let destinationFileUrl = documentsUrl.appendingPathComponent(\"downloadedFile.jpg\")\n    \n    //Create URL to the source file you want to download\n    let fileURL = URL(string: \"https://s3.amazonaws.com/learn-swift/IMG_0001.JPG\")\n    \n    let sessionConfig = URLSessionConfiguration.default\n    let session = URLSession(configuration: sessionConfig)\n \n    let request = URLRequest(url:fileURL!)\n    \n    let task = session.downloadTask(with: request) { (tempLocalUrl, response, error) in\n        if let tempLocalUrl = tempLocalUrl, error == nil {\n            // Success\n            if let statusCode = (response as? HTTPURLResponse)?.statusCode {\n                print(\"Successfully downloaded. Status code: \\(statusCode)\")\n            }\n            \n            do {\n                try FileManager.default.copyItem(at: tempLocalUrl, to: destinationFileUrl)\n            } catch (let writeError) {\n                print(\"Error creating a file \\(destinationFileUrl) : \\(writeError)\")\n            }\n            \n        } else {\n            print(\"Error took place while downloading a file. Error description: %@\", error?.localizedDescription);\n        }\n    }\n    task.resume()\n    \n  }\n}\n\n  do {\n            \n            // Convert JSON Object received from server side into Swift NSArray.\n            // Note the use \"try\"\n            if let convertedJsonIntoArray = try JSONSerialization.JSONObjectWithData(data!, options: []) as? NSArray {\n            }\n            \n        } catch let error as NSError {\n            print(error.localizedDescription)\n        }\n\nDispatchQueue.global(qos: .userInitiated).async {\n            // Do some time consuming task in this background thread\n            // Mobile app will remain to be responsive to user actions\n            \n            print(\"Performing time consuming task in this background thread\")\n            \n           DispatchQueue.main.async {\n                // Task consuming task has completed\n                // Update UI from this block of code\n                print(\"Time consuming task has completed. From here we are allowed to update user interface.\")\n            }\n        }\n\nimport UIKit\nclass ViewController: UIViewController {\n    \n    override func viewDidLoad() {\n        super.viewDidLoad()\n        // Do any additional setup after loading the view, typically from a nib.\n        \n        let button = UIButton(type: UIButtonType.system) as UIButton\n        \n        let xPostion:CGFloat = 50\n        let yPostion:CGFloat = 100\n        let buttonWidth:CGFloat = 150\n        let buttonHeight:CGFloat = 45\n        \n        button.frame = CGRect(x:xPostion, y:yPostion, width:buttonWidth, height:buttonHeight)\n        \n        button.backgroundColor = UIColor.lightGray\n        button.setTitle(\"Tap me\", for: UIControlState.normal)\n        button.tintColor = UIColor.black\n        button.addTarget(self, action: #selector(ViewController.buttonAction(_:)), for: .touchUpInside)\n        \n        self.view.addSubview(button)\n    }\n    \n    func buttonAction(_ sender:UIButton!)\n    {\n        print(\"Button tapped\")\n    }\n    \n    override func didReceiveMemoryWarning() {\n        super.didReceiveMemoryWarning()\n        // Dispose of any resources that can be recreated.\n    }\n    \n    \n}\n\nimport UIKit\nclass ViewController: UIViewController {\n    \n    override func viewDidLoad() {\n        super.viewDidLoad()\n        \n        //Create Activity Indicator\n        let myActivityIndicator = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.gray)\n        \n        // Position Activity Indicator in the center of the main view\n        myActivityIndicator.center = view.center\n        \n        // If needed, you can prevent Acivity Indicator from hiding when stopAnimating() is called\n        myActivityIndicator.hidesWhenStopped = false\n        \n        // Start Activity Indicator\n        myActivityIndicator.startAnimating()\n        \n        // Call stopAnimating() when need to stop activity indicator\n        //myActivityIndicator.stopAnimating()\n        \n        \n        view.addSubview(myActivityIndicator)\n    }\n    \n    override func didReceiveMemoryWarning() {\n        super.didReceiveMemoryWarning()\n    }\n    \n}\n\n\n\n\n\n"
  },
  {
    "path": "tests/syntax-tests/source/Syslog/example.syslog",
    "content": "Apr  4 00:00:01 hostname-here systemd[1]: logrotate.service: Succeeded.\nApr  4 00:00:01 hostname-here systemd[1]: Finished Rotate log files.\nApr  4 00:00:01 hostname-here colord[920]: failed to get session [pid 137485]: No data available\nApr  4 00:00:21 hostname-here kernel: [55604.908232] audit: type=1400 audit(1617483621.094:28): apparmor=\"DENIED\" operation=\"capable\" profile=\"/usr/sbin/cups-browsed\" pid=59311 comm=\"cups-browsed\" capability=23  capname=\"sys_nice\"\nApr  4 00:01:38 hostname-here systemd-resolved[721]: Server returned error NXDOMAIN, mitigating potential DNS violation DVE-2018-0001, retrying transaction with reduced feature level UDP.\nApr  4 00:04:46 hostname-here ntpd[952]: Soliciting pool server 255.76.59.37\nApr  4 00:05:21 hostname-here ntpd[952]: ::1 local addr 0:0:0:0:0:0:0:1 -> <null>\nApr  4 00:06:29 hostname-here ntpd[952]: receive: Unexpected origin timestamp 0xe414a8d1.82e825f5 does not match aorg 0xe414a8d5.82c50d8c from server@127.0.0.1 xmt 0xe414a8d1.e671d7c4\nApr  4 09:30:01 hostname-here CRON[89278]: (root) CMD ([ -x /etc/init.d/anacron ] && if [ ! -d /run/systemd/system ]; then /usr/sbin/invoke-rc.d anacron start >/dev/null; fi)\nApr  4 16:32:07 hostname-here NetworkManager[740]: <info>  [1617629527.1101] manager: NetworkManager state is now CONNECTED_GLOBAL\nApr  4 22:00:45 hostname-here dbus-daemon[1094]: [session uid=1000 pid=1094] Successfully activated service 'io.github.celluloid_player.Celluloid'\nAug 11 13:29:06 hostname-here insomnia_insomnia.desktop[142666]: 13:29:06.316 › [updater] Updater not running platform=linux dev=false\nAug 11 13:36:34 192.168.220.5 nginx: 2021/08/11 13:36:34 [debug] 2031#2031: epoll add event: fd:6 op:1 ev:00002001\nAug 11 21:31:08 ::1 nginx: 2021/08/11 21:31:08 [debug] 760831#760831: epoll add event: fd:6 op:1 ev:10000001\nAug 11 21:40:31 hostname-here scop hello\nAug 16 21:38:21 hostname-here systemd[1]: Finished Cleanup of Temporary Directories.\n2025-02-08 20:52:11.039 - setfont: ERROR kdfontop.c:183 put_font_kdfontop: Unable to load such font with such kernel version\n"
  },
  {
    "path": "tests/syntax-tests/source/SystemVerilog/output.sv",
    "content": "`timescale 1ns/1ps\n\n// Design Code\nmodule ADDER(\n    input clk,\n    input [7:0]\ta,\n    input [7:0]\tb,\n    input bIsPos,\n    output reg [8:0] result\n);\n\n    always @ (posedge clk) begin\n        if (bIsPos) begin\t\n            result <= a + b;\n        end else begin\n            result <= a - b;\n        end\n    end\n\nendmodule: ADDER\n\ninterface adder_if(\n    input bit clk,\n    input [7:0] a,\n    input [7:0] b,\n    input bIsPos,\n    input [8:0] result\n);\n\n    clocking cb @(posedge clk);\n        output a;\n        output b;\n        output bIsPos;\n        input result;\n    endclocking : cb\n\nendinterface: adder_if\n\n\nbind ADDER adder_if my_adder_if(\n    .clk(clk),\n    .a(a),\n    .b(b),\n    .bIsPos(bIsPos),\n    .result(result)\n);\n\n\n// Testbench Code\nimport uvm_pkg::*;\n`include \"uvm_macros.svh\"\n\nclass testbench_env extends uvm_env;\n\n    virtual adder_if m_if;\n\n    function new(string name, uvm_component parent = null);\n        super.new(name, parent);\n    endfunction\n    \n    function void connect_phase(uvm_phase phase);\n        assert(uvm_resource_db#(virtual adder_if)::read_by_name(get_full_name(), \"adder_if\", m_if));\n    endfunction: connect_phase\n\n    task run_phase(uvm_phase phase);\n        phase.raise_objection(this);\n        `uvm_info(get_name(), \"Starting test!\", UVM_HIGH);\n        begin\n            int a = 8'h4, b = 8'h5;\n            @(m_if.cb);\n            m_if.cb.a <= a;\n            m_if.cb.b <= b;\n            m_if.cb.bIsPos <= 1'b1;\n            repeat(2) @(m_if.cb);\n            `uvm_info(get_name(), $sformatf(\"%0d + %0d = %0d\", a, b, m_if.cb.result), UVM_LOW);\n        end\n        `uvm_info(get_name(), \"Ending test!\", UVM_HIGH);\n        phase.drop_objection(this);\n    endtask: run_phase\nendclass\n\n\nmodule top;\n\n    bit clk;\n    env environment;\n    ADDER dut(.clk (clk));\n\n    initial begin\n        environment = new(\"testbench_env\");\n        uvm_resource_db#(virtual adder_if)::set(\"env\", \"adder_if\", dut.my_adder_if);\n        clk = 0;\n        run_test();\n    end\n\n    // Clock generation\t\n    initial begin\n        forever begin\n            #(1) clk = ~clk;\n        end\n    end\n    \nendmodule\n"
  },
  {
    "path": "tests/syntax-tests/source/TOML/Cargo.toml",
    "content": "[package]\nauthors = [\"David Peter <mail@david-peter.de>\"]\ncategories = [\"command-line-utilities\"]\ndescription=\"A cat(1) clone with wings.\"\nhomepage = \"https://github.com/sharkdp/bat\"\nlicense = \"MIT/Apache-2.0\"\nname = \"bat\"\nreadme = \"README.md\"\nrepository = \"https://github.com/sharkdp/bat\"\nversion = \"0.15.4\"\nexclude = [\n    \"assets/syntaxes/*\",\n    \"assets/themes/*\",\n]\nbuild = \"build.rs\"\nedition = '2018'\n\n[features]\ndefault = [\"application\"]\n# Feature required for bat the application. Should be disabled when depending on\n# bat as a library.\napplication = [\n    \"atty\",\n    \"clap\",\n    \"dirs\",\n    \"git\",\n    \"lazy_static\",\n    \"liquid\",\n    \"paging\",\n    \"wild\",\n    \"regex-onig\",\n]\ngit = [\"git2\"] # Support indicating git modifications\npaging = [\"shell-words\"] # Support applying a pager on the output\nregex-onig = [\"syntect/regex-onig\"] # Use the \"oniguruma\" regex engine\nregex-fancy = [\"syntect/regex-fancy\"] # Use the rust-only \"fancy-regex\" engine\n\n[dependencies]\natty = { version = \"0.2.14\", optional = true }\nansi_term = \"^0.12.1\"\nansi_colours = \"^1.0\"\nconsole = \"0.11.3\"\ndirs = { version = \"3.0\", optional = true }\nlazy_static = { version = \"1.4\", optional = true }\nwild = { version = \"2.0\", optional = true }\ncontent_inspector = \"0.2.4\"\nencoding = \"0.2\"\nshell-words = { version = \"1.0.0\", optional = true }\nunicode-width = \"0.1.8\"\nglobset = \"0.4\"\nserde = { version = \"1.0\", features = [\"derive\"] }\nserde_yaml = \"0.8\"\nsemver = \"0.10\"\npath_abs = { version = \"0.5\", default-features = false }\n\n[dependencies.git2]\nversion = \"0.13\"\noptional = true\ndefault-features = false\n\n[dependencies.syntect]\nversion = \"4.2.0\"\ndefault-features = false\nfeatures = [\"parsing\", \"yaml-load\", \"dump-load\", \"dump-create\"]\n\n[dependencies.clap]\nversion = \"2.33\"\noptional = true\ndefault-features = false\nfeatures = [\"suggestions\", \"color\", \"wrap_help\"]\n\n[dependencies.error-chain]\nversion = \"0.12\"\ndefault-features = false\n\n[dev-dependencies]\ntempdir = \"0.3\"\nassert_cmd = \"1.0.1\"\npredicates = \"1.0.5\"\n\n[build-dependencies]\nclap = { version = \"2.33\", optional = true }\nliquid = { version = \"0.21\", optional = true }\n\n[profile.release]\nlto = true\ncodegen-units = 1\n"
  },
  {
    "path": "tests/syntax-tests/source/Tcl/test.tcl",
    "content": "set part1 hello\nset part2 how; set part3 are\nset part4 you\n\nset part2;\n\nset greeting $part1$part2$part3$part4\n\nset somevar {\n    This is a literal $ sign, and this \\} escaped\n    brace remains uninterpreted\n}\n\nset name Neo\nset greeting \"Hello, $name\"\n\nvariable name NotNeo\n\nnamespace eval people {\n    set name NeoAgain\n}\n\n"
  },
  {
    "path": "tests/syntax-tests/source/TeX/main.tex",
    "content": "% !TeX program = lualatex\n \n\\documentclass{article}\n\\usepackage{verse}\n\\usepackage{fontspec}\n\n\\newcommand{\\attrib}[1]{\\nopagebreak{\\raggedleft\\footnotesize #1\\par}}\n\\renewcommand{\\poemtitlefont}{\\normalfont\\large\\itshape\\centering}\n\n\\setmainfont{DejaVu Sans}\n\n\\begin{document}\n\n\\poemtitle{სევდამოსილი}\n\\settowidth{\\versewidth}{Than Tycho Brahe, or Erra Pater:}\n\n\\begin{verse}[\\versewidth]\n    ცა პირს შეიკრავს, ჩამობნელდება, \\\\\n    გრილი ნიავი მოცერავს ფერდობს, \\\\\n    ჩვენი სიცოცხლე უმალ ნელდება, \\\\\n    იმედი აქცევს არსს უმოქმედოს. \\\\\n\n    \\bigskip\n\n    სხვისი წესებით აგებულ სხეულს, \\\\\n    მიჯაჭვულია გონებით, ხორცით, \\\\\n    მილიონიდან განსახებს ეულს, \\\\\n    დილის ნათება ეწყება ლოცვით. \\\\\n\n    \\bigskip\n\n    ახალგაზრდაა, დიდსულოვანი, \\\\\n    ზოგჯერ რაინდი, ხანაც მგოსანი, \\\\\n    თავდადებული, კონტრნაღმოსანი, \\\\\n    თვისი სამიზნე - დოტას როშანი. \\\\\n\n    \\bigskip\n\n    თუ შეიყვარებ, არასდროს გავნებს, \\\\\n    დღეგამოშვებით იბარებს თავნებს, \\\\\n    ყველას ჰპატიობს, გულქვას და თავნებს, \\\\\n    სხვის მაგივრადაც საკუთარ თავს ვნებს. \\\\\n\n    \\bigskip\n\n    მისი სახელი - თენგიზი (დიდი), \\\\\n    სახის იერი - ნაზი და მშვიდი, \\\\\n    ვიზუალურად - ათიდან შვიდი, \\\\\n    ხანმოკლე ვითარც ეფემერიდი. \\\\\n\n    \\bigskip\n\n    მე ის მახარებს რომ სხვას ახარებ, \\\\\n    შაირს რომ იტყვი, იმასხარავებ, \\\\\n    კეთილ საქმეს რომ არვის ახარბებ, \\\\\n    გულიანად რომ გადიხარხარებ. \\\\\n\n    \\bigskip\n\n    როცა დაგჭირდეს, ჭირში თუ ლხინში, \\\\\n    მიწაზე, წყალში... ნავში თუ ქარში, \\\\\n    ჩათვალე, მიდგას კოდურად ჯინში, \\\\\n    სათქმელი არის? იქნება პირში. \\\\\n\n    \\bigskip\n\n    შენ არ იჯავრო, - კარგად იქნები, \\\\\n    მიხედე შენს თავს, ეძიე უკვლევს, \\\\\n    მეგზურად გყვება ჩუმი ფიქრები, \\\\\n    შეუმჩნევლად რომ გითვლიან სულ წლებს. \\\\\n\n    \\bigskip\n\n    გილოცავ ამ დღეს, დედამ რომ გშობა, \\\\\n    როცა შეჰმატე გარემოს ფერები, \\\\\n    ერთად გეტაროთ აღდგომა, შობა, \\\\\n    მე კი ლექსიდან მოგეფერები. \\\\\n\n    \\bigskip\n\\end{verse}\n\n\\attrib{გიორგი ბერიაშვილი (1999--$\\infty)$}\n\n\\end{document}\n"
  },
  {
    "path": "tests/syntax-tests/source/Terraform/main.tf",
    "content": "provider \"github\" {\n  organization = var.github_organization\n}\n\nresource \"tls_private_key\" \"deploy_key\" {\n  algorithm = \"RSA\"\n  rsa_bits  = \"4096\"\n}\n\nresource \"null_resource\" \"private_key_file\" {\n  triggers = {\n    deploy_key = tls_private_key.deploy_key.private_key_pem\n  }\n\n  provisioner \"file\" {\n    content     = tls_private_key.deploy_key.private_key_pem\n    destination = \"~/${var.repo_name}_deploy_key.pem\"\n\n    connection {\n      type        = \"ssh\"\n      user        = \"centos\"\n      private_key = var.terraform_ssh_key\n      host        = var.server_ip\n    }\n  }\n\n  provisioner \"remote-exec\" {\n    inline = [\n      \"sudo mv ~/${var.repo_name}_deploy_key.pem /app/ssh_keys/\",\n      \"sudo chmod 0400 /app/ssh_keys/${var.repo_name}_deploy_key.pem\",\n      \"sudo chown app:app /app/ssh_keys/${var.repo_name}_deploy_key.pem\",\n    ]\n\n    connection {\n      type        = \"ssh\"\n      user        = \"centos\"\n      private_key = var.terraform_ssh_key\n      host        = var.server_ip\n    }\n  }\n}\n\nresource \"github_repository_deploy_key\" \"repo_deploy_key\" {\n  title      = \"${var.env_name} Deploy Key\"\n  repository = var.repo_name\n  key        = tls_private_key.deploy_key.public_key_openssh\n  read_only  = var.read_only\n}\n"
  },
  {
    "path": "tests/syntax-tests/source/Textile/test.textile",
    "content": "###. Single line comment\n\n###..\nMulti line comment.\n\nThis line is also part of comment.\n\nContinues till next block element\n\np. This is not a comment, but I am a paragraph.\n\n<!-- HTML comments can also be used -->\n\n\nh1. This is an <h1>\n\nh2. This is an <h2>\n\nh3. This is an <h3>\n\nh4. This is an <h4>\n\nh5. This is an <h5>\n\nh6. This is an <h6>\n\n--\n\n* Item\n** Sub-Item\n* Another item\n** Another sub-item\n** Yet another sub-item\n*** Three levels deep\n\np{color:red}. This line will be red.\n\n%span% are enclosed in percent symbols.\n\ndiv. This is a new div element\n"
  },
  {
    "path": "tests/syntax-tests/source/Todo.txt/todo.txt",
    "content": "Rule 1.1: Priority\n\n/// Should have priority ///\n(A) Thank Mom for the meatballs @phone\n(B) Schedule Goodwill pickup +GarageSale @phone\n\n/// Should not have priority ///\nReally gotta call Mom (A) @phone @someday\n(b) Get back to the boss\n(B)->Submit TPS report\n\n\nRule 1.2: Creation date\n\n/// Date should be after priority ///\n2011-03-02 Document +TodoTxt task format\n(A) 2011-03-02 Call Mom\n\n/// Should not have creation date ///\n(A) Call Mom 2011-03-02\n\n\nRule 1.3: Context and Projects \n\n/// Contexts and projects can appear anywhere ///\n(A) Call Mom +Family +PeaceLoveAndHappiness @iphone @phone to celebrate!\n\n/// No context ///\nEmail SoAndSo at soandso@example.com\n\n/// No project ///\nLearn how to add 2+2\n\n\nRule 2.1: Completed task\n\n/// Complete task ///\nx 2011-03-03 Call Mom\nx With @contexts +projects and key:value\n\n/// Not completed tasks ///\nxylophone lesson\nX 2012-01-01 Make resolutions\n(A) x Find ticket prices\n\n\nRule 2.2: Completion date\n\n/// Only completion date is valuable ///\nx Completion date is optional\nx 2022-10-21 But you can specify it\nx 2011-03-02 2011-03-01 \n\n\nAdditional definition\n\n/// Properties ///\nDecide on present for Mom due:2022-01-01 pri:1\n\n\n\nUnspecified\n\n/// Delayed tasks with WAIT keyword ///\nWAIT for @Patric to finish his task with +program\n"
  },
  {
    "path": "tests/syntax-tests/source/TypeScript/LICENSE.md",
    "content": "The `example.ts` file has been added from https://www.typescriptlang.org/docs/handbook/ under the following license: \n\nThe MIT License (MIT)\nCopyright (c) Microsoft Corporation\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and \nassociated documentation files (the \"Software\"), to deal in the Software without restriction, \nincluding without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, \nand/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, \nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial \nportions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT \nNOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. \nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, \nWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE \nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "tests/syntax-tests/source/TypeScript/example.cts",
    "content": "const dummy: string = \"Regression test for https://github.com/sharkdp/bat/pull/2236\";\n"
  },
  {
    "path": "tests/syntax-tests/source/TypeScript/example.ts",
    "content": "let letNumber = 10;\nconst constNumber = 20;\n\nconst bool: boolean = true;\nconst list: number[] = [1, 2, 3];\nconst array: Array<number> = [1, 2, 3];\nconst pair: [string, number] = ['hello', 10];\n\nfor (let i = 0; i < list.length; i += 1) {\n  console.log(list[i]);\n}\n\nif (bool) {\n  console.log('True');\n} else {\n  console.log('False');\n}\n\nconst str: string = 'Jake';\nconst templateStr: string = `Hello, ${str}!`;\n\n// A comment\n\n/*\n * Multiline comments\n * Multiline comments\n */\n\ninterface SquareConfig {\n  label: string;\n  color?: string;\n  width?: number;\n  [propName: string]: any;\n}\n\ninterface SearchFunc {\n  (source: string, subString: string): boolean;\n}\n\nenum Color {\n  Red,\n  Green,\n}\n\ntype Easing = \"ease-in\" | \"ease-out\" | \"ease-in-out\";\n\nclass Greeter {\n  private readonly greeting: string;\n\n  constructor(message: string) {\n    this.greeting = message;\n  }\n\n  greet() {\n    return \"Hello, \" + this.greeting;\n  }\n}\n\nlet greeter = new Greeter(\"world\");\n\nclass Animal {\n  move(distanceInMeters: number = 0) {\n    console.log(`Animal moved ${distanceInMeters}m.`);\n  }\n}\n\nclass Dog extends Animal {\n  bark() {\n    console.log(\"Woof! Woof!\");\n  }\n}\n\nconst dog = new Dog();\ndog.bark();\ndog.move(10);\ndog.bark();\n\nclass Point {\n  x: number;\n  y: number;\n}\n\ninterface Point3d extends Point {\n  z: number;\n}\n\nlet point3d: Point3d = { x: 1, y: 2, z: 3 };\n\nfunction add(x, y) {\n  return x + y;\n}\n\nlet myAdd = function (x, y) {\n  return x + y;\n};\n\n(function () {\n  console.log('IIFE');\n}());\n\nfunction identity<T>(arg: T): T {\n  return arg;\n}\n\nlet myIdentity: <T>(arg: T) => T = identity;\n\nclass GenericNumber<T> {\n  zeroValue: T;\n  add: (x: T, y: T) => T;\n}\n"
  },
  {
    "path": "tests/syntax-tests/source/TypeScriptReact/LICENSE.md",
    "content": "The `app.tsx` file has been added from https://github.com/Lemoncode/react-typescript-samples under the following license: \n\n```text\nThe MIT License (MIT)\n\nCopyright (c) 2016 brauliodiez\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"
  },
  {
    "path": "tests/syntax-tests/source/TypeScriptReact/app.tsx",
    "content": "import * as React from \"react\";\nimport { HelloComponent } from \"./hello\";\nimport { NameEditComponent } from \"./nameEdit\";\n\nexport const App = () => {\n  const [name, setName] = React.useState(\"defaultUserName\");\n  const [editingName, setEditingName] = React.useState(\"defaultUserName\");\n\n  const loadUsername = () => {\n    setTimeout(() => {\n      setName(\"name from async call\");\n      setEditingName(\"name from async call\");\n    }, 500);\n  };\n\n  React.useEffect(() => {\n    loadUsername();\n  }, []);\n\n  const setUsernameState = () => {\n    setName(editingName);\n  };\n\n  return (\n    <>\n      <HelloComponent userName={name} />\n      <NameEditComponent\n        initialUserName={name}\n        editingName={editingName}\n        onNameUpdated={setUsernameState}\n        onEditingNameUpdated={setEditingName}\n      />\n    </>\n  );\n};\n"
  },
  {
    "path": "tests/syntax-tests/source/Typst/test.typ",
    "content": "#set text(9.5pt)\n\n= Heading\n\n- Bullet 1\n- Bullet 2\n- Bullet 3\n\n+ List 1\n+ List 2\n+ List 3\n\n#figure(\n  table(\n    columns: (auto, auto),\n    table.header(\n        [Name], [Age],\n    ),\n    [John], [50],\n    [Jane], [48],\n  ),\n  caption: [People],\n)\n\n```python\ndef foo():\n  print(\"hi\")\n```\n"
  },
  {
    "path": "tests/syntax-tests/source/VHDL/test.vhdl",
    "content": "-- This is a single-line comment\n\nlibrary IEEE;\nuse IEEE.STD_LOGIC_1164.ALL;\nuse IEEE.NUMERIC_STD.ALL;\n\nentity SyntaxTest is\n    generic (\n        DATA_WIDTH : integer := 8\n    );\n    port (\n        clk     : in  std_logic;\n        rst     : in  std_logic;\n        a, b    : in  std_logic_vector(DATA_WIDTH - 1 downto 0);\n        sel     : in  std_logic;\n        result  : out std_logic_vector(DATA_WIDTH - 1 downto 0);\n        flag    : out std_logic\n    );\nend SyntaxTest;\n\narchitecture Behavioral of SyntaxTest is\n\n    signal tmp : std_logic_vector(DATA_WIDTH - 1 downto 0);\n    signal done : std_logic := '0';\n\n    type state_type is (IDLE, LOAD, EXECUTE, DONE);\n    signal state : state_type := IDLE;\n\nbegin\n\n    process(clk, rst)\n        variable i : integer := 0;\n    begin\n        if rst = '1' then\n            tmp   <= (others => '0');\n            flag  <= '0';\n            state <= IDLE;\n\n        elsif rising_edge(clk) then\n            case state is\n                when IDLE =>\n                    if sel = '1' then\n                        tmp <= a and b;\n                        state <= EXECUTE;\n                    else\n                        tmp <= a or b;\n                        state <= LOAD;\n                    end if;\n\n                when LOAD =>\n                    tmp <= a xor b;\n                    state <= EXECUTE;\n\n                when EXECUTE =>\n                    if i < DATA_WIDTH then\n                        tmp(i) <= not tmp(i);\n                        i := i + 1;\n                    else\n                        state <= DONE;\n                    end if;\n\n                when DONE =>\n                    flag <= '1';\n                    state <= IDLE;\n\n                when others =>\n                    state <= IDLE;\n            end case;\n        end if;\n    end process;\n\n    result <= tmp;\n\nend Behavioral;"
  },
  {
    "path": "tests/syntax-tests/source/Verilog/LICENSE.md",
    "content": "The `div_pipelined.v` file has been added from https://github.com/seldridge/verilog under the following license: \n\n```text\n                             Apache License\n                        Version 2.0, January 2004\n                     http://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. 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\n2. 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\n3. 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\n4. 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\n5. 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\n6. 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\n7. 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\n8. 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\n9. 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\nEND OF TERMS AND CONDITIONS\n\nAPPENDIX: 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\nCopyright {yyyy} {name of copyright owner}\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n```\n"
  },
  {
    "path": "tests/syntax-tests/source/Verilog/div_pipelined.v",
    "content": "// Copyright 2018 Schuyler Eldridge\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// Implements a fixed-point parameterized pipelined division\n// operation. Outputs are expected to be on range [-1,1), techincally\n// [-1,2^(BITS-1)-1/2^(BITS-1)]. There is no convergent rounding.\n//\n// [TODO] Implement optional convergent rounding and some form of\n// variable output binary point placement. There are arguments in\n// these changes that make sense (specifically, adding an additional\n// bit results in a gain of one value when all the other 2^6 values\n// greater than 1 aren't used). Other improvements that are needed: 1)\n// quotient_gen is getting smaller by one bit in every stage, it would\n// make more sense to generate this as such, 2) there's some weird\n// initial behavior after rst_n is deasserted, you get weird output on\n// the quotient line for a number of cycles.\n//\n// [TODO] This doesn't exactly behave as expected if you specify\n// different BITS and STAGES parameters (which for a functional\n// module, should be implemented). Note, that this technically works,\n// but needs more investigation to fully understand its properties.\n\n`timescale 1ns / 1ps\nmodule div_pipelined\n  (\n   input                 clk,\n   input                 rst_n,\n   input                 start,\n   input [BITS-1:0]      dividend,\n   input [BITS-1:0]      divisor,\n   output reg            data_valid,\n   output reg            div_by_zero,\n   output reg [STAGES-1:0] quotient\n   //   output reg [7:0]      quotient_correct\n   );\n\n  // WARNING!!! THESE PARAMETERS ARE INTENDED TO BE MODIFIED IN A TOP\n  // LEVEL MODULE. LOCAL CHANGES HERE WILL, MOST LIKELY, BE\n  // OVERWRITTEN!\n  parameter\n    BITS  = 8,\n    STAGES  = BITS;\n\n  // y = a/bQ\n\n  reg [STAGES-1:0]       start_gen, negative_quotient_gen, div_by_zero_gen;\n  reg [BITS*2*(STAGES-1)-1:0] dividend_gen, divisor_gen, quotient_gen;\n  wire [BITS-1:0]             pad_dividend;\n  wire [BITS-2:0]             pad_divisor;\n\n  assign pad_dividend  = 0;\n  assign pad_divisor  = 0;\n\n  // sign conversion stage\n  always @ (posedge clk or negedge rst_n)\n    begin\n      if (!rst_n) begin\n        div_by_zero_gen[0] <= 0;\n        start_gen[0] <=0;\n        negative_quotient_gen[0] <= 0;\n        dividend_gen[BITS*2-1:0] <= 0;\n        divisor_gen[BITS*2-1:0] <= 0; end\n      else begin\n        div_by_zero_gen[0]       <= (divisor == 0);\n        start_gen[0]             <= start;\n        negative_quotient_gen[0] <= dividend[BITS-1] ^ divisor[BITS-1];\n        dividend_gen[BITS*2-1:0] <= (dividend[BITS-1]) ? ~{dividend,pad_dividend} + 1 : {dividend,pad_dividend};\n        divisor_gen[BITS*2-1:0]  <= (divisor [BITS-1]) ? ~{1'b1,divisor, pad_divisor} + 1 : {1'b0,divisor, pad_divisor};\n      end\n    end\n\n  // first computation stage\n  always @ (posedge clk or negedge rst_n) begin\n    if (!rst_n) begin\n      div_by_zero_gen[1]              <= 0;\n      start_gen[1]                    <= 0;\n      negative_quotient_gen[1]        <= 0;\n      divisor_gen[BITS*2*2-1:BITS*2]  <= 0;\n      quotient_gen[BITS*2-1:0]        <= 0;\n      dividend_gen[BITS*2*2-1:BITS*2] <= 0;\n    end\n    else begin\n      div_by_zero_gen[1]             <= div_by_zero_gen[0];\n      start_gen[1]                   <= start_gen[0];\n      negative_quotient_gen[1]       <= negative_quotient_gen[0];\n      divisor_gen[BITS*2*2-1:BITS*2] <= divisor_gen[BITS*2-1:0] >> 1;\n      if ( dividend_gen[BITS*2-1:0] >= divisor_gen[BITS*2-1:0]) begin\n        quotient_gen[BITS*2-1:0] <= 1 << STAGES - 2;\n        dividend_gen[BITS*2*2-1:BITS*2] <= dividend_gen[BITS*2-1:0] - divisor_gen[BITS*2-1:0];\n      end\n      else begin\n        quotient_gen[BITS*2-1:0] <= 0;\n        dividend_gen[BITS*2*2-1:BITS*2] <= dividend_gen[BITS*2-1:0];\n      end\n    end // else: !if(!rst_n)\n  end // always @ (posedge clk)\n\n  generate\n    genvar            i;\n    for (i = 1; i < STAGES - 2; i = i + 1) begin : pipeline\n      always @ (posedge clk or negedge rst_n) begin\n        if (!rst_n) begin\n          div_by_zero_gen[i+1]                     <= 0;\n          start_gen[i+1]                           <= 0;\n          negative_quotient_gen[i+1]               <= 0;\n          divisor_gen[BITS*2*(i+2)-1:BITS*2*(i+1)] <= 0;\n          quotient_gen[BITS*2*(i+1)-1:BITS*2*i]     <= 0;\n          dividend_gen[BITS*2*(i+2)-1:BITS*2*(i+1)] <= 0;\n        end\n        else begin\n          div_by_zero_gen[i+1]                     <= div_by_zero_gen[i];\n          start_gen[i+1]                           <= start_gen[i];\n          negative_quotient_gen[i+1]               <= negative_quotient_gen[i];\n          divisor_gen[BITS*2*(i+2)-1:BITS*2*(i+1)] <= divisor_gen[BITS*2*(i+1)-1:BITS*2*i] >> 1;\n          if (dividend_gen[BITS*2*(i+1)-1:BITS*2*i] >= divisor_gen[BITS*2*(i+1)-1:BITS*2*i]) begin\n            quotient_gen[BITS*2*(i+1)-1:BITS*2*i] <= quotient_gen[BITS*2*i-1:BITS*2*(i-1)] | (1 << (STAGES-2-i));\n            dividend_gen[BITS*2*(i+2)-1:BITS*2*(i+1)] <= dividend_gen[BITS*2*(i+1)-1:BITS*2*i] - divisor_gen[BITS*2*(i+1)-1:BITS*2*i];\n          end\n          else begin\n            quotient_gen[BITS*2*(i+1)-1:BITS*2*i]     <= quotient_gen[BITS*2*i-1:BITS*2*(i-1)];\n            dividend_gen[BITS*2*(i+2)-1:BITS*2*(i+1)] <= dividend_gen[BITS*2*(i+1)-1:BITS*2*i];\n          end\n        end // else: !if(!rst_n)\n      end // always @ (posedge clk or negedge rst_n)\n    end // block: pipeline\n  endgenerate\n\n  // last computation stage\n  always @ (posedge clk or negedge rst_n) begin\n    if (!rst_n) begin\n      div_by_zero_gen[STAGES-1]                           <= 0;\n      start_gen[STAGES-1]                                 <= 0;\n      negative_quotient_gen[STAGES-1]                     <= 0;\n      quotient_gen[BITS*2*(STAGES-1)-1:BITS*2*(STAGES-2)] <= 0;\n    end\n    else begin\n      div_by_zero_gen[STAGES-1]       <= div_by_zero_gen[STAGES-2];\n      start_gen[STAGES-1]             <= start_gen[STAGES-2];\n      negative_quotient_gen[STAGES-1] <= negative_quotient_gen[STAGES-2];\n      if ( dividend_gen[BITS*2*(STAGES-1)-1:BITS*2*(STAGES-2)] >= divisor_gen[BITS*2*(STAGES-1)-1:BITS*2*(STAGES-2)] )\n        quotient_gen[BITS*2*(STAGES-1)-1:BITS*2*(STAGES-2)] <= quotient_gen[BITS*2*(STAGES-2)-1:BITS*2*(STAGES-3)] | 1;\n      else\n        quotient_gen[BITS*2*(STAGES-1)-1:BITS*2*(STAGES-2)] <= quotient_gen[BITS*2*(STAGES-2)-1:BITS*2*(STAGES-3)];\n    end // else: !if(!rst_n)\n  end // always @ (posedge clk)\n\n  // sign conversion stage\n  always @ (posedge clk or negedge rst_n) begin\n    if (!rst_n) begin\n      div_by_zero <= 0;\n      data_valid  <= 0;\n      quotient    <= 0;\n    end\n    else begin\n      div_by_zero <= div_by_zero_gen[STAGES-1];\n      data_valid  <= start_gen[STAGES-1];\n      quotient    <= (negative_quotient_gen[STAGES-1]) ? ~quotient_gen[BITS*2*(STAGES-1)-1:BITS*2*(STAGES-2)] + 1 : quotient_gen[BITS*2*(STAGES-1)-1:BITS*2*(STAGES-2)];\n    end\n  end\n\nendmodule\n"
  },
  {
    "path": "tests/syntax-tests/source/VimHelp/helphelp.txt",
    "content": "*helphelp.txt*\tNvim\n\n\n\t\t  VIM REFERENCE MANUAL    by Bram Moolenaar\n\n\nHelp on help files\t\t\t\t\t*helphelp*\n\n                                      Type |gO| to see the table of contents.\n\n==============================================================================\n1. Help commands\t\t\t\t\t*online-help*\n\n\t\t\t*help* *<Help>* *:h* *:help* *<F1>* *i_<F1>* *i_<Help>*\n<Help>\t\tor\n:h[elp]\t\t\tOpen a window and display the help file in read-only\n\t\t\tmode.  If there is a help window open already, use\n\t\t\tthat one.  Otherwise, if the current window uses the\n\t\t\tfull width of the screen or is at least 80 characters\n\t\t\twide, the help window will appear just above the\n\t\t\tcurrent window.  Otherwise the new window is put at\n\t\t\tthe very top.\n\t\t\tThe 'helplang' option is used to select a language, if\n\t\t\tthe main help file is available in several languages.\n\n\t\t\tType |gO| to see the table of contents.\n\n\t\t\t\t\t\t*{subject}* *E149* *E661*\n:h[elp] {subject}\tLike \":help\", additionally jump to the tag {subject}.\n\t\t\tFor example:  >\n\t\t\t\t:help options\n\n<\t\t\t{subject} can include wildcards such as \"*\", \"?\" and\n\t\t\t\"[a-z]\":\n\t\t\t   :help z?\tjump to help for any \"z\" command\n\t\t\t   :help z.\tjump to the help for \"z.\"\n\t\t\tBut when a tag exists it is taken literally:\n\t\t\t   :help :?\tjump to help for \":?\"\n\n\t\t\tIf there is no full match for the pattern, or there\n\t\t\tare several matches, the \"best\" match will be used.\n\t\t\tA sophisticated algorithm is used to decide which\n\t\t\tmatch is better than another one.  These items are\n\t\t\tconsidered in the computation:\n\t\t\t- A match with same case is much better than a match\n\t\t\t  with different case.\n\t\t\t- A match that starts after a non-alphanumeric\n\t\t\t  character is better than a match in the middle of a\n\t\t\t  word.\n\t\t\t- A match at or near the beginning of the tag is\n\t\t\t  better than a match further on.\n\t\t\t- The more alphanumeric characters match, the better.\n\t\t\t- The shorter the length of the match, the better.\n\n\t\t\tThe 'helplang' option is used to select a language, if\n\t\t\tthe {subject} is available in several languages.\n\t\t\tTo find a tag in a specific language, append \"@ab\",\n\t\t\twhere \"ab\" is the two-letter language code.  See\n\t\t\t|help-translated|.\n\n\t\t\tNote that the longer the {subject} you give, the less\n\t\t\tmatches will be found.  You can get an idea how this\n\t\t\tall works by using commandline completion (type CTRL-D\n\t\t\tafter \":help subject\" |c_CTRL-D|).\n\t\t\tIf there are several matches, you can have them listed\n\t\t\tby hitting CTRL-D.  Example: >\n\t\t\t\t:help cont<Ctrl-D>\n\n<\t\t\tInstead of typing \":help CTRL-V\" to search for help\n\t\t\tfor CTRL-V you can type: >\n\t\t\t\t:help ^V\n<\t\t\tThis also works together with other characters, for\n\t\t\texample to find help for CTRL-V in Insert mode: >\n\t\t\t\t:help i^V\n<\n\t\t\tIt is also possible to first do \":help\" and then\n\t\t\tuse \":tag {pattern}\" in the help window.  The\n\t\t\t\":tnext\" command can then be used to jump to other\n\t\t\tmatches, \"tselect\" to list matches and choose one. >\n\t\t\t\t:help index\n\t\t\t\t:tselect /.*mode\n\n<\t\t\tWhen there is no argument you will see matches for\n\t\t\t\"help\", to avoid listing all possible matches (that\n\t\t\twould be very slow).\n\t\t\tThe number of matches displayed is limited to 300.\n\n\t\t\tThe `:help` command can be followed by '|' and another\n\t\t\tcommand, but you don't need to escape the '|' inside a\n\t\t\thelp command.  So these both work: >\n\t\t\t\t:help |\n\t\t\t\t:help k| only\n<\t\t\tNote that a space before the '|' is seen as part of\n\t\t\tthe \":help\" argument.\n\t\t\tYou can also use <NL> or <CR> to separate the help\n\t\t\tcommand from a following command.  You need to type\n\t\t\tCTRL-V first to insert the <NL> or <CR>.  Example: >\n\t\t\t\t:help so<C-V><CR>only\n<\n\n:h[elp]! [subject]\tLike \":help\", but in non-English help files prefer to\n\t\t\tfind a tag in a file with the same language as the\n\t\t\tcurrent file.  See |help-translated|.\n\n\t\t\t\t\t\t\t*:helpc* *:helpclose*\n:helpc[lose]\t\tClose one help window, if there is one.\n\t\t\tVim will try to restore the window layout (including\n\t\t\tcursor position) to the same layout it was before\n\t\t\topening the help window initially.  This might cause\n\t\t\ttriggering several autocommands.\n\n\t\t\t\t\t\t\t*:helpg* *:helpgrep*\n:helpg[rep] {pattern}[@xx]\n\t\t\tSearch all help text files and make a list of lines\n\t\t\tin which {pattern} matches.  Jumps to the first match.\n\t\t\tThe optional [@xx] specifies that only matches in the\n\t\t\t\"xx\" language are to be found.\n\t\t\tYou can navigate through the matches with the\n\t\t\t|quickfix| commands, e.g., |:cnext| to jump to the\n\t\t\tnext one.  Or use |:cwindow| to get the list of\n\t\t\tmatches in the quickfix window.\n\t\t\t{pattern} is used as a Vim regexp |pattern|.\n\t\t\t'ignorecase' is not used, add \"\\c\" to ignore case.\n\t\t\tExample for case sensitive search: >\n\t\t\t\t:helpgrep Uganda\n<\t\t\tExample for case ignoring search: >\n\t\t\t\t:helpgrep uganda\\c\n<\t\t\tExample for searching in French help: >\n\t\t\t\t:helpgrep backspace@fr\n<\t\t\tThe pattern does not support line breaks, it must\n\t\t\tmatch within one line.  You can use |:grep| instead,\n\t\t\tbut then you need to get the list of help files in a\n\t\t\tcomplicated way.\n\t\t\tCannot be followed by another command, everything is\n\t\t\tused as part of the pattern.  But you can use\n\t\t\t|:execute| when needed.\n\t\t\tCompressed help files will not be searched (Fedora\n\t\t\tcompresses the help files).\n\n\t\t\t\t\t\t\t*:lh* *:lhelpgrep*\n:lh[elpgrep] {pattern}[@xx]\n\t\t\tSame as \":helpgrep\", except the location list is used\n\t\t\tinstead of the quickfix list.  If the help window is\n\t\t\talready opened, then the location list for that window\n\t\t\tis used.  Otherwise, a new help window is opened and\n\t\t\tthe location list for that window is set.  The\n\t\t\tlocation list for the current window is not changed\n\t\t\tthen.\n\n\t\t\t\t\t\t\t*:exu* *:exusage*\n:exu[sage]\t\tShow help on Ex commands.  Added to simulate the Nvi\n\t\t\tcommand.\n\n\t\t\t\t\t\t\t*:viu* *:viusage*\n:viu[sage]\t\tShow help on Normal mode commands.  Added to simulate\n\t\t\tthe Nvi command.\n\nWhen no argument is given to |:help| the file given with the 'helpfile' option\nwill be opened.  Otherwise the specified tag is searched for in all \"doc/tags\"\nfiles in the directories specified in the 'runtimepath' option.\n\nIf you would like to open the help in the current window, see this tip:\n|help-curwin|.\n\nThe initial height of the help window can be set with the 'helpheight' option\n(default 20).\n\t\t\t\t\t\t*help-buffer-options*\nWhen the help buffer is created, several local options are set to make sure\nthe help text is displayed as it was intended:\n    'iskeyword'\t\tnearly all ASCII chars except ' ', '*', '\"' and '|'\n    'foldmethod'\t\"manual\"\n    'tabstop'\t\t8\n    'arabic'\t\toff\n    'binary'\t\toff\n    'buflisted'\t\toff\n    'cursorbind'\toff\n    'diff'\t\toff\n    'foldenable'\toff\n    'list'\t\toff\n    'modifiable'\toff\n    'number'\t\toff\n    'relativenumber'\toff\n    'rightleft'\t\toff\n    'scrollbind'\toff\n    'spell'\t\toff\n\nJump to specific subjects by using tags.  This can be done in two ways:\n- Use the \"CTRL-]\" command while standing on the name of a command or option.\n  This only works when the tag is a keyword.  \"<C-Leftmouse>\" and\n  \"g<LeftMouse>\" work just like \"CTRL-]\".\n- use the \":ta {subject}\" command.  This also works with non-keyword\n  characters.\n\nUse CTRL-T or CTRL-O to jump back.\nUse \":q\" to close the help window.\n\nIf there are several matches for an item you are looking for, this is how you\ncan jump to each one of them:\n1. Open a help window\n2. Use the \":tag\" command with a slash prepended to the tag.  E.g.: >\n\t:tag /min\n3. Use \":tnext\" to jump to the next matching tag.\n\nIt is possible to add help files for plugins and other items.  You don't need\nto change the distributed help files for that.  See |add-local-help|.\n\nTo write a local help file, see |write-local-help|.\n\nNote that the title lines from the local help files are automagically added to\nthe \"LOCAL ADDITIONS\" section in the \"help.txt\" help file |local-additions|.\nThis is done when viewing the file in Vim, the file itself is not changed.  It\nis done by going through all help files and obtaining the first line of each\nfile.  The files in $VIMRUNTIME/doc are skipped.\n\n\t\t\t\t\t*:helpt* *:helptags*\n\t\t\t*E150* *E151* *E152* *E153* *E154* *E670* *E856*\n:helpt[ags] [++t] {dir}\n\t\t\tGenerate the help tags file(s) for directory {dir}.\n\t\t\tWhen {dir} is ALL then all \"doc\" directories in\n\t\t\t'runtimepath' will be used.\n\n\t\t\tAll \"*.txt\" and \"*.??x\" files in the directory and\n\t\t\tsub-directories are scanned for a help tag definition\n\t\t\tin between stars.  The \"*.??x\" files are for\n\t\t\ttranslated docs, they generate the \"tags-??\" file, see\n\t\t\t|help-translated|.  The generated tags files are\n\t\t\tsorted.\n\t\t\tWhen there are duplicates an error message is given.\n\t\t\tAn existing tags file is silently overwritten.\n\n\t\t\tThe optional \"++t\" argument forces adding the\n\t\t\t\"help-tags\" tag.  This is also done when the {dir} is\n\t\t\tequal to $VIMRUNTIME/doc.\n\n\t\t\tTo rebuild the help tags in the runtime directory\n\t\t\t(requires write permission there): >\n\t\t\t\t:helptags $VIMRUNTIME/doc\n<\n\n\n==============================================================================\n2. Translated help files\t\t\t\t*help-translated*\n\nIt is possible to add translated help files, next to the original English help\nfiles.  Vim will search for all help in \"doc\" directories in 'runtimepath'.\n\nAt this moment translations are available for:\n\tChinese  - multiple authors\n\tFrench   - translated by David Blanchet\n\tItalian  - translated by Antonio Colombo\n\tJapanese - multiple authors\n\tPolish   - translated by Mikolaj Machowski\n\tRussian  - translated by Vassily Ragosin\nSee the Vim website to find them: http://www.vim.org/translations.php\n\nA set of translated help files consists of these files:\n\n\thelp.abx\n\thowto.abx\n\t...\n\ttags-ab\n\n\"ab\" is the two-letter language code.  Thus for Italian the names are:\n\n\thelp.itx\n\thowto.itx\n\t...\n\ttags-it\n\nThe 'helplang' option can be set to the preferred language(s).  The default is\nset according to the environment.  Vim will first try to find a matching tag\nin the preferred language(s).  English is used when it cannot be found.\n\nTo find a tag in a specific language, append \"@ab\" to a tag, where \"ab\" is the\ntwo-letter language code.  Example: >\n\t:he user-manual@it\n\t:he user-manual@en\nThe first one finds the Italian user manual, even when 'helplang' is empty.\nThe second one finds the English user manual, even when 'helplang' is set to\n\"it\".\n\nWhen using command-line completion for the \":help\" command, the \"@en\"\nextension is only shown when a tag exists for multiple languages.  When the\ntag only exists for English \"@en\" is omitted.  When the first candidate has an\n\"@ab\" extension and it matches the first language in 'helplang' \"@ab\" is also\nomitted.\n\nWhen using |CTRL-]| or \":help!\" in a non-English help file Vim will try to\nfind the tag in the same language.  If not found then 'helplang' will be used\nto select a language.\n\nHelp files must use latin1 or utf-8 encoding.  Vim assumes the encoding is\nutf-8 when finding non-ASCII characters in the first line.  Thus you must\ntranslate the header with \"For Vim version\".\n\nThe same encoding must be used for the help files of one language in one\ndirectory.  You can use a different encoding for different languages and use\na different encoding for help files of the same language but in a different\ndirectory.\n\nHints for translators:\n- Do not translate the tags.  This makes it possible to use 'helplang' to\n  specify the preferred language.  You may add new tags in your language.\n- When you do not translate a part of a file, add tags to the English version,\n  using the \"tag@en\" notation.\n- Make a package with all the files and the tags file available for download.\n  Users can drop it in one of the \"doc\" directories and start use it.\n  Report this to Bram, so that he can add a link on www.vim.org.\n- Use the |:helptags| command to generate the tags files.  It will find all\n  languages in the specified directory.\n\n==============================================================================\n3. Writing help files\t\t\t\t\t*help-writing*\n\nFor ease of use, a Vim help file for a plugin should follow the format of the\nstandard Vim help files, except for the first line.  If you are writing a new\nhelp file it's best to copy one of the existing files and use it as a\ntemplate.\n\nThe first line in a help file should have the following format:\n\n*plugin_name.txt*\t{short description of the plugin}\n\nThe first field is a help tag where \":help plugin_name\" will jump to.  The\nremainder of the line, after a Tab, describes the plugin purpose in a short\nway.  This will show up in the \"LOCAL ADDITIONS\" section of the main help\nfile.  Check there that it shows up properly: |local-additions|.\n\nIf you want to add a version number or last modification date, put it in the\nsecond line, right aligned.\n\nAt the bottom of the help file, place a Vim modeline to set the 'textwidth'\nand 'tabstop' options and the 'filetype' to \"help\".  Never set a global option\nin such a modeline, that can have undesired consequences.\n\n\nTAGS\n\nTo define a help tag, place the name between asterisks (*tag-name*).  The\ntag-name should be different from all the Vim help tag names and ideally\nshould begin with the name of the Vim plugin.  The tag name is usually right\naligned on a line.\n\nWhen referring to an existing help tag and to create a hot-link, place the\nname between two bars (|) eg. |help-writing|.\n\nWhen referring to a Vim command and to create a hot-link, place the\nname between two backticks, eg. inside `:filetype`.  You will see this is\nhighlighted as a command, like a code block (see below).\n\nWhen referring to a Vim option in the help file, place the option name between\ntwo single quotes, eg. 'statusline'\n\nWhen referring to any other technical term, such as a filename or function\nparameter, surround it in backticks, eg. `~/.path/to/init.vim`.\n\n\nHIGHLIGHTING\n\nTo define a column heading, use a tilde character at the end of the line.\nThis will highlight the column heading in a different color.  E.g.\n\nColumn heading~\n\nTo separate sections in a help file, place a series of '=' characters in a\nline starting from the first column.  The section separator line is highlighted\ndifferently.\n\n\t\t\t\t\t\t\t      *help-codeblock*\nTo quote a block of ex-commands verbatim, place a greater than (>) character\nat the end of the line before the block and a less than (<) character as the\nfirst non-blank on a line following the block.  Any line starting in column 1\nalso implicitly stops the block of ex-commands before it.  E.g. >\n    function Example_Func()\n\techo \"Example\"\n    endfunction\n<\n\nThe following are highlighted differently in a Vim help file:\n  - a special key name expressed either in <> notation as in <PageDown>, or\n    as a Ctrl character as in CTRL-X\n  - anything between {braces}, e.g. {lhs} and {rhs}\n\nThe word \"Note\", \"Notes\" and similar automagically receive distinctive\nhighlighting.  So do these:\n\t*Todo\tsomething to do\n\t*Error\tsomething wrong\n\nYou can find the details in $VIMRUNTIME/syntax/help.vim\n\n\n vim:tw=78:ts=8:noet:ft=help:norl:\n"
  },
  {
    "path": "tests/syntax-tests/source/VimL/source.vim",
    "content": "if &compatible\n  set nocompatible\nendif\n\nif has('win32') || has ('win64')\n  let $VIMHOME = $HOME . \"/vimfiles\"\nelseif v:false && v:true\n  echo \"Can't get here\"\nelse\n  let $VIMHOME = $HOME . \"/.vim\"\nendif\n\n\" show existing tab with 2 spaces width\nset tabstop=2\n\" when indenting with '>', use 2 spaces width\nset shiftwidth=2\n\" always set autoindenting on\nset autoindent\n\nautocmd VimEnter * echo \"Hello Vim\"\n\n\" Allow :W and :Wq to save too\ncommand! Wq :wq\ncommand! W :w\n\naugroup vimrc\n    autocmd!\n    autocmd FileType * echo \"New filetype\"\naugroup END\n\nfunction! s:echo(what)\n  return a:what\nendfunction\n\nfunction! HelloWorld(name)\n  let l:function_local = \"function_local_var\"\n  let l:parts = split(l:function_local, \"_\")\n  let l:greeting = \"Hello \" . a:name\n  return s:echo(l:greeting)\nendfunction\n\nfunction! source#Hello()\n  return \"Hello from namespace\"\nendfunction\n\nfunction! EchoFunc(...)\n  for s in a:000\n    echon ' ' . s\n  endfor\nendfunction\n\nimap <C-h> <C-r>=HelloWorld(\"World\")<CR>\n\ncommand! -nargs=? Echo :call EchoFunc(<args>)\n\n\" TODO test stuff\nlet g:global = \"global var\"\nlet s:script_var = \"script var\"\nlet w:window_var = \"window war\"\nlet b:buffer_var = \"buffer war\"\nlet t:tab_var = \"tab war\"\necho v:false\n\n3 + 5\n\necho \"Hello\" ==# \"Hello2\"\necho \"Hello\" ==? \"Hello2\"\necho \"Hello\" == \"Hello2\"\necho \"Hello\" is \"Hello2\"\necho \"Hello\" isnot \"Hello2\"\necho \"Hello\" =~ 'xx*'\necho \"Hello\" !~ \"Hello2\"\necho \"Hello\" !~ \"Hello2\"\n\necho \"/This/should/not/be/a/regex\"\n\n\" Error case from issue #1604 (https://github.com/sharkdp/bat/issues/1064)\nset runtimepath=~/foo/bar\n\nsilent g/Aap/p\n\nlet g:dict = {}\nlet g:dict.item = ['l1', 'l2']\n\nlet g:dict2 = {'dict_item': ['l1', 'l2'], 'di2': 'x'}\n\nsilent g/regex/\nsilent v/regex/\nsilent %s/regex/not_regex/\n\nfiletype plugin indent on\nsyntax enable\n"
  },
  {
    "path": "tests/syntax-tests/source/Vue/example.vue",
    "content": "<template>\n  <div id=\"app\" class=\"container-fluid\">\n    <AppHeader></AppHeader>\n    <transition name=\"page\" mode=\"out-in\" v-if=\"!isLoading\">\n      <router-view></router-view>\n    </transition>\n    <AppLoadingIndicator></AppLoadingIndicator>\n  </div>\n</template>\n\n<template lang='pug'>\n  #container.col\n    p This shall be formatted as Plain Text as long as a Pug syntax definition is missing\n</template>\n\n<script>\nimport AppHeader from \"@/components/AppHeader\";\nimport AppLoadingIndicator from \"@/components/AppLoadingIndicator\";\nimport { mapGetters } from \"vuex\";\n\nexport default {\n  name: \"App\",\n  components: {\n    AppHeader,\n    AppLoadingIndicator,\n  },\n  beforeCreate() {\n    this.$store.dispatch(\"fetchData\");\n  },\n  data: {\n    message: \"Hello!\"\n  },\n  computed: {\n    ...mapGetters({\n      isLoading: \"isLoading\",\n    }),\n  },\n};\n</script>\n\n<style>\nbody {\n  background-color: rgba(72, 163, 184, 0.05) !important;\n}\n\n.page-enter-active,\n.page-leave-active {\n  transition: opacity 0.2s;\n}\n\n.page-enter,\n.page-leave-active {\n  opacity: 0;\n}\n\n.page-enter:hover {\n    opacity: 1;\n}\n\n</style>\n"
  },
  {
    "path": "tests/syntax-tests/source/Vyper/LICENSE.md",
    "content": "The `crowdsale.vy` file has been added from\n[](https://github.com/binodnp/vyper-crowdsale/blob/master/contracts/crowdsale.v.py)\nunder the following license:\n\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"
  },
  {
    "path": "tests/syntax-tests/source/Vyper/crowdsale.vy",
    "content": "# IndividuallyCappedCrowdsale\n# Contributors: Binod Nirvan\n# This file is released under Apache 2.0 license.\n# @dev Crowdsale with a limit for total contributions.\n# Ported from Open Zeppelin\n# https://github.com/OpenZeppelin\n# \n# See https://github.com/OpenZeppelin\n# Open Zeppelin tests ported: Crowdsale.test.js\n\n\n#@dev ERC20/223 Features referenced by this contract\ncontract TokenContract:\n    def transfer(_to: address, _value: uint256) -> bool: modifying\n\n# Event for token purchase logging\n# @param _purchaser who paid for the tokens\n# @param _beneficiary who got the tokens\n# @param _value weis paid for purchase\n# @param _amount amount of tokens purchased\nTokenPurchase: event({_purchaser: indexed(address), _beneficiary: indexed(address), _value: uint256(wei), _amount: uint256})\n\n# The token being sold\ntoken: public(address)\n\n#Address where funds are collected\nwallet: public(address)\n\n# How many token units a buyer gets per wei.\n# The rate is the conversion between wei and the smallest and indivisible token unit.\n# So, if you are using a rate of 1 with a DetailedERC20 token with 3 decimals called TOK\n# 1 wei will give you 1 unit, or 0.001 TOK.\nrate: public(uint256)\n\n#Amount of wei raised\nweiRaised: public(uint256(wei))\n\n@public\ndef __init__(_rate: uint256, _wallet: address, _token: address):\n    \"\"\"\n    @dev Initializes this contract\n    @param _rate Number of token units a buyer gets per wei\n    @param _wallet Address where collected funds will be forwarded to\n    @param _token Address of the token being sold\n    \"\"\"\n\n    assert _rate > 0, \"Invalid value supplied for the parameter \\\"_rate\\\".\"\n    assert _wallet != ZERO_ADDRESS, \"Invalid wallet address.\"\n    assert _token != ZERO_ADDRESS, \"Invalid token address.\"\n\n    self.rate = _rate\n    self.wallet = _wallet\n    self.token = _token\n\n@private\n@constant\ndef getTokenAmount(_weiAmount: uint256) -> uint256:\n    return _weiAmount * self.rate\n\n\n@private\ndef processTransaction(_sender: address, _beneficiary: address, _weiAmount: uint256(wei)):\n    #pre validate\n    assert _beneficiary != ZERO_ADDRESS, \"Invalid address.\"\n    assert _weiAmount != 0, \"Invalid amount received.\"\n\n    #calculate the number of tokens for the Ether contribution.\n    tokens: uint256 = self.getTokenAmount(as_unitless_number(_weiAmount))\n    \n    self.weiRaised += _weiAmount\n\n    #process purchase\n    assert TokenContract(self.token).transfer(_beneficiary, tokens), \"Could not forward funds due to an unknown error.\"\n    log.TokenPurchase(_sender, _beneficiary, _weiAmount, tokens)\n\n    #forward funds to the receiving wallet address.\n    send(self.wallet, _weiAmount)\n\n    #post validate\n\n@public\n@payable\ndef buyTokens(_beneficiary: address):\n    self.processTransaction(msg.sender, _beneficiary, msg.value)\n\n@public\n@payable\ndef __default__():\n    self.processTransaction(msg.sender, msg.sender, msg.value)\n"
  },
  {
    "path": "tests/syntax-tests/source/WGSL/LICENSE.md",
    "content": "The `test.wgsl` file has been added from https://developer.mozilla.org/en-US/docs/Web/API/WebGPU_API under the following license:\n\n```\nAny copyright is dedicated to the Public Domain: https://creativecommons.org/publicdomain/zero/1.0/\n```\n"
  },
  {
    "path": "tests/syntax-tests/source/WGSL/test.wgsl",
    "content": "struct VertexOut {\n  @builtin(position) position : vec4f,\n  @location(0) color : vec4f\n}\n\n@vertex\nfn vertex_main(@location(0) position: vec4f,\n               @location(1) color: vec4f) -> VertexOut\n{\n  var output : VertexOut;\n  output.position = position;\n  output.color = color;\n  return output;\n}\n\n@fragment\nfn fragment_main(fragData: VertexOut) -> @location(0) vec4f\n{\n  return fragData.color;\n}\n"
  },
  {
    "path": "tests/syntax-tests/source/XAML/ItemPage.xaml",
    "content": "<!--\n    //*********************************************************\n    //\n    // Copyright (c) Microsoft. All rights reserved.\n    // THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF\n    // ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY\n    // IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR\n    // PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.\n    //\n    //*********************************************************\n-->\n<Page\n    x:Class=\"AppUIBasics.ItemPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:common=\"using:AppUIBasics.Common\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:data=\"using:AppUIBasics.Data\"\n    xmlns:local=\"using:AppUIBasics\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    x:Name=\"pageRoot\"\n    mc:Ignorable=\"d\">\n\n    <!--\n        This grid acts as a root panel for the page that defines two rows:\n        * Row 0 contains the back button and page title\n        * Row 1 contains the rest of the page layout\n    -->\n    <Grid x:Name=\"rootPanel\" d:DataContext=\"{Binding Groups[0].Items[0], Source={d:DesignData Source=/DataModel/ControlinfoData.json, Type=data:ControlInfoDataSource}}\" Background=\"{ThemeResource ApplicationPageBackgroundThemeBrush}\">\n        <VisualStateManager.VisualStateGroups>\n            <VisualStateGroup>\n                <VisualState>\n                    <VisualState.StateTriggers>\n                        <local:DeviceFamilyTrigger DeviceFamily=\"Windows.Xbox\" />\n                    </VisualState.StateTriggers>\n                    <VisualState.Setters>\n                        <Setter Target=\"svPanel.Margin\" Value=\"0,0,48,27\" />\n                    </VisualState.Setters>\n                </VisualState>\n            </VisualStateGroup>\n            <VisualStateGroup>\n                <VisualState x:Name=\"NormalFrameContent\" />\n                <VisualState x:Name=\"WideFrameContent\">\n                    <VisualState.Setters>\n                        <Setter Target=\"contentFrame.Width\" Value=\"1028\" />\n                        <Setter Target=\"contentFrame.HorizontalAlignment\" Value=\"Left\" />\n                    </VisualState.Setters>\n                </VisualState>\n            </VisualStateGroup>\n            <VisualStateGroup x:Name=\"LayoutVisualStates\">\n                <VisualState x:Name=\"LargeLayout\">\n                    <VisualState.StateTriggers>\n                        <AdaptiveTrigger MinWindowWidth=\"1372\" />\n                    </VisualState.StateTriggers>\n                </VisualState>\n                <VisualState x:Name=\"WideLayout\">\n                    <VisualState.StateTriggers>\n                        <AdaptiveTrigger MinWindowWidth=\"{StaticResource Breakpoint640Plus}\" />\n                    </VisualState.StateTriggers>\n                    <VisualState.Setters>\n                        <Setter Target=\"seeAlsoPanel.Width\" Value=\"Auto\" />\n                        <Setter Target=\"seeAlsoPanel.(Grid.Row)\" Value=\"3\" />\n                        <Setter Target=\"seeAlsoPanel.(Grid.Column)\" Value=\"0\" />\n                        <Setter Target=\"seeAlsoPanel.(Grid.ColumnSpan)\" Value=\"3\" />\n\n                        <Setter Target=\"SourcePanel.(Grid.ColumnSpan)\" Value=\"1\" />\n\n                        <Setter Target=\"DocumentationPanel.(Grid.ColumnSpan)\" Value=\"1\" />\n\n                        <Setter Target=\"RelatedControlsPanel.(Grid.Row)\" Value=\"0\" />\n                        <Setter Target=\"RelatedControlsPanel.(Grid.Column)\" Value=\"2\" />\n                        <Setter Target=\"RelatedControlsPanel.(Grid.ColumnSpan)\" Value=\"1\" />\n\n                        <Setter Target=\"FeedbackPanel.(Grid.Row)\" Value=\"1\" />\n                        <Setter Target=\"FeedbackPanel.(Grid.Column)\" Value=\"2\" />\n                        <Setter Target=\"FeedbackPanel.(Grid.ColumnSpan)\" Value=\"1\" />\n                    </VisualState.Setters>\n                </VisualState>\n                <VisualState x:Name=\"NarrowLayout\">\n                    <VisualState.StateTriggers>\n                        <AdaptiveTrigger MinWindowWidth=\"0\" />\n                    </VisualState.StateTriggers>\n                    <VisualState.Setters>\n                        <Setter Target=\"seeAlsoPanel.Width\" Value=\"Auto\" />\n                        <Setter Target=\"seeAlsoPanel.(Grid.Row)\" Value=\"3\" />\n                        <Setter Target=\"seeAlsoPanel.(Grid.Column)\" Value=\"0\" />\n                        <Setter Target=\"seeAlsoPanel.(Grid.ColumnSpan)\" Value=\"3\" />\n\n                        <Setter Target=\"SourcePanel.(Grid.ColumnSpan)\" Value=\"1\" />\n\n                        <Setter Target=\"DocumentationPanel.(Grid.ColumnSpan)\" Value=\"1\" />\n\n                        <Setter Target=\"RelatedControlsPanel.(Grid.Row)\" Value=\"0\" />\n                        <Setter Target=\"RelatedControlsPanel.(Grid.Column)\" Value=\"2\" />\n                        <Setter Target=\"RelatedControlsPanel.(Grid.ColumnSpan)\" Value=\"1\" />\n\n                        <Setter Target=\"FeedbackPanel.(Grid.Row)\" Value=\"1\" />\n                        <Setter Target=\"FeedbackPanel.(Grid.Column)\" Value=\"2\" />\n                        <Setter Target=\"FeedbackPanel.(Grid.ColumnSpan)\" Value=\"1\" />\n\n                        <Setter Target=\"rightMargin.Width\" Value=\"0\" />\n                        <Setter Target=\"contentRoot.Padding\" Value=\"14,0\" />\n                    </VisualState.Setters>\n                </VisualState>\n            </VisualStateGroup>\n        </VisualStateManager.VisualStateGroups>\n\n        <!--  Content Region  -->\n        <ScrollViewer\n            x:Name=\"svPanel\"\n\n            VerticalScrollBarVisibility=\"Auto\"\n            VerticalScrollMode=\"Auto\">\n            <Grid x:Name=\"contentRoot\" Padding=\"24,0,0,0\" SizeChanged=\"OnContentRootSizeChanged\">\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition x:Name=\"contentColumn\" />\n                    <ColumnDefinition x:Name=\"rightMargin\" Width=\"20\" />\n                    <ColumnDefinition x:Name=\"infoColumn\" Width=\"Auto\" />\n                </Grid.ColumnDefinitions>\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"Auto\" />\n                    <RowDefinition Height=\"*\" />\n                    <RowDefinition Height=\"20\" />\n                    <RowDefinition Height=\"Auto\" />\n                </Grid.RowDefinitions>\n\n                <TextBlock\n                    x:Name=\"descriptionText\"\n                    Style=\"{ThemeResource BodyTextBlockStyle}\"\n                    Grid.ColumnSpan=\"2\"\n                    Margin=\"0,5,24,0\"\n                    Text=\"{x:Bind Item.Description}\" />\n\n                <Frame x:Name=\"contentFrame\" Grid.Row=\"1\" />\n\n                <Grid\n                    x:Name=\"seeAlsoPanel\"\n                    Grid.Row=\"0\"\n                    Grid.RowSpan=\"2\"\n                    Grid.Column=\"2\"\n                    Width=\"280\"\n                    Margin=\"0,0,24,24\">\n                    <Grid.RowDefinitions>\n                        <RowDefinition Height=\"Auto\" />\n                        <RowDefinition Height=\"Auto\" />\n                        <RowDefinition Height=\"Auto\" />\n                        <RowDefinition Height=\"Auto\" />\n                    </Grid.RowDefinitions>\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition />\n                        <ColumnDefinition Width=\"20\" />\n                        <ColumnDefinition />\n                    </Grid.ColumnDefinitions>\n\n                    <StackPanel x:Name=\"SourcePanel\" Grid.Row=\"0\" Grid.ColumnSpan=\"3\" Margin=\"0,0,0,40\">\n                        <TextBlock\n                            x:Name=\"SourceHeader\"\n                            x:Uid=\"SourceHeader\"\n                            Style=\"{ThemeResource SubtitleTextBlockStyle}\"\n                            Text=\"View page code on GitHub\"/>\n                        <HyperlinkButton\n                            x:Name=\"PageMarkupGitHubLink\"\n                            ToolTipService.ToolTip=\"{x:Bind PageMarkupGitHubLink.NavigateUri, Mode=OneWay}\">\n                            <TextBlock Text=\"XAML source code\"/>\n                        </HyperlinkButton>\n                        <HyperlinkButton\n                            x:Name=\"PageCodeGitHubLink\"\n                            ToolTipService.ToolTip=\"{x:Bind PageCodeGitHubLink.NavigateUri, Mode=OneWay}\"\n                            Margin=\"0,12,0,0\">\n                            <TextBlock Text=\"C# source code\"/>\n                        </HyperlinkButton>\n                    </StackPanel>\n\n                    <StackPanel x:Name=\"DocumentationPanel\" Grid.Row=\"1\" Grid.ColumnSpan=\"3\" Margin=\"0,0,0,40\">\n                        <TextBlock\n                            x:Name=\"docHeader\"\n                            x:Uid=\"DocHeader\"\n                            Style=\"{StaticResource SubtitleTextBlockStyle}\" />\n                        <ItemsControl\n                            x:Name=\"DocsList\"\n                            Margin=\"0,12,0,0\"\n                            IsTabStop=\"False\"\n                            ItemsSource=\"{x:Bind Item.Docs}\">\n                            <ItemsControl.ItemsPanel>\n                                <ItemsPanelTemplate>\n                                    <StackPanel Orientation=\"Vertical\" />\n                                </ItemsPanelTemplate>\n                            </ItemsControl.ItemsPanel>\n                            <ItemsControl.ItemTemplate>\n                                <DataTemplate x:DataType=\"data:ControlInfoDocLink\">\n                                    <HyperlinkButton NavigateUri=\"{Binding Uri}\" ToolTipService.ToolTip=\"{Binding Uri}\">\n                                        <TextBlock Text=\"{x:Bind Title}\" />\n                                    </HyperlinkButton>\n                                </DataTemplate>\n                            </ItemsControl.ItemTemplate>\n                        </ItemsControl>\n                    </StackPanel>\n\n                    <StackPanel x:Name=\"RelatedControlsPanel\" Grid.Row=\"2\" Grid.ColumnSpan=\"3\" Margin=\"0,0,0,40\">\n                        <TextBlock\n                            x:Name=\"relatedControlsHeader\"\n                            x:Uid=\"RelatedControlsHeader\"\n                            Style=\"{StaticResource SubtitleTextBlockStyle}\" />\n\n                        <ItemsControl\n                            x:Name=\"relatedItemsControl\"\n                            Margin=\"0,12,0,0\"\n                            IsTabStop=\"False\"\n                            ItemsSource=\"{x:Bind Item.RelatedControls}\">\n                            <ItemsControl.ItemsPanel>\n                                <ItemsPanelTemplate>\n                                    <StackPanel Orientation=\"Vertical\" />\n                                </ItemsPanelTemplate>\n                            </ItemsControl.ItemsPanel>\n                            <ItemsControl.ItemTemplate>\n                                <DataTemplate x:DataType=\"x:String\">\n                                    <!-- A HyperlinkButton must always provide an accessible name to a screen reader which\n                                         conveys the purpose of the link. By default, when the HyperlinkButton is built\n                                         as below, with an Image and TextBlock, the HyperlinkButton provides no accessible\n                                         name. So bind the accessible name to the same data that provides the text shown\n                                         visually on the contained TextBlock. -->\n                                    <HyperlinkButton AutomationProperties.Name=\"{x:Bind}\" Click=\"OnRelatedControlClick\">\n                                        <RelativePanel>\n                                            <!-- Now that the HyperlinkButton has a helpful accessible name, it serves no\n                                                 useful purpose for the contained Image, (which is purely decorative,) or\n                                                 the contained TextBlock to be exposed to a screen reader. All the information\n                                                 required by customers using a screen reader is accessible directly through the\n                                                 Hyperlink button. As such, mark the contained elements as not being interesting\n                                                 to a screen reader through use of the AutomationProperties.AccessibilityView\n                                                 property. -->\n                                            <Image\n                                                AutomationProperties.AccessibilityView=\"Raw\"\n                                                x:Name=\"iconImage\"\n                                                Width=\"25\"\n                                                Margin=\"0,0,15,0\"\n                                                common:ImageLoader.Source=\"{Binding}\" />\n                                            <TextBlock\n                                                AutomationProperties.AccessibilityView=\"Raw\"\n                                                Foreground=\"{ThemeResource HyperlinkButtonForeground}\"\n                                                RelativePanel.RightOf=\"iconImage\"\n                                                Text=\"{x:Bind}\"\n                                                TextWrapping=\"Wrap\" />\n                                        </RelativePanel>\n                                    </HyperlinkButton>\n                                </DataTemplate>\n                            </ItemsControl.ItemTemplate>\n                        </ItemsControl>\n                    </StackPanel>\n\n                    <StackPanel x:Name=\"FeedbackPanel\" Grid.Row=\"3\" Grid.ColumnSpan=\"3\">\n                        <TextBlock\n                            x:Name=\"feedbackHeader\"\n                            x:Uid=\"FeedbackHeader\"\n                            Style=\"{StaticResource SubtitleTextBlockStyle}\" />\n                        <HyperlinkButton NavigateUri=\"https://github.com/microsoft/Xaml-Controls-Gallery/issues/new/choose\" \n                                         ToolTipService.ToolTip=\"https://github.com/microsoft/Xaml-Controls-Gallery/issues/new/choose\">\n                            <TextBlock x:Uid=\"FeedbackLink\" />\n                        </HyperlinkButton>\n                    </StackPanel>\n                </Grid>\n            </Grid>\n        </ScrollViewer>\n    </Grid>\n</Page>\n"
  },
  {
    "path": "tests/syntax-tests/source/XAML/LICENSE.md",
    "content": "The `ItemPage.xaml` file has been added from https://github.com/microsoft/Xaml-Controls-Gallery under the following license:\n\n    MIT License\n\n    Copyright (c) Microsoft Corporation. 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 deal\n    in the Software without restriction, including without limitation the rights\n    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n    copies of the Software, and to permit persons to whom the Software is\n    furnished to do so, subject to the following conditions:\n\n    The above copyright notice and this permission notice shall be included in all\n    copies or substantial portions of the Software.\n\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n    SOFTWARE\n"
  },
  {
    "path": "tests/syntax-tests/source/XML/Directory.Build.props",
    "content": "<Project>\n   <PropertyGroup>\n      <OutDir>C:\\output\\$(MSBuildProjectName)</OutDir>\n   </PropertyGroup>\n</Project>\n"
  },
  {
    "path": "tests/syntax-tests/source/XML/console.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net9.0</TargetFramework>\n    <RootNamespace>SomeNamespace</RootNamespace>\n    <ImplicitUsings>enable</ImplicitUsings>\n    <Nullable>enable</Nullable>\n  </PropertyGroup>\n\n</Project>\n"
  },
  {
    "path": "tests/syntax-tests/source/XML/example.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<?xml-stylesheet type=\"text/css\" href=\"tutorials.css\"?>\n<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\n<!ENTITY name \"Some text\">\n<!ATTLIST tutorials type CDATA #REQUIRED>\n    <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<root_element>\n    <!--    -->\n    <CASE_sensITIVE attribute=\"\" another=\"false\">\n        <trailing_slash/>\n    </CASE_sensITIVE>\n    <number_attribute42></number_attribute42>\n    <number42_trailingslash/>\n    <!-- Comment in Document -->\n    <xsl:complicated_attribute name=\"ab1234567890!@#$%^&amp;*()&gt;?&lt;,.';`~:\\][{}\">\n    </xsl:complicated_attribute>\n    <entity_use>&name;</entity_use>\n    <![CDATA[\n        Text you want to escape goes here...\n    ]]>\n</root_element>\n<!-- Comment after Document -->\n"
  },
  {
    "path": "tests/syntax-tests/source/XML/projectname.targets",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n\n  <Target Name=\"TestTarget\" AfterTargets=\"Build\">\n    <Message Importance=\"High\" Text=\"-------------MHM----------------\" />\n  </Target>\n\n</Project>\n"
  },
  {
    "path": "tests/syntax-tests/source/YAML/example.yaml",
    "content": "--- \n# Simple example\nid: 3595\nname: Test User\nusername: \"testuser\"\nother_names: ['Bob', 'Bill', 'George']\nhexa: 0x11c3 #inline comment\nocta: 021131\nlastseen: .NAN\nenabled: true\nlocked: false\ngroups: \n  - administrators\n  - engineering\n  - sfa\naddress: >\n  123 Alphabet Way\n  San Francisco, CA\nbio: |\n  I am a hardworking person\n  and a member of the\n  executive staff\nphone: null\nemail: ~\nbuilding_access: yes\nsecure_access: no\nbulb: On\nfans: Off\nemails:\n    executives:\n      - bob@example.com\n      - bill@example.com\n    supervisors:\n      - george@example.com\n"
  },
  {
    "path": "tests/syntax-tests/source/Zig/example.zig",
    "content": "//! this is a top level doc, starts with \"//!\"\n\nconst std = @import(\"std\");\n\npub fn main() anyerror!void {\n    const stdout = std.io.getStdOut().writer();\n    try stdout.print(\"Hello, {}!\\n\", .{\"world\"});\n}\n\nconst expect = std.testing.expect;\n\ntest \"comments\" {\n    // comments start with \"//\" until newline\n    // foo bar baz\n    const x = true; // another comment\n    expect(x);\n}\n\n/// a doc comment starts with \"///\"\n/// multiple lines are merged together\nconst Timestamp = struct {\n    /// number of seconds since epoch\n    seconds: i64,\n\n    /// number of nanoseconds past the second\n    nano: u32,\n\n    const Self = @This();\n\n    pub fn unixEpoch() Self {\n        return Self{\n            .seconds = 0,\n            .nanos = 0,\n        };\n    }\n};\n\nconst my_val = switch (std.Target.current.os.tag) {\n    .linux => \"Linux\",\n    else => \"not Linux\",\n};\n\nconst Book = enum {\n    paperback,\n    hardcover,\n    ebook,\n    pdf,\n};\n\nconst TokenType = union(enum) {\n    int: isize,\n    float: f64,\n    string: []const u8,\n};\n\nconst array_lit: [4]u8 = .{ 11, 22, 33, 44 };\nconst sentinal_lit = [_:0]u8{ 1, 2, 3, 4 };\n\ntest \"address of syntax\" {\n    // Get the address of a variable:\n    const x: i32 = 1234;\n    const x_ptr = &x;\n\n    // Dereference a pointer:\n    expect(x_ptr.* == 1234);\n\n    // When you get the address of a const variable, you get a const pointer to a single item.\n    expect(@TypeOf(x_ptr) == *const i32);\n\n    // If you want to mutate the value, you'd need an address of a mutable variable:\n    var y: i32 = 5678;\n    const y_ptr = &y;\n    expect(@TypeOf(y_ptr) == *i32);\n    y_ptr.* += 1;\n    expect(y_ptr.* == 5679);\n}\n\n// integer literals\nconst decimal_int = 98222;\nconst hex_int = 0xff;\nconst another_hex_int = 0xFF;\nconst octal_int = 0o755;\nconst binary_int = 0b11110000;\n\n// underscores may be placed between two digits as a visual separator\nconst one_billion = 1_000_000_000;\nconst binary_mask = 0b1_1111_1111;\nconst permissions = 0o7_5_5;\nconst big_address = 0xFF80_0000_0000_0000;\n\n// float literals\nconst floating_point = 123.0E+77;\nconst another_float = 123.0;\nconst yet_another = 123.0e+77;\n\nconst hex_floating_point = 0x103.70p-5;\nconst another_hex_float = 0x103.70;\nconst yet_another_hex_float = 0x103.70P-5;\n\n// underscores may be placed between two digits as a visual separator\nconst lightspeed = 299_792_458.000_000;\nconst nanosecond = 0.000_000_001;\nconst more_hex = 0x1234_5678.9ABC_CDEFp-10;\n\nfn max(comptime T: type, a: T, b: T) T {\n    return if (a > b) a else b;\n}\n"
  },
  {
    "path": "tests/syntax-tests/source/cmd-help/test.cmd-help",
    "content": "bat 0.22.1\nA cat(1) clone with wings.\n\nUse '--help' instead of '-h' to see a more detailed version of the help text.\n\nUSAGE:\n    bat [OPTIONS] [FILE]...\n    bat <SUBCOMMAND>\n\nARGS:\n    <FILE>...    File(s) to print / concatenate. Use '-' for standard input.\n\nOPTIONS:\n    -A, --show-all                    Show non-printable characters (space, tab, newline, ..).\n    -p, --plain                       Show plain style (alias for '--style=plain').\n    -l, --language <language>         Set the language for syntax highlighting.\n    -H, --highlight-line <N:M>        Highlight lines N through M.\n        --file-name <name>            Specify the name to display for a file.\n    -d, --diff                        Only show lines that have been added/removed/modified.\n        --tabs <T>                    Set the tab width to T spaces.\n        --wrap <mode>                 Specify the text-wrapping mode (*auto*, never, character).\n    -n, --number                      Show line numbers (alias for '--style=numbers').\n        --color <when>                When to use colors (*auto*, never, always).\n        --italic-text <when>          Use italics in output (always, *never*)\n        --decorations <when>          When to show the decorations (*auto*, never, always).\n        --paging <when>               Specify when to use the pager, or use `-P` to disable (*auto*,\n                                      never, always).\n    -m, --map-syntax <glob:syntax>    Use the specified syntax for files matching the glob pattern\n                                      ('*.cpp:C++').\n        --theme <theme>               Set the color theme for syntax highlighting.\n        --list-themes                 Display all supported highlighting themes.\n        --style <components>          Comma-separated list of style elements to display (*default*,\n                                      auto, full, plain, changes, header, header-filename,\n                                      header-filesize, grid, rule, numbers, snip).\n    -r, --line-range <N:M>            Only print the lines from N to M.\n    -L, --list-languages              Display all supported languages.\n    -h, --help                        Print this help message.\n    -V, --version                     Print version information\n\nSUBCOMMANDS:\n    cache    Modify the syntax-definition and theme cache\n\nNote: `bat -h` prints a short and concise overview while `bat --help` gives all details.\n"
  },
  {
    "path": "tests/syntax-tests/source/dash/LICENSE.md",
    "content": "The `shfm` file is a modified version of the file from https://github.com/dylanaraps/shfm, added under the following license:\n\nThe MIT License (MIT)\n\nCopyright (c) 2020 Dylan Araps\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "tests/syntax-tests/source/dash/shfm",
    "content": "#!/usr/bin/env dash\n\nesc() {\n    case $1 in\n        # vt100 (IL is vt102) (DECTCEM is vt520)\n        CUD)     printf '%s[%sB'    \"$esc_c\" \"$2\"      ;; # cursor down\n        CUP)     printf '%s[%s;%sH' \"$esc_c\" \"$2\" \"$3\" ;; # cursor home\n        CUU)     printf '%s[%sA'    \"$esc_c\" \"$2\"      ;; # cursor up\n        DECAWM)  printf '%s[?7%s'   \"$esc_c\" \"$2\"      ;; # line wrap\n        DECRC)   printf '%s8'       \"$esc_c\"           ;; # cursor restore\n        DECSC)   printf '%s7'       \"$esc_c\"           ;; # cursor save\n        DECSTBM) printf '%s[%s;%sr' \"$esc_c\" \"$2\" \"$3\" ;; # scroll region\n        DECTCEM) printf '%s[?25%s'  \"$esc_c\" \"$2\"      ;; # cursor visible\n        ED[0-2]) printf '%s[%sJ'    \"$esc_c\" \"${1#ED}\" ;; # clear screen\n        EL[0-2]) printf '%s[%sK'    \"$esc_c\" \"${1#EL}\" ;; # clear line\n        IL)      printf '%s[%sL'    \"$esc_c\" \"$2\"      ;; # insert line\n        SGR)     printf '%s[%s;%sm' \"$esc_c\" \"$2\" \"$3\" ;; # colors\n\n        # xterm (since 1988, supported widely)\n        screen_alt) printf '%s[?1049%s' \"$esc_c\" \"$2\" ;; # alternate buffer\n    esac\n}\n\nterm_setup() {\n    stty=$(stty -g)\n    stty -icanon -echo\n    esc screen_alt h\n    esc DECAWM l\n    esc DECTCEM l\n    esc ED2\n    esc DECSTBM 1 \"$((LINES - 2))\"\n}\n\nterm_reset() {\n    esc DECAWM h     >&2\n    esc DECTCEM h    >&2\n    esc ED2          >&2\n    esc DECSTBM      >&2\n    esc screen_alt l >&2\n    stty \"$stty\"\n\n    # needed for cd-on-exit\n    printf '%s\\n' \"$PWD\" >&1\n}\n\nterm_resize() {\n    # false-positive, behavior intentional, globbing is disabled.\n    # shellcheck disable=2046\n    {\n        set -f\n        set +f -- $(stty size)\n    }\n\n    LINES=$1 COLUMNS=$2\n\n    # space for status_line\n    bottom=$((LINES - 2))\n}\n\nterm_scroll_down() {\n    case $((y - $#)) in\n        [0-9]*) return\n    esac\n\n    y=$((y + 1))\n    y2=$((y2 + 1 < bottom ? y2 + 1 : bottom))\n\n    line_print \"$((y - 1))\" \"$@\"\n    printf '\\n'\n    line_print \"$y\" \"$@\"\n    status_line \"$#\"\n}\n\nterm_scroll_up() {\n    case $y in\n        -*|0|1) return\n    esac\n\n    y=$((y - 1))\n\n    line_print \"$((y + 1))\" \"$@\"\n\n    case $y2 in\n        1) esc IL ;;\n        *) esc CUU; y2=$((y2 > 1 ? y2 - 1 : 1))\n    esac\n\n    line_print \"$y\" \"$@\"\n    status_line \"$#\"\n}\n\ncmd_run() {\n    stty \"$stty\"\n    esc DECTCEM h\n    esc DECSTBM\n    esc ED2\n    \"$@\" ||:\n    esc DECSTBM 1 \"$((LINES - 2))\"\n    esc DECTCEM l\n    stty -icanon -echo\n    hist=2\n}\n\nfile_escape() {\n    tmp=$1 safe=\n\n    # loop over string char by char\n    while c=${tmp%\"${tmp#?}\"}; do\n        case $c in\n            '')          return ;;\n            [[:cntrl:]]) safe=$safe\\? ;;\n            *)           safe=$safe$c ;;\n        esac\n\n        tmp=${tmp#?}\n    done\n}\n\nhist_search() {\n    hist=0 j=1\n\n    for file do\n        case ${PWD%%/}/$file in\n            \"$old_pwd\") y=$j y2=$((j > bottom ? mid : j)) cur=$file\n        esac\n\n        j=$((j + 1))\n    done\n}\n\nlist_print() {\n    esc ED2\n    esc CUP\n\n    i=1\n    end=$((bottom + 1))\n    mid=$((bottom / 4 < 5 ? 1 : bottom / 4))\n\n    case $# in\n        1) [ -e \"$1\" ] || set -- empty\n    esac\n\n    case $hist in\n        2) # redraw after cmd run\n            shift \"$((y > y2 ? y - y2 : 0))\"\n        ;;\n\n        1) # redraw after go-to-parent\n            hist_search \"$@\"\n            shift \"$((y >= bottom ? y - mid : 0))\"\n        ;;\n\n        *) # everything else\n            shift \"$((y >= bottom ? y - bottom : 0))\"\n        ;;\n    esac\n\n    for file do\n        case $i in\n            \"$y2\") esc SGR 0 7\n        esac\n\n        case $((i - end)) in\n            -*)\n                line_format \"$file\"\n                esc CUD\n            ;;\n        esac\n\n        i=$((i + 1))\n    done\n\n    esc CUP \"$((y > y2 ? y2 : y))\"\n}\n\nredraw() {\n    list_print \"$@\"\n    status_line \"$#\"\n}\n\nstatus_line() {\n    esc DECSC\n    esc CUP \"$LINES\"\n\n    case $USER in\n        root) esc SGR 31 7 ;;\n           *) esc SGR 34 7 ;;\n    esac\n\n    printf '%*s\\r%s ' \"$COLUMNS\" \"\" \"($y/$1)\"\n\n    case $ltype in\n        '') printf %s \"$PWD\" ;;\n         *) printf %s \"$ltype\"\n    esac\n\n    esc SGR 0 0\n    esc DECRC\n}\n\nprompt() {\n    esc DECSC\n    esc CUP \"$LINES\"\n    printf %s \"$1\"\n    esc DECTCEM h\n    esc EL0\n\n    case $2 in\n        r)\n            stty icanon echo\n            read -r ans ||:\n            stty -icanon -echo\n        ;;\n    esac\n\n    esc DECRC\n    esc DECTCEM l\n    status_line \"($y/$#) $PWD\"\n}\n\nline_print() {\n    offset=$1\n\n    case $offset in\n        \"$y\") esc SGR 0 7\n    esac\n\n    shift \"$offset\"\n\n    case $offset in\n        \"$y\") cur=$1\n    esac\n\n    line_format \"$1\"\n}\n\nline_format() {\n    file_escape \"$1\"\n    [ -d \"$1\" ] && esc SGR 1 31\n    printf %s \"$safe\"\n    [ -d \"$1\" ] && printf /\n    esc SGR 0 0\n    esc EL0\n    printf '\\r'\n}\n\nmain() {\n    set -e\n\n    case $1 in\n        -h|--help)\n            printf 'shfm -[hv] <starting dir>\\n'\n            exit 0\n        ;;\n\n        -v|--version)\n            printf 'shfm 0.4.2\\n'\n            exit 0\n        ;;\n\n        *)\n            cd -- \"${1:-\"$PWD\"}\"\n        ;;\n    esac\n\n    esc_c=$(printf '\\033')\n    bs_char=$(printf '\\177')\n\n    set -- *\n    cur=$1\n\n    term_resize\n    term_setup\n\n    trap 'term_reset'  EXIT INT\n    trap 'term_resize; term_setup; y=1 y2=1; redraw \"$@\"' WINCH\n\n    y=1 y2=1\n    redraw \"$@\"\n\n    while key=$(dd ibs=1 count=1 2>/dev/null); do\n        case $key${esc:=0} in\n            k?|A2)\n                term_scroll_up \"$@\"\n            ;;\n\n            j?|B2)\n                term_scroll_down \"$@\"\n            ;;\n\n            l?|C2|\"$esc\") # ARROW RIGHT\n                if [ -d \"$cur\" ] && cd -- \"$cur\" >/dev/null 2>&1; then\n                    set -- *\n                    y=1 y2=1 cur=$1 ltype=\n                    redraw \"$@\"\n\n                elif [ -e \"$cur\" ]; then\n                    cmd_run \"${SHFM_OPENER:=\"${EDITOR:=vi}\"}\" \"$cur\"\n                    redraw \"$@\"\n                fi\n            ;;\n\n            h?|D2|\"$bs_char\"?) # ARROW LEFT\n                old_pwd=$PWD\n\n                case $ltype in\n                    '') cd .. || continue ;;\n                     *) ltype= ;;\n                esac\n\n                set -- *\n                y=1 y2=1 cur=$1 hist=1\n                redraw \"$@\"\n            ;;\n\n            g?)\n                case $y in\n                    1) continue\n                esac\n\n                y=1 y2=1 cur=$1\n                redraw \"$@\"\n            ;;\n\n            G?)\n                y=$#\n                y2=$(($# < bottom ? $# : bottom))\n                redraw \"$@\"\n            ;;\n\n            .?)\n                case ${hidden:=1} in\n                    1) hidden=0; set -- .* ;;\n                    0) hidden=1; set -- *\n                esac\n\n                y=1 y2=1 cur=$1\n                redraw \"$@\"\n            ;;\n\n            :?)\n                prompt \"cd: \" r\n\n                # false positive, behavior intentional\n                # shellcheck disable=2088\n                case $ans in\n                    '~')   ans=$HOME ;;\n                    '~/'*) ans=$HOME/${ans#\"~/\"}\n                esac\n\n                cd -- \"${ans:=\"$0\"}\" >/dev/null 2>&1|| continue\n                set -- *\n                y=1 y2=1 cur=$1\n                redraw \"$@\"\n            ;;\n\n            /?)\n                prompt / r\n\n                # word splitting and globbing intentional\n                # shellcheck disable=2086\n                set -- $ans*\n\n                case $1$# in\n                    \"$ans*1\") set -- 'no results'\n                esac\n\n                y=1 y2=1 cur=$1 ltype=\"search $PWD/$ans*\"\n                redraw \"$@\"\n                status_line \"$#\"\n            ;;\n\n            -?)\n                cd -- \"$OLDPWD\" >/dev/null 2>&1|| continue\n                set -- *\n                y=1 y2=1 cur=$1\n                redraw \"$@\"\n            ;;\n\n            \\~?)\n                cd || continue\n                set -- *\n                y=1 y2=1 cur=$1\n                redraw \"$@\"\n            ;;\n\n            \\!?)\n                export SHFM_LEVEL\n                SHFM_LEVEL=$((SHFM_LEVEL + 1))\n                cmd_run \"${SHELL:=/bin/sh}\"\n                redraw \"$@\"\n            ;;\n\n            \\??)\n                set -- 'j - down' \\\n                       'k - up' \\\n                       'l - open file or directory' \\\n                       'h - go up level' \\\n                       'g - go to top' \\\n                       'G - go to bottom' \\\n                       'q - quit' \\\n                       ': - cd to <input>' \\\n                       '/ - search current directory <input>*' \\\n                       '- - go to last directory' \\\n                       '~ - go home' \\\n                       '! - spawn shell' \\\n                       '. - toggle hidden files' \\\n                       '? - show keybinds'\n\n                y=1 y2=1 cur=$1 ltype=keybinds\n                redraw \"$@\"\n                status_line \"$#\"\n            ;;\n\n            q?) exit 0 ;;\n\n            # handle keys which emit escape sequences\n            \"$esc_c\"*) esc=1 ;;\n                 '[1') esc=2 ;;\n                    *) esc=0 ;;\n        esac\n    done\n}\n\nmain \"$@\" >/dev/tty\n"
  },
  {
    "path": "tests/syntax-tests/source/debsources/sources.list",
    "content": "# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to\n# newer versions of the distribution.\n\ndeb https://deb.debian.org/debian bookworm main non-free-firmware\n#deb-src https://deb.debian.org/debian bookworm main non-free-firmware\n\n## Major bug fix updates produced after the final release of the\n## distribution.\n# deb-src http://lt.archive.ubuntu.com/ubuntu/ xenial-updates main restricted\n\ndeb https://security.debian.org/debian-security bookworm-security main non-free-firmware\ndeb-src https://security.debian.org/debian-security bookworm-security main non-free-firmware\n\ndeb https://deb.debian.org/debian bookworm-updates main non-free-firmware\ndeb-src https://deb.debian.org/debian bookworm-updates main non-free-firmware\n"
  },
  {
    "path": "tests/syntax-tests/source/fish_history/fish_history",
    "content": "- cmd: echo \"hello world\"\n  when: 1656950812\n- cmd: ls /tmp\n  when: 1656950818\n  paths:\n    - /tmp\n- cmd: cp .local/share/fish/fish_history .\n  when: 1656950833\n  paths:\n    - .local/share/fish/fish_history\n    - .\n"
  },
  {
    "path": "tests/syntax-tests/source/gnuplot/test.gp",
    "content": "set terminal pngcairo enhanced\nset output \"/tmp/polynomial.png\"\n\nset grid\n\nset xrange [-5:5]\nset yrange [-5:10]\n\nset samples 10000\n\nset key bottom right\n\nf(x) = 1.0 / 14.0 * ((x+4) * (x+1) * (x-1) * (x-3)) + 0.5\n\nplot \\\n    f(x) title \"polynomial of degree 4\" \\\n    with lines \\\n    linewidth 2 \\\n    linetype rgb '#0077ff'\n"
  },
  {
    "path": "tests/syntax-tests/source/http-request-response/example.http",
    "content": "POST /foo/bar?id=4&x=y%20z HTTP/1.1\nX-Forwarded-For: 127.0.0.1\nContent-Length: 124\nCache-Control: no-cache\nX-Forwarded-Proto: https\nContent-Type: application/json; charset=utf-8\nHost: example.com\nAccept: */*; q=0.5, application/xml\nAccept-Encoding: gzip\n\n{\n  \"id\": \"blahblahblahblah\",\n  \"object\": \"event\",\n  \"api_version\": \"2020-03-02\",\n  \"created\": 1626790174,\n  \"data\": {\n  }\n}\n\n\nHTTP/1.1 200 OK\nServer: nginx\nDate: Fri, 23 Jul 2021 10:15:12 GMT\nContent-Type: text/html; charset=utf-8\nTransfer-Encoding: chunked\nConnection: keep-alive\nVary: Accept-Encoding\nCache-Control: private; max-age=0\nX-Frame-Options: DENY\nX-Content-Type-Options: nosniff\nX-XSS-Protection: 1; mode=block\nReferrer-Policy: origin\nStrict-Transport-Security: max-age=31556900\n\n<!DOCTYPE html>\n<html>\n<head>\n  <meta charset=\"utf-8\">\n  <title>Hello World</title>\n</head>\n<body>\n\n</body>\n</html>\n"
  },
  {
    "path": "tests/syntax-tests/source/jsonnet/LICENSE.md",
    "content": "The `stdlib.jsonnet` file has been added from https://github.com/google/jsonnet under the following license:\n\n```text\n\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": "tests/syntax-tests/source/jsonnet/stdlib.jsonnet",
    "content": "local html = import 'html.libsonnet';\nlocal jekyll = import 'jekyll.libsonnet';\nlocal content = import 'stdlib-content.jsonnet';\n\nlocal\n  h1 = html.h1,\n  p = html.p;\n\nlocal manifestJsonSingleLine(val) = std.strReplace(std.manifestJsonEx(val, ''), '\\n', ' ');\n\nlocal exampleDoc(ex) =\n  local exRep =\n    if std.isString(ex) then\n      ex\n    else\n      html.spaceless([html.code({}, ex.input), ' yields ', html.code({}, manifestJsonSingleLine(ex.output))])\n  ;\n  html.p({}, html.spaceless(['Example: ', exRep, '.']))\n;\n\nlocal hgroup(body) = html.div({ class: 'hgroup' }, body);\nlocal hgroup_inline(body) = html.div({ class: 'hgroup-inline' }, [body, '<div style=\"clear: both\"></div>']);\nlocal panel(body) = html.div({ class: 'panel' }, body);\n\nlocal in_panel(body) = hgroup(hgroup_inline(panel(body)));\n\nlocal fieldParams(f) =\n  if std.objectHas(f, 'params') then\n    '(' + std.join(', ', f.params) + ')'\n  else\n    ''\n;\n\nlocal fieldDescription(f) =\n  if std.isString(f.description) then\n    html.p({}, f.description)\n  else\n    f.description\n;\n\nlocal fieldDoc(f, prefix) =\n  [\n    in_panel(html.h4({ id: f.name }, prefix + '.' + f.name + fieldParams(f))),\n    in_panel([\n      if std.objectHas(f, 'availableSince') then (\n        html.p(\n          {},\n          html.em(\n            {},\n            if f.availableSince == 'upcoming' then\n              'Available in upcoming release.'\n            else\n              'Available since version ' + f.availableSince + '.'\n          )\n        )\n      ),\n      fieldDescription(f),\n      if std.objectHas(f, 'examples') then [\n        exampleDoc(ex)\n        for ex in f.examples\n      ] else [],\n    ]),\n    '',\n  ];\n\nlocal group(group_spec, prefix) =\n  [\n    in_panel(html.h3({ id: group_spec.id }, group_spec.name)),\n    if std.objectHas(group_spec, 'intro') then in_panel(group_spec.intro),\n    '',\n    [fieldDoc(f, prefix) for f in group_spec.fields],\n    '',\n  ];\n\nlocal stdlibPage = [\n  in_panel(html.h1({id: 'standard_library'}, 'Standard Library')),\n  '',\n  in_panel(content.intro),\n  '',\n  [group(g, content.prefix) for g in content.groups],\n];\n\nlocal stdlibFrontMatter = {\n  layout: 'default',\n  title: 'Standard Library',\n};\n\njekyll.renderWithFrontMatter(stdlibFrontMatter, stdlibPage)\n"
  },
  {
    "path": "tests/syntax-tests/source/nginx/nginx.conf",
    "content": "#user  nobody;\nworker_processes  1;\n#pid        logs/nginx.pid;\n\nload_module \"/usr/local/libexec/nginx/ngx_http_xslt_filter_module.so\";\nload_module \"/usr/local/libexec/nginx/ngx_rtmp_module.so\";\n\nevents {\n    worker_connections  1024;\n}\n\nhttp {\n    include       mime.types;\n    default_type  application/octet-stream;\n    sendfile        on;\n    keepalive_timeout  65;\n    gzip  on;\n    gzip_disable \"msie6\";\n\n    include /usr/local/etc/nginx/sites.d/*;\n}\n\nrtmp {\n  server {\n    listen 1935;\n    max_message 10M;\n\n    application wnob {\n      live on;\n      record off;\n    }\n\n    application strim {\n      live on;\n      hls on;\n\n      hls_path /usr/local/www/hls/;\n\n      hls_variant _low BANDWIDTH=250000;\n      hls_variant _mid BANDWIDTH=500000;\n      hls_variant _high BANDWIDTH=1000000;\n      hls_variant _hd720 BANDWIDTH=1500000;\n      hls_variant _src BANDWIDTH=2000000;\n    }\n  }\n}\n\nserver {\n  listen 443 ssl;\n  server_name host.example.com\n  root /usr/local/www/host.example.com/;\n  error_page 404 /404.html;\n\n  index index.html;\n  autoindex on;\n  autoindex_localtime off;\n  autoindex_format xml;\n\n  location / {\n    xslt_stylesheet /usr/local/www/host.example.com/index.xslt;\n  }\n\n  location ~ /\\..* {\n    return 404;\n  }\n\n  location ~ /.+/ {\n    xslt_stylesheet /usr/local/www/host.example.com/project.xslt;\n  }\n\n  location ~ /.*\\.xslt/ {\n    return 404;\n  }\n\n  location ~ \\.thumb\\.png$ {\n    error_page 404 /404.thumb.png;\n  }\n    ssl_certificate /usr/local/etc/letsencrypt/live/host.example.com/fullchain.pem; # managed by Certbot\n    ssl_certificate_key /usr/local/etc/letsencrypt/live/host.example.com/privkey.pem; # managed by Certbot\n\n  include /usr/local/etc/letsencrypt/options-ssl-nginx.conf;\n  ssl_dhparam /usr/local/etc/letsencrypt/ssl-dhparams.pem;\n\n  add_header Strict-Transport-Security \"max-age=31536000\" always;\n\n}\n\nserver {\n  listen 80;\n  server_name host.example.com;\n\n  if ($host = host.example.com) {\n    return 301 https://$host$request_uri;\n  }\n\n  return 404;\n}\n\nserver {\n  listen 443 ssl;\n  server_name other.example.com;\n\n  ssl_certificate /usr/local/etc/letsencrypt/live/other.example.com/fullchain.pem;\n  ssl_certificate_key /usr/local/etc/letsencrypt/live/other.example.com/privkey.pem;\n\n  include /usr/local/etc/letsencrypt/options-ssl-nginx.conf;\n  ssl_dhparam /usr/local/etc/letsencrypt/ssl-dhparams.pem;\n\n  add_header Strict-Transport-Security \"max-age=31536000\" always;\n\n  access_log /home/otherapp/logs/access.log;\n  error_log /home/otherapp/logs/error.log;\n\n  client_max_body_size 5M;\n\n  location / {\n    root /home/otherapp/app/static;\n    index man.txt;\n    try_files $uri @proxy;\n  }\n\n  location @proxy {\n    proxy_set_header Host $http_host;\n    proxy_set_header X-Forwarded-Host $host;\n    proxy_set_header X-Real-IP $remote_addr;\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n    proxy_pass http://unix:/var/run/otherapp/sock:;\n  }\n}\n\nserver {\n  listen 80;\n  server_name other.example.com;\n\n  if ($host = other.example.com) {\n    return 301 https://$host$request_uri;\n  }\n\n  return 404;\n}\n"
  },
  {
    "path": "tests/syntax-tests/source/nim/main.nim",
    "content": "import json\n\nconst\n  message = \"hello world\"\n  multiLine = \"\"\"\n    foo\n    bar\n  \"\"\"\n  numbers = @[1, 2, 3]\n\ntype Options = enum\n  A,\n  B,\n  C\n\n## Top-level comment\ntype\n  SomeStruct* = ref object\n    value*: string\n\nproc someFunc*(): string =\n  ## Function docs\n  ##\n  ## More docs\n  result = message\n\nproc someOtherFunc(startingValue: int): (string, int) =\n  var num = startingValue\n  num += 1\n  if num > 10 * 10 * 10:\n    echo \"Encountered an error\"\n    raise newException(ValueError, \"Value was over 1000\")\n  (\"Fizz\", num)\n\nproc `+=`(a: var SomeStruct, b: SomeStruct): string =\n  a.value.add(b.value)\n  return a.value\n\necho someFunc()\necho(someOtherFunc(123))\ndiscard someFunc()\n"
  },
  {
    "path": "tests/syntax-tests/source/nim/test.nimble",
    "content": "version = \"0.1.0\"\nauthor = \"creator_name\"\ndescription = \"Tests nimble syntax highlighting\"\nlicense = \"custom\"\n\nbin = @[\"test\"]\nsrcdir = \"src\"\ninstallExt = @[\"nim\"]\n\n# Dependencies\n\nrequires \"nim >= 1.6.2\"\n\nwhen defined(nimdistros):\n  import distros\n  if detectOs(Ubuntu):\n    foreignDep \"external_lib\"\n  else:\n    foreignDep \"other_lib\"\n\ntask test, \"Runs a task called 'test'\":\n  withDir \"tests\":\n    exec \"nim c -r tester\"\n"
  },
  {
    "path": "tests/syntax-tests/source/nix/test.nix",
    "content": "{ nixpkgs ? <nixpkgs>\n, nixpkgs' ? import nixpkgs {}}: with nixpkgs';\n\n# some comment\nstdenv.mkDerivation rec {\n  pname = \"test\";\n  version = \"0.2.3\";\n  name = \"${pname}-${version}\";\n\n  buildInputs = [\n    gzip\n    bzip2\n    python27\n  ];\n}\n"
  },
  {
    "path": "tests/syntax-tests/source/orgmode/test.org",
    "content": "* This is header\n** sub header\n*** sub sub header\n**** sub sub sub header\n\n* Table representation\n| Name    | Age |\n|---------+-----|\n| Milli   |  23 |\n| Vanilli |  22 |\n\n* Spreadsheets\n| n | n + 2 | n ^ 2 |\n|---+-------+-------|\n| 1 |     3 |     1 |\n| 2 |     4 |     4 |\n| 3 |     5 |     9 |\n#+TBLFM: $2=$1+2::$3=$1*$1\n\n* Source Code\n\n#+BEGIN_SRC rust\n  # recursive fibonacci\n  fn fib(n: u32) -> u32 {\n    match n {\n      0 | 1 => 1,\n      _ => fib(n - 1) + fib(n - 2),\n    }\n  }\n#+END_SRC\n\n* ToDo and Checkboxes Example\n** DONE Write source example\n** TODO Generate highlighted example [1/3]\n   - [X] run update script\n   - [-] get code review\n   - [ ] merge into master\n\n"
  },
  {
    "path": "tests/syntax-tests/source/reStructuredText/reference.rst",
    "content": "=====\nTitle\n=====\n\nSubtitle\n--------\nTitles are underlined (or over-\nand underlined) with a printing\nnonalphanumeric 7-bit ASCII\ncharacter. Recommended choices\nare \"``= - ` : ' \" ~ ^ _ * + # < >``\".\nThe underline/overline must be at\nleast as long as the title text.\n\nA lone top-level (sub)section\nis lifted up to be the document's\n(sub)title.\n\nInline syntaxes\n---------------\n\n*emphasis*\t\n**strong emphasis**\n`interpreted text`\n``inline literal``\nhttp://docutils.sf.net/\n\nBullet lists\n------------\n\n- This is item 1\n- This is item 2\n\n- Bullets are \"-\", \"*\" or \"+\".\n  Continuing text must be aligned\n  after the bullet and whitespace.\n\nNote that a blank line is required\nbefore the first item and after the\nlast, but is optional between items.\n\nEnumerated lists\n----------------\n3. This is the first item\n4. This is the second item\n5. Enumerators are arabic numbers,\n   single letters, or roman numerals\n6. List items should be sequentially\n   numbered, but need not start at 1\n   (although not all formatters will\n   honour the first index).\n#. This item is auto-enumerated\n\nDefinition lists\n----------------\n\nwhat\n  Definition lists associate a term with\n  a definition.\n\nhow\n  The term is a one-line phrase, and the\n  definition is one or more paragraphs or\n  body elements, indented relative to the\n  term. Blank lines are not allowed\n  between term and definition.\n\nField lists\n-----------\n:Authors:\n    Tony J. (Tibs) Ibbs,\n    David Goodger\n    (and sundry other good-natured folks)\n\n:Version: 1.0 of 2001/08/08\n:Dedication: To my father.\n\nOptions lists\n-------------\n-a            command-line option \"a\"\n-b file       options can have arguments\n              and long descriptions\n--long        options can be long also\n--input=file  long options can also have\n              arguments\n/V            DOS/VMS-style options too\n\nLiteral Blocks\n--------------\n\nA paragraph containing only two colons\nindicates that the following indented\nor quoted text is a literal block.\n\n::\n\n  Whitespace, newlines, blank lines, and\n  all kinds of markup (like *this* or\n  \\this) is preserved by literal blocks.\n\n  The paragraph containing only '::'\n  will be omitted from the result.\n\nThe ``::`` may be tacked onto the very\nend of any paragraph. The ``::`` will be\nomitted if it is preceded by whitespace.\nThe ``::`` will be converted to a single\ncolon if preceded by text, like this::\n\n  It's very convenient to use this form.\n\nLiteral blocks end when text returns to\nthe preceding paragraph's indentation.\nThis means that something like this\nis possible::\n\n      We start here\n    and continue here\n  and end here.\n\nPer-line quoting can also be used on\nunindented literal blocks::\n\n> Useful for quotes from email and\n> for Haskell literate programming.\n\nLine blocks\n-----------\n\nA paragraph containing only two colons\nindicates that the following indented\nor quoted text is a literal block.\n\n::\n\n  Whitespace, newlines, blank lines, and\n  all kinds of markup (like *this* or\n  \\this) is preserved by literal blocks.\n\n  The paragraph containing only '::'\n  will be omitted from the result.\n\nThe ``::`` may be tacked onto the very\nend of any paragraph. The ``::`` will be\nomitted if it is preceded by whitespace.\nThe ``::`` will be converted to a single\ncolon if preceded by text, like this::\n\n  It's very convenient to use this form.\n\nLiteral blocks end when text returns to\nthe preceding paragraph's indentation.\nThis means that something like this\nis possible::\n\n      We start here\n    and continue here\n  and end here.\n\nPer-line quoting can also be used on\nunindented literal blocks::\n\n> Useful for quotes from email and\n> for Haskell literate programming.\n\nBlock quotes\n------------\n\nBlock quotes are just:\n    Indented paragraphs,\n\n        and they may nest.\n\nDoctest blocks\n--------------\nDoctest blocks are interactive\nPython sessions. They begin with\n\"``>>>``\" and end with a blank line.\n\n>>> print \"This is a doctest block.\"\nThis is a doctest block.\n\nTables\n------\n\nGrid table:\n\n+------------+------------+-----------+\n| Header 1   | Header 2   | Header 3  |\n+============+============+===========+\n| body row 1 | column 2   | column 3  |\n+------------+------------+-----------+\n| body row 2 | Cells may span columns.|\n+------------+------------+-----------+\n| body row 3 | Cells may  | - Cells   |\n+------------+ span rows. | - contain |\n| body row 4 |            | - blocks. |\n+------------+------------+-----------+\n\nSimple table:\n\n=====  =====  ======\n   Inputs     Output\n------------  ------\n  A      B    A or B\n=====  =====  ======\nFalse  False  False\nTrue   False  True\nFalse  True   True\nTrue   True   True\n=====  =====  ======\n\nTransitions\n-----------\n\nA transition marker is a horizontal line\nof 4 or more repeated punctuation\ncharacters.\n\n------------\n\nA transition should not begin or end a\nsection or document, nor should two\ntransitions be immediately adjacent.\n\nFootnotes\n---------\n\nFootnote references, like [5]_.\nNote that footnotes may get\nrearranged, e.g., to the bottom of\nthe \"page\".\n.. [5] A numerical footnote. Note there's no colon after the ``]``.\n\nAutonumbered footnotes are\npossible, like using [#]_ and [#]_.\n.. [#] This is the first one.\n.. [#] This is the second one.\n\nThey may be assigned 'autonumber\nlabels' - for instance,\n[#fourth]_ and [#third]_.\n\n.. [#third] a.k.a. third_\n\n.. [#fourth] a.k.a. fourth_\n\nAuto-symbol footnotes are also\npossible, like this: [*]_ and [*]_.\n.. [*] This is the first one.\n.. [*] This is the second one.\n\nCitations\n---------\n\nCitation references, like [CIT2002]_.\nNote that citations may get\nrearranged, e.g., to the bottom of\nthe \"page\".\n\n.. [CIT2002] A citation (as often used in journals).\n\nCitation labels contain alphanumerics,\nunderlines, hyphens and fullstops.\nCase is not significant.\n\nGiven a citation like [this]_, one\ncan also refer to it like this_.\n\n.. [this] here.\n\nHyperlink Targets\n-----------------\n\nExternal hyperlinks, like Python_.\n.. _Python: http://www.python.org/\n\nExternal hyperlinks, like `Python\n<http://www.python.org/>`_.\n\nInternal crossreferences, like example_.\n.. _example:\n\nThis is an example crossreference target.\n\nPython_ is `my favourite\nprogramming language`__.\n.. _Python: http://www.python.org/\n\n__ Python_\n\nTitles are targets, too\n=======================\nImplict references, like `Titles are\ntargets, too`_.\n\nDirectives\n----------\n\nFor instance:\n.. image:: images/ball1.gif\n\nThe |biohazard| symbol must be used on containers used to dispose of medical waste.\n.. |biohazard| image:: biohazard.png\n\nComments\n--------\n\n.. This text will not be shown\n   (but, for instance, in HTML might be\n   rendered as an HTML comment)\n\nAn \"empty comment\" does not\nconsume following blocks.\n(An empty comment is \"..\" with\nblank lines before and after.)\n..\n\n        So this block is not \"lost\",\n        despite its indentation.\n"
  },
  {
    "path": "tests/syntax-tests/source/resolv.conf/resolv.conf",
    "content": "# A comment\ndomain example.com\nnameserver 192.168.123.123\nnameserver aa00::aaaa:0000:1234:abcd\n"
  },
  {
    "path": "tests/syntax-tests/source/varlink/LICENSE.md",
    "content": "The `org.varlink.certification.varlink` file has been added from https://github.com/varlink/rust under the following licenses: \n\n```text\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 2018 Red Hat, Inc.\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```text\nMIT License\n\nCopyright (c) 2016 - 2018 Red Hat, 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"
  },
  {
    "path": "tests/syntax-tests/source/varlink/org.varlink.certification.varlink",
    "content": "# Interface to test varlink implementations against.\n# First you write a varlink client calling:\n# Start, Test01, Test02, …, Test09, End\n# The return value of the previous call should be the argument of the next call.\n# Then you test this client against well known servers like python or rust from\n# https://github.com/varlink/\n#\n# Next you write a varlink server providing the same service as the well known ones.\n# Now run your client against it and run well known clients like python or rust\n# from https://github.com/varlink/ against your server. If all works out, then\n# your new language bindings should be varlink certified.\ninterface org.varlink.certification\n\ntype Interface (\n  foo: ?[]?[string](foo, bar, baz),\n  anon: (foo: bool, bar: bool)\n)\n\ntype MyType (\n  object: object,\n  enum: (one, two, three),\n  struct: (first: int, second: string),\n  array: []string,\n  dictionary: [string]string,\n  stringset: [string](),\n  nullable: ?string,\n  nullable_array_struct: ?[](first: int, second: string),\n  interface: Interface\n)\n\nmethod Start() -> (client_id: string)\n\nmethod Test01(client_id: string) -> (bool: bool)\n\nmethod Test02(client_id: string, bool: bool) -> (int: int)\n\nmethod Test03(client_id: string, int: int) -> (float: float)\n\nmethod Test04(client_id: string, float: float) -> (string: string)\n\nmethod Test05(client_id: string, string: string) -> (\n  bool: bool,\n  int: int,\n  float: float,\n  string: string\n)\n\nmethod Test06(\n  client_id: string,\n  bool: bool,\n  int: int,\n  float: float,\n  string: string\n) -> (\n  struct: (\n    bool: bool,\n    int: int,\n    float: float,\n    string: string\n  )\n)\n\nmethod Test07(\n  client_id: string,\n  struct: (\n    bool: bool,\n    int: int,\n    float: float,\n    string: string\n  )\n) -> (map: [string]string)\n\nmethod Test08(client_id: string, map: [string]string) -> (set: [string]())\n\nmethod Test09(client_id: string, set: [string]()) -> (mytype: MyType)\n\n# returns more than one reply with \"continues\"\nmethod Test10(client_id: string, mytype: MyType) -> (string: string)\n\n# must be called as \"oneway\"\nmethod Test11(client_id: string, last_more_replies: []string) -> ()\n\nmethod End(client_id: string) -> (all_ok: bool)\n\nerror ClientIdError ()\nerror CertificationError (wants: object, got: object)\n"
  },
  {
    "path": "tests/syntax-tests/test_custom_assets.sh",
    "content": "#!/usr/bin/env bash\nset -o errexit -o nounset -o pipefail\n\n### ENVIRONMENT\n\nBAT_CONFIG_DIR=$(mktemp -d)\nexport BAT_CONFIG_DIR\n\nBAT_CACHE_PATH=$(mktemp -d)\nexport BAT_CACHE_PATH\n\necho \"\nBAT_CONFIG_DIR = ${BAT_CONFIG_DIR}\nBAT_CACHE_PATH = ${BAT_CACHE_PATH}\n\"\n\n### HELPER VARS\n\ncustom_syntax_args=(\n    \"--language=BatTestCustomAssets\"\n    \"tests/syntax-tests/source/BatTestCustomAssets/NoColorsUnlessCustomAssetsAreUsed.battestcustomassets\"\n)\n\nintegrated_syntax_args=(\n    \"--language=Rust\"\n    \"examples/simple.rs\"\n)\n\n### HELPER FUNCTIONS\n\necho_step() {\n    echo -e \"\\n== $1 ==\"\n}\n\nfail_test() {\n    echo -e \"FAIL: $1\"\n    exit 1\n}\n\n### TEST STEPS\n\necho_step \"TEST: Make sure 'BatTestCustomAssets' is not part of integrated syntaxes\"\nbat -f \"${custom_syntax_args[@]}\" &&\n    fail_test \"EXPECTED: 'unknown syntax' error ACTUAL: no error occurred\"\n\necho_step \"PREPARE: Install custom syntax 'BatTestCustomAssets'\"\ncustom_syntaxes_dir=\"$(bat --config-dir)/syntaxes\"\nmkdir -p \"${custom_syntaxes_dir}\"\ncp -v \"tests/syntax-tests/BatTestCustomAssets.sublime-syntax\" \\\n    \"${custom_syntaxes_dir}/BatTestCustomAssets.sublime-syntax\"\n\necho_step \"PREPARE: Build custom assets to enable 'BatTestCustomAssets' syntax\"\nbat cache --build\n\necho_step \"TEST: 'BatTestCustomAssets' is a known syntax\"\nbat -f \"${custom_syntax_args[@]}\" ||\n    fail_test \"EXPECTED: syntax highlighting to work ACTUAL: there was an error\"\n\necho_step \"TEST: The 'Rust' syntax is still available\"\nbat -f \"${integrated_syntax_args[@]}\" ||\n    fail_test \"EXPECTED: syntax highlighting still works with integrated assets ACTUAL: there was an error\"\n\necho_step \"TEST: 'BatTestCustomAssets' is an unknown syntax with --no-custom-assets\"\nbat -f --no-custom-assets \"${custom_syntax_args[@]}\" &&\n    fail_test \"EXPECTED: 'unknown syntax' error because of --no-custom-assets ACTUAL: no error occurred\"\n\necho_step \"TEST: 'bat cache --clear' removes all files\"\nbat cache --clear\nremaining_files=$(ls -A \"${BAT_CACHE_PATH}\")\n[ -z \"${remaining_files}\" ] ||\n    fail_test \"EXPECTED: no files remain ACTUAL: some files remain:\\n${remaining_files}\"\n\necho_step \"CLEAN\"\nrm -rv \"${BAT_CONFIG_DIR}\" \"${BAT_CACHE_PATH}\"\n"
  },
  {
    "path": "tests/syntax-tests/update.sh",
    "content": "#!/usr/bin/env bash\n\ncd \"$(dirname \"${BASH_SOURCE[0]}\")\" || exit\n\npython=\"python3\"\nif ! command -v python3 &>/dev/null; then python=\"python\"; fi\n\"$python\" create_highlighted_versions.py -O highlighted\n"
  },
  {
    "path": "tests/system_wide_config.rs",
    "content": "use predicates::{prelude::predicate, str::PredicateStrExt};\n\nmod utils;\nuse utils::command::bat_with_config;\n\n// This test is ignored, as it needs a special system wide config put into place.\n// In order to run this tests, use `cargo test --test system_wide_config -- --ignored`\n#[test]\n#[ignore]\nfn use_systemwide_config() {\n    bat_with_config()\n        .arg(\"test.txt\")\n        .assert()\n        .success()\n        .stdout(predicate::eq(\"dummy-pager-from-system-config\\n\").normalize());\n}\n\n// This test is ignored, as it needs a special system wide config put into place\n// In order to run this tests, use `cargo test --test system_wide_config -- --ignored`\n#[test]\n#[ignore]\nfn config_overrides_system_config() {\n    bat_with_config()\n        .env(\"BAT_CONFIG_PATH\", \"bat.conf\")\n        .arg(\"test.txt\")\n        .assert()\n        .success()\n        .stdout(predicate::eq(\"dummy-pager-from-config\\n\").normalize());\n}\n"
  },
  {
    "path": "tests/test_pretty_printer.rs",
    "content": "use bat::PrettyPrinter;\n\n#[test]\nfn syntaxes() {\n    let printer = PrettyPrinter::new();\n    let syntaxes: Vec<String> = printer.syntaxes().map(|s| s.name).collect();\n\n    // Just do some sanity checking\n    assert!(syntaxes.contains(&\"Rust\".to_string()));\n    assert!(syntaxes.contains(&\"Java\".to_string()));\n    assert!(!syntaxes.contains(&\"this-language-does-not-exist\".to_string()));\n\n    // This language exists but is hidden, so we should not see it; it shall\n    // have been filtered out before getting to us\n    assert!(!syntaxes.contains(&\"Git Common\".to_string()));\n}\n"
  },
  {
    "path": "tests/tester/mod.rs",
    "content": "use std::env;\nuse std::fs::{self, File};\nuse std::io::Read;\nuse std::path::{Path, PathBuf};\nuse std::process::Command;\n\nuse tempfile::TempDir;\n\nuse git2::build::CheckoutBuilder;\nuse git2::Repository;\nuse git2::Signature;\n\npub struct BatTester {\n    /// Temporary working directory\n    temp_dir: TempDir,\n\n    /// Path to the *bat* executable\n    exe: PathBuf,\n}\n\nimpl BatTester {\n    pub fn test_snapshot(&self, name: &str, style: &str) {\n        let output = Command::new(&self.exe)\n            .current_dir(self.temp_dir.path())\n            .args([\n                \"sample.rs\",\n                \"--no-config\",\n                \"--paging=never\",\n                \"--color=never\",\n                \"--decorations=always\",\n                \"--terminal-width=80\",\n                &format!(\"--style={style}\"),\n            ])\n            .output()\n            .expect(\"bat failed\");\n\n        // have to do the replace because the filename in the header changes based on the current working directory\n        let actual = String::from_utf8_lossy(&output.stdout)\n            .as_ref()\n            .replace(\"tests/snapshots/\", \"\");\n\n        let mut expected = String::new();\n        let mut file = File::open(format!(\"tests/snapshots/output/{name}.snapshot.txt\"))\n            .expect(\"snapshot file missing\");\n        file.read_to_string(&mut expected)\n            .expect(\"could not read snapshot file\");\n\n        assert_eq!(expected, actual);\n    }\n}\n\nimpl Default for BatTester {\n    fn default() -> Self {\n        let temp_dir = create_sample_directory().expect(\"sample directory\");\n\n        let exe = assert_cmd::cargo::cargo_bin!(\"bat\").to_path_buf();\n\n        BatTester { temp_dir, exe }\n    }\n}\n\nfn create_sample_directory() -> Result<TempDir, git2::Error> {\n    // Create temp directory and initialize repository\n    let temp_dir = TempDir::new().expect(\"Temp directory\");\n    let repo = Repository::init(&temp_dir)?;\n\n    // Copy over `sample.rs`\n    let sample_path = temp_dir.path().join(\"sample.rs\");\n    println!(\"{sample_path:?}\");\n    fs::copy(\"tests/snapshots/sample.rs\", &sample_path).expect(\"successful copy\");\n\n    // Commit\n    let mut index = repo.index()?;\n    index.add_path(Path::new(\"sample.rs\"))?;\n\n    let oid = index.write_tree()?;\n    let signature = Signature::now(\"bat test runner\", \"bat@test.runner\")?;\n    let tree = repo.find_tree(oid)?;\n    let _ = repo.commit(\n        Some(\"HEAD\"), //  point HEAD to our new commit\n        &signature,   // author\n        &signature,   // committer\n        \"initial commit\",\n        &tree,\n        &[],\n    );\n    let mut opts = CheckoutBuilder::new();\n    repo.checkout_head(Some(opts.force()))?;\n\n    fs::copy(\"tests/snapshots/sample.modified.rs\", &sample_path).expect(\"successful copy\");\n\n    Ok(temp_dir)\n}\n"
  },
  {
    "path": "tests/utils/command.rs",
    "content": "#![allow(unused)] // Because indirectly included by e.g.integration_tests.rs, but not everything inside is used\n\nuse assert_cmd::cargo::CommandCargoExt;\nuse std::process::Command;\n\npub fn bat_raw_command_with_config() -> Command {\n    let mut cmd = Command::new(assert_cmd::cargo::cargo_bin!(\"bat\"));\n    cmd.current_dir(\"tests/examples\");\n    cmd.env_remove(\"BAT_CACHE_PATH\");\n    cmd.env_remove(\"BAT_CONFIG_DIR\");\n    cmd.env_remove(\"BAT_CONFIG_PATH\");\n    cmd.env_remove(\"BAT_OPTS\");\n    cmd.env_remove(\"BAT_PAGER\");\n    cmd.env_remove(\"BAT_STYLE\");\n    cmd.env_remove(\"BAT_TABS\");\n    cmd.env_remove(\"BAT_THEME\");\n    cmd.env_remove(\"COLORTERM\");\n    cmd.env_remove(\"NO_COLOR\");\n    cmd.env_remove(\"PAGER\");\n    cmd.env_remove(\"LESSOPEN\");\n    cmd.env_remove(\"LESSCLOSE\");\n    cmd.env_remove(\"SHELL\");\n    cmd\n}\n\n#[cfg(test)]\npub fn bat_raw_command() -> Command {\n    let mut cmd = bat_raw_command_with_config();\n    cmd.arg(\"--no-config\");\n    cmd\n}\n\n#[cfg(test)]\npub fn bat_with_config() -> assert_cmd::Command {\n    assert_cmd::Command::from_std(bat_raw_command_with_config())\n}\n\n#[cfg(test)]\npub fn bat() -> assert_cmd::Command {\n    assert_cmd::Command::from_std(bat_raw_command())\n}\n"
  },
  {
    "path": "tests/utils/mocked_pagers.rs",
    "content": "#![allow(unused)] // Because indirectly included by e.g. system_wide_config.rs, but not used\n\nuse assert_cmd::Command;\nuse predicates::prelude::predicate;\nuse std::env;\nuse std::path::{Path, PathBuf};\n\n/// For some tests we want mocked versions of some pagers\n/// This fn returns the absolute path to the directory with these mocked pagers\nfn get_mocked_pagers_dir() -> PathBuf {\n    let cargo_manifest_dir = env::var(\"CARGO_MANIFEST_DIR\").expect(\"Missing CARGO_MANIFEST_DIR\");\n    Path::new(&cargo_manifest_dir)\n        .join(\"tests\")\n        .join(\"mocked-pagers\")\n}\n\n/// On Unix: 'most' -> 'most'\n/// On Windows: 'most' -> 'most.bat'\npub fn from(base: &str) -> String {\n    let mut cmd_and_args = shell_words::split(base).unwrap();\n    let suffix = if cfg!(windows) { \".bat\" } else { \"\" };\n    let mut out_cmd = format!(\"{}{suffix}\", cmd_and_args.first().unwrap());\n\n    if (cmd_and_args.len() > 1) {\n        out_cmd.push(' ');\n        out_cmd.push_str(cmd_and_args[1..].to_vec().join(\" \").as_str());\n    }\n\n    out_cmd\n}\n\n/// Prepends a directory to the PATH environment variable\n/// Returns the original value for later restoration\nfn prepend_dir_to_path_env_var(dir: PathBuf) -> String {\n    // Get current PATH\n    let original_path = env::var(\"PATH\").expect(\"No PATH?!\");\n\n    // Add the new dir first\n    let mut split_paths = env::split_paths(&original_path).collect::<Vec<_>>();\n    split_paths.insert(0, dir);\n\n    // Set PATH with the new dir\n    let new_path = env::join_paths(split_paths).expect(\"Failed to join paths\");\n    env::set_var(\"PATH\", new_path);\n\n    // Return the original value for later restoration of it\n    original_path\n}\n\n/// Helper to restore the value of PATH\nfn restore_path(original_path: String) {\n    env::set_var(\"PATH\", original_path);\n}\n\n/// Allows test to run that require our mocked versions of 'more' and 'most'\n/// in PATH. Temporarily changes PATH while the test code runs, and then restore it\n/// to avoid pollution of global state\npub fn with_mocked_versions_of_more_and_most_in_path(actual_test: fn()) {\n    let original_path = prepend_dir_to_path_env_var(get_mocked_pagers_dir());\n\n    // Make sure our own variants of 'more' and 'most' are used\n    Command::new(from(\"more\"))\n        .assert()\n        .success()\n        .stdout(predicate::str::contains(\"I am more\"));\n    Command::new(from(\"most\"))\n        .assert()\n        .success()\n        .stdout(predicate::str::contains(\"I am most\"));\n    Command::new(from(\"echo\"))\n        .arg(\"foobar\")\n        .assert()\n        .success()\n        .stdout(predicate::str::contains(\"foobar\"));\n\n    // Now run the actual test\n    actual_test();\n\n    // Make sure to restore PATH since it is global state\n    restore_path(original_path);\n}\n"
  },
  {
    "path": "tests/utils/mod.rs",
    "content": "pub mod command;\npub mod mocked_pagers;\n"
  }
]